voici ceux que j’utilisent
- Verification de l’état du réseau zwave et du nombre de commandes dans la file d’attente, met à jour un virtuel avec les 3 commandes
# Etat possible du réseau Z-Wave
# Nmbre de commande dans la file d'attente
$networkState = openzwave::callOpenzwave('/network?type=info&info=getStatus');
$queueSize=$networkState['result']['outgoingSendQueue'];
#$scenario->setData('ZwaveQueueSize', $queueSize);
cmd::byId(23831)->event($queueSize);
# STATE_STOPPED = 0
# STATE_FAILED = 1
# STATE_RESET = 3
# STATE_STARTED = 5
# STATE_AWAKED = 7 : Topology loaded = TOUT EST OK
# STATE_READY = 10 : Network ready = TOUT EST OK
$API_Key = 'xxxxxx';
$tags['#ZWaveErreur#'] = 0;
//$scenario->setData('ZWaveStatus', -2);
$tags['#ZWaveStatus#'] = -2;
try {
# On récupère le status du premier controleur Z-Wave
$apizwave = jeedom::getApiKey('openzwave');
$url = 'http://localhost:8083/network?type=info&info=getStatus&apikey='.$API_Key;
$contents = file_get_contents($url); $contents = utf8_encode($contents);
$scenario->setLog('***** ZWave Content: '.$contents);
//$scenario->setData('ZWaveResult', $contents);
$tags['#ZWaveResult#'] = $contents;
$results = json_decode($contents);
if ($results->state == "ok") {
$networkState = $results->result->state;
//$scenario->setData('ZWaveStatus', $networkState);
$tags['#ZWaveStatus#'] = $networkState;
}
} catch (Exception $e) {
//$scenario->setData('ZWaveStatus', -1);
$tags['#ZWaveStatus#'] = -1;
$scenario->setLog('***** ZWave Status OK');
}
$scenario->setLog('***** ZWave Status: '.$networkState);
$scenario->setLog('***********************');
// MAJ du tag.
$scenario->setTags($tags);
// status
$labelstatus="Iconnu";
if ($networkState == 0) { $labelstatus="STATE_STOPPED"; }
if ($networkState == 1) { $labelstatus="STATE_FAILED"; }
if ($networkState == 3) { $labelstatus="STATE_RESET"; }
if ($networkState == 5) { $labelstatus="STATE_STARTED"; }
if ($networkState == 7) { $labelstatus="STATE_AWAKED:Topology loaded"; }
if ($networkState == 10) { $labelstatus="STATE_READY:Network ready"; }
cmd::byId(23830)->event($networkState);
cmd::byId(23832)->event($labelstatus);
- Vérifier les liens actifs DEAD et fait un ping + message d’alarte
//**********************************************************
// Parameters
//**********************************************************
$API_Key = 'xxxxxx';
$Ping_Wait = 15;
$message = 'Module(s) DEAD : ';
$tagerror = 0;
//**********************************************************
//**********************************************************
// Liste des modules DEAD et ACTIF
//**********************************************************
$scenario->setLog('**********************************************************');
$scenario->setLog('***** Liste des modules DEAD et ACTIF *****');
$scenario->setLog('**********************************************************');
// $scenario->setLog('Module :'.$id);
$url_health = 'http://localhost:8083/network?apikey=' .$API_Key .'&type=info&info=getHealth';
$content = file_get_contents($url_health);
$results = json_decode($content, true);
$success = $results["state"];
if ($success == 'ok') {
$scenario->setLog('***** ACCES OK');
$devices = $results["result"]["devices"];
$node_errors = array();
foreach ($devices as $node_id => $node_values) {
$isFailed = $node_values["data"]["isFailed"]["value"];
$isEnable = $node_values["data"]["is_enable"]["value"];
//$scenario->setLog('DEBUG : Failed : '.$isFailed .' Enable : '.$isEnable);
if ($isFailed & $isEnable) {
$node_name = $node_values["data"]["description"]["name"];
if (count($node_errors) == 0) {
$scenario->setLog('Module :'.$node_id .' '.$node_name.' est en erreur');
$message = $message.$node_id .' '.$node_name.' ';
$ToPing_List[] = $node_id;
$tagerror = 1;
} else {
$scenario->setLog('Module :'.$node_id .' '.$node_name.' est en OK');
}
}
}
} else {
$scenario->setLog('ERREUR API :'.$results["result"]);
}
//**********************************************************
//**********************************************************
// ALERTE
//**********************************************************
if ( $tagerror == 1 ) {
$scenario->setLog('***** ENVOI ALERTE');
$cmd=cmd::byString('#[Communication][Centre communication][Envoi Alerte Antoine]#');
$cmd->execCmd($options=array('title'=>'ALERTE ZWAVE', 'message'=> "$message"), $cache=0);
}
//**********************************************************
// Ping a list of elements
//**********************************************************
$scenario->setLog('**********************************************************');
$scenario->setLog('***** Ping *****');
$scenario->setLog('**********************************************************');
foreach($ToPing_List as $id){
$scenario->setLog('Ping Module :'.$id);
$url_ping = 'http://localhost:8083/node?apikey=' .$API_Key .'&node_id=' .$id .'&type=action&action=testNode';
file_get_contents($url_ping);
sleep($Ping_Wait);
}
- Vérification des dernière communication pour le module BASSIN et CUVE EAU
// a voir https://jeedom-facile.fr/index.php/2018/12/18/la-surveillance-de-vos-equipements-domotiques/
$equipements = array(
"#[Module Physique][Niveau eau bassin][Alerte]#",
"#[Module Physique][Niveau eau cuve][Alerte]#"
);
$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);
}
- Modules de batterie qui ne se sont pas réveillés comme prévu
// Setup
// Jeedom configuration/API/Clef API Z-Wave
$apizwave = 'xxxxxx';
$tagerror = 0;
$message = "";
// End Setup
$time_now = time();
$url_health = 'http://localhost:8083/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('Le réseau ZWAVE renvoie une erreur : ' . $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('****** Modules de batterie qui ne se sont pas réveillés comme prévu ******');
$tagerror = 1;
}
// get the name of the device
$node_name = $node_values["data"]["description"]["name"];
// add a log entry
$scenario->setLog('NodeId ' . $node_id . ' ' . $node_name);
$message = $message.$node_name.'('.$node_id.') ';
// 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));
}
// ALERTE
//**********************************************************
if ( $tagerror == 1 ) {
$scenario->setLog('***** ENVOI ALERTE');
$cmd=cmd::byString('#[Communication][Centre communication][Envoi Alerte Antoine]#');
$cmd->execCmd($options=array('title'=>'ALERTE ZWAVE', 'message'=> "Modules de batterie qui ne se sont pas réveillés comme prévu : ".$message ), $cache=0);
}
- gère l’erreur “Not enough space in stream buffer detected"
// gère l’erreur “Not enough space in stream buffer detected”
$pathlog=log::getPathToLog('openzwaved');
if (file_exists($pathlog) && shell_exec('grep "Not enough space in stream buffer" ' . $pathlog . ' | wc -l') > 0)
{
$scenario->setLog('Not enough space in stream buffer detected');
log::add('openzwave', 'error', 'Not enough space in stream buffer detected');
log::clear('openzwaved');
shell_exec('sudo pkill -f openzwaved.py');
openzwave::deamon_stop();
sleep(5);
openzwave::deamon_start();
$scenario->setLog('Relance du demon ZWAVE');
// ALERTE
$cmd=cmd::byString('#[Communication][Centre communication][Envoi Alerte Antoine]#');
$cmd->execCmd($options=array('title'=>'ALERTE ZWAVE', 'Relance du demon ZWAVE'), $cache=0);
} else {
$scenario->setLog('Pas de problème ZWAVE');
}
désolé, j’ai pas le nom des auteurs pour les citer