Config mqtt pour plugin kroomba (suite)

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.

En effet, c’est beaucoup mieux que mes propositions :smiley:

Merci !

je peux donc clôturer le sujet et attendre la version de demain?

Normalement oui a tester quand meme car je ne reproduis pas le soucis chez moi

bon alors je propose de laisser ouvert et voir les réactions du modules demain après mise à jour

1 « J'aime »

Pour info, j’ai fait mes tests sur Jeedom v4.2.20
En VM dans un NAS Synology avec 2vCPU et 1Go de RAM
load average: 0.31, 0.36, 0.27
Nodejs en 16.16.0
Santé :

2 « J'aime »

avec la mise à jour j’ai juste eu a redémarrer le demon et all ok directement cette fois :slight_smile: