Module zwave DEATH

bonjour à tous.

En cas de panne de courant, si une action est envoyée à un module Zwave, il sera considéré comme Mort (DEATH).
c’est le cas pour mon module FGBS-222.

Cependant, si le courant revient, il reste toujours en DEATH même si j’envoie une commande.
Je suis obligé de faire un PING dessus pour qu’il revive.

question : y a t il un moyen de faire un Ping via un scénario par exemple ou suis je obligé de passer par l’interface SANTE ZWAVE pour le pinger ?

Merci

Bonjour,
Peut-être quelque chose comme ça :

Bonjour @sebforum29

Oui tu peut très bien faire un ping avec un scenario
dans un block code
exemple pour une ip en 192.168.0.158
le - c 2 execute 2 fois le ping.

$req='ping 192.168.0.158 -c 2';
$scenario->setLog('DEBUG REQUETTE : '.$req);
$output0 = shell_exec($req);
$scenario->setLog('DEBUG RETOUR : '.$output0);

aprés execution tu poura voir dans le log su scenario ce qui s’est passer et le résultat de ta commande aprés DEBUG RETOUR :

ça donne cela :

@olive merci pour ta réponse. Cependant, ma question est pour faire un ping sur un module ZWave et non sur une carte réseau ! :wink:

Ho la pardon
ben tu a une ligne de commande qui ressemble quoi pour le faire en SSH ?

1 « J'aime »

je ne souhaite pas pouvoir le faire en SSH mais vraiment dans un scénario…

Si tu me montre comment tu le fait en ssh je te refait le bloc code …
pour que ça rentre dans un scénario …
( j’ai pas de modules Zwave :wink: )

1 « J'aime »

ben je ne sais pas le faire non plus en SSH mais via l’onglet SANTE du Plugin ZWAVE en cliquant sur Ping

Bon la je peut rien pour toi faudrait aller décortique le plugin que je n’ai pas désolé.
A tu essayer dans tes commandes il y a pas un refresh qui pourrait faire l’affaire ?

Je ne voudrais pas avoir l’air d’insister mais @Nemeraud a écrit un bloc code a insérer dans un scénario qui fait exactement ça.
Comme la lecture du post pose apparemment problème, en voici une copie. La première partie détecte les noeuds morts, la deuxième relance le daemon z-wave si le buffer est plein.
.
.

//**********************************************************
// Parameters
//**********************************************************
$API_Key = votre clé API;
$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);
}

$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();
}
4 « J'aime »

Merci beaucoup. Tu as bien fait d’insister

je comprends que si j’isole cette ligne, elle suffit à pinger un module Zwave (via IFTTT par exemple en mettant l’IP de mon jeedom) :

http://localhost:8083/node?apikey=APIKEY&node_id=IDMODULE&type=action&action=testNode

exact ?

merci encore

1 « J'aime »

Si tu veux mais pourquoi passer par IFTTT?
Si tu utilises un scénario, tu as intérêt à faire directement ton ping.
Si tu as ta solution pense à clôturer ton sujet en cochant la case solution là où elle se trouve.
Bonne journée

@Nemeraud
Il est normal que je rende à César …
Bonne journée

je suis pas l’inventeur de ce code :-), mais c’est bien tu es patient et pédagogue :wink:

bonne journée à toi aussi

Pas si patient que ça.
Si le sujet avait continué sans que ma proposition ne retienne l’attention, je n’aurais pas insisté davantage.
Je n’ai pas vocation à taper l’incruste pour rien.

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