J’essai de debug rapidement le plugin-daikinrccloud pour un retour de commande binaire qui ne passent pas à zéro quand un json contient false
L’appel de jeedom::evaluateExpression() appel au final la fonction evaluate() et dans le testeur d’expression on voit bien le retour d’une valeur vide :
Alors que le résultat attendu est bon pour une valeur à true :
Oui, j’ai déjà été confronté à ce genre de cas mais je ne me rappel plus trop.
Par contre je n’utilise pas le testeur d’expression dans ces cas, ca n’est pas comparable à du code php.
Fait un cast en int ca devrait passer
Si pas faut que je retrouve le cas.
Je passe en résolu avec la réponse de Mips parce qu’il a répondu en premier mais on est bien tous d’accord. Faut faire avec
Édit : @Aurelien je testerai ta proposition en une ligne merci.
Je connais bien l’expression ternaire mais celle-ci est assez costaud. J’aurai jamais pensé pouvoir utiliser $value dans le « sinon » vu que cette variable ne me semble pas encore définie
La variable est définie entre les parenthèses, ça ne reste qu’un if au final
Par contre je vais ouvrir une issue à ce sujet pour que la valeur envoyée à $cmd->event soit à 0 par défaut ce qui corrigera d’office ce cas de figure car je crois comprendre que le fond du problème est là?
foreach ($cmds as $cmd) {
$logicalID = $cmd->getLogicalId();
if (!isset($event[$logicalID])) continue;
!($value = jeedom::evaluateExpression($event[$logicalID])) ? 0 : $value;
log::add('daikinRCCloud', 'debug', '[' . __FUNCTION__ . '] ' . "[Bison] Data Debug => logicalID : " . $logicalID . " | Value : " . $value);
$value = jeedom::evaluateExpression($event[$logicalID]);
if ($value == '') { // Bison pour pour prise en compte d'un retour false
$value = 0;
}
log::add('daikinRCCloud', 'debug', '[' . __FUNCTION__ . '] ' . "Data Debug => logicalID : " . $logicalID . " | Value : " . $value);
$cmd->event($value);
}
ça ne fonctionne pas avec la ligne unique :
[2024-12-03 21:00:01] DEBUG : [handleMqttMessage] [Bison] Data Debug => logicalID : _isInErrorState | Value :
[2024-12-03 21:00:01] DEBUG : [handleMqttMessage] Data Debug => logicalID : _isInErrorState | Value : 0
Une partie du json contient "_onOffMode":false
Le fond du problème c’est que jeedom::evaluateExpression($event[$logicalID]); renvoi une valeur vide dans ce cas de figure (false dans le json) et du coup la commande binaire devient vide aussi (Etat « Inconnu » comme par exemple) :
A mon avis il ne faut rien toucher dans le core parce que si l’évaluation renvoi vide ça peut très bien convenir pour une commande de type string. C’est juste problématique dans le cas d’une info binaire finalement. Du coup je pense qu’il faut mieux le gérer dans le code du plugin, qu’en penses-tu ?
Mince oui, parti dans l’élan du truc j’en ai complètement oublié les cas d’event d’une chaine d’une caractère à vide
Edit: Mais si ça doit être bon, ce n’est pas une chaîne vide qui est retourné mais aucune valeur du tout du coup event ne fonctionne pas car la fonction attend une valeur en argument