Bonjour @Bison,
Voici ma version pour mes fil pilote Qubino.
J’appelle la fonction « sendQubinoFilPiloteOrder([parent][objet][ordre]) » et le reste est calculé automatiquement.
Merci pour le travail que tu as fait, il m’a vraiment inspiré (la page blanche, c’est pas mon truc)
Merci pour l’utilisation de LogManager
Diff avec ta version:
- Je n’envois pas d’ordre si l’équipement est déjà dans le bon état.
- spécifique Qubino Fil Pilote
- attends sleep x execution au lieu de sleep
- usage de fonctions php
- pas d’accents parce que moche dans mes logs serveur
public static function zwaveGetQueueSize() {
//return 0; //si tout va bien dans le reseau
// Information sur l'etat de la Queue Zwave
$networkState = openzwave::callOpenzwave('/network?type=info&info=getStatus');
$queueSize=$networkState['result']['outgoingSendQueue'];
log::add('zwaveordercheck', 'debug', '[Debug] -> queueSize : '.$queueSize);
return $queueSize;
}
public static function isQubinoFilPiloteStatusOk ($_mycmd) {
$arraycmd = explode("][",$_mycmd);
$mystate = '#'.trim($arraycmd[0]).']['.trim($arraycmd[1]).'][Etat]#';
$mystateName = cmd::byString($mystate)->getHumanName();
$state = cmd::byString($mystate)->execCmd();
log::add('zwaveordercheck', 'info', '[Etat] -> '.$mystateName.' : '.$state);
$cmd = substr($arraycmd[2], 0, $arraycmd[2].length-1);
switch ($cmd) {
case "Arret":
$ret = ($state == 0) ? 1 : 0;
break;
case "Hors Gel":
$ret = ($state == 20) ? 1 : 0;
break;
case "Eco":
$ret = ($state == 30) ? 1 : 0;
break;
case "Confort -2":
$ret = ($state == 40) ? 1 : 0;
break;
case "Confort -1":
$ret = ($state == 50) ? 1 : 0;
break;
case "Confort":
$ret = ($state>=100) ? 1 : 0;
break;
}
return $ret;
}
public static function sendQubinoFilPiloteOrder($_mycmd, $_mysleep='5') {
$_mycmd = trim($_mycmd);
$cmd = '#'.$_mycmd.'#';
try {
$mycmdName = cmd::byString($cmd)->getHumanName();
} catch (Exception $e) {
log::add('zwaveordercheck', 'info', 'Exception recue : '. $e->getMessage());
$mycmdName = $_mycmd;
}
log::add('zwaveordercheck', 'info', '[Action demandee] -> '.$mycmdName);
$i = 0;
while (!userFunction::isQubinoFilPiloteStatusOk($_mycmd) && $i < 4) { // Tant que la valeur de l'etat ne colle pas la commande, on recommence
if (userFunction::zwaveGetQueueSize() == 0) {
if ($i > 1) {
log::add('zwaveordercheck', 'warning', '[Action] -> '.$mycmdName.' [execution '.$i.']');
} else {
log::add('zwaveordercheck', 'info', '[Action] -> '.$mycmdName);
}
cmd::byString($cmd)->execCmd(); // Execution de la commande demandee
sleep($_mysleep*($i + 1)); // Stoppe pour $_mysleep * execution secondes
$i++;
} else {
sleep(1);
}
}
if ($i == 4) {
log::add('zwaveordercheck', 'warning', '[Info] -> '.$mycmdName. ' ne semble pas avoir ete executee');
return 0;
} else {
log::add('zwaveordercheck', 'info', '[Action executee] -> '.$mycmdName);
return 1;
}
}