Bonjour,
En attendant qu’une nouvelle fonctionnalité voit le jour (ou jamais…), j’ai créé un virtuel reprennant toutes les commandes de ma vanne (que j’ai besoin) + un scénario.
Principe de fonctionnement :
Lorsque je souhaite modifier une température, j’interviens que sur le virtuel et plus précisement sur la valeur du pending et je la répercute vers la commande (du plugin z-wave) via un scénario.
Si j’interviens sur la vanne/tête (physique) sur le radiateur, je fais l’opération inverse pour mettre à jours la commande pending du nouveau virtuel.
Avec ce principe, je pense avoir retrouvé l’ancien fonctionnement.
L’idée est la suivante, mon virtuel s’appele « Tête radiateur » et la vanne dans le plugin z-wave à le même nom auquel j’ai rajoute " hardware" derrière (ex :« Tête radiateur hardware »). J’ai nommé le virtuel avec un nom plus « user Friendly » car c’est lui qui sera visible sur le dashBoard.
Ensuite pour le virtuel, je remets les commandes suivantes :
Remarque, mon virtuel et le non-virtuel doivent être dans la même pièce.
Pour le scénario, je déclenche le scénario avec des évenements lorsque la consigne pending du virtuel est différente de la consigne du virtuel. (La consigne du virtuel pointant sur la consigne zwave)
ex de déclencheur :
J’ai mis dans le scénario ce bloc de code pour réaliser les opérations que j’ai décris plus haut (c’est un premier jet de code)
J’ai fais du code pour avoir tous les déclencheurs de toutes mes vannes sur un seul scénario (ce qui est plus facile à maintenir surtout au début)
$trigger = $scenario->getRealTrigger();
$triggerName = cmd::cmdToHumanReadable($trigger);
if (strpos($triggerName,'pending')>0){
// Action sur la vanne virtuelle => commande consigne pending du virtuel
$cmdNameConsignePending = cmd::byString($triggerName);
// valeur de la consigne correspondante
$newConsigne = $cmdNameConsignePending->execCmd();
// Définition de la commande de la vanne hardware (renommage par rapport au nom du virtuel)
$cmdNameCommandeHardware = str_replace('[Consigne pending]', '[Commande]',$triggerName);
$names = explode("][", $cmdNameCommandeHardware);
$cmdNameCommandeHardware = str_replace($names[1], "$names[1] hardware",$cmdNameCommandeHardware); // Ajout de hardware dans le nom de la commande
$cmdConsigneCommandeHardware = cmd::byString($cmdNameCommandeHardware);
// Application de la consigne sur la commande hardware.
$options = array('slider'=>$newConsigne);
$cmdConsigneCommandeHardware->execCmd($options, $cache=0);
scenario::setData($cmdNameCommandeHardware, strval($newConsigne));
$scenario->setLog("Maj commande (hardware) : $cmdNameCommandeHardware : $newConsigne");
}
else{
// Action sur la vanne physique ou objet zwave direct => Commande Consigne du Virtuel (qui pointe sur la consigne Hardware)
$cmdConsigne = cmd::byString($triggerName);
// Valeur de la constigne correspondante
$newConsigne = $cmdConsigne->execCmd();
// Définition de la commande "Commande" du virtuel qui mettre à jour la "Consigne pending" du virtuel
$cmdNameCommande=str_replace('[Consigne]', '[Commande]',$triggerName);
$cmdConsigneCommande = cmd::byString($cmdNameCommande);
// Application de la commande sur le virtuel
$options = array('slider'=>$newConsigne);
$cmdConsigneCommande->execCmd($options, $cache=0);
scenario::setData($cmdNameCommande, strval($newConsigne));
$scenario->setLog("Maj commande (pending) : $cmdNameCommande : $newConsigne");
}
C’est pas parfait et ça pourra être certainement amélioré (j’ai pas testé tous les cas possible ex déclanchement manuel du scénario, tests nombre occurrences tableaux, …).
Je ne sais pas s’il ne faut pas envisager de faire une fonction personnalisé.
Je partage si cela peut servir à quelqu’un.
Bonne soirée

