Intégration externe - Shelly

Salut à tous :waving_hand:

Après pas mal de temps passé le nez dans les payloads Shelly, je vous présente une intégration externe Shelly pour Gladys, en version 1.0.0.

:package: Dépôt : GitHub - Terdious/gladys-shelly · GitHub
:open_book: Documentation : Français · English


En deux mots

Relais, prises connectées et compteurs d’énergie Shelly, en local d’abord, sans compte et sans cloud. L’installation type demande un formulaire de configuration entièrement vide : vous installez, vous lancez un scan, vous ajoutez vos appareils.


Vous pilotez déjà vos Shelly via un pont ?

Pierre-Gilles vient de publier sa position sur le sujet — Retour d’expérience : pourquoi je recommande désormais les intégrations externes — et je la partage entièrement.

Si vos Shelly passent aujourd’hui par une couche intermédiaire, vous pouvez les basculer ici. Ce que vous y gagnez concrètement : plus rien à maintenir entre Gladys et vos appareils, et surtout 100 % de ce que le matériel sait faire, sans passer par un standard qui doit d’abord savoir l’exprimer. Un Pro 3EM ressort avec ses 24 fonctionnalités — les trois phases séparément, puissance active et apparente, tension, intensité, courant de neutre, et les huit compteurs d’énergie consommée et réinjectée.

Une seule précaution : retirez-les de l’ancien pont avant de les ajouter ici, sinon vous verrez chaque Shelly en double.


Ce qu’elle sait faire

Local, et en temps réel. L’intégration parle le protocole RPC Gen2+ directement à vos appareils, sur une WebSocket que l’appareil alimente lui-même : un relais basculé à l’interrupteur mural remonte en une seconde environ, pas au prochain sondage.

Toutes les générations. Gen2 et suivantes (Plus, Pro, Mini, Gen3, Gen4) et Gen1 (Shelly 1, 1PM, 2.5, Plug S, EM, 3EM). Les Gen1 parlent une API complètement différente — REST au lieu de JSON-RPC, Basic au lieu de Digest — mais elles sont normalisées vers le même modèle : un 3EM Gen1 expose exactement les mêmes 24 fonctionnalités qu’un Pro 3EM Gen2.

Trois transports, du meilleur au dernier recours : local → MQTT → cloud. Chacun a sa raison d’être :

  • le local est le chemin nominal ;
  • MQTT (optionnel) est le moyen le plus fiable de trouver une grande installation. Le mDNS s’annonce par courtes rafales multicast faciles à manquer : chez moi, le même parc revenait tantôt à 19, tantôt à 27 appareils, avec certains systématiquement absents. Un Shelly qui publie sur votre broker s’annonce en permanence — il est découvert, il remonte en temps réel, et il reste pilotable même injoignable en local ;
  • le Shelly Cloud (optionnel) prend le relais quand un appareil n’est joignable ni en local ni par MQTT.

Gladys affiche le transport réellement utilisé, appareil par appareil, avec le badge dégradé et sa raison quand ce n’est pas le chemin nominal.

Le modèle d’appareil est déduit, pas codé en dur. Les fonctionnalités viennent des composants que l’appareil déclare réellement dans Shelly.GetStatus, jamais d’une table de modèles. Un Pro 1 obtient un On/Off, un Pro 1PM obtient en plus la métrologie — et un Shelly sorti après ce code fonctionne quand même, tant qu’il parle le vocabulaire documenté.

Composants couverts : switch, em, emdata, em1, em1data, pm1, temperature, humidity, devicepower.


Le temps réel, et pourquoi il est réglable

Gladys accepte 300 états par minute par intégration. Un seul Pro 3EM pousse environ une mise à jour par seconde sur ~25 mesures : tout transmettre tel quel ferait ~900 états/minute, trois fois le plafond.

Les valeurs sont donc réparties sur deux voies :

  • une voie temps réel (5 s par défaut, réglable de 1 s à 30 s) qui porte toutes les puissances instantanées — totale, par phase, par relais — et tous les états marche/arrêt ;
  • le reste (tensions, intensités, puissances apparentes, compteurs d’énergie, températures) suit l’intervalle de rafraîchissement, mais servi depuis la valeur poussée la plus fraîche, sans aller-retour HTTP.

Le point auquel je tiens : votre réglage est un plancher, pas une promesse. Le coût de la voie dépend du parc, pas du réglage — une valeur qui ne bouge jamais ne coûte rien. L’intégration mesure donc ce qu’elle publie réellement et allonge son propre intervalle si le parc devient trop gros, en l’écrivant dans les logs, puis y revient d’elle-même. Un état refusé par Gladys serait invisible ; une voie ralentie, non.

Et chaque minute, une ligne dit exactement où vous en êtes :

Real-time lane: 178 state(s) published in the last minute (every 5s, from
5 WebSocket and 15 MQTT device(s)); 243/300 states/min of the Gladys budget used

Installation

Dans Gladys : Intégrations → Installer une intégration → Shelly → Installer, puis Découverte → Scanner.

Il n’y a rien à remplir pour une installation 100 % locale. Les champs (adresses supplémentaires, mot de passe des appareils, broker MQTT, clé cloud) ne servent que si votre installation en a besoin, et chacun est expliqué directement dans le formulaire.

(image 4 : la page de configuration, formulaire vide)

Nécessite Gladys ≥ 4.83.0. Si un appareil reste introuvable au scan, la doc explique quoi regarder — et configurer MQTT est presque toujours la réponse sur une grosse installation.


Testé sur

Mon installation : 19 Shelly, 10 x Pro 3EM, 1 x Pro 4PM, 2 x Pro 3, 1 x Plus 2PM, 2 x Plus Plug S, et 3 x 3EM Gen1. Local, MQTT et les deux mélangés.


Merci @pierre-gilles :folded_hands:

Au passage j’ai buté sur une limite du core : publishDiscoveredDevices() se prenait un PayloadTooLargeError au-delà d’une douzaine d’appareils riches en fonctionnalités (un Pro 3EM = 24 fonctionnalités ≈ 8,4 Ko). Pierre-Gilles a corrigé ça très vite côté core (PR #2732). En attendant que tout le monde soit à jour, l’intégration publie le plus gros sous-ensemble acceptable et journalise nommément ce qui a été écarté, plutôt que de perdre le scan en silence.


La suite

Pas encore supportés, faute de matériel pour les valider : volets roulants (cover), éclairages variables (light) et entrées (input) . Le code est prêt à les accueillir, il me manque les appareils : si vous en avez et que vous voulez tester une image :dev, dites-le, je vous prépare ça avec plaisir — c’est le meilleur moyen que ça arrive vite.

Les Shelly BLU ne sont pas gérés non plus : ils parlent Bluetooth, et l’intégration ne fait pas de BLE.

La roadmap est ouverte : Roadmap — Shelly external integration · Issue #1 · Terdious/gladys-shelly · GitHub

Bugs, retours, payloads d’appareils exotiques : les issues sont grandes ouvertes. Et si vous testez, dites-moi ce que ça donne — surtout sur des modèles que je n’ai pas, et surtout sur des modèles que je n’ai pas :slightly_smiling_face:

Bravo !! Super intégration

@McFlyPartages Tu es pas mal en Shelly toi non ? ça va te plaire :slight_smile:

:new_button: Mise à jour : v1.0.0 → v1.1.0

Grosse mise à jour de l’intégration Shelly : elle rattrape les nouveautés de Gladys et du SDK, et la roadmap avance d’un coup sur les volets, les lumières et les entrées !

:warning: Nécessite désormais Gladys ≥ 5.1.0 (widgets et scènes).

:window: Volets roulants (cover)

  • Ouvrir / Stop / Fermer et position via la commande volet standard de Gladys, plus puissance, tension, courant, énergie.
  • La position (100 % = ouvert, même convention chez Shelly et Gladys) n’apparaît qu’une fois le volet calibré dans l’app Shelly.
  • Plus 2PM / Pro 2PM / Pro Dual Cover en mode volet, et Shelly 2.5 Gen1 en mode roller.

:light_bulb: Lumières (light, rgb, rgbw, cct)

  • Marche/arrêt, luminosité, couleur, température de couleur (2700 K → 6500 K).
  • Changer la luminosité n’allume ni n’éteint la lumière.
  • Gen1 aussi : Dimmer, Bulb, Duo, RGBW2 en mode couleur.

:radio_button: Entrées et boutons (input)

  • Mode interrupteur → une entrée marche/arrêt en temps réel.
  • Mode bouton → un bouton Gladys + un nouveau déclencheur de scène, à chaque appui simple, double, triple ou long, en temps réel (WebSocket ou MQTT). Un Shelly i4 donne enfin 4 boutons utilisables !
  • Mode comptage → un compteur.

:clapper_board: Scènes (catégorie Intégrations)

  • Déclencheur Bouton appuyé sur un Shelly : appareil, entrée, type d’appui.
  • Déclencheur Joignabilité d’un Shelly : un appareil devient injoignable (local, MQTT et cloud), ou répond à nouveau.
  • Action Allumer pendant une durée : c’est le Shelly lui-même qui éteint après la durée (1 s à 1 jour). Un redémarrage de Gladys entre-temps ne laisse jamais tourner la pompe ou l’arrosage.
  • Action Redémarrer un Shelly.

:bar_chart: 4 widgets de tableau de bord

  • Compteur d’énergie Shelly : jauge de puissance en direct (sous zéro en réinjection), une tuile par phase, énergie, courbe sur la période choisie, tensions, intensités, facteur de puissance, fréquence.
  • Interrupteurs Shelly : état et puissance de chaque sortie d’une pièce ou de toute la maison, boutons Tout allumer / Tout éteindre.
  • Volets Shelly : un groupe de volets, position de chacun, boutons Ouvrir / Stop / Fermer / Position.
  • Santé du réseau Shelly : combien d’appareils en temps réel, en secours, injoignables, les Wi-Fi faibles, les mises à jour firmware, et la part du budget Gladys (300 états/min) utilisée.

(image : les widgets)

:stethoscope: Diagnostic dans la Configuration

  • Diagnostic des appareils : un rapport texte complet (transport, dernières données, signal Wi-Fi, firmware, sorties…) à coller dans une issue.
  • Tester un appareil : lit un appareil tout de suite, même non créé dans Gladys (tapez son IP) — identité, temps de réponse, mot de passe accepté ou non, temps réel. L’outil idéal pour comprendre pourquoi un scan ne trouve pas un appareil.
  • Lecture seule, jamais de mot de passe, adresses MAC et IP masquées par défaut.

(image : l’écran Configuration avec les deux boutons)

:globe_showing_europe_africa: 4 langues

  • Toute la configuration, les messages et la documentation en français, anglais, allemand et espagnol.
  • Nouvelle option Noms des fonctionnalités pour les appareils que vous créez ensuite.

:locked: Sécurité et maintenance

  • Bibliothèque MQTT mise à jour (6 failles corrigées) ; la connexion au broker continue de réessayer après un refus.
  • SDK 0.15, et chaque version a maintenant ses notes de version sur GitHub, liées depuis la page Supervision de Gladys.

:counterclockwise_arrows_button: Pour en profiter

  1. Intégrations → Shelly → Mettre à jour.
  2. Onglet Découverte : Scanner, puis Mettre à jour sur chaque appareil « Déjà ajouté » pour récupérer les nouvelles fonctionnalités (volets, lumières, entrées). Historique, scènes et tableaux de bord sont conservés.
  3. Ajoutez les widgets depuis l’édition du tableau de bord.

:test_tube: Retours très attendus

Volets, lumières et entrées sont écrits d’après la documentation officielle Shelly, mais je n’ai pas le matériel pour les valider. Si vous avez un Plus 2PM en mode volet, un Plus RGBW PM, un Plus i4 / i4 Gen3, un Dimmer, ou un 2.5 Gen1 en volet : testez et dites-moi ce que ça donne ! Le plus simple : le bouton Diagnostic des appareils, et vous collez le rapport ici ou dans une issue.

Changelog complet : https://github.com/Terdious/gladys-shelly/blob/master/CHANGELOG.md
Roadmap : Roadmap — Shelly external integration · Issue #1 · Terdious/gladys-shelly · GitHub

:new_button: v1.2.0 — thermostats « Powered by Shelly »

Merci à @sylvainpelissier pour sa contribution : l’intégration prend maintenant en charge les composants virtuels des appareils « Powered by Shelly ». Premier appareil concerné : le thermostat de plancher chauffant LinkedGo ST1820, qui remonte enfin sa consigne (pilotable, bornée à la plage et au pas de l’appareil), la température et l’humidité de la pièce, et ses options marche/arrêt.

:counterclockwise_arrows_button: Intégrations → Shelly → Mettre à jour, puis Découverte → Scanner.

Notes de version : Release v1.2.0 · Terdious/gladys-shelly · GitHub

:new_button: v1.3.0 — mots de passe par appareil et capteurs Gen1 sur batterie

:key: Un mot de passe différent par appareil

Nouveau champ Mots de passe par appareil dans la configuration, pour les Shelly qui n’ont pas le même mot de passe que les autres :

shellyplus1-a8032ab12345=motdepasse1; 10.5.0.42=motdepasse2

L’appareil se désigne par son identifiant Shelly, son adresse MAC ou son adresse IP. Un appareil qui refuse son mot de passe affiche un point orange sur son badge, et l’écran Configuration le nomme : fini les appareils qui disparaissent sans explication. « Tester un appareil » indique aussi quel mot de passe a été essayé.

:droplet: Capteurs Gen1 sur batterie

  • Flood → détecteur de fuite d’eau ; Smoke → détecteur de fumée.
  • Door/Window 1 et 2 → capteur d’ouverture (ouvert / fermé) et luminosité.
  • Ils dorment, et c’est normal : un H&T, un Flood ou un Door/Window endormi reste affiché « local » tant qu’il s’est manifesté dans les 26 dernières heures. Plus de faux « injoignable », plus de déclenchement intempestif de « Joignabilité d’un Shelly ».
  • :light_bulb: Configurez MQTT sur ces appareils : chaque relevé arrive au moment où ils se réveillent.

:radio_button: Boutons Gen1

Les entrées d’un i3 (et les entrées SW d’un Shelly 1 / 2.5) remontent maintenant les appuis simple, double, triple et long, comme sur les Gen2 : fonctionnalité bouton et déclencheur Bouton appuyé sur un Shelly. Ça marche par MQTT (instantané) comme par lecture de l’appareil, et un appui vu des deux côtés n’est compté qu’une fois.

:counterclockwise_arrows_button: Pour en profiter

  1. Intégrations → Shelly → Mettre à jour.
  2. Découverte → Scanner, puis Mettre à jour sur les appareils Gen1 concernés.

:test_tube: Retours bienvenus

Surtout si vous avez des Gen1 sur batterie (H&T, Flood, Door/Window, i3) ou un parc avec plusieurs mots de passe. Le bouton Diagnostic des appareils produit un rapport prêt à coller ici.

Notes de version : Release v1.3.0 · Terdious/gladys-shelly · GitHub

:new_button: v1.4.0 — Shelly Cloud plus sobre, canal blanc RGBW

:cloud: Shelly Cloud

  • Les appareils servis par le cloud sont maintenant lus en une seule requête par cycle pour tout le compte, au lieu d’une requête par appareil. Les appels sont aussi espacés d’une seconde, la limite de l’API Shelly Cloud : même un parc entier en secours cloud ne la dépasse plus.
  • :bug: Correction : un appareil Gen1 lu via le cloud (par exemple un 3EM Gen1 injoignable en local) ne remontait aucune valeur. Il est maintenant lu exactement comme en local.

:light_bulb: Lumières

  • Une sortie RGBW (Plus RGBW PM, RGBW2 Gen1 en mode couleur) expose enfin ses LED blanches, réglables de 0 à 100 %.
  • Un Shelly qui change de profil (un Plus 2PM qui passe de relais à volet, un variateur qui passe en interrupteur) gardait ses anciennes fonctionnalités, vides, sans rien dire. Le scan les nomme maintenant dans les journaux, et le bouton Diagnostic des appareils les liste : il ne reste qu’à les supprimer dans Gladys.

:counterclockwise_arrows_button: Pour en profiter

Intégrations → Shelly → Mettre à jour, puis Découverte → Scanner et Mettre à jour sur les appareils RGBW.

:test_tube: Retours bienvenus

Surtout si vous utilisez le secours Shelly Cloud (en particulier avec des Gen1) ou une Plus RGBW PM : je n’ai pas pu valider ces deux points sur du vrai matériel. Le Diagnostic des appareils produit un rapport prêt à coller ici.

Notes de version : Release v1.4.0 · Terdious/gladys-shelly · GitHub