Export massif des commandes Jeedom en MQTT

Bonjour,

J’aimerais bidouiller des scénarios en parallèle de Jeedom. Pour cela, je voudrais exporter de façon massive toutes les infos Jeedom en MQTT sous un topic du style objet/equipement/commande sans devoir créer les commandes graphiquement une par une comme on le fait dans les plugins jMQTT/MQTT. Vu le nombre de commandes, il s’agit d’être efficace.

Quel code peut-on faire ?

Salut,

Je suis intéressé aussi. Si rien trouvé je ferais probablement un plugin. Tu as trouvé quelque-chose ?

J’avais oublié ce post ! Une partie de la réponse en utilisant l’URL de push globale

Réglages/Système/Configuration/Equipements/Push

Mon idée était de faire Jeedom (Push global) → Node-Red → MQTT

Et là pour récupérer les infos sous Node-Red (partie que je n’avais pas réussi)

Ah oui, c’est pas très user-friendly pour le coup … Puis t’est obligé de te taper tout un binding, non ?

Je voyais dans l’idée où une commande [a][b][c] se retrouve dans /jeedom/a/b/c (et /jeedom/a/b/c/set pour les commandes)

J’espère que non !

Dans le tuto il semble que si :wink:

Tout dépend de comment tu exportes les valeurs dans le Push Global

Avec seulement les IDs des commandes, oui, il faut faire le mapping derrière
http://IP_NODERED:1880/jeedom?value=#value#&id=#cmd_id#

Dans la doc

Push URL : Permet de rajouter une URL à appeler en cas de mise à jour de la commande. Vous pouvez utiliser les tags suivant : #value# pour la valeur de la commande, #cmd_name# pour le nom de la commande, #cmd_id# pour l’identifiant unique de la commande, #humanname# pour le nom complet de la commande (ex : #[Salle de bain][Hydrometrie][Humidité]#), #eq_name# pour le nom de l’équipement.

Ici, il manque le nom de l’objet (je ne connais pas la syntaxe)
http://IP_NODERED:1880/jeedom?value=#value#&cmd=#cmd_name#&eq=#eq_name#

Le plus simple reste d’envoyer le nom « humain » complet "[object][equipment][command]" avec
http://IP_NODERED:1880/jeedom?value=#value#&name=#humanname#

Sous Node-Red, le flow est simple
image

Dans le nœud « http in »
image

Dans la fonction, j’ai fait un truc vite fait pour avoir le topic sous la forme Jeedom/object/equipment/command
image

Résultat dans MQTT Explorer, c’est beau !

En revanche, j’ai des soucis de timeout assez rapidement car je dois envoyer trop de commandes

Des centaines d’erreurs dans la messagerie :disappointed_relieved:

[2021-02-03 21:32:52][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=valid%3B21%3A32%3A43%3B03.02.2021%3B11.000&name=%5BeBus%5D%5BVaillant+ecoTEC+Pro%5D%5BDateTime%5D commande : [eBus][Vaillant ecoTEC Pro][DateTime] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=valid%3B21%3A32%3A43%3B03.02.2021%3B11.000&name=%5BeBus%5D%5BVaillant+ecoTEC+Pro%5D%5BDateTime%5D cURL error : Operation timed out after 2001 milliseconds with 0 bytes received
[2021-02-03 21:32:52][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=0&name=%5BCapteur%5D%5BOregon+THGN122NX+Ch2%5D%5Bbatterybinary%5D commande : [Capteur][Oregon THGN122NX Ch2][batterybinary] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=0&name=%5BCapteur%5D%5BOregon+THGN122NX+Ch2%5D%5Bbatterybinary%5D cURL error : Operation timed out after 2001 milliseconds with 0 bytes received
[2021-02-03 21:32:54][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=18&name=%5BPasserelle%5D%5BGSM%5D%5BSignal%5D commande : [Passerelle][GSM][Signal] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=18&name=%5BPasserelle%5D%5BGSM%5D%5BSignal%5D cURL error : Operation timed out after 2001 milliseconds with 0 bytes received
[2021-02-03 21:32:59][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=2&name=%5BRue%5D%5BCompteur+Elec%5D%5BIINST%5D commande : [Rue][Compteur Elec][IINST] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=2&name=%5BRue%5D%5BCompteur+Elec%5D%5BIINST%5D cURL error : Operation timed out after 2000 milliseconds with 0 bytes received
[2021-02-03 21:32:59][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=35.0%3B35.0%3B11.000%3B-%3B38.0%3Boff&name=%5BeBus%5D%5BVaillant+ecoTEC+Pro%5D%5BStatus01%5D commande : [eBus][Vaillant ecoTEC Pro][Status01] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=35.0%3B35.0%3B11.000%3B-%3B38.0%3Boff&name=%5BeBus%5D%5BVaillant+ecoTEC+Pro%5D%5BStatus01%5D cURL error : Operation timed out after 2001 milliseconds with 0 bytes received
[2021-02-03 21:32:59][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=9.8&name=%5BCapteur%5D%5BOregon+THGN122NX+Ch2%5D%5Btemperature%5D commande : [Capteur][Oregon THGN122NX Ch2][temperature] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=9.8&name=%5BCapteur%5D%5BOregon+THGN122NX+Ch2%5D%5Btemperature%5D cURL error : Operation timed out after 2000 milliseconds with 0 bytes received
[2021-02-03 21:33:02][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=0.2&name=%5BCuisine%5D%5BRefrigerateur+Congelateur%5D%5BPuissance%5D commande : [Cuisine][Refrigerateur Congelateur][Puissance] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=0.2&name=%5BCuisine%5D%5BRefrigerateur+Congelateur%5D%5BPuissance%5D cURL error : Operation timed out after 2001 milliseconds with 0 bytes received
[2021-02-03 21:33:05][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=19&name=%5BPasserelle%5D%5BGSM%5D%5BSignal%5D commande : [Passerelle][GSM][Signal] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=19&name=%5BPasserelle%5D%5BGSM%5D%5BSignal%5D cURL error : Operation timed out after 2000 milliseconds with 0 bytes received
[2021-02-03 21:33:06][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=360&name=%5BMaison%5D%5BConso+Electricite+DPE%5D%5BInstantan%C3%A9e%5D commande : [Maison][Conso Electricite DPE][Instantanée] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=360&name=%5BMaison%5D%5BConso+Electricite+DPE%5D%5BInstantan%C3%A9e%5D cURL error : Operation timed out after 2001 milliseconds with 0 bytes received
[2021-02-03 21:33:06][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=734940&name=%5BeBus%5D%5BGlobal%5D%5Buptime%5D commande : [eBus][Global][uptime] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=734940&name=%5BeBus%5D%5BGlobal%5D%5Buptime%5D cURL error : Operation timed out after 2000 milliseconds with 0 bytes received
[2021-02-03 21:33:06][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=-64&name=%5BCapteur%5D%5BOregon+THGN122NX+Ch2%5D%5BdBm%5D commande : [Capteur][Oregon THGN122NX Ch2][dBm] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=-64&name=%5BCapteur%5D%5BOregon+THGN122NX+Ch2%5D%5BdBm%5D cURL error : Operation timed out after 2001 milliseconds with 0 bytes received
[2021-02-03 21:33:09][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=20.9293&name=%5BBureau%5D%5BRegulateur%5D%5BT%C2%B0+Mesuree+Filtree%5D commande : [Bureau][Regulateur][T° Mesuree Filtree] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=20.9293&name=%5BBureau%5D%5BRegulateur%5D%5BT%C2%B0+Mesuree+Filtree%5D cURL error : Operation timed out after 2000 milliseconds with 0 bytes received
[2021-02-03 21:33:09][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=0.2&name=%5BActionneur%5D%5BSmartplug+ZMNYDx+Frigo%5D%5BPuissance%5D commande : [Actionneur][Smartplug ZMNYDx Frigo][Puissance] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=0.2&name=%5BActionneur%5D%5BSmartplug+ZMNYDx+Frigo%5D%5BPuissance%5D cURL error : Operation timed out after 2001 milliseconds with 0 bytes received
[2021-02-03 21:33:10][ERROR] : Erreur push sur : http://RPi4b-Jeedom:1880/jeedom?value=60.2&name=%5BGarage%5D%5BBaie+Informatique%5D%5BPuissance%5D commande : [Garage][Baie Informatique][Puissance] => Echec de la requête HTTP : http://RPi4b-Jeedom:1880/jeedom?value=60.2&name=%5BGarage%5D%5BBaie+Informatique%5D%5BPuissance%5D cURL error : Operation timed out after 2001 milliseconds with 0 bytes received

Du coup, je suis obligé d’arrêter ce push quelques minutes plus tard.

Il faudrait pouvoir filtrer avant d’envoyer mais ce n’est plus un push global !

Une alternative serait de faire un Jeedom Lite avec seulement les modules/protocoles…

EDIT: Je viens de faire un essai un Jeedom quasi vide, je n’ai même pas branché les dongles USB, donc il n’a pas grand chose à envoyer à part les infos des plugins Monitoring et Network. En bien, il n’est pas capable d’envoyer les infos sans avoir de problème de timout. Bref, ce n’est pas exploitable cette solution de push global ou alors j’ai raté un truc !

Ou bien un démon qui stack en 1 seul appel par seconde

Mais si j’ai un délai de 1 seconde sur les capteurs, ça ne va pas le faire du tout pour l’éclairage automatique !

dans ce cas, tu utilisera nodered :wink:

j’ai pas mal avancé, j’ai l’envoi de tout jeedom vers mqtt en temps reel ou cron (au choix) qui fonctionne. ne me reste plus qu’à coder la reception !

je pense publier le plugin gratuitement dans les jours qui viennent.

5 « J'aime »

Hello,
Ayant découvert node red ce matin, me suis lancé dans l’export massif vers mqtt via NR, pb de timeout aussi, pourtant le traffic /s c’est pas extraordinaire non plus … il serait où plz le potentiel maillon faible dans l’histoire ?, coté ressource ça vivote pourtant tranquille … des notions de buffers qq part sur mosquitto ? ou c’est jeedom ? bon je continue à gratter ça

Il n’y a pas de MQTT dans le Push Global de Jeedom, c’est du HTTP ! C’est Node-Red qui effectue la conversion HTTP vers MQTT. Donc pas de souci avec Mosquitto. Ça coince dans le transfert HTTP. J’avais aussi testé sur un NUC i3 avec un Jeedom Lite (peu de commandes) : toujours le problème de timeout.

@fensoft

Tu as sorti un plugin depuis ? Si oui, il s’appelle comment ?

ouais le curl php coté jeedom, je tourne autour de lui là

@fensoft avais-tu publié un plugin ?

non désolé. mais depuis quelques jours je suis en train de migrer vers HA et j’imagine qu’à terme j’aurais besoin de ça pour les quelques trucs que HA ne sait pas faire, je reviendrais ici pour publier ça :wink:

Depuis quelques jours, je suis en train de migrer les scénarios vers Node-Red. :wink: J’adore le côté « scénarios en masse » de Node-Red. Maintenant qu’il y a l’option Publication auto d’une commande Info avec le plugin JMQTT, c’est beaucoup plus simple. Merci @Domochip pour cette super option. Avant, je devais faire une commande action MQTT pour chaque Info à envoyer, puis créer des scénarios avec les infos à exporter comme déclencheur, puis exécuter dans les scénarios les action MQTT qui exportent ces infos.

Le top, ce serait dans le core au niveau de la configuration de la commande avec juste une case à cocher et le topic à renseigner pour exporter en MQTT. Ou plus simple pour Jeedom revenir à un Push Partiel où on coche ce qui nous intéresse.

Hello, l’auto pub n’a pas été testé avec plus de 100 commandes en publication automatique, si tu en as plus n’hésite pas à nous faire un retour, dans tous les cas n’hésite pas :wink:

C’est bon, j’exporte juste un peu moins de 100 commandes. Mais, je vais certainement en rajouter. :wink:

Comment le plugin JMQTT gère-t-il la gestion de la répétition des commandes ?
En effet, j’ai voulu exporter les données du plugin teleinfo, les données sont plutôt publiées à chaque changement de valeur même si j’ai coché l’option « Toujours répéter » dans la config de la commande teleinfo.

Normalement on suit le paramètre de répétition configuré dans chaque commande.

C’est un des derniers fix présent dans la stable du 2022-01-31 : « Prise en compte de la logique de répetition des infos »