Aller au contenu

Watchdog Pour Scènes Et Modules Virtuels


Lazer

Messages recommandés

De façon générale, pour surveiller efficacement les main loop de modules virtuels, il faut que chaque main loop affche un message prédéfini à  intervalle régulier. En effet, pour une main loop on ne peut pas faire appel à  la fonction countScene(), et il n'est donc pas possible de détecter le cas où le module virtuel fait un core-dump au niveau de l'OS Linux.... puisque lorsque cela se produit, aucun message d'erreur spécifique n'est affiché dans la zone de débug de la main loop.

Dans le cas particulier du module virtuel Sonos Player de Krikroff, il faut activer l'option Tk.isTraceEnabled = true dans le code de la main loop (qui se trouve vers la fin)

Pour les prochains modules virtuels qui seront développés, je suggère d'ajouter ce type de message récurrent si vous souhaitez pouvoir surveiller efficacement les main loop.

 

Quelques captures d'écran :

  • Autostart de la scène, puis 15 minutes plus tard, les Check s'enchainent toutes les minutes :

gallery_133_289_2121.png

  • Lancement manuel d'une seule vérification immédiate dans une nouvelle instance de la scène (pour cela, autoriser au minimum 2 instances pour cette scène, puis cliquer sur le bouton Démarrer) :

gallery_133_289_1165.png

  • Exemple d'une scène (GEA, ID n°14) dont l'instance qui s’exécute en boucle infinie a planté. Il y a 0 instances, donc redémarrage de GEA :

gallery_133_289_559.png

  • Thanks 1
Lien vers le commentaire
Partager sur d’autres sites

c'est de la haute voltige !

Sans l'exemple, j'aurais difficile (ok, c'est du belge, en français : "j'éprouverais des difficultés")

 

Mais je ne comprends pas bien ceci

no_match : texte qui ne doit pas être trouvé, sous peine de considérer le VD/Scène comme planté. Cela correspond typiquement à  un message d'erreur LUA qui entraine le plantage du script. A noter que la condition no_match à  priorité sur la condition match, c'est à  dire que si le texte recherché par no_match est détecté, le VD/Scène sera redémarrer même si le texte recherché par match a été détecté. L'un ou l'autre des 2 champs suivants peuvent être renseignés pour que la condition soit prise en compte (condition OU) :

    text : chaine de caractères à  trouver
    type : "ERROR" correspond aux messages affichés en rouge dans la fenêtre de Debug de l'interface HC2. A noter que jusqu'en v4.056, dans une scène une erreur LUA affichait le message en rouge avec le type "ERROR", tandis que depuis les Beta v4.057 et v4.058, cette même erreur s'affiche en blanc sans le type ERROR, par conséquent ce test ne fonctionne plus. En revanche, aucun changement de mode de fonctionnement concernant les Virtual Devices.

donc à  partir de la 4.057b je ne pourrais plus mettre type="ERROR" ? Il faut mettre quoi alors ?

Lien vers le commentaire
Partager sur d’autres sites

Jojo, je vais détailler cette histoire d'ERROR dans le 2nd post (d'ailleurs j'ai commencé à  y ajouter quelques infos).

 

Tu peux laisser type="ERROR" pour les scènes, mais cela sera sans effet tant que Fibaro ne ré-implémentera pas cette fonctionnalité.

Pour le moment, ERROR n'existe plus que pour les Main Loop de VD.

Donc, si tu as une Scène dont tu connais précisément le message d'erreur qui apparait aléatoirement, tu peux le mettre dans le paramètre no_match.text. Je sais que c'est le cas de Gazous pour l'une de ses scènes dans le topic "Catcher une erreur LUA" d'où est parti cette idée de watchdog.

Et on peut dire que ce changement de comportement tombe au bon moment (enfin, je m'en serais bien passé.... mais il faut faire avec.... Fibaro, développeurs, régression, bug, tout ça quoi....) car j'étais justement en train de développer ce watchdog quand j'ai passé ma box de développement de la v4.057 à  v4.058, tandis que ma box de prod est toujours en v4.056. Donc j'ai bien vu la différence.

 

Ceci dit, pour une scène, je considère que le plus fiable est d'utiliser le paramètre count=1, car vous avez certainement 1 instance lancée en autostart avec une boucle infinie qui devrait tourner non-stop (cas connu de GEA).

Remarquez que dans mon exemple, on a une double protection pour GEA, car on essaye également de matcher le text "Durée des traitements" qui apparait normalement toutes les 10 minutes.

Lien vers le commentaire
Partager sur d’autres sites

merci pour ces explications.

Serait-il "facile" d'ajouter un paramètre supplémentaire àchaque ligne du watchdog ? : Pouvoir choisir si on veut une simple notification ou également un restart de la scène/VD. Cela me permettrait de vérifier si la condition d'erreur que j'ai mise est bien la bonne. Imaginons que j'ai mis une condition farfelue et que du coup ma scène/VD redémarre en boucle ?

Lien vers le commentaire
Partager sur d’autres sites

quelques icônes pour le fun

Merci.

Je n'avais pas encore pris le temps, mais je viens maintenant de mettre mon icône au début du topic.

Pour toutes les scènes, je préfère inclure l'image dans le clap de cinéma, afin de bien différencier dans l'interface web les scènes (sur lesquelles ont n'est pas censé agir) des VD (sur lesquels on peut agir).

Lien vers le commentaire
Partager sur d’autres sites

Oki c'est installé.
Rien à  dire, c'est du beau boulot, merci encore !!!

Maintenant je dois dire que chez moi c'est plutôt la box qui plante complètement que des vd ou scènes. Mais bon, peut être que je pourrai détecter des signes avant courtier avec le Watchdog et lancer un reboot avant qu'il ne soit trop tard.
 

Lien vers le commentaire
Partager sur d’autres sites

Pas certain que ce watchdog te permette de détecter des signes avant coureur..... ou alors si tu trouve une piste, faudra partager !

 

Tu peux utiliser le script de Jojo à  faire tourner sur une machine externe type Synology afin de détecter le plantage de la HC2..... et qui envoie un email, car impossible de redémarrer la HC2 sans intervenir directement dessus.

Lien vers le commentaire
Partager sur d’autres sites

Donc si j'ai bien compris,

en 4.058, pour les VD, il faut mettre le texte qui apparait réglièrement dans le debug.

exemple pour le VD meteo YAMS WU:

{type = "VD", id = 4, match = {text="Prochaine Mise à  jour prévue dans", interval=40}, no_match = {text="", type="ERROR"}, notification = {"push", "email", "sms"}},
Pour des scènes style gea, j'ai un doute, mon gea tourne en boucle infinie comme tout le monde, mais est aussi relancé régulièrement par des trigger (mouvement, VG, value etc...)
 
Est-ce que ça a un sens de surveiller ce genre de scène ?
Lien vers le commentaire
Partager sur d’autres sites

Pas certain que ce watchdog te permette de détecter des signes avant coureur..... ou alors si tu trouve une piste, faudra partager !

 

Tu peux utiliser le script de Jojo à  faire tourner sur une machine externe type Synology afin de détecter le plantage de la HC2..... et qui envoie un email, car impossible de redémarrer la HC2 sans intervenir directement dessus.

 

Je suis occupé à  chercher un moyen de le faire...

 

Il y a toujours moyen en la coupant et en rallumant l'alimentation, via un simple arduino, ou un vieux gsm android par exemple.

Ou alors mieux, en simulant un push sur le bouton shutdown (simple pontage en parallèle), puis power off après 1 min puis power on.

Lien vers le commentaire
Partager sur d’autres sites

Ah mon avis, il n'y a aucun intérêt àsurveiller les scènes en déclenchement instantané àbase de trigger. Déjàpar nature, le trigger est aléatoire et n'intervient pas àintervalle régulier. Ensuite, une scène déclenchée par trigger àune durée de vie très courte, elle effectue sa tâche puis meurt. Donc si il y a un bug, c'est une erreur de logique de programmation, et cela plantera àtous les coups, et doit donc être corrigé immédiatement par le développeur. Le watchdog n'est pas un debugguer.

Lien vers le commentaire
Partager sur d’autres sites

A la demande de Jojo, j'ai modifié le premier post avec la version 1.1 du script afin d'ajouter un paramètre restart=true|false afin de redémarrer le VD/Scène concerné, ou seulement envoyer une notification signalant qu'il faut le redémarrer manuellement.

Plus quelques modifications mineures.

  • Upvote 2
Lien vers le commentaire
Partager sur d’autres sites

Lazer,

Merci d'avoir implémenté le restart = true/false.

Je DOIS l'utiliser car il trouve que mon VD sonos est mort, et il souhaite le redémarrer.

Hors ce n'est pas le VD qui est mort, mais le Sonos qui ne réponds plus au réseau (c'est un autre problème).

Comme le sonos n'est plus sur le réseau, le VD détecte le log ne trouve plus de "transport state:" et il veut redémarrer le VD.

Mais je pense qqu'il ne faut pas modifier le Watchdog qui fait bien son boulot, mais peut-être le VD Sonos pour que si un ping sur le Sonos ne réponds pas, il envoye un autre message d'erreur style "transport state: NO PING".

Je e permet de te dire ça car il semble que tu aurais les capacités de comprendre les codes de Krikroff.

Lien vers le commentaire
Partager sur d’autres sites

mais lorsque le réseau revient, il faut faire un save de la scène.

Alors je me pose la question, je laisse le restart àtrue, comme ça le VD se remet sur pate tout seul ? N'est-ce pas "mauvais" de redémarrer continuellement un VD ?

Lien vers le commentaire
Partager sur d’autres sites

Hum, je viens de faire le test en coupant le wall plug du sonos, et j'ai entendu une série de notifications et vibreurs autour de moi... ça réveille :2:

 

Je te propose de remplacer la chaine à  rechercher par un espace " ", car quel que soit le message affiché par le VD Sonos, le texte comporte toujours au moins un espace. Et si le VD est vraiment planté, il n'y aura plus de message du tout dans le délai imparti, donc pas d'espace, donc le VD sera bien redémarré.

Ca donne :

	{type = "VD",    id = 423, match = {text=" ", interval=30},                        no_match = {text="", type="ERROR"}, restart=true, notification = {"push", "email", "sms"}}, -- Sonos Player (Tk.isTraceEnabled = true)

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...