Objectifs de ce tuto :
A. Mettre en œuvre MQTT au sein de la V5
B. Publier sur le broker MQTT, le statut d’une variable au sein de la V5
C. Pour aller plus loin :
a. Mettre à jour une variable de la v5 en fonction d’un évènement extérieur
b. Modifier le statut d’un appareil extérieur à la V5
Prérequis :
- Disposer d’un broker MQTT (type Mosquitto ou autre)
- Installer un explorer de Topics MQTT (ex : MQTTLens – extension du navigateur Chrome ou MQTT Explorer …)
- Si vous souhaitez connecter des objets communicants à votre V5 en MQTT, vous devez connaitre les topics disponibles pour ces objets. Les topics sont de 2 natures :
a. Topic d’information / interrogation d’état
b. Topic de mise à jour de plus ou moins d’information de l’objet connecté
A. Mise en place de MQTT sur la V5 : Menu Système => MQTT
- Activer la fonction MQTT
- Précisez l’adresse et le port de votre broker MQTT
- Donnez un nom de Client MQTT, un nom d’utilisateur et le mot passe associés
- Activez la fonction SSL si votre broker n’est pas en local mais hébergé sur un Cloud
- Validez la configuration (aucun message d’erreur ne doit apparaitre sur le bas de la fenêtre une fois l’IPX800 V5 redémarrée)
B. Publication du statut d’une variable : Ex l’état d’un relai de la V5 lors de sa commande
- Activez MQTTLens, vous pouvez utiliser l’abonnement à tous les topics en utilisant le symobole # puis subscribe.
- Dans la V5, Menu Liens => Objets=> MQTT Publish
- Sur le Panneau de gauche, cliquez sur Ajouter MQTT Publish
- Ouvrir l’objet MQTT Publish créé en cliquant sur le bouton « Edition » :
Voilà votre 1er topic créé : cmd_café
Je choisis de créer une variable de pilotage nommée « state » de type IO
Le topic ne sera publié sur le broker Mosquitto QUE SI la variable « state » change d’état »
Lions pour l’exemple cette variable « state » à la commande d’un relai. Pour cela il faut écrire une rule:

NB : ceci ne peut pas être fait par lien en 5.4.0 En effet, seules les rules donnent accès à l’input 1.
Vérification du fonctionnement
a. Dans MQTTLens, abonnez-vous au topic « cmd_café »
b. Dans la vue relai cmd de la V5, actionnez la commande en appuyant sur la pastille correspondant au relai
c. Vérifiez dans MQTTLens, que vous voyez apparaitre :
C. Connaitre l’état d’un appareil extérieur et changer son état par MQTT
Pour cet exemple :
- Je dispose d’un ShellyDimmer 2.
- MQTT est activé sur l’appareil et est appairé au broker MQTT Mosquitto
- J’ai cherché dans la doc Shelly les topics d’état publiés et les topics de commande de mon ShellyDimmer2
- Avec MQTTLens, j’ai vérifié la publication des topics d’état et j’ai repéré les noms exacts des topics auxquels je dois abonner la V5.
a. Connaitre l’état d’un appareil extérieur
Principe de fonctionnement :
L’appareil extérieur émet sur le broker à chaque changement d’état le statut de ses différentes variables ou set de variables.
La V5 doit s’abonner (Subscribe) aux différents TOPICS d’état.
Créons notre 1er topic SUBSCRIBE :
D’après la doc Shelly, le topic « shellies/shellydimmer2-XXXXXXXXXX/light/0/status » renvoie un JSON comme suit :
{
« ison », /* whether the channel is turned ON or OFF /
« has_timer », / whether a timer is currently armed for this channel /
« timer_started », / unix timestamp of timer start; 0 if timer inactive or time not synced /
« timer_duration », / timer duration, s /
« timer_remaining », / if there is an active timer, shows seconds until timer elapses; 0 otherwise /
« mode », / always white
/
« brightness » / output brightness, 1..100
*/
}
Choisissons dans notre exemple d’obtenir le statut « ON/OFF » avec la variable « ison » et de connaitre l’intensité lumineuse avec la variable « brightness ».
Je déclare donc ces 2 informations dans le JSON à récupérer dans la V5.
Nous pouvons alors afficher le statut « ON/OFF » sur un Dashboard en créant le widget :
Remarque : vous pouvez aussi vous servir de cette variable dans les rules.
b. Changer l’état d’un appareil extérieur
Vous avez besoin de connaitre les commandes MQTT le permettant, dans notre exemple pour faire « ON/OFF », nous aurons besoin de la commande
shellies/shellydimmer-/light/0/set qui a besoin d’un JSON :
`
{
« brightness »: 100, /* output brightness 1…100 */
"turn": "on", /* one of "on", "off", or "toggle" */
"transition": 500 /* One-shot transition, `0..5000` [ms] */
}`
Nous allons donc créer l’objet PUBLISH associé.
En version 5.04 du firmware de la V5, il n’est pour l’instant pas possible de créer un « on » ou « off » avec une IO (IO étant soit true, soit false). Il faut donc trouver une astuce pour l’instant.
Je crée donc 2 objets PUBLISH contenant 2 chaines de caractères « on » et « off » :
Turn = «off »
Turn = « on »
La clé « on/off » est une IO pilotée par dashboard (par ex) de la V5 et lors de l’envoi du Json, elle sera ignorée par le shelly dimmer.
Il faut alors introduire des rules afin de piloter ces IO :
Permet de contrôler la clé « on/off »
Permet de contrôler la clé « on/off »
Petites explications complémentaires sur le fonctionnement :
- If IO ON clé « on/off »
- Introduction d’un delai TA de 1s
- avant d’envoyer le OFF sur clé on/off
ainsi on envoie ces 2 JSON :
{"turn": "off", "brightness": 23, "on/off": true}
{"turn": "off", "brightness": 23, "on/off": false}
Idem pour « turn » : « on »
Le fait d’envoyer le 2eme JSON rend la solution toujours utilisable