Config mqtt pour plugin kroomba (suite)

Bonjour à tous,

comme déjà vu dans un autre post:

j’ai encore et toujours un soucis avec le plugin mqtt.

tout fonctionnait bien ce matin en mode broker local
image

Ceci étant dit, j’ai du mettre à jour mon serveur nas et de ce fait du éteindre ma machine virtuelle
A chaque redémarrage de jeedom j’ai toujours le même soucis à savoir que le plugin mqtt ne démarre plus

Voici le message d’erreur que me renvoi jeedom

Attention je pense qu’il y a un soucis avec le démon que j’ai relancé plus de 3 fois consécutivement

Voir ci joint le log de mqtt2
mqtt2.txt (136 Octets)

le log de mqtt2d est vierge pour information

j’ai tenté de réinstaller le plugin, relancer les dépendances, reinstaller mosquito, relancer le demon mais rien n’y fait.

j’ai fait les mêmes test suggéré par @Bad la dernière fois et voila ce qui ressort

quelqu’un aurait il une idée car j’ai ce problème à chaque redémarrage de jeedom.
la seule chose qui résout cela ce sont les mises à jour du plugin…

merci à vous pour votre aide.
bonne journée

Hello,

Peux tu passer les logs en débug et reboot ?
Sinon on ne verra rien dedans je pense.

Bad

C’est a n’y rien comprendre

j’ai juste cliqué sur debug et reboot puis générer le log
mqtt2 debug.txt (3,7 Ko)

immédiatement le demon a démarrer
image

1 « J'aime »

Alors probablement qu’il y a un bug dans le cas où les logs ne sont pas en débug :rofl:

Tu peux réessayer de passer en log par défaut et reboot, constater le PB et puis débug et reboot, pour valider ?

(Sinon c’est de la pure (mal)chance et on n’expliquera probablement pas le problème…)

En attendant je vais regarder le code du plugin au cas où il y aurait des portions qui réagissent différemment selon le niveau de log.

j’ai tenté mais cela ne se reproduit pas
cela ne semble arriver que lors du redémarrage de jeedom que je peux tenter si besoin.

@ArnauldF, tu peux vérifier si en désactivant le démarrage automatique du daemon, puis désactivant le daemon et en le relançant tu arrives à reproduire ? (meme en debug)

J’ai un comportement similaire chez moi : le daemon est NOK, mais pourtant il est bien lancé et communique bien avec le Broker.

Le fichier PID n’existe pas et pourtant le daemon tourne → NOK dans Jeedom

oui je confirme que j’ai desactivé le plugin puis réactivé en mode default
image

j’ai refait le mode debug et hop par magie ca redemmare

et confirme qu’en desactivant la gestion auto puis arreter et redemmarer meme probleme
sauf que je n’arrive plus à le redeammarer

maintenant je suis bloque sur statut NOK
j’ai redemarrer jeedom refait la meme chose et suis bloque sur nok…

Tu peux utiliser la commande suivante pour réparer :

ps ax | grep 'mqtt2d/mqtt2d.js' | grep -v 'sudo\|grep' | cut -d' ' -f1 | sudo tee /tmp/jeedom/mqtt2/deamon.pid

@Loic, (désolé de te tag) le problème vient du fait que Jeedom supprime trop vite le fichier PID de mqtt2 parce que le fichier est encore vide au moment où Jeedom le check.
En fait nodejs crée le fichier et met quelques instants à y écrire le PID, donc Jeedom le supprime…

1 « J'aime »

j’ai lancé la commande mais rien y fait

Tu as quoi comme retour à ps ax | grep 'mqtt2d/mqtt2d.js' | grep -v 'sudo\|grep'

Bonjour,
Ligne 299 du fichier de class :
while ($i < 10) {

Il faudrait tester avec 30, ca doit dépendre des config chez moi en 2s c’est bon donc 10s c’est large mais ca semble pas etre le cas partout.

Dans tous les cas la beta de demain passe a 30s.

rien

mais si je clique dans le menu à gauche
image

retour:
11477

1 « J'aime »

lol a ca redemmarer le demon passer en ok

En modifiant le deamon_info() de mqtt2:

   public static function deamon_info() {
      $return = array();
      $return['log'] = __CLASS__;
      $return['state'] = 'nok';
      $pid_file = jeedom::getTmpFolder(__CLASS__) . '/deamon.pid';
      if (file_exists($pid_file)) {
         if (@posix_getsid(trim(file_get_contents($pid_file)))) {
			log::add(__CLASS__, 'info', 'Démon mqtt2 en fonctionnement');
            $return['state'] = 'ok';
         } else {
			log::add(__CLASS__, 'error', 'Démon mqtt2 HS: $pid_file='.$pid_file.' ; content='.file_get_contents($pid_file).' ; getsid='.posix_getsid(trim(file_get_contents($pid_file))));
            shell_exec(system::getCmdSudo() . 'rm -rf ' . $pid_file . ' 2>&1 > /dev/null');
         }
      }
      $return['launchable'] = 'ok';
      return $return;
   }

Pour y ajouter un log si le daemon est OK/NOK et le contenu du fichier PID,
j’ai ce retour dans le log mqtt2 :

0000|[2022-08-16 14:49:18]INFO : Lancement démon mqtt2 : sudo  /usr/bin/node /var/www/html/plugins/mqtt2/resources/mqtt2d/mqtt2d.js --loglevel debug --socketport 55035 --mqtt_server mqtt://127.0.0.1:1883 --username  --password  --callback http://127.0.0.1:80/plugins/mqtt2/core/php/jeeMqtt2.php --apikey KKKKKKK --cycle 0.3 --pid /tmp/jeedom/mqtt2/deamon.pid
0001|[2022-08-16 14:49:19]ERROR : Démon mqtt2 HS: $pid_file=/tmp/jeedom/mqtt2/deamon.pid ; content= ; getsid=
0002|[2022-08-16 14:49:19]DEBUG : []

Si je commente la ligne
shell_exec(system::getCmdSudo() . 'rm -rf ' . $pid_file . ' 2>&1 > /dev/null');
J’ai ça :

0029|[2022-08-16 14:52:03]DEBUG : Received message without plugin handler : {"test":{"value":1660654322}}
0030|[2022-08-16 14:52:20]INFO : Lancement démon mqtt2 : sudo  /usr/bin/node /var/www/html/plugins/mqtt2/resources/mqtt2d/mqtt2d.js --loglevel debug --socketport 55035 --mqtt_server mqtt://127.0.0.1:1883 --username  --password  --callback http://127.0.0.1:80/plugins/mqtt2/core/php/jeeMqtt2.php --apikey KKKKK --cycle 0.3 --pid /tmp/jeedom/mqtt2/deamon.pid
0031|[2022-08-16 14:52:21]ERROR : Démon mqtt2 HS: $pid_file=/tmp/jeedom/mqtt2/deamon.pid ; content= ; getsid=
0032|[2022-08-16 14:52:21]ERROR : Démon mqtt2 HS: $pid_file=/tmp/jeedom/mqtt2/deamon.pid ; content= ; getsid=
0033|[2022-08-16 14:52:21]DEBUG : []
...
0049|[2022-08-16 14:52:22]INFO : Démon mqtt2 en fonctionnement
0050|[2022-08-16 14:52:22]INFO : Démon mqtt2 en fonctionnement
0051|[2022-08-16 14:52:26]INFO : Démon mqtt2 en fonctionnement

Donc rallonger le nombre de check n’est pas suffisant je pense.

C’est ça qu’on veut !!! :stuck_out_tongue:

1 « J'aime »

merci ca refonctionne comme ca donc pour ma part je n’y touche plus :slight_smile:
mais ravi d’avoir pu servir la communauté

Mon analyse est que Nodejs crée le fichier PID puis écrit (un peu plus tard) le contenu dedans.

Pendant ce temps, Jeedom check le fichier PID, voit qu’il est là, ne trouve pas de PID vivant dedans, supprime le fichier et donc le démon ne démarre pas pour Jeedom.

Je pense qu’il faudrait :
Soit créer le fichier PID sous le nom deamon.pid.tmp puis le renommer en deamon.pid dans Nodejs, c’est relativement simple.
Soit verifier si le fichier est utilisé par un autre programme (locked) dans deamon_info() et ne le check qui s’il n’est pas locked, mais c’est bien plus complexe.

Qu’en dis-tu ?

Ok je pense avoir trouvé, normalement ca sera bon demain. En gros si le fichier est vide je ne le supprime pas.