Je soupçonne un problème de la gestion du STOP par le plugin.
Je vais vérifier l'état de $status dans le cas où le volet est déjà ouvert à l'appui sur STOP.
Vu que $last_status a le statut OPEN (cf mes logs), et donc une valeur non numérique, le code entre dans le premier IF. Là, on ne traite pas les cas UP et DOWN, et du coup on arrive à la comparaison if ($status
(=OPEN) <= 0) ...
Je ne sais pas comment c'est interprété en PHP, mais pour moi le problème viens de là.
D'ailleurs, je pense qu'il y a un soucis dans l'imbrication des tests pour cette commande. Je modifierai le code demain pour faire des tests.
Code : Tout sélectionner
elseif ($value == 'MOVE_STOP') {
log::add('myhome', 'debug', "Action move_STOP");
//Par defaut on dit que le volet est arrete et donc à son ancienne position
$status = $last_status;
$updatedate=$myhomecmd->getConfiguration('updatedate');
//Si le volet est deja en mouvement
if (!is_numeric($last_status) && isset($updatedate)) {
$new_pos = ($move_time - ($updatedate - $date))/$move_time*100;
log::add('myhome', 'debug', " updatedate : ".$updatedate." Newpos : ".$new_pos);
if ($last_status == 'UP') {
$status = round($new_pos);
$statusnum = round($new_pos);
log::add('myhome', 'debug', "last_status : Up, status : ".$status);
$myhomecmd->setConfiguration('returnStateValue',$status);
$myhomecmd->setConfiguration('returnStateTime',1);
$myhomecmdnum->setConfiguration('returnStateValue',$statusnum);
$myhomecmdnum->setConfiguration('returnStateTime',1);
}
elseif ($last_status == 'DOWN') {
$status = round(100 - $new_pos);
$statusnum = round(100 - $new_pos);
log::add('myhome', 'debug', "last_status : Down, status : ".$status);
$myhomecmd->setConfiguration('returnStateValue',$status);
$myhomecmd->setConfiguration('returnStateTime',1);
$myhomecmdnum->setConfiguration('returnStateValue',$statusnum);
$myhomecmdnum->setConfiguration('returnStateTime',1);
}
if ($status <= 0) {
$status = 'CLOSED';
$statusnum = 0;
$myhomecmd->setConfiguration('updatedate',NULL);
$myhomecmd->setConfiguration('returnStateValue',NULL);
$myhomecmd->setConfiguration('returnStateTime',NULL);
$myhomecmdnum->setConfiguration('updatedate',NULL);
$myhomecmdnum->setConfiguration('returnStateValue',NULL);
$myhomecmdnum->setConfiguration('returnStateTime',NULL);
}
elseif ($status >= 100) {
$status = 'OPEN';
$statusnum = 100;
$myhomecmd->setConfiguration('updatedate',NULL);
$myhomecmd->setConfiguration('returnStateValue',NULL);
$myhomecmd->setConfiguration('returnStateTime',NULL);
$myhomecmdnum->setConfiguration('updatedate',NULL);
$myhomecmdnum->setConfiguration('returnStateValue',NULL);
$myhomecmdnum->setConfiguration('returnStateTime',NULL);
}
}
else {
$status = 'OPEN';
$statusnum = 100;
}
}
Et puis ces if elsif sans cas par défaut (else) moi çà me chagrine.