Comment utiliser jMQTT avec TTN (IoT)

Tags: #<Tag:0x00007fa7baa69c30> #<Tag:0x00007fa7baa695c8> #<Tag:0x00007fa7baa69230>

Bonjour à tous,

(J’ai modifié le titre de mon message, car la solution s’oriente vers jMQTT et le titre devient plus pertinent ainsi)

Je développe une solution IoT avec LoRaWAN. Le projet consiste à déployer des stations qui va mesurer la température des bourgeons qui émergent, lors du gel de printemps, afin de les protéger des dégats causés par le gel tardif. https://eco-sensors.ch/program/gel-par-rayonnement/

Les mesures sont sauvées dans une base de données MySQL. Quand une température déscend au dessous d’une température, les vignerons doivent être alerté aussi tôt.

C’est sur ce point que je souhaiterait intégré Jeedom pour deux raisons:

  1. Quand une alerte est signalée, j’aimerais que les lumières chez moi s’allume (je pourrais prévoir une boite Jeedom pour les vigneron
  2. Mais surtout j’aimerais que SMS soit envoyer chez les vignerons ou un message Telegramme.

Actuellement, chez moi, j’ai une boite Jeedom qui gère le chauffage. Aussi, j’ai déjà installé Telegram pour recevoir des alertes.

J’aimerais bien donc travailler sur ma boites Jeedom pour qu’elle puisse, par exemple, consulter la base de données, plus précisément la table Alarmes de MySQL, pour envoyer un message Telegram, ou un SMS, si une alarme est (ou est encore) active.

Mon problème est que je n’ai aucune idée comment je pourrais faire pour que 1) ma boite Jeedom interragit avec ma base de donnée MySQL qui n’est pas locale mais je mon hébergeur, envoit un message avec Telegram, ou par SMS, ou encore mieux (mais je suis exigeant :grinning:, un message vocale). Mais consacrons-nous d’abord avec Telegram :smiley: :smiley:

Ma première idée serait de faire une page PHP (sur mon Raspberry/Jeedom) qui interrogerait ma base de donnée MySQL, ou avec Python, peut-etre.

Je me demandais donc si vous auriez une solution qui pourrait répondre à ma demande.

  1. Comment Jeedom pourrait interragir avec une base de donnée de mon héberge aprur
  2. Comment et après les Requeste MySQL, Jeedom pourrait traiter ces données pour soit envoyer un message Telegram et faire clignotter la lumière de ma chambre.

Je précise encore que mon Jeedom, gère les chauffages, mais aussi la lumière de ma salle de bain. Dans ma chambre j’ai aussi un Termosta Fibaro et une lampe Aeotec LED Bulb 6 Multi-Color que je peux facilement contrôler avec un scénario. Mais la grosse problématique est les requete MySQL pour commander mes devise Jeedom.

Quels seraient les conseils et pistes que vous pourriez me donner

J’ai à ma disposition un Z-Uno que je n’ai encore jamais utilisé. Il faudrait donc que je prenne la main. J’ai aussi deux-trois Raspberry qui pourrait peut etre faire office de devise Jeedom, faire des requête sur ma base de données et envoyer des messages à my boite Jeedom?

Milles mercis

Tu peux un script avec un cron qui interroge y’a db en effet.
Tu n’aura pas les remontées immédiatement mais au moment où tu va faire le Check. Donc qql minutes de décalages suivant ton cron et ce que tu juge acceptable.
Il faut aussi que ta db accepte des connections depuis un autre domaine. A configurer donc si ce n’est pas le cas.

Ensuite tu fait un ou des virtuels avec tes commandes info. Et ton check db va updater en php les valeurs des virtuels. Celles ci pourront alors être utilisées en déclencheurs de scénario et tu fait tout ce que tu veut.

Si tu a la main, je trouve plus efficient de faire l’inverse.
Tu peut changer les valeurs des infos par une requête http. Donc sur le script qui update la db tu peut modifier directement le virtuel de Jeedom. Suivant le nbr de mise à jour de la db tu peut mettre en place un system de queueing pour les requêtes http.

Donc pas de cron qui tourne la plupart du temps pour rien et remontee immediate des infos et déclenchement de tes scénarios.

Des deux côtés il va te falloir scripter. Mais au moins l’update db et Jeedom seront au même endroit, je trouve ça mieux à tout point de vue.

Salut, merci pour ta réponse.

D’accord maiss ça, c’est la question, comment?
Comment un script PHP ou une requete HTML peut modifier l’état d’un virtuel?
Comme PHP (ou HTML) peut interagir avec Jeedom?

Désolé téléphone et tard mais t’inquiète pas pour ça c’est assez simple :smirk:
Des liens exemples et tutos vont pas tarder je pense.

Par exemple https://doc.jeedom.com/fr_FR/core/4.0/api_http

Y’a l’api json/rpc aussi

Et les fonctions du core pour updater des commandes en php depuis script ou scénario.

D’accord, merci, je me pencher la-dessus. Ca l’air très intéressant!! Je vais regardé tout cela au plus vite

ou alors tu utilises mqtt depuis ta plate-forme lora (cloud ou local) et tu gères les message dans Jeedom avec le plug-in jmqtt.
je fais cela de mon côté pour mesurer le niveau ma cuve d’eau de pluie.

TTN ou Chirpstack

C’est aussi intéressant ceci, mais pourrais-tu me donner plus de précision concernat LoRa (TTN).

mqtt depuis ta plate-forme lora (cloud ou local)

J’ai du mal à voir comment tu as fais cela, pourrais-tu m’apporter plus de précision. J’ai un compte chez TTN et je suis allé voir dans ‹ Console -> Application -> Mon application -> Integration › et je ne vois pas un module MQTT. D’autant plus que j’utilise déjà le module HTML pour envoyer mes données sur site PHP de mon hébergeur, qui va les sauver dans une base de donnée MySQL. Donc je ne vois pas à quel niveau je devrais avoir mon broker qui gardera les messages que mon jMQTT de jeedom va aller lire?

Au passage, y-a-t-il une grande différence entre jMQTT et MQTT dans les plugin de Jeedom?

@patrice_payen, que penses-tu ? Je pourrais installer mosquito sur un autre Raspberry dédié à mosquito https://projetsdiy.fr/mosquitto-broker-mqtt-raspberry-pi/

Quand un message est envoyé de mes stations à TTN, j’utilise l’intégration HTML qui va envoyer l’information sur une page PHP de mon hébergement. Cette page traite les données et les sauvent dans une base de donnée.

L’idée serait au niveau de cette page PHP, intégrer MQTT comme ceci. Ce script PHP pourrais envoyer des message MQTT, en cas d’alerte uniquement, à mon broker Mosquito, qui est installé sur mon Raspberry.

Puis dans ma boite Jeedom, j’installe soit le plugin jMQTT ou le plugin MQTT (en fait quelle est la différence entre les deux?) qui va questionner mon broker, et une alarm est " en attente" sur mon boker, Jeedom fait un truc comme

  • Envoyer un message Telegram
  • faire flasher une lampe
  • alumer un girophare :grinning:

Est-ce que l’approche vous semble fonctionnelle au niveau de Jeedom et des plugin jMQTT et MQTT?

Pas besoin de passer par une intégration html.
Il faut configurer TTN pour communiquer avec ton mosquitto et ensuite récupérer les info avec jmqtt.

Je viens de regarder sur ma configuration. TTN a déjà un server Mosquitto. Il suffit de configurer jmqtt.
image

Ouha, là je suis super intéressé. Le problème que je vais rencontrer, est que mes stations n’envoient pas que l’alarm, mais les différentes mesures. Donc si je n’utilise pas l’integration HTML, je devrais refaire, ou remplacer mon script PHP qui collecte et traite mes données.

Mais je suis très intéressé à ta solution. SI tu n’utilise pas l’integration HTML, tu utilise le quel alors? Je ne vois pas un qui parle de Mosquito (je dois encore chercher). Je vois bien l’ID de mosquito

eu.thethings.network

mais j’ai encore du mal à voir comment je vais intérgrer ceci à mon application existante.

Je vais essayé ce soir de configurer jMQTT, comme tu le montre, mais est-ce que je peux, avec jMQTT, filtrer une mesure?

Par exemple, mes stations LoRaWAN envoient principalement des mesures de température, le niveau de la batteries, la vitesse du vent, la radiation solaire, et si une température est trop basse, Jeedom/jMQTT doit pouvoir le savoir.

Par exemple, là à froid, jMQTT pourrait analyser les mesures de température, et si une est trop basse, il active un devise Jeedom.

Je vais essayé ceci ce soir, mais je me demande toujours au niveau de TTN, s’il faut ajouter une intégration. Je vais chercher ceci ce soir, car je suis au boulot, maintenant.

Merci beaucoup pour tes clarifications!!!
Belle journée

Bonjour,
Je m’excuse de revenir. Je comprends de mieux en mieux.
J’ai installé le plugin jMQTT qui va installer Mosquito sur le boite jeedom.

Dans Plugin -> Protocole Domotique -> jMQTT, j’ai créé un borker et j’ai donné un nom ‹ SmartBuds ›

Puis dans l’onlfet ‹ Broker › je retrouve ta copie d’écran. Je n’arrive pas à trouver ce que doit remplir et la correspondance avec mon application dans TTN.

Identifiant de ma connexion, est-ce que je dois rentrer l’Application ID’ de mon application de TTN?
Et sous mot de passe de connexion, est-ce que ca correspont à l’‹ Access key › de mon application?

Dans santé, je vois

Le broker est OFFLINE

Alors je pense que mes suggestions sont fausses car j’ai essayé et jMQTT n’arrive pas à se connecter
Compte de connecxion, a quoi correspond-il?

J’aimerais encore revenir sur une autre question, dois-je encore faire un truc au préalable, depuis ma console? Ne faut-il pas définir le topic auquel les devises doivent d’abonner?

Merciii

En fait ça semble se connecter avec ‹ Application ID › et ‹ access key › mais je ne suis pas trop convaincu. Apparement sir mon Application ID est toto, le topic est sujet

Il faudrair que je créé un équipement jMQTT qui s’abonne à buds. Si ceci est juste, est-ce que cet équipement doit correspondre à un devise enregistré dans TTN?

lorsque tu vas lancer le mode inclusion, jmqtt va créer des devices en fonction de ce que TTN reçoit. Le nom sera une combinaison de plusieurs info décrivant le sujet mqtt. Le nom est changeable. tu peux ensuite sélectionner ce que tu veux garder pour affichage.

image

voilà un exemple avec un device dans chirpstack.

D’accors, mais ca répond pas à ma question
Screenshot 2020-12-01 at 21.11.26
A qui ‹ identification de connection › doit correspondre dans l’application de la console TTN?
Idem pour ‹ Compte de connexion › et ‹ Mot de passe de connexion ›.

C’est me met encore plus en confusion est quand tu parle de « mode intrusion »
Pourquoi je devrais mettre ma boite Jeedom en mode inclusion, si je ne vais pas inclure des appareils domotique (a l’exception peut-être de virtuel), je vais recevoir des données de TNN via Mosquito?

Dois-je aussi créer des équipements comme je l’ai fais, qui doivent correspondre à des devises que l’on trouce dans l’application TTN?
Screenshot 2020-12-01 at 21.19.32

je parlais du mode inclusion.
il faut faire une recherche TTN et MQTT, tout est décrit.

Si je me souviens bien, il faut utiliser le nom de l’application comme utilisateur et access key pour le mot de passe

Hello
J’ai réussi à le faire
Screenshot 2020-12-11 at 23.18.06
et quand une station LoRaWAN envoit des données, il me crée une action par station
Screenshot 2020-12-11 at 23.18.34
On peut aussi voir la trame LoRaWAN (que je n’ai pas mis en entier)

J’aurais voulu savoir comment tu fais pour récupérer le playload

Par exemple, mon payload est

« payload_fields »:{« b1 »:« 32 »,« b4 »:« 35 »,« ba »:« 382 »

et je dois récupérer les valeurs de b1, b2, b3 et b4 , si elle existe

J’ai essayé de créer un scénario avec les déclancheur suivant (soit toutes mes sations actives
Screenshot 2020-12-11 at 23.25.26

Puis après, j’ai essayé sans vraiment etre sûre de partir dans la bonne direction, de créer un bloque Si de la manière suivante
Screenshot 2020-12-11 at 23.28.31

C’est loin de ce que je veux faire au final, car si la valeur de b1 est en dessous de X, il doit envoyer un message. Mais déjà rien que cette condition retourne une erreur

Expression non valide [#255# matches « /b1/ » ] trouvée dans le scénario : [SmartBuds][MonitorBuds][sc_alarm], résultat :

Je me demandais alors comment tu rcéupérais les données de la trame?