Intégrer le matériels Shelly en MQTT à Home Assistant avec Shellies Discovery

Pour essayer de se débarrasser le plus possible du cloud, Shelly nous offre la possibilité de passer ses appareils en MQTT, mais le problème est qu’ils ne sont pas découvert automatiquement par Home Assistant connecté à notre broker Mosquitto favori. (même si ils communiquent bien avec le broker)

Nous allons donc voir comment faire en sorte qu’ils le soient.

Prérequis

  • Avoir HACS d’installé

Ajouter l’intégration Python Script dans Home Assistant.

Voici le lien officiel pour ajouter python script a votre systeme domotique préféré. Pour les anglophobes, voici la procédure.

Cette intégration vous permet d’écrire des scripts Python qui sont exposés en tant que services dans Home Assistant. Chaque fichier Python créé dans le dossier /python_scripts/ sera exposé en tant que service. Le contenu n’est pas mis en cache, vous pouvez donc facilement développer : éditez le fichier, enregistrez les modifications, appelez le service. Les scripts sont exécutés dans un environnement sandbox.

Configuration.yaml

Il vous faut ajouter cette ligne dans le fichier configuration.yaml.

python_script:

Ensuite via File Editor créer un dossier nommé python_scripts

Ajouter le script

Deux méthodes possibles:

  • Ajouter le fichier shellies_discovery.py dans le dossier créé ci dessus.
  • Passer par HACS (nous la détaillerons plus tard)

Méthode manuelle

Récupérer le fichier dans le GitHub puis ajouté le via File Editor (par exemple).

Ensuite redémarrer Home Assistant.

Méthode via HACS

Dans HACS, rechercher Shellies Discovery dans les Automations puis installer le.

shellies_discovery_hacs_automation

Ce dernier vous installera le fichier shellies_discovery.py dans le dossier python_script

Automation.yaml

Il vous reste a ajouter dans automation.yaml le code suivant.

Configuration minimal

- id: shellies_announce
  alias: 'Shellies Announce'
  trigger:
    - platform: homeassistant
      event: start
    - platform: time_pattern
      hours: "/1"  # Modifying this if you are using Shelly Motion can drain your device's battery quickly.
  action:
    service: mqtt.publish
    data:
      topic: shellies/command
      payload: announce

- id: 'shellies_discovery'
  alias: 'Shellies Discovery'
  mode: queued
  max: 999
  trigger:
    platform: mqtt
    topic: shellies/announce
  action:
    service: python_script.shellies_discovery
    data:
      id: '{{ trigger.payload_json.id }}'
      mac: '{{ trigger.payload_json.mac }}'
      fw_ver: '{{ trigger.payload_json.fw_ver }}'
      model: '{{ trigger.payload_json.model }}'
      mode: '{{ trigger.payload_json.mode | default }}'
      host: '{{ trigger.payload_json.ip }}'

Ensuite soit vous redémarré Home Assistant soit vous rechargé les automations et exécuté l’automatisation Shellies Announce.

Vous devriez voir apparaître dans Configuration → Intégration → MQTT → shelly XXXXX ou shelly + nom donné

Voici la liste des devices supportés ici

Sources.

Python Script HA Officiel (en)
Sujet Shelly Discovery Script (en)
GitHub Shellies Discovery (en)
Liste de sdevices compatibles (en)

Suivi :

  • 27/10/2021 création de l’article @McFly

Après avoir utilisé Shelly4Hass qui posait problèmes j’avais fait ça avec le script de découverte auto… Mais MQTT, si on n’en a pas besoin pour d’autres choses, crée une étape supplémentaire. Au final j’ai viré MQTT pour cet usage et j’utilise l’intégration Shelly native qui fonctionne très bien pour une vingtaine de Shelly’s… Dans l’idée de toujours faire au plus simple.

3 « J'aime »

C’est la solution la plus simple c’est sûr, mais c’est dans un optique de dépendre le moins possible de cloud.

Mais je te rejoint sur le fait sue si tu n’a pas besoin de MQTT tu va te rajouter un truc supplémentaires.

L’intégration de base ne dépend pas du cloud.

Pas du tout ? Il ne fautpas qu’il soit connecté en lode cloud ?

L’intégration passe en local mais cela n’empêche que tes devices echanges avec le cloud non ?

Non, tout se passe en local, les devices ne sont pas connectés au cloud.

1 « J'aime »

Ok je ne savais pas je regarderais

Je confirme, j’ai des Shelly avec Cloud disabled.

1 « J'aime »

Ce qui est bizarre c’est qu’il ne me les a pas détecté en automatique.

Je suis pas a la maison mais je regarde ca des que possible.

Merci pour l’info

Il ne détecte pas si Shelly4hass est installé. Dans les autres cas ça m’a toujours détecté sur tous mes HA…

Pas de shellyforhass chez moi jamais eu pourtant avant il était reconnu tout seul

Salut,

J’ai trouvé pourquoi il ne me les reconnaissait pas automatiquement, il faut activer Enable CoIoT dans Advanced - Developer Settings.

Pour infos : ces paramètres ne sont accessibles que via l’interface web en version desktop.

En ce qui me concerne je n’ai jamais eu à le faire et il me semble que c’est activé par défaut.

Oui je te confirme, c’est bien activé par défaut

Hélas ça ne fonctionne pas pour les modèles Pro et Plus.
Le 4Pro est reconnu dans l’intégration officielle avec pour l’instant quelques bugs (il ne fat surtout pas activer ses entités cachées (temp, etc…)

1 « J'aime »

Bonjour,
Je suis novice et ai donc effectué toutes les opérations que tu mentionnes pas à pas. Tout s’est bien passé et dans Automations j’ai bien les deux Shellies Announce et Shellies Discovery mais par contre je n’ai pas Shellies xxxx dans MQTT. Pourrais-tu m’expliquer ce que je dois faire pour clôturer cette étape. Merci d’avance
Salutations
Edouard

Pour information, shelly peut etre ajouté automatiquement via intégration dans Home assistant directement, pas forcément besoin de passer par ce tutoriel.

En tout cas le plus simple et de oasser par l’intégration direct HA.

A tous,
je vois qu’il y a les grands spécialistes sur ce sujet et ca me ravit. (@McFly , @mycanaletto )
Je suis moi aussi en train d’intégrer mes Shelly motion, sur ma configuration.
Je confirme que pour certains modèles de Shelly, l’option l’option colot et discoverable n’est pas toujours activée par défaut.
Ma question vaut aussi pour les autres Shelly, type Shelly1 par exemple ;

Vaut il mieux utiliser les variables de l’entité crée par l’intégration automatique, ou connecter ces appareils via MQTT ?
Quels sont les avantages et inconvénients respectifs?
Une solution est elle plus robuste que l’autre ?
Dans le cas d’utilisation de MQTT, est ce que vous désactivez tout ce qui est créé par l’intégration pour y voir plus clair ?

Si je demande cela, c’est que j’ai mis en test chez moi un addon de température sur un Shelly1, pour mesurer la température de mon salon, et réguler mon chauffage. Lorsque j’ai (involontairement) débrancher mon capteur, HomeAssistant ne l’a plus lu, mais j’ai gardé la dernière valeur lue dans la variable de l’intégration, et via MQTT j’ai reçu une valeur immense (>99) ce qui a coupé mon chauffage. hormis le fait qu’il faille gérer les erreurs de comm, je me demande quelle mécanisme est le plus robuste.

Je ne suis pas fan des Shelly sur piles. Pour les capteurs sur piles je préfère le Zigbee.

Ceci étant j’ai passé tous mes Shelly en intégration directe sans passer par MQTT, en partant du principe que moins il y a d’intermédiaire, moins il y a de sources de problèmes. Et ça fonctionne très bien (>30 Shelly).

J’ai un addon Shelly avec 3 sondes dans le frigo et congels. Pas de soucis particulier (ça me sert d’alerte en cas de coupure edf ou un disjoncteur qui tomberait). Ca fait le taff pour cet usage mais je ne m’en servirait pas pour le chauffage


Ou j’utilise des sondes Aqara que je trouve plus efficaces
image
Ou en BT
image

Bonjour , je suis un peu d’accord avec toi, pas besoin d’empiler des couches de logiciel…
Ma question dérivée, est qu’en intégration directe , sur les Shelly motion, on a accès qu’a 4 entités, (motion, vibrat, lumin, et battery) . Comment faut il faire pour envoyer des commandes à ce capteur ?
Par exemple pour le démarrer il faut envoyer la commande setting/actions/motion_on et pour l’arreter il la commande setting/actions/motion_on.
Je voulais écrire un script qui gère la mise en marche et l’arrêt des capteurs ; lequel script serait appelé par le module ALARMO
J’ai tenté de bidouiller dans choix dans les scripts, et les automations, mais je vois pas dans quel case écrire cela ; ou bien la syntaxe.
(Je sais que c’est un problème de novice, et que tout peut se trouver dans une doc, ou derrière le rideau, mais parfois en désespoir de cause on fait appel aux amis.)