Re: Script Vérification Modules ZWave
Publié : 01 déc. 2017, 20:49
+1
Forum sur Jeedom
https://www.jeedom.com/forum/
Code : Tout sélectionner
// Setup
// Jeedom configuration/API/Clef API Z-Wave
$apizwave = 'xxxxx';
// End Setup
$url_health = 'http://localhost:8085/network?type=info&info=getHealth&apikey=' . $apizwave;
$content = (file_get_contents($url_health));
$scenario->setLog($content);
$results = json_decode($content, true);
$success = $results["state"];
if ($success != 'ok') {
$scenario->setLog('ZAPI network getHealth return an error: ' . $results["result"]);
} else {
// get the full node list
$devices = $results["result"]["devices"];
$node_errors = array();
foreach ($devices as $node_id => $node_values) {
$scenario->setLog($node_id);
$isFailed = $node_values["data"]["isFailed"]["value"];
// device can be disabled from jeedom
$enabled = $node_values["data"]["is_enable"]["value"];
if ($enabled & $isFailed) {
if (count($node_errors) == 0) {
$scenario->setLog('****** These nodes are presumed dead ******');
}
// get the name of the device
$node_name = $node_values["data"]["description"]["name"];
// add a log entry
$scenario->setLog('NodeId ' . $node_id . ' ' . $node_name);
// add nodeId to the node list
$node_errors[] = $node_id;
}
}
if (count($node_errors) != 0) {
$scenario->setLog('*******************************************');
}
// save nodes list for external processing
$scenario->setData("ZWave_Nodes_Death", implode(',', $node_errors));
}
et une variable ZWave_Nodes_Death avec l'id de module death soit 10 pour moi[2019-07-14 01:57:01][SCENARIO] Start : Scenario lance manuellement.
[2019-07-14 01:57:01][SCENARIO] Exécution du sous-élément de type [action] : code
[2019-07-14 01:57:01][SCENARIO] Exécution d'un bloc code
[2019-07-14 01:57:02][SCENARIO] {"state": "ok", ...........
[2019-07-14 01:57:02][SCENARIO] 64
[2019-07-14 01:57:02][SCENARIO] 1
[2019-07-14 01:57:02][SCENARIO] 67
[2019-07-14 01:57:02][SCENARIO] 69
[2019-07-14 01:57:02][SCENARIO] 9
[2019-07-14 01:57:02][SCENARIO] 10
[2019-07-14 01:57:02][SCENARIO] ****** These nodes are presumed dead ******
[2019-07-14 01:57:02][SCENARIO] NodeId 10 10FGS-212 Simple Charge Telerupteur
[2019-07-14 01:57:02][SCENARIO] 11
[2019-07-14 01:57:02][SCENARIO] 76
[2019-07-14 01:57:02][SCENARIO] 47
[2019-07-14 01:57:02][SCENARIO] 48
[2019-07-14 01:57:02][SCENARIO] 49
[2019-07-14 01:57:02][SCENARIO] 50
[2019-07-14 01:57:02][SCENARIO] 52
[2019-07-14 01:57:02][SCENARIO] 54
[2019-07-14 01:57:02][SCENARIO] 55
[2019-07-14 01:57:02][SCENARIO] 42
[2019-07-14 01:57:02][SCENARIO] 62
[2019-07-14 01:57:02][SCENARIO] *******************************************
Ça m'intéresse ce script, j'ai un soucis avec 2 capteurs de niveau d'eauwinhex a écrit :bonjour j'ai repris un script (de mémoire de @nechry)
il y a aussi un script pour les
"Modules de batterie qui ne se sont pas réveillés comme prévu"
Code : Tout sélectionner
// Setup
// Jeedom configuration/API/Clef API Z-Wave
$apizwave = 'Xxx';
// End Setup
$time_now = time();
$url_health = 'http://localhost:8085/network?type=info&info=getHealth&apikey=' . $apizwave;
$content = (file_get_contents($url_health));
//$scenario->setLog($content);
$results = json_decode($content, true);
$success = $results["state"];
if ($success != 'ok') {
$scenario->setLog('ZAPI network getHealth return an error: ' . $results["result"]);
} else {
// get the full node list
$devices = $results["result"]["devices"];
$node_errors = array();
foreach ($devices as $node_id => $node_values) {
// listening devices work on sector
$isListening = $node_values["data"]["isListening"]["value"];
// device can be disabled from jeedom
$enabled = $node_values["data"]["is_enable"]["value"];
// test only if node is enable and is battery powered
if ($enabled & $isListening == 0) {
// get the wake up interval
$wakeup_interval = $node_values["data"]["wakeup_interval"]["value"];
if ($wakeup_interval == 0) {
// this device never wakeup by itself, continue
continue;
}
// check last notification received for this node
$next_wakeup = $node_values["data"]["wakeup_interval"]["next_wakeup"];
// check if node didn't wakeup as expected.
if ($next_wakeup < $time_now) {
// special case if the device is currently mark as awake
$isAwake = $node_values["data"]["isAwake"]["value"];
if ($isAwake) {
$last_notification = $node_values["last_notification"]["receiveTime"]["value"];
// check if the node has been awake for more than 5 minutes
if ($last_notification + 300 < $time_now) {
// this node seems awake for too long, we're going to ping
$url = 'http://localhost:8085/node?node_id=' . $node_id . '&type=action&action=testNode&apikey=' . $apizwave;
file_get_contents($url);
continue;
}
}
if (count($node_errors) == 0) {
$scenario->setLog('****** Battery modules that have not woken up as expected ******');
}
// get the name of the device
$node_name = $node_values["data"]["description"]["name"];
// add a log entry
$scenario->setLog('NodeId ' . $node_id . ' ' . $node_name);
// add nodeId to the node list
$node_errors[] = $node_id;
}
}
}
if (count($node_errors) != 0) {
$scenario->setLog('****************************************************************');
}
// save nodes list for external processing
$scenario->setData("ZWave_Nodes_Wakeup_Error", implode(',', $node_errors));
}
Code : Tout sélectionner
// a voir https://jeedom-facile.fr/index.php/2018/12/18/la-surveillance-de-vos-equipements-domotiques/
// https://www.jeedom.com/forum/viewtopic.php?f=32&t=37319&p=617174&hilit=eqLogic%3A%3AbyString#p617174
$equipements = array(
"#[Zwave][Universal Relay Hotte Escamotable][Etat 1]#",
"#[Zwave][Universal Relay Sonnette Chaudieres][Sonnette]#",
"#[Zwave][Built In Dimmer VMC][Etat]#"
);
$maintenant = (new DateTime(date("Y-m-d H:i:s")));
$valeurfin = ($maintenant->format('Y-m-d H:i:s'));
$valeurfin2 = ($maintenant->getTimestamp());
$scenario->setLog("maintenant : $valeurfin timestamp : $valeurfin2");
foreach ($equipements as $equipement) {
$cmd = cmd::byString($equipement);
$idEquipt = $cmd->getEqLogic_id();
$equipt=eqLogic::byId($idEquipt);
$nomEquipement = $equipt->getName();
$valeurdbt= $equipt->getStatus('lastCommunication');
// 1er methode différence delta
$delta = gmdate("H:i:s",strtotime($valeurfin) - strtotime($valeurdbt));
// 2eme methode difference timestamp
$temp_difftime = ($valeurfin2 - (new DateTime($valeurdbt))->getTimestamp());
$scenario->setLog("-----------------------------------------------------");
$scenario->setLog("Nom du device : $nomEquipement id : $idEquipt");
$scenario->setLog("dernière communication : $valeurdbt différence : $delta secondes : $temp_difftime");
$scenario->setData($nomEquipement."_LastCom", $temp_difftime);
}
Autre protocole, je préférais paswinhex a écrit : ↑14 juil. 2019, 21:33this node seems awake for too long, we're going to ping
je ne peux pas faire plus
--
c'est pour scénarisé, en prenant en compte voir en faisant une info t'avisant d'un soucis.
si c'est pas fiable passe à un autre modèle, ou change de protocole
soit tu recycles pour un autre besoin ou tu revends. la porté est peut être trop loin
Oui mais ça reste du bricolage que je maîtrise pas forcément, le module aeotec était bien bien pensé, un module avec 1m de câble et 2 pics au bout, c'est discret et facile a mettre en place, malheureusement il ne le produise plus c'est dommage car il n'y a pas d'équivalent, faudrait que je comprenne pourquoi ça fonctionne mal, mais j'avais ouvert un post sur ce forum mais sans grand résultat, je vais refaire une tentative car un point m'interpele sur 1 des 2 moduleswinhex a écrit : ↑15 juil. 2019, 01:48un flotteur
dans un tube pvc ouvert
à fixer au fond
et de la gaine
pour manipulation, fixer,..
exemple
https://www.amazon.fr/gp/product/B00AZE ... ailpages00
après voir les spécificités
appaareamant courant 12v ou libre de potentiel , ...
donc un tas de possibilités
exemple un universel fibaro ou FGBS Smart tu peux en mettre 2
Ok merci, je vais regarder cawinhex a écrit :le flood le fait si tu veux réutilisé ton câble
gaffe à l oxidation
en plus tu peux l'alimenter (il deviens repeteur)