[Tuto] Shelly Gas, intégration Domoticz/MQTT
Publié : 14 oct. 2023, 10:43
Bonjour à tous,
Ça fait un petit moment que je veux installer un détecteur de gaz dans ma cave.
Il existe plusieurs modèles sur le marché, mais peu sont connectés et encore moins ouverts à une intégration domotique.
Je ne veux pas utiliser de Cloud et Shelly a le mérite de nous laisser le choix.
Il existe un plugin pour Domoticz, mais ce Shelly GAS communique en Wifi avec protocole MQTT et j'ai déjà Node-RED d'installé.
Il est donc très facile d'interconnecter tout ça. Actuellement en promo chez Domadoo : https://www.domadoo.fr/fr/destockage/52 ... 02463.html
Site officiel : https://www.shelly.com/fr/products/shop ... gas-eu-cng
API : https://shelly-api-docs.shelly.cloud/gen1/#shelly-gas
Il faut déjà le connecter à son Wifi personnel.
Branché à une prise, un point d'accès "shelly_..." ouvert est automatiquement créé, s'y connecter puis config via http://192.168.33.1/
Suivre les étapes et on se retrouve avec cette interface : Effectuer un self-test pour vérifier qu'il fonctionne, puis firmware update dans Settings.
Vous pouvez configurer divers paramètres comme le code régional, device name, etc... à vous de voir.
Dans Internet & Security, Advanced-Developer Settings, activer MQTT et entrer les infos IP:port de votre serveur MQTT.
Cocher 'Use custom MQTT prefix' si vous voulez changer le nom qui va remonter dans le broker (par défaut c'est shellygas avec l'adresse mac).
Passer 'Max QoS' à 2 puis Save.
Les alertes et changement d'état sont envoyés instantanément, mais également toutes les 30 secondes.
Pour passer à 5 minutes entrer le lien dans un navigateur (IP du Shelly à la place de x.x.x.x) :
On passe ensuite à Domoticz, créer un Dummy Device avec 5 Virtuals Sensors : 3 de type Alert, un Air Quality et un Switch (Push ON button) :
Noter les IDX des Sensors Alert et Air Quality, ils seront utiles pour Node-RED.
Le Switch permet de lancer un auto-test du détecteur, entrer ces paramètres : Si vous avez défini un utilisateur/mot de passe le lien est sous cette forme :
Vous pouvez tester ce bouton, il doit déjà être fonctionnel.
(ne pas oublier de réserver l'adresse IP dans la box internet)
Au tour de Node-RED, voici à quoi ressemble le flow : à importer :
Modifier les nodes en fonction de votre installation :
mqtt in nodes : Server (votre broker mqtt) et dans Topic le nom du Shelly défini au début (shellygas+adresse mac par défaut)
template nodes : les IDX (dans Name et dans le Template)
mqtt out node : Server (votre broker mqtt)
Il ne vous reste plus qu'à définir les alertes sur le capteurs dans Domoticz comme bon vous semble.
Exemple :
Ça fait un petit moment que je veux installer un détecteur de gaz dans ma cave.
Il existe plusieurs modèles sur le marché, mais peu sont connectés et encore moins ouverts à une intégration domotique.
Je ne veux pas utiliser de Cloud et Shelly a le mérite de nous laisser le choix.
Il existe un plugin pour Domoticz, mais ce Shelly GAS communique en Wifi avec protocole MQTT et j'ai déjà Node-RED d'installé.
Il est donc très facile d'interconnecter tout ça. Actuellement en promo chez Domadoo : https://www.domadoo.fr/fr/destockage/52 ... 02463.html
Site officiel : https://www.shelly.com/fr/products/shop ... gas-eu-cng
API : https://shelly-api-docs.shelly.cloud/gen1/#shelly-gas
Il faut déjà le connecter à son Wifi personnel.
Branché à une prise, un point d'accès "shelly_..." ouvert est automatiquement créé, s'y connecter puis config via http://192.168.33.1/
Suivre les étapes et on se retrouve avec cette interface : Effectuer un self-test pour vérifier qu'il fonctionne, puis firmware update dans Settings.
Vous pouvez configurer divers paramètres comme le code régional, device name, etc... à vous de voir.
Dans Internet & Security, Advanced-Developer Settings, activer MQTT et entrer les infos IP:port de votre serveur MQTT.
Cocher 'Use custom MQTT prefix' si vous voulez changer le nom qui va remonter dans le broker (par défaut c'est shellygas avec l'adresse mac).
Passer 'Max QoS' à 2 puis Save.
Les alertes et changement d'état sont envoyés instantanément, mais également toutes les 30 secondes.
Pour passer à 5 minutes entrer le lien dans un navigateur (IP du Shelly à la place de x.x.x.x) :
Code : Tout sélectionner
http://x.x.x.x/settings?mqtt_update_period=300Le Switch permet de lancer un auto-test du détecteur, entrer ces paramètres : Si vous avez défini un utilisateur/mot de passe le lien est sous cette forme :
Code : Tout sélectionner
http://user:password@x.x.x.x/self_test(ne pas oublier de réserver l'adresse IP dans la box internet)
Au tour de Node-RED, voici à quoi ressemble le flow : à importer :
Code : Tout sélectionner
[
{
"id": "2a80832c.41273c",
"type": "tab",
"label": "Shelly-Gas",
"disabled": false,
"info": ""
},
{
"id": "394be62c.addb3a",
"type": "mqtt in",
"z": "2a80832c.41273c",
"name": "operation",
"topic": "shellies/shellygas/sensor/operation",
"qos": "2",
"datatype": "utf8",
"broker": "1d1f2fbc.02c43",
"nl": false,
"rap": true,
"rh": 0,
"x": 100,
"y": 40,
"wires": [
[
"c015019c.1fe688",
"4e67f384.a43a14",
"e5e762e4.ca659",
"9d50f7fb.a5f1a"
]
]
},
{
"id": "fcc48866.66f0a8",
"type": "mqtt in",
"z": "2a80832c.41273c",
"name": "gas",
"topic": "shellies/shellygas/sensor/gas",
"qos": "2",
"datatype": "utf8",
"broker": "1d1f2fbc.02c43",
"nl": false,
"rap": true,
"rh": 0,
"x": 90,
"y": 220,
"wires": [
[
"443d7992.716c3",
"49cef2db.fd4084",
"ef4853de.1ce5",
"3b338f8c.b1b4c8"
]
]
},
{
"id": "97f984ec.5e57a",
"type": "mqtt in",
"z": "2a80832c.41273c",
"name": "concentration",
"topic": "shellies/shellygas/sensor/concentration",
"qos": "2",
"datatype": "utf8",
"broker": "1d1f2fbc.02c43",
"nl": false,
"rap": true,
"rh": 0,
"x": 110,
"y": 620,
"wires": [
[
"5f7e5232.c0ec6c"
]
]
},
{
"id": "aaf60657.0049c8",
"type": "mqtt in",
"z": "2a80832c.41273c",
"name": "self_test",
"topic": "shellies/shellygas/sensor/self_test",
"qos": "2",
"datatype": "utf8",
"broker": "1d1f2fbc.02c43",
"nl": false,
"rap": true,
"rh": 0,
"x": 100,
"y": 440,
"wires": [
[
"40e0f3da.c9ca34",
"6aada45a.10574c",
"d62b9261.9cbb5",
"d5f7cbf2.0fc99"
]
]
},
{
"id": "313c26e2.efc6d2",
"type": "template",
"z": "2a80832c.41273c",
"name": "normal to IDX 31",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":31,\"nvalue\":1,\"svalue\":\"normal\"}",
"output": "str",
"x": 510,
"y": 120,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "8cc5af37.a121",
"type": "template",
"z": "2a80832c.41273c",
"name": "unknown to IDX 31",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":31,\"nvalue\":2,\"svalue\":\"unknown\"}",
"output": "str",
"x": 510,
"y": 40,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "4e67f384.a43a14",
"type": "switch",
"z": "2a80832c.41273c",
"name": "normal",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "normal",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 290,
"y": 120,
"wires": [
[
"313c26e2.efc6d2"
]
]
},
{
"id": "c015019c.1fe688",
"type": "switch",
"z": "2a80832c.41273c",
"name": "unknown",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "unknown",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 300,
"y": 40,
"wires": [
[
"8cc5af37.a121"
]
]
},
{
"id": "e5e762e4.ca659",
"type": "switch",
"z": "2a80832c.41273c",
"name": "warmup",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "warmup",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 300,
"y": 80,
"wires": [
[
"b36dc2e5.e3ae98"
]
]
},
{
"id": "b36dc2e5.e3ae98",
"type": "template",
"z": "2a80832c.41273c",
"name": "warmup to IDX 31",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":31,\"nvalue\":3,\"svalue\":\"warmup\"}",
"output": "str",
"x": 510,
"y": 80,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "9d50f7fb.a5f1a",
"type": "switch",
"z": "2a80832c.41273c",
"name": "fault",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "fault",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 290,
"y": 160,
"wires": [
[
"ea6c4da2.77286"
]
]
},
{
"id": "ea6c4da2.77286",
"type": "template",
"z": "2a80832c.41273c",
"name": "fault to IDX 31",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":31,\"nvalue\":4,\"svalue\":\"fault\"}",
"output": "str",
"x": 500,
"y": 160,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "443d7992.716c3",
"type": "switch",
"z": "2a80832c.41273c",
"name": "unknown",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "unknown",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 300,
"y": 220,
"wires": [
[
"586884be.f81f2c"
]
]
},
{
"id": "586884be.f81f2c",
"type": "template",
"z": "2a80832c.41273c",
"name": "unknown to IDX 32",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":32,\"nvalue\":2,\"svalue\":\"unknown\"}",
"output": "str",
"x": 510,
"y": 220,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "49cef2db.fd4084",
"type": "switch",
"z": "2a80832c.41273c",
"name": "none",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "none",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 290,
"y": 260,
"wires": [
[
"47c57b2.c7bfb04"
]
]
},
{
"id": "47c57b2.c7bfb04",
"type": "template",
"z": "2a80832c.41273c",
"name": "none to IDX 32",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":32,\"nvalue\":1,\"svalue\":\"none\"}",
"output": "str",
"x": 500,
"y": 260,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "ef4853de.1ce5",
"type": "switch",
"z": "2a80832c.41273c",
"name": "mild",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "mild",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 290,
"y": 300,
"wires": [
[
"fa95cec3.81be68"
]
]
},
{
"id": "3b338f8c.b1b4c8",
"type": "switch",
"z": "2a80832c.41273c",
"name": "heavy",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "heavy",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 290,
"y": 340,
"wires": [
[
"f6b8d880.51f3b8"
]
]
},
{
"id": "fa95cec3.81be68",
"type": "template",
"z": "2a80832c.41273c",
"name": "mild to IDX 32",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":32,\"nvalue\":3,\"svalue\":\"mild\"}",
"output": "str",
"x": 500,
"y": 300,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "f6b8d880.51f3b8",
"type": "template",
"z": "2a80832c.41273c",
"name": "heavy to IDX 32",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":32,\"nvalue\":4,\"svalue\":\"heavy\"}",
"output": "str",
"x": 500,
"y": 340,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "40e0f3da.c9ca34",
"type": "switch",
"z": "2a80832c.41273c",
"name": "not_completed",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "not_completed",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 320,
"y": 440,
"wires": [
[
"d53c4e5e.215a9"
]
]
},
{
"id": "d53c4e5e.215a9",
"type": "template",
"z": "2a80832c.41273c",
"name": "not_completed to IDX 33",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":33,\"nvalue\":4,\"svalue\":\"not_completed\"}",
"output": "str",
"x": 530,
"y": 440,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "6aada45a.10574c",
"type": "switch",
"z": "2a80832c.41273c",
"name": "completed",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "completed",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 310,
"y": 480,
"wires": [
[
"527600df.fa30f8"
]
]
},
{
"id": "527600df.fa30f8",
"type": "template",
"z": "2a80832c.41273c",
"name": "completed to IDX 33",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":33,\"nvalue\":1,\"svalue\":\"completed\"}",
"output": "str",
"x": 520,
"y": 480,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "d62b9261.9cbb5",
"type": "switch",
"z": "2a80832c.41273c",
"name": "running",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "running",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 300,
"y": 520,
"wires": [
[
"2f3d6f66.05d6a8"
]
]
},
{
"id": "2f3d6f66.05d6a8",
"type": "template",
"z": "2a80832c.41273c",
"name": "running to IDX 33",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":33,\"nvalue\":2,\"svalue\":\"running\"}",
"output": "str",
"x": 510,
"y": 520,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "d5f7cbf2.0fc99",
"type": "switch",
"z": "2a80832c.41273c",
"name": "pending",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "pending",
"vt": "str"
}
],
"checkall": "true",
"repair": false,
"outputs": 1,
"x": 300,
"y": 560,
"wires": [
[
"d3f5a92e.d26bd"
]
]
},
{
"id": "d3f5a92e.d26bd",
"type": "template",
"z": "2a80832c.41273c",
"name": "pending to IDX 33",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":33,\"nvalue\":3,\"svalue\":\"pending\"}",
"output": "str",
"x": 510,
"y": 560,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "5f7e5232.c0ec6c",
"type": "template",
"z": "2a80832c.41273c",
"name": "concentration to IDX 34",
"field": "payload",
"fieldType": "msg",
"format": "handlebars",
"syntax": "mustache",
"template": "{\"idx\":34,\"nvalue\":{{payload}}}",
"output": "str",
"x": 530,
"y": 620,
"wires": [
[
"300aa0c2.44cd3"
]
]
},
{
"id": "300aa0c2.44cd3",
"type": "mqtt out",
"z": "2a80832c.41273c",
"name": "domoticz/in",
"topic": "domoticz/in",
"qos": "",
"retain": "",
"broker": "1d1f2fbc.02c43",
"x": 810,
"y": 340,
"wires": []
},
{
"id": "1d1f2fbc.02c43",
"type": "mqtt-broker",
"name": "Mosquitto MQTT",
"broker": "172.17.0.1",
"port": "1883",
"clientid": "",
"usetls": false,
"compatmode": false,
"protocolVersion": 4,
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"willTopic": "",
"willQos": "0",
"willPayload": ""
}
]mqtt in nodes : Server (votre broker mqtt) et dans Topic le nom du Shelly défini au début (shellygas+adresse mac par défaut)
template nodes : les IDX (dans Name et dans le Template)
mqtt out node : Server (votre broker mqtt)
Il ne vous reste plus qu'à définir les alertes sur le capteurs dans Domoticz comme bon vous semble.
Exemple :