Scenario pour lancement de commandes identiques sur une dizaine d'équipement

Bonjour à tous,

J’ai une question qui somme-toute est assez simple à formuler, mais à laquelle je n’arrive pas à trouver de reponses.
J’ai une dizaine d’equipements (des vannes thermostatiques pilotées via zigbeelinker) pour lesquels je souhaite en milieu de nuit (re)pousser une conf standard après que ma femme et mes enfants aient tout tripotés en journée !
du coup, j’imagine une boucle avec les commandes et le nom de l’équipement en paramètre et qui passe sur l’ensemble de mes equipmeents, type:
pour [nomEquipement] dans #[cuisine][vanne]# #[salon][vanne]# #[chambre1]vanne]# …
#[nomEquipement][consigne]# == 17°C
#[nomEquipement][mode]# == manuel

fin pour

Mais est-il possible de faire quelquechose comme ceci pour s’eviter de mettre à la suite toutes les commandes pour tous les équipements, avec tous les risques d’erreur et le sdifficultés de maintenance associées ?

ps : je n’y connais rien en bloc code :wink:

Merci de vos retours

Norbert

Bonsoir,
Essaie le plugin Groupe. Il te permettra de grouper l’exécution de commandes.

Bonjour @mich0111
Merci pour cette proposition, mais le plugin groupe ne gère que les commandes on/off/état, donc valable pour des lumières ou prises, mais c’est tout.
Norbert

Sans passer par un bloc code je crois que l’on arrive pas à concaténer des chaînes afin de reconstituer les commandes complètes.

Tu ne veux pas de bloc code ou c’est juste que tu ne sais pas faire et donc il te faut de l’aide ?

Oui c’est ce que j’imaginais

C’est juste qu’il me faut de l’aide (je ne suis pas dev). je me débrouille si il faut adapter mais je suis incapable de pondre un bout de bloc code

Norbert

Ok je te montre d’ici 30-40mn

Bonjour.

Le plugin mode est pas mal pour ce genre d’actions.

Mais il faut effectivement agir sur toutes les commandes.

Voila, ça devrait donner ça et à poursuivre avec tes autres commandes une le fonctionnement validé.

// Le scénario appelant doit passer un tag baseCommande=[cuisine][vanne]

$tags = $scenario->getTags(); // Récupération des tags
$baseCommande = $tags['#baseCommande#']; // enregistrement d'une variable contenant la base de la commande transmise du scénario appelant

$scenario->setLog('#'.$baseCommande.'[consigne]# à 17°c');
cmd::byString('#'.$baseCommande.'[consigne]#')->event('17'); // Consigne à 17

$scenario->setLog('#'.$baseCommande.'[mode]# en manuel');
cmd::byString('#'.$baseCommande.'[mode]#')->event('manuel'); // Mode en manuel

c’est un peu ce que je fais pour « simuler » un état sur mes volets, puisque je n’ai pas de retour d’état.

Le scénario reçoit 2 infos : le volet et la valeur qu’il doit prendre.
si le volet est ‹ rdc › ou ‹ etage ›, alors je considère que je dois mettre à jour tout un ensemble de volets, donc je créé une liste des volets à maj.
Puis je boucle sur les éléments à mettre à jour avec la valeur attendue.

$tags = $scenario->getTags();
$volet = $tags['#volet#'];
$value = $tags['#valeur#'];



if ( $volet == 'rdc' ){
  $maList = array('SalonPorte','SalonBaie','SalonRue','Cuisine', 'Rdc'); 
}
elseif (  $volet == 'etage'  ) {
  $maList = array('BureauJardin','BureauRue','EtageCouloir','DressingRue','DressingJardin','Ami','SdB', 'Etage');  
}
else{
  $maList = array($volet);  
}

try{
  foreach ($maList as $item) {
	cmd::byString('#[Virtuel][vEtatVolets]['.$item.']#')->event("$value");
  }
}
catch(Exception $e){
 	$scenario->setLog('erreur : '. $e->getMessage()); 
  	
}

Grand merci @bison et @tomitomas,
Grce à vos exemple, j’ai écrit ce script … c reste très abstrait pour moi, mais ca à l’air de fonctionner !!!

$baseCommandeMOES = array('[CH Anna][Vanne]','[CH Léonie][Vanne]','[CH Marie][Vanne]','[Cuisine][Vanne]','[Salon][Vanne 1]','[Salon][Vanne 2]','[CH Parents][Vanne]'); 
$baseCommandeEUROTRONIC = array('[SdB Filles][Vanne]','[SdB Parents][Vanne]','[Hall Entrée][Vanne]','[Hall Chambres][Vanne]');

$modeSaison = cmd::byString('#[Appartement][Chauffage - Saison][Mode]#')->execCmd();

if ( $modeSaison == 'Hiver' ) {               // Si mode Hiver
    $scenario->setLog('Forcage des valeurs, mode Hiver'); 
	foreach ($baseCommandeMOES as $item) {
      	$scenario->setLog('Forcage équipement MOES : '.$item);
		cmd::byString('#'.$item.'[Mode du système : auto]#')->execCmd();   // En Hiver, forcage du mode auto
		cmd::byString('#'.$item.'[Debloquer]#')->execCmd();   // deverouillage de la vanne
		cmd::byString('#'.$item.'[Forcer]#')->event('normal');    // Forcage du mode normal (gestion de la consigne plutot que tout ouvert ou tout fermé)
    	cmd::byString('#'.$item.'[Manuel]#')->execCmd();      // forcage du mode manuel
	}
    foreach ($baseCommandeEUROTRONIC as $item) {
      	$scenario->setLog('Forcage équipement EUROTRONIC : '.$item);
  		cmd::byString('#'.$item.'[Mode du système : auto]#')->execCmd();   // En Hiver, forcage du mode auto
		cmd::byString('#'.$item.'[Mode de contrôle]#')->event('2');    // Forcage du mode normal (gestion de la consigne plutot que position de vanne)
	}
}
Else {
    $scenario->setLog('Forcage des valeurs, mode Eté'); 
  	foreach ($baseCommandeMOES as $item) {
      	$scenario->setLog('Forcage équipement MOES : '.$item);
		cmd::byString('#'.$item.'[Mode du système : off]#')->execCmd();   // En Ete, forcage du mode Off
	}
    foreach ($baseCommandeEUROTRONIC as $item) {
        $scenario->setLog('Forcage équipement EUROTRONIC : '.$item);
  		cmd::byString('#'.$item.'[Mode du système : off]#')->execCmd();   // En Ete, forcage du mode Off
	}
}

J ajouterai chacun de tes bloc foreach, dans un try ... catch ... pass car si une cmd est mal orthographiée tout pete !

Et ce try … Catch, il doit être mis pour chacune des commandes ou on peut mettre un bloc de commandes dedans ?

comme sur mon exemple :slight_smile:

1 « J'aime »

NIckel, ca foncitonne, testé et approuvé, j’ai meme reussi à mettre une notif Jeedom Connect si erreur sur la commande

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.