Antenne Bluetooth avec un ESP32, Open MQTT Gateway et jMQTT

Bonjour à tous,

Suite à une discussion précédante, je vous propose ce tutoriel afin de créer une antenne Bluetooth à moindre frais avec un ESP32 et l’intégrer dans Jeedom avec jMQTT.

Il n’y a que des avantages à utiliser un ESP32 pour récupérer les informations en provenance de Beacon ou devices Bluetooth : c’est très fiable, plutôt simple, ça ne consomme presque rien, ne prends pas de place et ne coute presque rien, si on compare avec une antenne sur un Raspberry PI.

Nous chargerons dans l’ESP l’excellent « Open MQTT Gateway » (qui sera maintenant abrégé OMG pour 2 raisons évidentes que je vous laisse trouver par vous même).
OMG supporte un nombre important d’équipements, l’équipe de devs est très réactive et le développeur principal est un français :rooster:

Si vous avez des lacunes concernant le MQTT en règle générale allez voir ici ou , et si ce n’est toujours pas clair, dites le, je ferais un tuto de remise à niveau sur MQTT. :wink:


Alors, avant de commencer, voici le schéma de principe de ce que je vais vous expliquer dans ce tuto :


Le but ultime étant de configurer un équipement dans jMQTT (à droite), pour qu’il reçoive les informations de temperature et d’humidité, en provenance d’un capteur Xiaomi Mijia (à gauche).
Pour arriver à ce résultat, nous allons :


On a besoin de quoi ?

  • Un ordinateur avec un port USB, un navigateur et Internet,
  • Eventuellement un telephone avec du wifi (pour faire la config initiale de l’ESP),
  • Le nom du réseau (et son mot de passe) du wifi de votre routeur,
  • Un Jeedom qui tourne (vous ne seriez pas probablement là sinon),
  • Et évidement au moins 1 ESP32. Voici des liens Amazon (lot de 1/3/5) ou Aliexpress (lot de 5). Je vous recommande d’en prendre au moins 2 pour avoir au moins un ESP de test/spare en plus de l’ESP de prod, c’est pas pour les ~10€ que ça coute.
    Attention :
    • Il FAUT un ESP32, pas un ESP8266, ces derniers ils ne font pas de Bluetooth. On reconnait un ESP32 (par ce que c’est marqué dessus) et au nombre important de broches :
    • Certaines copies d’ESP32 circulent avec des régulateurs de sous-dimensionnés (4B2K) :

      Les liens ci-dessus tiennent compte de vos retours (et je vous en remercie).

Avec ça on a tout, il n’y a plus qu’à faire la config ! Comptez maintenant entre 30 minutes et 3 heures de votre temps, selon ce que vous avez déjà installé et vos connaissances.

Prenez le temps de lire un première fois toute le tuto avant de vous lancer dedans, ça vous fera probablement gagner du temps et vous évitera des problèmes.


1 Installation de jMQTT

→ Passez directement à l’étape 3 si vous utilisez déjà jMQTT et que vous connaissez l’adresse et le port de votre Broker.

  • Rendez-vous dans le menu « Plugins> Gestion des plugins » de Jeedom,
  • Allez sur le Market,
  • Recherchez le plugin « jMQTT » par domochip,
  • Installez la version stable,
  • Rendez-vous sur la page de configuration du plugin pour la suite.

2 Configuration du Broker dans jMQTT

  • Sur la page de configuration du plugin, activez le plugin,

→ Si vous utilisez déjà le plugin « MQTT » OU le plugin « MQTT Manager » OU que vous avez déjà un Broker dont vous connaissez, Alors décochez la case « Installer Mosquitto localement ».

  • Installez immédiatement les dépendances, si elle ne se sont pas déjà lancées,
  • Attendez quelles sont installées et que le Démon soit OK,

→ Si vous avez coché « Installer Mosquitto localement », Alors vous pouvez passer à l’étape 3, jMQTT a créé automagiquement un Broker appelé « local » pour vous.

  • Passez dans la page principale de jMQTT via « Plugin> Protocole domotique> jMQTT »,
  • Cliquez sur « Ajouter un broker »,
  • Saisissez « local » comme nom pour le Broker (ou le nom que vous voulez),
  • Activez l’équipement et passez dans l’onglet « Broker » sans sauvegarder,
  • Renseignez « jMQTT » comme « Identifiant/ClientId » pour ne pas interférer avec les autres topics,

→ Si votre Broker n’est pas local, Alors renseignez « IP/Hostname du Broker » et « Port du Broker »,

  • Sauvegardez l’équipement, la configuration initiale de jMQTT est terminée.

3 Installation d’OMG sur l’ESP

Enfin des choses intéressantes !

→ Si aucun « CP210… » n’apparait dans le popup qui s’est ouvert, Alors téléchargez le driver CP210x pour Windows, installez le, déconnectez l’ESP de l’ordinateur et recommencez au début de l’étape 3.

  • Sélectionnez le port série de l’ESP (« USB to UART Bridge Controller ») et cliquez sur Connexion,
  • L’installation passe par plusieurs étapes (Initializing, Erasing device, Writing progress…) :
  • Le message « All done! » est le signe que tout s’est bien passé.

→ Si vous voyez bien votre ESP avec votre téléphone dans les 3 mins, Alors passez à l’étape 4.

  • Si vous rencontrez des erreurs lors de la détection de l’ESP par le PC :
    Essayez de redémarrer le PC, de changer de port USB, de câble ou de PC.

  • Si vous rencontrez des problèmes lors de l’effacement ou de l’envoi d’OMG dans l’ESP :
    Essayez la seconde méthode d’installation d’OMG, avec le Flash Download Tools officiel ou la version 3.8.5 dans ce zip dans le rep dist/Espressif_flash_download_tool_v3.8.5/.

4 Configuration de l’ESP32

Les explications sur la page Wifi and MQTT configuration sont assez claires, mais voici la suite :

  • Connectez vous avec votre téléphone au réseau « OpenMQTTGateway_ESP32_BLE » avec le mot de passe « your_password » ou utilisez ce QR-code :
    Screenshot_20220713-175813_Settings
  • Ouvrez un navigateur sur « http://192.168.4.1 » :
  • Cliquez sur « Configure Wifi », sélectionnez le réseau sur lequel doit se connecter l’ESP et entrez le mot de passe de ce réseau Wifi :
    image
  • Mettez l’IP de votre Broker dans le champ « mqtt server » et le port dans « mqtt port » :
    image

→ Si vous avez coché « Installer Mosquitto localement » dans jMQTT OU que vous utilisez déjà le plugin « MQTT » OU le plugin « MQTT Manager », Alors l’IP du Broker est celle de Jeedom et le port 1883 (à moins que vous ne les ayez modifié, dans ce cas, vous devriez les connaitre).

  • Ne mettez rien dans « mqtt user », « mqtt pass », « mqtt broker cert » et ne cochez pas « mqtt secure », à moins que vous sachiez ce que vous ne faites,
  • Je vous recommande de mettre bt/ dans le champ « mqtt base topic » et un nom explicite dans « gateway name » (ici OMG_tuto mais ça pourrait être Entree, Atelier, Sejour…), afin de facilement identifier les messages en Bluetooth remontés par cet ESP dans jMQTT plus tard.
    Dans le cas de ce tuto, nous retrouverons donc les messages de cet ESP dans bt/OMG_tuto/,
  • Sauvegardez en cliquant sur « Save » et si tout se passe bien, le réseau Wifi « OpenMQTTGateway_ESP32_BLE » disparait et le téléphone se déconnecte de l’ESP.

5 Creation de l’équipement correspondant à l’ESP dans jMQTT

Cette étape à pour but de créer un équipement dans jMQTT représentant l’ESP lui-même, pas encore les équipements qu’il verra en Bluetooth. Ce n’est pas à nécessaire, mais c’est une bonne pratique.

  • Allez sur la page du plugin jMQTT via « Plugin> Protocole domotique> jMQTT »,
  • Cliquez sur « Ajouter un équipement » sur le Broker créé à l’étape 2 (ou existant) :
    image
  • Donnez-lui comme nom « gateway name » configurée à l’étape 4 (pour moi OMG_tuto),
  • Dans « Inscrit au Topic », mettez le topic de base de l’EST, suivi de la « gateway name », suivi de slash dièse (pour moi bt/OMG_tuto/#). # agit comme un joker, cela permettra de recevoir tous les messages commençant par bt/OMG_tuto/,
  • Cochez la case « Ajout automatique des commandes » cochée et les autres valeurs par défaut,
  • Activez l’équipement et sauvegardez :
  • Redémarrez l’ESP, rapidement des commandes doivent commencer à apparaitre :
    image
  • Laissez tournez 5 minutes, allez fumer un café, vous l’avez bien mérité,
  • Décochez la case « Ajout automatique des commandes » et sauvegardez,
  • Allez dans l’onglet Commandes, un certain nombre de commandes info ont du apparaitre :

Création d’une commande permettant de savoir si l’ESP est en vie :

  • Celle qui nous intéresse particulièrement est « LWT », passez la en commande info binaire, activez « Historisez », désactivez « Afficher » et sauvegardez :
  • Dans les propriétés avancées de la commande, onglet Configuration, définissez la « Formule de calcul » #value# == "online", sauvegardez :
    image
  • Débranchez électriquement l’ESP, la commande passe à 0au bout d’une dizaine de secondes.
    Bravo vous avez une commande qui permets de savoir si votre ESP est en vie !

Création de commandes info « uptime », « freemem », « freestack » et « rssi » :

  • Parmi les commandes découvertes, il doit aussi y en avoir « SYStoMQTT » :
  • Passez en mode JSON, il y a différentes sous-commandes intéressantes :

    Si vous le souhaitez, vous pouvez créer « uptime », « freemem », « freestack » et « rssi ».

Création d’une commandes action pour redémarrer l’ESP :

  • OMG dispose d’un certain nombre de commandes executables directement en MQTT.
  • Créez une commandes action pour redémarrer l’ESP :

    (topic : bt/OMG_tuto/commands/MQTTtoSYS/config ; payload : {"cmd":"restart"})
  • Appuyez sur le bouton « Tester » de la commande,
  • Constatez au bout de quelques instants que la commande « uptime » est repartie à 0.

6 Création de l’équipement pour le capteur « Xiaomi Mi Jia »

« Ah, enfin la partie intéressante ? »
« Ce n’est pas la destination qui compte, mais le chemin ! »

Création dans jMQTT d’un équipement Bluetooth inconnu ou non-identifié :

  • Créez un nouvel équipement (pas un Broker) dans jMQTT sur le Boker « local »,
  • Appelez-le sobrement « Trash »,
  • Inscrivez-le au Topic correspondant pour vous à bt/OMG_tuto/BTtoMQTT/# (oui /# à la fin),
  • Cochez « Ajout automatique des commandes », « Activer », « Visible », et sauvegardez,
  • De nombreux équipement sont détectés et à ajoutés cet équipement :
  • On voit que les topics finissent toujours par l’adresse MAC de l’équipmeent,
  • Une fois que vous avez identifié l’équipement qui vous intéresse, 2 options s’offrent à vous :
    • Désactiver l’inclusion automatique, supprimer toutes les commandes inutiles ; ou
    • Supprimer cet équipement et en créer un nouveau à coté.
  • Voyons cette seconde méthode (partons de rien, juste la MAC ou le topic).

Création dans jMQTT d’un équipement Bluetooth connu ou identifié :

  • Identifiez dans la liste les adresses MAC des équipements qui vous intéressent, si vous ne les connaissez pas (si vous avez le plugin BLEA, elle sont normalement dans la page Santé),
  • Vous avez peut-être aperçu ceci dans les captures précédentes :

    C’est bien ce que vous pensez que c’est !
  • Créez un nouvel équipement (pas un Broker) dans jMQTT sur le Boker « local »,
  • Donnez lui par exemple le nom « Xiaomi Mi Jia »,
  • Inscrivez le au Topic correspondant pour vous à bt/OMG_tuto/BTtoMQTT/582D3431FE5F (attention, pas de /# à la fin), avec 582D3431FE5F étant la MAC de votre équipement Bluetooth,
  • Laissez « Ajout automatique des commandes » désactivé,
  • Cochez Activer et Visible, mais pas besoin de sauvegarder pour le moment,
  • Dans l’onglet Commandes, créez une commande info « tmp » de type autre sur le topic bt/OMG_tuto/BTtoMQTT/582D3431FE5F et sauvegardez:
    image
  • Au bout de quelques minutes, une valeur arrive dans la commande,
  • Passez alors en vue JSON et créez les commandes dont il y a besoin :
  • Supprimez « tmp » qui n’est plus utile et sauvegardez :
  • Ne reste plus qu’à faire la partie visuelle, car c’est un peu moche :
    image

Mais ce sera pour une seconde partie.

Bad

28 « J'aime »

< Placeholder >

Excellent, très bien documenté
Bavo

2 « J'aime »

@Bad excellent cela fait quelques temps que je regarde le projet OMG pour le sujet du Bluetooth mais aussi pour le 433MHz je crois avoir vu que la passerelle pouvait se faire bref

Super sujet sur le MQTT encore et surtout merci pour le plugin jMQTT et tes mise à jour régulière

Vive la french tech :star_struck:

2 « J'aime »

Merci pour ce tuto!

1 « J'aime »

Salut BAD,

Magnifique tuto et surtout hyper complet, il y a plus qu’a se lancer :wink:

3 « J'aime »

l’ESP32 est connecté à jeedom :muscle: :muscle: :muscle:

j’attends le fingerbot samedi

merci @Bad

Edit : Le deuxieme impossible de le flasher.
j’essaye tout, le bouton boot, le bouton EN…

Il arrive que certains soient récalcitrants, du coup il faut utiliser la seconde méthode : (Option 2) Upload ready-to-go binaries | OpenMQTTGateway v1.7.0
Je suis pas devant un PC ce weekend, tu arriveras à t’en sortir ?

Ou alors l’esp est dead…

4 « J'aime »

Merci @bad toujours le bon conseil.
Je testerais
Passe un bon week end :+1:

1 « J'aime »

merci ca fonctionne au top ,testé avec un esp32cam qui trainait

super tuto est très bien expliqué

1 « J'aime »

Oui avec un récepteur 433 mhz ou un CC1101 (qui peut être utilisé pour d’autres fréquences et applications). Il y a plusieurs modules qui peuvent être activés et supportent plus ou moins de protocoles (voir la doc).

1 « J'aime »

je n’ai pas réussi la methode 2, alors ce matin j’ai retesté la méthode 1.; ben ca a fonctionné :muscle: :+1: :+1: :+1:

1 « J'aime »

Pas de RFXCOM :pensive:
C’est pour 2 modules récepteur et émetteur dio et un volet solaire Somfy rts

Bonjour,

Super ce tutoriel, si ça te dit on pourrait l’intégrer dans la documentation, section integration.

1 « J'aime »

Hello @1technophile,

Merci beaucoup, j’ai essayé d’être dans la continuité du super travail qui a été fait sur Open MQTT Gateway :grin:

Oui avec grand plaisir, si tu souhaites plutôt une version anglaise, je peux le traduire et PR la doc d’OMG.

Bad

2 « J'aime »

Oui on peut commencer par une version anglaise .

une derniere question.
j’ai bien trouvé mon switchbot. mais je n’ai pas les actions.
Que des commandes infos?


j’ai testé des commande « on », 1…

1 « J'aime »

Regarde par ici :

:wink:

1 « J'aime »

je dois comprendre que c’est la solution :slight_smile:

mais je ne comprends pas ce que je dois faire :slight_smile:

Oui, c’est sur que en me relisant c’est un peu expéditif (j’étais en voiture :flushed:, mais pas au volant :sweat_smile:).

Pour envoyer un ordre ON à ton SwitchBot, il faut créer une commande action sur l’équipement :

Topic : bt/OpenMQTTGateway/commands/MQTTtoBT/config
Valeur : {"SBS1":"on","mac":"E6:B3:16:D8:3C:E6"}

Idem pour l’ordre OFF, une autre commande action, mais avec off à la place de on.

Dit moi si c’est ok pour toi.

1 « J'aime »