Avant toute chose merci de (re)prendre connaissance de la charte et de la respecter.
Pour résumer :
- Avant de poser une question, je cherche si la réponse existe
- Je suis poli, courtois et je respecte tout un chacun sur le forum
- Si un post m'agace : je m'en éloigne plutôt que de répondre d'une façon qui pourrait être mal interprétée


Il n'est jamais du luxe que de rappeler des choses simples :
Courtoisie, amabilité, politesse et bonne humeur sont les maîtres mots pour un forum sympathique, bienveillant et accueillant :)

Toute la communauté vous remercie

Plugin jMQTT

Retrouvez ici des sujets concernant le protocole MQTT et les modules domotiques de type MQTT utilisés avec JEEDOM
/!\ Plugin MQTT non officiel
Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 07 sept. 2018, 06:43

Bonjour Vincnet68,
C'est donc jMQTT qui est en retard. As-tu toutefois essayé de désactiver le mode synchrone dans le scénario?
Sur quel PI / version de debian tournes tu?
domotruc
Plugins jMQTT, jElocky
domotruc.com

vincnet68
Timide
Messages : 21
Inscription : 16 juin 2015, 23:08

Re: Plugin jMQTT

Message par vincnet68 » 07 sept. 2018, 08:27

Bonjour domotruc,

C'est justement parce que j'avais des temps de réaction long que j'ai activé le monde synchrone (j'ai vu cela quelque part sur le forum).

Je suis sous RPI3 avec disque externe
Version : raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43

Voici le monitoring à l'instant où j'écris :
2018-09-07 08_25_07-Dashboard - Jeedom.png
2018-09-07 08_25_07-Dashboard - Jeedom.png (20.9 Kio) Consulté 260 fois
Merci de ton aide

Vincnet68

Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 07 sept. 2018, 10:14


vincnet68 a écrit :
Je vais me monter une conf de test sur RPi3.
Tu dis que les retards ne sont pas systématiques.
Pourrais tu me fournir ton traffic MQTT (voir commande quelques posts au dessus) et le log jmqtt correspondant lorsque le retard est significatif?
domotruc
Plugins jMQTT, jElocky
domotruc.com

vincnet68
Timide
Messages : 21
Inscription : 16 juin 2015, 23:08

Re: Plugin jMQTT

Message par vincnet68 » 09 sept. 2018, 21:16

@domotruc,

Je t’envoie le log par mp.

Merci

Vincnet68

jmc
Timide
Messages : 4
Inscription : 31 août 2018, 14:47

Re: Plugin jMQTT

Message par jmc » 11 sept. 2018, 13:26

Bonjour,

Peut etre une piste à investiguer pour mon problème de crash du deamon jMQTT et de latence dans le traitement des message:
Dans jMQTTClass la fonction mosquittoMessage() fait un appel setStatus(‘lastCommunication’,...) suivi de save() pour chaque équipement concerné par le message (qui semble mettre à jour le updateTime de l’equipement). Cet appel introduit un délai imporant dans le traitement des messages, en suppriment ces 2 lignes le traitement est beaucoup plus rapide et je n’ai plus de crash !
Je ne connais pas les détails sur le but de cet appel, mais ceci semble résoudre mon problème sans perturber le fonctionnement de l’ensemble...

Cdlt
JM

Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 11 sept. 2018, 21:25

jmc a écrit :
11 sept. 2018, 13:26
Bonjour,

Peut etre une piste à investiguer pour mon problème de crash du deamon jMQTT et de latence dans le traitement des message:
Dans jMQTTClass la fonction mosquittoMessage() fait un appel setStatus(‘lastCommunication’,...) suivi de save() pour chaque équipement concerné par le message (qui semble mettre à jour le updateTime de l’equipement). Cet appel introduit un délai imporant dans le traitement des messages, en suppriment ces 2 lignes le traitement est beaucoup plus rapide et je n’ai plus de crash !
Je ne connais pas les détails sur le but de cet appel, mais ceci semble résoudre mon problème sans perturber le fonctionnement de l’ensemble...

Cdlt
JM
Bonjour,
Je vais regarder, ça semble très prometteur.
Pourrais-tu tester de conserver le setStatus et remplacer le save() par save(true) ?
Merci
domotruc
Plugins jMQTT, jElocky
domotruc.com

Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 11 sept. 2018, 23:53

domotruc a écrit :
11 sept. 2018, 21:25
jmc a écrit :
11 sept. 2018, 13:26
Bonjour,

Peut etre une piste à investiguer pour mon problème de crash du deamon jMQTT et de latence dans le traitement des message:
Dans jMQTTClass la fonction mosquittoMessage() fait un appel setStatus(‘lastCommunication’,...) suivi de save() pour chaque équipement concerné par le message (qui semble mettre à jour le updateTime de l’equipement). Cet appel introduit un délai imporant dans le traitement des messages, en suppriment ces 2 lignes le traitement est beaucoup plus rapide et je n’ai plus de crash !
Je ne connais pas les détails sur le but de cet appel, mais ceci semble résoudre mon problème sans perturber le fonctionnement de l’ensemble...

Cdlt
JM
Bonjour,
Je vais regarder, ça semble très prometteur.
Pourrais-tu tester de conserver le setStatus et remplacer le save() par save(true) ?
Merci

Oublies ma demande de test jmc.
Je vais faire quelques essais complémentaires mais je pense que tu as vu juste ;)
Le setStatus(‘lastCommunication’,...) met à jour la donnée intitulée "Date de dernière communication" visible dans la page de configuration avancée de l'équipement. Mais, même en supprimant cette instruction comme tu le proposes, cette valeur reste mise à jour : le core de jeedom s'en occupe sur mise à jour des commandes de l'équipement.

Le save sauve tout l'équipement ce qui ne sert à rien dans le cas de réception de message associé à un équipement existant, et c'est consommateur en charge CPU. Ça a finalement aussi l'inconvénient de mettre à jour la donnée Dernière Activité (ou Dernière mise à jour dans la configuration avancée).

Par contre, jmc, la modif que tu as faite va empêcher de sauver (et donc créer) tout nouvel équipement dans le mode inclusion. Je le changerai dans la correction définitive.

@Vincnet68: si tu peux vérifier que la correction proposée résout ton problème, ce serait super.
domotruc
Plugins jMQTT, jElocky
domotruc.com

vincnet68
Timide
Messages : 21
Inscription : 16 juin 2015, 23:08

Re: Plugin jMQTT

Message par vincnet68 » 12 sept. 2018, 08:28

@domotruc, @jmc,

J'ai effectué la modif suivant (ligne 493):

Code : Tout sélectionner

                //$eqpt->setStatus('lastCommunication', date('Y-m-d H:i:s'));
                $eqpt->save(true);
C'est ma première modif de code dans jeedom ai-je bien fait ?
Je suis passé par l'éditeur jeedom, modifié enregistrer.

Dois-je faire une autre manip ? (rédémarrer le deamon, plugin, jeedom, ...)

Merci

Vincnet68

Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 12 sept. 2018, 12:30

vincnet68 a écrit :
12 sept. 2018, 08:28
J'ai effectué la modif suivant (ligne 493):

Code : Tout sélectionner

                //$eqpt->setStatus('lastCommunication', date('Y-m-d H:i:s'));
                $eqpt->save(true);
C'est ma première modif de code dans jeedom ai-je bien fait ?
Je suis passé par l'éditeur jeedom, modifié enregistrer.

Dois-je faire une autre manip ? (rédémarrer le deamon, plugin, jeedom, ...)

Bonjour Vincnet68,
La procedure de modification est la bonne, la prise en compte est immediate à l'enregistrement, aucune autre manip n'est nécessaire.

Je suis intéressé par ton retour sur la modif que tu as faite à titre informatif (supprime t'elle le délai entre publication du message par mosquito et traitement de ce dernier par jeedom). Mais la modification finale supprimera aussi le save (voir mon message precedent):

Code : Tout sélectionner

                //$eqpt->setStatus('lastCommunication', date('Y-m-d H:i:s'));
                //$eqpt->save(true);
domotruc
Plugins jMQTT, jElocky
domotruc.com

vincnet68
Timide
Messages : 21
Inscription : 16 juin 2015, 23:08

Re: Plugin jMQTT

Message par vincnet68 » 13 sept. 2018, 08:16

domotruc a écrit :
vincnet68 a écrit :
12 sept. 2018, 08:28
J'ai effectué la modif suivant (ligne 493):

Code : Tout sélectionner

                //$eqpt->setStatus('lastCommunication', date('Y-m-d H:i:s'));
                $eqpt->save(true);
C'est ma première modif de code dans jeedom ai-je bien fait ?
Je suis passé par l'éditeur jeedom, modifié enregistrer.

Dois-je faire une autre manip ? (rédémarrer le deamon, plugin, jeedom, ...)

Bonjour Vincnet68,
La procedure de modification est la bonne, la prise en compte est immediate à l'enregistrement, aucune autre manip n'est nécessaire.

Je suis intéressé par ton retour sur la modif que tu as faite à titre informatif (supprime t'elle le délai entre publication du message par mosquito et traitement de ce dernier par jeedom). Mais la modification finale supprimera aussi le save (voir mon message precedent):

Code : Tout sélectionner

                //$eqpt->setStatus('lastCommunication', date('Y-m-d H:i:s'));
                //$eqpt->save(true);
Domotruc,

Il n'y a pas d'amélioration claire avec la modification de la première ligne.
Je vais désactiver la ligne save et je te tiens au courant.

Vincnet68

Envoyé de mon EVA-L09 en utilisant Tapatalk


Dernière édition par vincnet68 le 13 sept. 2018, 08:16, édité 1 fois.

jmc
Timide
Messages : 4
Inscription : 31 août 2018, 14:47

Re: Plugin jMQTT

Message par jmc » 13 sept. 2018, 08:18

Effectivement le mode inclusion ne fonctionne plus après cette modification: le nouvel équipement est créé mais pas sauvegardé à l’arrivée du message et le deamon le plante lors de la création de la commande associée car l’equipe n’existe pas.

J’ai ajouté un $eqpt->save() après la création du nouvel équipement (jMQTT::newEquipement(...)) dans la même fonction tout en conservant les modifs precedentes et tout à l’air ok:
-nouvel équipement en mode inclusion
-nouvelles commandes
-dates de communication mises à jour

Merci
JMC

Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 14 sept. 2018, 06:16

jmc a écrit :
13 sept. 2018, 08:18
Effectivement le mode inclusion ne fonctionne plus après cette modification: le nouvel équipement est créé mais pas sauvegardé à l’arrivée du message et le deamon le plante lors de la création de la commande associée car l’equipe n’existe pas.

J’ai ajouté un $eqpt->save() après la création du nouvel équipement (jMQTT::newEquipement(...)) dans la même fonction tout en conservant les modifs precedentes et tout à l’air ok:
-nouvel équipement en mode inclusion
-nouvelles commandes
-dates de communication mises à jour
Oui, c'est bien l'ajout que j'avais à l'esprit, ça doit effectivement être bon maintenant.
jmc a écrit :
13 sept. 2018, 08:18
Merci
JMC
Merci à toi ;)
domotruc
Plugins jMQTT, jElocky
domotruc.com

vincnet68
Timide
Messages : 21
Inscription : 16 juin 2015, 23:08

Re: Plugin jMQTT

Message par vincnet68 » 15 sept. 2018, 14:21

Salut domotruc et jmc ,

Je confirme qu'il y a du mieux en réactivité en supprimant les 2 lignes :

Code : Tout sélectionner

                //$eqpt->setStatus('lastCommunication', date('Y-m-d H:i:s'));
                //$eqpt->save(true);
Va-t-il y avoir une modification officielle du plugin pour cette "correction" ?
Ou dois-je implémenter la modification de jmc ?

Merci

Vincnet68

Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 15 sept. 2018, 17:39

vincnet68 a écrit :
15 sept. 2018, 14:21
Je confirme qu'il y a du mieux en réactivité en supprimant les 2 lignes :

Code : Tout sélectionner

                //$eqpt->setStatus('lastCommunication', date('Y-m-d H:i:s'));
                //$eqpt->save(true);
Va-t-il y avoir une modification officielle du plugin pour cette "correction" ?
Ou dois-je implémenter la modification de jmc ?
Bonjour Vincnet68,
Merci pour le retour, je vais publier cette correction dans le week-end.
domotruc
Plugins jMQTT, jElocky
domotruc.com

Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 16 sept. 2018, 16:42

Bonjour,
Nouvelle version stable publiée à l'instant qui intègre la correction de jmc (grand merci à lui) : réduit la charge CPU du plugin et corrige les déconnexions intempestives du démon sur rafale de message.
domotruc
Plugins jMQTT, jElocky
domotruc.com

meute
Actif
Messages : 1061
Inscription : 26 août 2017, 11:07
Localisation : Belgique

Re: Plugin jMQTT

Message par meute » 17 sept. 2018, 00:33

Hello,

Depuis le début j'avais mis en évidence un problème de charge cpu étrange. Je crois que vous avez finalement trouvé la source du problème.

Preuve a l'appui, un peu avant 0H13 j'ai fais la mise a jour de jmqtt et il n'y a pas photo ...
Screenshot_20180917-002702_Chrome.jpg
Screenshot_20180917-002702_Chrome.jpg (227.69 Kio) Consulté 153 fois
Merci a vous deux !
Jeedom VM ESXI sur NUC
Ilot I/O Modbus Wago Z-Wave (11 volets,prises,présences) + RFXCom (sondes T°+RH, prises)
Pont Hue et une vingtaine d'ampoules,une flopée de Xiaomi aquara, Harmony Elite
8 Google Home et un PC tactile All-In accroché au mur

Loic74
Timide
Messages : 215
Inscription : 24 oct. 2017, 22:45
Localisation : Haute-Savoie

Re: Plugin jMQTT

Message par Loic74 » 23 sept. 2018, 21:28

Bonjour Domotruc,

Je suis en train de travailler sur des nodes à base d'Arduino qui communiquent avec Jeedom via MQTT.
Après avoir testé la librairie Pubsubclient je suis passé à cette librairie qui semble prendre en charge le QoS ainsi que le mode persistant contrairement à la première.

Ma question: je souhaite être capable de détecter si mes nodes sont ONLINE/OFFLINE, donc avoir un retour de connexion via une variable STATUS comme c'est le cas par défaut dans l'équipement JEEDOM.
Si je comprends bien la doc, en mode inclusion et si mes nodes publient en mode PERSISTANT, ce flag STATUS devrait être créé par défaut?

Ce n'est pas le cas pour le moment, donc je cherche d'où vient le pb.

Merci
Loic
---------------------------------------
Jeedom v3.2.11, RPI3+SSD, VM sur Synology DS716+, Bluetooth, Arduino, ETH-IO32B, MQTT, TTN, LoRa, Service Pack Power Ultimate

Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 24 sept. 2018, 20:25

Loic74 a écrit :
23 sept. 2018, 21:28
Bonjour Domotruc,

Je suis en train de travailler sur des nodes à base d'Arduino qui communiquent avec Jeedom via MQTT.
Après avoir testé la librairie Pubsubclient je suis passé à cette librairie qui semble prendre en charge le QoS ainsi que le mode persistant contrairement à la première.

Ma question: je souhaite être capable de détecter si mes nodes sont ONLINE/OFFLINE, donc avoir un retour de connexion via une variable STATUS comme c'est le cas par défaut dans l'équipement JEEDOM.
Si je comprends bien la doc, en mode inclusion et si mes nodes publient en mode PERSISTANT, ce flag STATUS devrait être créé par défaut?

Bonjour Loic,
Si ton équipement n'existe pas encore, il faut effectivement se mettre en mode inclusion.
Si il existe déjà, il faut cocher Ajout automatique des commandes dans l'équipement.
Loic74 a écrit :
23 sept. 2018, 21:28

Ce n'est pas le cas pour le moment, donc je cherche d'où vient le pb.

Merci
Loic

Pour investiguer, tu peux taper la commande suivante dans un terminal connecté à la machine hébergeant le broker mosquitto:

Code : Tout sélectionner

mosquitto_sub -t "#" -v| xargs -d$'\n' -L1 bash -c 'date "+%Y-%m-%d %T.%3N $0"'
Si ton node Arduino fait bien ce que tu veux, le message status devrait s'afficher immédiatement.

Pour faire ce que tu souhaites, il faudra aussi que tu définisses le message testament pour positionner ton status à offline via l'API setWill.
domotruc
Plugins jMQTT, jElocky
domotruc.com

Loic74
Timide
Messages : 215
Inscription : 24 oct. 2017, 22:45
Localisation : Haute-Savoie

Re: Plugin jMQTT

Message par Loic74 » 24 sept. 2018, 21:51

Merci Domotruc,

Bon, finalement j'ai l'impression que mon besoin n'a rien à voir avec le mode persistant/clean session, je ne sais pas pourquoi j'étais parti la dessus.

En fait il faut simplement que mon node publie à intervalle régulier le message "online" sur le topic "XXX/status" et mettre le LastWill à "offline" sur le même topic, c'est cela?
---------------------------------------
Jeedom v3.2.11, RPI3+SSD, VM sur Synology DS716+, Bluetooth, Arduino, ETH-IO32B, MQTT, TTN, LoRa, Service Pack Power Ultimate

Avatar de l’utilisateur
domotruc
Timide
Messages : 118
Inscription : 23 févr. 2018, 08:35
Contact :

Re: Plugin jMQTT

Message par domotruc » 25 sept. 2018, 20:30

Bonjour Loïc,
Ta première approche, basée sur un message persistant est bien la bonne, en rajoutant le LastWill, également persistant. La vérification de la communication entre le nœud et le broker est automatiquement gérée par le protocole grâce au keepAlive. Dans le cas de ta librairie son timeout est 10s par défaut, ce qui signifie que si il n'y a pas de messages échangés pendant 10s, le nœud envoi un PINGREQ au broker pour lui signifier qu'il est en vie (la librairie le gère automatiquement).

Concrètement:
  • Avant de se connecter au broker, spécifier le LastWill, par exemple avec ta librairie:

Code : Tout sélectionner

setWill("nodexxx/status", "offline", true, 1);
  • Se connecter au broker, et publier le status:

Code : Tout sélectionner

connect(...);
publish("nodexxx/status", "online", true, 1);
Il faut bien sûr ensuite la boucle infinie sur le loop() pour que la communication se fasse.
Dernière édition par domotruc le 26 sept. 2018, 06:03, édité 1 fois.
domotruc
Plugins jMQTT, jElocky
domotruc.com

Répondre

Revenir vers « [Plugin Tiers] MQTT »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité