Bonjour à tous,
comme déjà vu dans un autre post:
Bonjour,
de retour de congés et après la dernière mise à jour cela semble être régularisé et le tout en configuration locale!
j’ai encore et toujours un soucis avec le plugin mqtt.
tout fonctionnait bien ce matin en mode broker local
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
Bad
Août 16, 2022, 10:30
2
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
1 « J'aime »
Bad
Août 16, 2022, 12:08
4
Alors probablement qu’il y a un bug dans le cas où les logs ne sont pas en débug
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.
Bad
Août 16, 2022, 12:37
6
@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
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…
Bad
Août 16, 2022, 1:12
9
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
Bad
Août 16, 2022, 1:14
11
Tu as quoi comme retour à ps ax | grep 'mqtt2d/mqtt2d.js' | grep -v 'sudo\|grep'
Loic
Août 16, 2022, 1:14
12
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.
mais si je clique dans le menu à gauche
retour:
11477
1 « J'aime »
lol a ca redemmarer le demon passer en ok
Bad
Août 16, 2022, 1:20
17
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.
merci ca refonctionne comme ca donc pour ma part je n’y touche plus
mais ravi d’avoir pu servir la communauté
Bad
Août 16, 2022, 1:26
20
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 ?
Loic
Août 16, 2022, 1:41
21
Ok je pense avoir trouvé, normalement ca sera bon demain. En gros si le fichier est vide je ne le supprime pas.