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

Salut,

Le problème de base est que lorsque je redémarre mon Pi3 j’ai les ports pour RFXcom et Zigate qui s’inversent puis le plugin Zigate essaye de communiquer avec RFXcom et j’ai une corruption des données reçues, mais ce n’est bien sûr pas le sujet de mon post.

Suite à cela je remet les params qui vont bien donc la Zigate répond aussitôt mais RFXcom reçoit des trames incorrectes en continu :

Lorsqu’il n’y a quasiment pas de message valide et beaucoup de messages corrompus est-ce que l’on pourrait imaginer un redémarrage automatique du plugin RFXcom ?

En plus de ma question précédente, est-ce qu’il y aurait un moyen qui me permette de détecter ces erreurs de paquets ? un compteur par exemple.

Bonjour

Le problème est connu de la communauté pi. Le plus simple fixer les ports usb. J’ai plusieurs fois utilisé ce tuto:
https://easydomoticz.com/mon-premier-peripherique-z-wave-2/

Antoine

3 « J'aime »

Bonjour,

Si justement cela devrait être le sujet et vous avez bien fait d’expliquer votre problème avant la « solution » (qui n’en est pas une) que vous avez imaginé :+1:

Suivez le conseil de @Tonio16

2 « J'aime »

Bonjour,

J’avais déjà aperçu la solution pour Pi qui consiste à fixer les ports USB mais dans tous les cas lors de mes tests précédents je n’ai jamais trouvé comment détecter les trames invalides de RFXcom (compteur d’erreurs ou autre).

Cela me serait très utile pour tester les protocoles à activer car j’ai qques chinoiseries récalcitrantes.

Ou si quelqu’un connait un moyen pour chercher du texte dans le log de RFXcom car j’avais cherché mais sans doutes pas avec les bons mots clés :frowning:

Bender

Slt…
Le mieux déjà pour que l’on y voit quelque chose c’est de mettre tes logs, mais SVP mets les en mode texte par copier coller dans des balises </> et pas en mode image !

1 « J'aime »

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 ?