Bonjour à tous
serait il possible d’avoir la possibilité de remonter le nombre de commande en file d’attente du zwave pour générer une alerte ?
merci
Bonjour à tous
serait il possible d’avoir la possibilité de remonter le nombre de commande en file d’attente du zwave pour générer une alerte ?
merci
Salut,
Il faut faire tourner scénario avec un bout de code du genre de celui-ci.
Personnellement je ne fais qu’afficher un virtuel avec « ZwaveQueueSize » sur mon Design mais bien évidemment du peux faire en sorte de recevoir une alerte … ou autre.
$networkState = openzwave::callOpenzwave('/network?type=info&info=getStatus');
$queueSize=$networkState['result']['outgoingSendQueue'];
$scenario->setData('ZwaveQueueSize', $queueSize);
Bison
Merci pour l’info, je mets ça en place
pour la dernière ligne, je mets à jour directement le virtuel
cmd::byId(23831)->event($queueSize);
Tu as quoi comme autre script. Tu as trouvé les info où ?
Vous cherchez des scripts liés au zwave ?
Oui. Voir les possibilités offertes.
voici ceux que j’utilisent
# 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);
//**********************************************************
// 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);
}
// 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);
}
// 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”
$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
Merci. J’en avais vu certains sur le site de nechery je crois mais les tiens sont intéressant. Je n’avais que le dernier.
Tu mets ça dans un bloc code d’un scénario en remplissant les info nécéssaire. Mais après comment tu récupère les commandes ?
Ce type de commande, remonte la valeur dans une variable, que tu peux ensuite utiliser : variable (nom-variable, valeur-defaut)
$scenario->setData("ZWave_Nodes_Wakeup_Error
Ce genre de commande, stock la valeur directement dans un commande d’un virtuel, il suffit de mettre l’id de la commande
cmd::byId(23830)->event($networkState)
Plusieurs scripts nécessite la clé API zwave, j’ai mis des xxxxx pour ne pas communiquer la mienne
Et oui tu peux mettre le script dans un block code de scénario et le lancer a ta convenance
Merci beaucoup pour ton aide, le partage et ces infos complémentaires !
Pas de soucis la communauté est là pour ça, on m’a transmit ces infos, je les restitues
Amuse toi bien
Dis moi j’ai mis en place le script de relace en cas de space buffet.
Mais je n’ai aucune varible ni commande de créé. Tu peux me donner un coup de mais voir ce que j’ai oublié ?
Le script relance le zwave tout seul, il y aura le log dans le scénario mais pas de remonté d’info, tu peux en ajouter si tu veux
Alors je ne comprends pas quelque chose. Tu me disait hier que ce type de ligne $scenario->setData créait une variable que je pouvais utiliser. Comment faire?
Le scénario de relance en continent
Oui tu peux l’utiliser en mettant variable(nom-variable, valeur-defaut) dans une condition ou dans une commande d’un virtuel ou en allant voir dans la page des variables
Mais dans le dernier script il n’y a pas de code de ce type
Juste des $scenario->setLog
Cette commande met des infos dans le log du scénario
Ah ok merci!
Merci pour tous ces beaux scripts !!!
Pour le moment je me limite à la queu zwave on verra par la suite si je sors la grosse artillerie
Hello,
Merci pour ces scripts que je me suis empressé de mettre en place, ou de copier dans un scenario de test, pour plus tard.
Si je peux me permettre, j’ai noté quelques coquilles et points d’amélioration :
Voila pour les remarques, surtout pour ceux qui vont s’en servir. Ca serait dommage de casser un jeedom parce qu’une commandes info a été mise a jour par erreur.
Et encore merci pour ces codes
merci pour les retours
oui il y a surement des améliorations à y apporter, ces scripts viennent de sources diverses et bien entendu il ne faut pas les utiliser sans comprendre ce qu’ils font et les adapter à sa configuration !
ils pourraient tous être regroupés dans un seul avec usages de TAG