Comment tester la bonne exécution d'un accès à l'historique

Bonjour la Communauté,

Comme, je l’ai déjà dit dans un autre sujet, j’ai de gros problèmes avec la communication Zigbee entre mon Jeedom Atlas et mon ZLinky-TIC.
Depuis juillet, et surtout depuis quelques jours, entre 22h et 6h, pendant les HC, je perds la communication Zigbee et je n’arrive pas à savoir/comprendre pourquoi. (J’ai déjà changé le canal Zigbee pour passer du canal 15 au canal 26).
Et de 6h à 22h, pendant les HP, la communication fonctionne bien.

Je voudrais développer un scénario de contrôle ou d’alerte avec action corrective.

Pour cela j’envisage d’accéder à l’historique de la commande de l’index de base (par exemple), peut-être avec une instruction du genre « lastBetween » mais je ne sais pas comment tester si l’accès à la ligne recherchée s’est bien réalisé ou non.

Ma seconde question est donc : comment tester le résultat d’un accès à l’historique ?

Merci pour votre aide. Bonne journée.

Marc

Perso je partirai plus sur l’analyse de mon réseau et régler le souci que de mettre en place une usine à gaz !

Le mercurochrome sur une jambe de bois, c’est une teinture, pas un soin !

Ça ressemble à un problème d’ampoules connectées dont l’alimentation est coupée la nuit …

Tu peux juste checker le lastcommunication de ton équipement plutôt que d’aller creuser dans l’historique.

Ensuite, effectivement, vaut mieux passer du temps à chercher la cause

Norbert

J’ai des routeurs Netgear DECO TPLink-P9. Depuis toujours et depuis toujours depuis que j’ai le ZLinky-TIC Zigbee les Led s’éteignent la nuit.

Je viens de trouver le paramétrage, le « Mode nuit » s’activait de 22h à 7h. L’heure de début c’est OK, par contre l’heure de fin est une heure trop tard. Mais bon… Je viens de désactiver cette fonctionnalité. Je verrai la nuit prochaine…

Pensez-vous que ça pourrait être la cause ?

Bonjour Norbert,

Oui pourquoi pas… Peux-tu m’en dire plus sur le « lastcommunication » ? Je trouve des explications, la syntaxe, … quelque part ?

tu utilises quel plugin ?

le plugin Zigbee

Si c’est du temporaire, tu peux faire un scenario qui checkes toutes les 5mins par exemple et qui envoie une notif si la dernière com est >= 120s

le calcul du nombre de secondes depuis la dernière notif se fait comme cela (contenu du tag derniere_com)

#timestamp# - lastCommunication(#[Electricité][Teleinfo]#,U)

Si tu veux travailler sur des alertes plus générales (tpour tous tes equipements) … reglages >> system>> configuration >> log >> actions sur alerte >> timeout

Norbert

Merci Norbert,

Mais de mon côté j’obtiens (actuellement…) un écart constant de -10800 s.
Je suppose que #timestamp# est l’heure d’exécution, et que le lastCommunication récupère l’heure du dernier accès à la commande par Jeedom. Curieux que l’heure de dernière exécution soit supérieure à l’heure d’exécution du calcul

Avec ou sans " , U "

Il faut mettre l’équipement, pas une commande. Supprime Indes base

OK, mais pour info il ne faut pas mettre " , U"… je dis ça, je dis rien, je n’ai pas cherché la syntaxe…

En effet la valeur progresse jusqu’à 300 et d’un seul coup retombe à 1 à : H:05:ss, H:10:ss, H:15:ss…

Super, merci, je vais maintenant essayer d’exploiter intelligemment ce nouveau savoir faire…
Bonne fin d’après midi.
Marc

U permet de préciser que la valeur renvoyées est au format « timestamp » … du coup, si tu soustraits au timestamp actuel, tu obtiens un nb de secondes depuis …
Tu penseras à cloturer si le retour te conviens

Encore un petit coup de main StP…

Comment traduire ça dans un bloc code :
comment rédiger $timestamp (ou $variable…) = #timestamp# ???
et $dureeDepuisDernièreRecup = scenario::lastCommunication(#Equipement#) ???

J’ai beaucoup de mal sans doc… et bien entendu les exemples ne correspondent jamais à ce que je cherche à faire…

$eqLogic = '#[Electricité][Teleinfo]#' ;
$lastCom = time() - strtotime(eqLogic::byString($eqLogic)->getStatus('lastCommunication'));
$scenario->setLog('pas de communication depuis '. $lastCom . ' s') ;

Encore merci Norbert

Mais ça ne passe pas. J’ai un problème avec le getStatus apparemment…
J’ai rédigé comme ça :

$timestamp = time();
$scenario->setLog("Heure actuelle : ".$timestamp);
$dureeDepuisDerExec = strtotime(eqLogic::byID($cmdIdBaseLinky)->getStatus('lastCommunication'));
$scenario->setLog("Durée Exec : ".$dureeDepuisDerExec);
$delai = $timestamp - $dureeDepuisDerExec;
$scenario->setLog("Delai : ".$delai);

Et j’obtiens cette erreur :

[2023-10-03 17:26:16][SCENARIO] Heure actuelle : 1696346776
[2023-10-03 17:26:16][SCENARIO] Call to a member function getStatus() on bool

Désolé, j’ai cherché « getStatus() »…

Il ne trouve pas l’id $cmdIdBaseLinky. C’est bien un id d’équipement ?
A quoi ça correspond ?
Met. byString à la place, ça gère aussi les id.

Norbert

Et oui, que je suis C… 2 fois la même erreur…

Désolé. Merci, bonne soirée.

Marc

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.