Finalement en faisant un scénario, « Multi-lancement », « Synchrone », « Provoqué » avec comme déclencheur la commande info, je récupère bien mes douze valeurs.
Dans les logs du scénario, tout est à la même seconde.
Bonsoir @Jeandhom,
Pas bien compris ta solution. Ton besoin n’était pas d’historiser toutes les valeurs? En quoi passer par un scénario te permet de remplir le besoin?
Non, le besoin était de récupérer les douze valeurs de la même commande info pour ajouter un message dans le Centre de message lorsqu’un nouveau firmware est disponible.
Je pensais y arriver en passant par la table history.
Je partage le code, ce sera peut être plus clair.
Il ne faut pas oublier que le déclencheur du scénario change douze fois dans la même seconde.
Je fini par l’affichage d’un json dans un virtuel.
$trigger = cmd::cmdToHumanReadable($scenario->getRealTrigger());
$scenario->setLog('Trigger : ' . $trigger);
$cmd = cmd::byString($trigger);
$value = $cmd->execCmd();
$scenario->setLog('Valeur : ' . $value);
$shelly = json_decode($value,true);
$id = $shelly[id];
$scenario->setLog('ID : ' . $id);
$mac = $shelly[mac];
$scenario->setLog('MAC : ' . $mac);
$ip = $shelly[ip];
$scenario->setLog('IP : ' . $ip);
$fw_ver = $shelly[fw_ver];
$scenario->setLog('FW_VER : ' . $fw_ver);
$new_fw = $shelly[new_fw];
$source = 'Scénario ' . $scenario->getHumanName() . ' ' . $id;
if ($new_fw) {
$new_fw_txt = 'true';
// Ajout d'un message dans le Centre de Message
message::add($source,$fw_ver,'Nouveau firmware disponible - Mettre à jour le firmware');
} else {
$new_fw_txt = 'false';
// Retrait d'un message dans le Centre de Message
message::removeAll($source);
}
$scenario->setLog('NEW_FW : ' . $new_fw_txt);
$maVar = $scenario->getData('a_shelliesAnnonce');
$maVar[$mac] = $new_fw_txt;
$scenario->setData('a_shelliesAnnonce', $maVar);
$maVar = $scenario->getData('a_shelliesAnnonce');
$maVar = json_encode($maVar,true);
cmd::byString('#[Shellies Administration][Shellies Firmware][Retour Annonce]#')->event($maVar);