Redémarrage automatique du plugin en cas de messages corrompus?

Salut Doubledom,

C’est simplement car j’avais fait une copie d’écran et que j’avais oublié de faire un copier-coller, d’ailleurs je n’ai pas trouvé mais peut-être que l’ancien log serait encore dispo.

Mon post précédent reste malgré tout d’actualité et je ferais un redémarrage du Pi dans les jours qui viennent pour récupérer le log texte mais je ne pense pas que cela aide beaucoup.

Bender

Slt…
Si tu ne mets tes logs, je vois pas comment on pourrait essayé de décoder ces trames …

Justement il n’y a rien à décoder car les messages ne sont pas valides, pour voir l’image en taille réelle il faut faire un clic droit dessus et ouvrir dans un nouvel onglet.

Oui merci ça on sait faire, par contre toi la prochaine fois inserts le log dans des balises c’est quand même mieux pour éditer !

Aucun décodage de trame n’est nécessaire vu que je cherchais seulement à détecter les erreurs, d’ailleurs je n’ai toujours pas trouvé comment faire.

Pour l’instant tout ce que j’ai n’est que l’image qu’il me restait et ce soir j’ai redémarré plusieurs fois le Pi3, changé le port, x essais, mais je n’ai pas réussi à reproduire le problème donc au bout de 2h j’abandonne cette partie.

Si cela pose problème je supprime l’image de mon message d’origine car le texte d’explication se suffit à lui même mais j’ai du mal à comprendre, le fait est que le log n’est plus là je l’ai déjà expliqué et l’image est parfaitement lisible.

Donc si quelqu’un sait comment je pourrais détecter ces messages suivants je pourrais continuer à chercher et mettre le résultat de ce que j’aurais fait (et testé).

D’après l’image voici les 2 éléments qui sont intéressants et qui se répètent, j’ai réécrit d’après la copie d’écran donc maintenant c’est à voir si cela peut faire avancer la discussion ou si ces événements restent cloisonnés au log de RFXcom qu’il faudra aller lire (code php je suppose) :

[DEBUG] : Message: fc00fcfc1xxxxxxxxxxxxxxxxxxxxxxxxx
[ERROR] : Error: Incoming packet not valid length (fc00fcfc1xxxxxxxxxxxxxxxxxxxxxxxxx
[DEBUG] : Message: 00
[DEBUG] : Message: 00
[DEBUG] : Message: 00

Bender

Non justement ce n’est pas du tout lisible !
Et encore moins sur téléphone !

Donc à l’avenir mettez vos logs dans un Texte préformaté comme demandé.

Je vous invite aussi à lire ce post jusqu’au bout:

De plus vous n’avez pas la bonne approche: vous êtes fixé sur une « solution » que vous avez imaginez alors que ce n’est qu’un palliatif.
Il faut chercher le problème réel qui est à l’origine et fixer cela et vous n’aurez plus a redémarrer votre démon.

Alors tu as avancé ?
Une petite info :thinking:

Pour le RFXCom cela veut dire que la longueur de la trame reçue n’est pas bonne, ne correspond pas à la longueur reçue par le premier Octet de cette trame ! Ici fc
Mais au vu de l’erreur de liaison !

Bonjour,

Dommage que Jeedom ne gère pas la translation port/périphérique pour que les plugins puissent spécifier un périphérique à la place de son port et de cette façon il n’y aurait plus de problème d’inversion de port (USB ou autre) ainsi qu’une gestion de changement de port à chaud.

Voici mon script actuel qui utilise un capteur de T° qui a une batterie faible et qui me pourri le 433mhz avec des trames invalides donc une fois que je l’aurais bien testé je l’adapterai à mon problème d’origine (désolé pour les adeptes du smartphone, il faudra regarder l’image en taille réelle pour le log).

Par contre je n’ai pas encore testé le redémarrage de plugin rfxcom.

//$scenario->setLog("test");

// Initialisation des variables
$redemarragePlugin = false;
$pluginId = 'rfxcom';
$logRfxcomChemin = log::getPathToLog('rfxcom');

// Affichage des informations sur le log RFXcom
$logRfxcomTaille = filesize($logRfxcomChemin);
$scenario->setLog("Chemin du log RFXcom : " . $logRfxcomChemin);
$scenario->setLog("Taille du log : " . $logRfxcomTaille." octets");

// Recherche du texte dans le log avec compteur d'occurences
$logRfxcomContenuArray = file($logRfxcomChemin);
$compteurTexteTrouve = substr_count(implode(',', $logRfxcomContenuArray), 'No decoder found');
$scenario->setLog("Compteur de 'No decoder found' : " . $compteurTexteTrouve);

// Log du nombre d'occurences
if ($compteurTexteTrouve > 1320) {
  $scenario->setLog("  compteurTexteTrouve > 1320");
  //$redemarragePlugin = true;
}
else {
  $scenario->setLog("  compteurTexteTrouve <= 1320");
  //$redemarragePlugin = false;
}

// Redémarrage du plugin RFXcom si le compteur d'occurences a dépassé le seuil défini
// NOTE : https://doc.jeedom.com/fr_FR/dev/daemon_plugin
if ($redemarragePlugin) {
  $plugin = plugin::byId($pluginId);
  if (is_object($_plugin)) {
    // Redémarrer le daemon du plugin Jeedom
    $scenario->setLog('Redémarrage du plugin ' . $pluginId);
    //$plugin->deamon_stop();
    //$plugin->deamon_start();
    $plugin->deamon_start(true);  // https://jeedom.github.io/documentation/phpdoc/classes/plugin.html  =>  deamon_start(  $_forceRestart = false,   $_auto = false)
    $scenario->setLog('  Statut du plugin : ' . $plugin->deamon_info()['state']);
  }
}
else {
  $scenario->setLog("(Pas de redémarrage du plugin " . $pluginId . " nécessaire)");
}

// Log du délai d'exécution
$executionTime = microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"];
$executionTime = number_format($executionTime, 2);
$scenario->setLog("Temps d'exécution : ".$executionTime." seconde(s)");

Je n’attend aucune réponse concernant ma démarche, par contre si quelqu’un veut faire avancer ce script c’est avec plaisir surtout que j’ai des années d’expérience en client lourd mais avec du php je suis novice, en particulier php avec Jeedom.

Bender

Oui enfin fixer les ports usb pour des périphériques USB, c’est possible, on en a déjà parlé et cela se fait dans le système d’exploitation ! C’est surement pas a Jeedom de le faire !!!

On en parler ici de fixer les ports

2 « J'aime »

Je ne sais pas qui a liké cette réponse mais apparemment personne ne lis ce que j’ai écrit.

Dans mon post précédent je parle de translation, je n’ai jamais écrit que c’était à Jeedom de fixer les ports surtout que cette solution a déjà été discutée à la 1ère réponse.

Désolé d’insister lourdement mais à force d’avoir des réponses de type « jugement » (pas à Jeedom de faire cela, pas à x de faire machin, que je n’ai pas la bonne méthode, que tout le monde sait mais laisse en l’état quelque chose que l’on sait parfaitement géré sur Windows depuis des années mais sous prétexte que Linux est trop bien c’est forcément à l’utilisateur d’une solution simple d’aller trafiquer son Linux, surtout avec un Pi très standard etc…) j’ai du mal à comprendre la démarche dans ces réponses donc vu que ce type de réponse continue malgré mes explications j’ai l’impression de vous faire perdre de votre temps.

Peut-être que je dois laisser tomber ce post et aller dans la section dev mais ce n’était pas le but au départ et de toute façon je ne me considère pas comme un dev php.

Bender

Slt…

Je crois que tu prends ton problème du mauvais côté !
Il faudrait peut-être résoudre le problème d’USB sur ta machine … dito @Mips

De plus :

Quel capteur, es tu sur qu’il remonte une info batterie correcte ?

Poste tes logs en mode txt ou insérer dans balises </> si tu veux vraiment avancé …

Rappel :si tu n’as pas besoin de certain ID, il y a une option pour les bannir dans la configuration …

@+ si besoin …

C’est sur tes propos sont clairs.

Tu n’as pas de soucis d’inversions de ports, donc inutiles de les fixer pour éviter un problème !
Il faut continuer et se persuader que les ports usb sont gérés par jeedom et pas par le système !

Donc pour moi tu n’as aucun souci jeedom !
Et de plus tu peux te débrouiller tout seul comme un grand !

En fait vous n’avez pas bien compris, fixer les ports ça je sais le faire.

Pourquoi je ne le fais pas (encore) ? parce que je veux reproduire le problème des trames toutes pourries, pourquoi j’insiste ? parce que ce n’est pas normal que le plugin RFXcom ne génère aucune alerte, pourquoi persister à vouloir une alerte ? parce que un système qui tourne 24/24 ne doit pas donner l’impression de fonctionner si l’un des éléments ne fonctionnement pas correctement.

Dans mon cas c’était une surprise d’arriver et de voir que les volets étaient encore ouverts en pleine nuit, sans alerte, rien, par contre si quelqu’un trouve que c’est normal de ne pas détecter un problème de fonctionnement (oui oui je sais c’est l’OS mais ce n’est pas la peine d’ajouter de l’expertise à un problème standard…) c’est quand même la base de pouvoir compter sur sa domotique.

J’ai une formation d’informatique industrielle donc j’ai bien compris que c’est avant tout un problème de méthode, c’est comme se couper et perdre du sang puis quelqu’un dit « mais met un pansement c’est un problème connu ! » alors que le patient n’a juste pas ressenti la douleur car le système nerveux n’a pas alerté.

C’est dommage j’aurais préféré un commentaire sur le code.

Bender

Slt…
Je vois que tu as mis en résolu ton problème ! Mais cela n’est qu’un palliatif !
Je tag @Loic , mais je pense qu’il sera de même avis que nous @Mips et @anon53349806
Résoudre le problème d’USB !
@+Dom

2 « J'aime »

Bonjour,

Quelqu’un peut me faire un résumé du soucis ?

Bonjour Loic,

Pour résumer, je cherchais comment faire pour que le plugin RFXcom redémarre son daemon (ou au moins un message sur Telegram) si les derniers messages n’étaient qu’une succession de tailles invalides avec un seuil paramétrable.

A la base c’est suite au problème de port USB qui s’inverse entre RFXcom et Zigate mais pour la fiabilité de ma domotique je cherche à être au minimum prévenu d’un dysfonctionnement, je dirais même que si RFXcom ne reçoit aucun message valide pendant xx minutes cela aurait pu suffire mais ce n’est pas ce que je cherche à avoir.

Le type de trames invalides ci-dessous et j’ai noté mon script php en tant que solution car il répond à mon problème et je dois juste le terminer, par contre je ne parle pas de fixer les ports USB car ce problème est totalement secondaire et sera réglé plus tard :

Bender

Ok je sais pas trop quoi y faire… En mode auto le plugin trouve normalement sans soucis les clef qui vont bien, j’avais testé avec : deconz, elelabs, zwave, rfxcom tout en auto et en débranchant rebranchant jamais eu de soucis en 5min jeedom retrouve toute les clefs correctement.

Pour ta demande initial je pense ton script sera le mieux je ne vais pas implémenter ce genre de verification dans le plugin surtout que le soucis USB doit arriver en court de fonctionnement car au démarrage il y a des demandes faite au module rfxcom pour etre sur que c’est bien un rfxcom.

1 « J'aime »

Oui justement j’avais proposé mon aide pour le plugin Abeille, au moins pour tester.
Ce qui est sûr c’est que le plugin RFXcom a toujours trouvé le bon port.

Après je me disais juste que si Jeedom propose une liste des périphériques ce serait peut-être plus facile d’appeler un alias (de nommage) par le plugin pour que chaque plugin qui appelle un périph USB ne commence pas à communiquer et « pourrir » les échanges.
De cette façon si le plugin est abonné à des événements USB il se mettrait à jour lors d’un changement de port USB à chaud peu importe les compétences de dev mise en oeuvre dans le plugin.
Bien sûr c’est juste une idée et je ne m’attend pas à voir ce genre de chose avant une autre version majeure de Jeedom.

Bender

Pour moi c’est justement le but du mode auto après si le dev ne l’implemente pas on peut pas le forcer.

1 « J'aime »

Juste pour info pour ceux qui seraient curieux :

		$port = config::byKey('port', 'rfxcom');
		if ($port != 'auto') {
			$port = jeedom::getUsbMapping($port);
		}