Surveillance noeuds

Bonjour
J’ai une petite question sur la surveillance des noeud mysensors avec jeedom.
Sur la page santé du plugin il y as une colonne « statut » => OK, cela veut dire que le noeud fonctionne correctement mais comment avoir un retour de « statut » pour que jeedom détecte une perte de signal ou un arrêt. Du noeud?

Je regardais du côté de heartbeat du sketch mais soit je m’y prend mal où est-ce du côté de jeedom que cela s’active ?

Merci d’avance

Bonjour @totofcha
J’ai un de mes nodes qui envoi un jeton à intervalle régulier (1 minute)
Dans mes scenario si je n’ai pas reçu de jeton au bout de x minutes, je redémarre
le démon mysensors

Si ça peut t’aider …

Jean-luc

Merci Jean-Luc
L’idée me plaît bien mais comment envoi tu ces « jetons » ?
Quel sont les instructions à mettre dans le sketch ?

Cordialement

scénario watchdog

instructions dans le sketch

#define child_id_watchdog       9  // pour réception watchdog
#define child_id_jeton          10 // pour envoi jeton
bool jeton              = false;
bool ack                = false;
long watchdog           = 0;              // envoyer par jeedom
bool watchdog_recu      = false;

void setup() {
  // put your setup code here, to run once:

}

//******************************************************************************************
void presentation()  {
  present(child_id_watchdog, S_DIMMER);
  present(child_id_jeton, S_DOOR);  // jeton pour envoi à jeedom
}

//******************************************************************************************
void loop() {

  // sur réception de watchdog venant de jeedom, on répond en envoyant jeton à jeedom
  if (watchdog_recu == true)  {
    watchdog_recu = false;
    jeton=!jeton;
    send_state(child_id_jeton,jeton);   // envoi jeton à jeedom pour indiquer que la comm est ok
  }
} // fin loop 

/* ======================================================================
Function:receive
// reception des messages jeedom mysensors
====================================================================== */
void receive(const MyMessage &message) {
  
  if (message.isAck()) {
    ack = true;   //Serial.println("This is an ack from gateway");
  }

  else  {
    if (message.type == V_VAR1 && message.sensor == child_id_watchdog) {           // watchdog 
      watchdog = message.getLong();                                                // recoit nouvelle valeur watchdog de jeedom toutes les minutes
      watchdog_recu=true;                // sert pour envoyer jeton a jeedom
    }
  } // fin else  
}   // fin void receive

Jeedom envoi une valeur variant de 10 à 100 (peu importe c’est pour pas envoyer la même valeur 2 fois de suite) au node
qui sur réception de cette valeur renvoi jeton (variant de 0 à 1) à jeedom

De cette façon la com est testée en émission et réception

N’ hésite pas à ma demander si besoin

Jean-luc

Je te remercie beaucoup pour le temps que tu passe pour répondre.
Mais j’ai un petit souci avec les morceau de sketch que tu m’as donné, la ligne "send-state (…etc) me renvoi une erreur de declaration .
Sur un autre sujet (avec ton sketch sur les ventilateur salon et salle à manger)il y as un appel à une fonction.
Est ce cette fonction qui manquerai ?

Cordialement

On peut aussi tout simplement regarde si le noeud a envoyé n message il ya moin de x min dans les paramètres avancés du nœud

@totofcha
Effectivement il manque déclaration :

MyMessage msg_sortie1(child_id_jeton,V_STATUS);

et il manque les fonctions :

/* ======================================================================
Function: send_state
// envoi l'état à jeedom
// 3 tentatives si pas reception ack
====================================================================== */
void send_state (int child, int valeur) {
  for ( int i = 0 ; i < 3 ; i++ ) {
    send(msg_sortie1.setSensor(child).set(valeur),true);
    if (reception_ack()) {
      break ; // sortie boucle for
    }
  }
}

/* ======================================================================
Function: reception_ack
// attend la réception
// sortie au bout de 2 secondes si pas de reception
====================================================================== */
bool reception_ack () {
  unsigned long previousMillis = 0 ;
  unsigned long interval = 2000 ;  // 2 secondes
  previousMillis = millis() ;
  ack = false ;
  while (! ack) {
    wait(1) ;
    if (millis() - previousMillis >= interval) {  // regarde si timeout
      return false ; // sortie sur timeout
    }
  }
  if (debug == 1) {
    Serial.print("Retournement ack :"); Serial.println((millis() - previousMillis));
  }
  return true ;
}  

Si tu as des difficultés dis moi ce que tu veux faire

Jean-luc

@Yogui

On peut aussi tout simplement regarde si le noeud a envoyé n message il ya moin de x min dans les paramètres avancés du nœud

Tout à fait, mais dans ce cas on ne contrôle pas la perte de com
de jeedom => les nodes (ça m’ai déjà arrivé)

sinon j’ai aussi fait que j’incremente une variable toute les 30 sec que j’envoie a jeedom et dans jeedom j’ai un scenario qui verifie que la valeur a changer toute les 5 min

Ok, ça contrôle la com de node vers jeedom
mais pas la com de jeedom vers node