Récupération de l'information DERNIERE COMMUNICATION

Bonjour tout le monde,

j’essaye de renforcer mon système domotique en m’assurant que mes capteurs communiquent bien.

Ma configuration est la suivante :

  • jeedom v4
  • sur un raspberry PI 4, OS Debian Buster
  • des capteurs XIAOMI détecteur ouverture, mouvement
  • un contrôleur CONBEE 2
  • plugin ZigBee

Dans le plugin ZigBee, dans réseau, j’ai l’information que je souhaite récupérer DERNIERE COMMUNICATION

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 :
image

Ce qui correspond plutôt à la date de la dernière collect
image

Je cherche depuis un moment mais je trouve pas …

Merci d’avance à la communauté.

Lucas

Bonjour,
moi ça me parait bon

sans bloc code tu peut faire aussi

date("U") - lastCommunication(#[VOLTAÏQUE][LIXEE]#,"U")

Sinon tu as le plugin #plugin-watchdog de @sigalou qui est fait pour ça.
A toi de voir :slight_smile:
Bonne journée

Lo,

Tu peux également utiliser plus simplement ceci:
(#timestamp# - strtotime(collectdate(#ta commande#))) > #tempo#
Avec tempo comme tag ou variable à définir en seconde,

Au plaisir, bonne journée,

Salut Toms
Ça ce n’est que pour une commande pas pour l’équipement en entier :wink:

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

2 - pour chaque équipement, definir le delai avant remontée de l’erreur : page equipememnt >> configutration avancée >> alerte

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 :wink: (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é)

On est d’accord si c’est juste pour une notification en centre de message (juste besoin de regler le timing)

1 « J'aime »

Merci à tous pour vos réponses.

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é.

Par avance merci de vos retours.

J’insiste car chez moi ça fonctionne.
la c’est au bout de 180 secondes sans messages de l’équipement

SI
(date("U") - lastCommunication(#[OBJECT][EQUIPEMENT]#,"U")) > 180
ALORS
....

je viens d’effectuer la commande et voici le resultat

Comme tu peux le constater, la date de la dernière communication est 13:13:01 aujourd’hui :

le résultat 84425 ne correspond pas à la DERNIERE COMMUNICATION

Quelque chose ne va pas dans tes infos ton contrôleur n’a pas communiqué depuis 9h55:16 ce matin :thinking:

Merci @marmoul mais je préfère utiliser ce qu’il y a disposition nativement sans utiliser d’autre plugin.

Merci quand même ^^

1 « J'aime »

Je viens de voir quelque chose d’intéressant

on dirai que l’information DERNIERE COMMUNICATION n’est pas transmise depuis le CONTROLEUR vers JEEDOM

Imprime écran de l’info depuis le contrôleur

Imprime écran de l’info depuis l’équipement

on voit bien que l’info n’est pas à jour côté jeedom, c’est pour ca que ma commande LASTCOMMUNICATION correspond à la COLLECTDATE …

Essai sur un autre plugin …

Mes volets roulants ne sont compatible qu’avec ce plugin …

Petite question : Comment fait 'on pour discuter directement avec les personnes de JEEDOM SAS afin que je puisse leurs parler de ce soucis ?

contact@jeedom.com

Merci.

Juste pour info, mes volets roulants c’est des schneider zigbee
image

Dans Zigbee2MQTT seul l’interrupteur 10A est pris en charge.