Du coup depuis un scénario, je récupère l’information LAST COMMUNICATION
// Scénario afin de vérifier si les capteurs d'alarme (Detecteur ouverture, mouvement, ...)
// on communiqués il y à moins de 2h
// On récupére la liste de tous les équipements
$eqLogics = eqLogic::all();
$scenario->setLog('----------------- DEBUT monitoring communication équipement de sécurité !');
// Temps en secondes
$int_tempscommunication = 7200;
// On set la variable à 1 avant la vérification
$scenario->setData('var_etat_detecteur_A', 1);
// On parcours tous les équipements
foreach($eqLogics as $eqLogic)
{
// On filtre les équipements de sécurité, ils se nomment forcement [DETECTEUR - A
$str_nomequipement = '[DETECTEUR A -';
if(stristr($eqLogic->getHumanName(),$str_nomequipement) == TRUE)
{
$scenario->setLog( '-- Equipement : ' . $eqLogic->getHumanName());
// On vérifie si l'quipement à communiqué ses $int_tempscommunication secondes
if (abs(time() - strtotime($eqLogic->getStatus('lastCommunication'))) < $int_tempscommunication)
{
$scenario->setLog('----> OK');
}
else
{
$scenario->setLog('----> /*\ Pas de COMMUNICATION du détecteur : '.$eqLogic->getHumanName().'depuis : '.abs(time() - strtotime($eqLogic->getStatus('lastCommunication'))).' secondes');
// On passe la variable d'état à 0
$scenario->setData('var_etat_detecteur_A', 0);
}
}
}
$scenario->setLog('----------------- FIN monitoring communication équipement de sécurité !');
La date retourné est :
Ce qui correspond plutôt à la date de la dernière collect
Tu peux également utiliser plus simplement ceci: (#timestamp# - strtotime(collectdate(#ta commande#))) > #tempo#
Avec tempo comme tag ou variable à définir en seconde,
La date de dernière communication (au sens zigbee) est différente de la date de dernière collecte (au sens jeedom), Ce sujet a déjà été abordé maintes fois me semble-t-il.
date de derniere communication = la derniere fois que le plugin (ou la clé) a vu l’equipemement
<>
date de collecte (au niveau commande) == la derniere fois que l’équipememnt a recupéré une valeur
<>
date de valeur (au niveau commande) == la derniere fois que l’équipement a enregistrée une nouvelle valeur (cf répéter les valeurs identiques)
Pour gérer la date de dernière communication, il faut utiliser les mécanismes existants :
1 - possibilité de mettre en place une notif dans system >> configuration >> log >> Alertes >> Ajouter un message à chaque Timeout
Bonjour Norbert
sauf si je me trompe !
Une notification c’est une chose
mais si tu ne passe que le plugin a ton scenario sans savoir quel est l’équipement
il va être difficile d’en faire quelque chose …
surtout si tu a 50 équipements sur ce plugin.
Bonjour Olive,
Mon screenshot est un peu trompeur !!! je ne souhaitais pas parler de mon scenario de gestion des notifs mais juste de la possibilité de mettre une notif pour un équipement en timeout (j’ai modifié)
Cela dit, le scenario associé aux notifs du Screenshot pourrait aussi faire l’affaire pour avoir des actions sur Timeout puisque je récupère aussi le message (le plugin est juste rajouté en tag au scenario)
==> si plugin Zigbee et si message contient « absence de communication » ET « DETECTEUR A », blablablabla
(bon, ca commence à me paraitre compliqué si c’est juste pour être notifié)
Mais je vais reformuler ma demande car elle semble ne pas avoir été assez précise :
comment faire pour récupérer l’information DERNIERE COMMUNICATION d’un équipement communiquant en ZigBee via le plugin ZigBee et le contrôleur Conbee2 via un code python ?
Comme vous pouvez le voir dans mes screenshots, lorsque je récupère LAST COMMUNICATION, la valeur est celle de la COLLECT DATE, et non celle afficher dans la vue Réseau ZigBee, qui s’actualise toutes les 30min - 1h.
Actuellement dans mon scénario j’affiche un message dans les logs, mais c’est pour le debug, ce n’est pas la finalité.