Créez vos premiers composants Home Assistant

Dans un billet précédent, nous vous avons expliqué comment mettre en place Home Assistant pour contrôler et orchestrer votre installation. Home Assistant est une solution puissante et clé en main. Aujourd’hui, nous allons mettre les mains dans le cambouis et comprendre comment pousser sa personnalisation en créant nos propres composants.

Les composants permettent d’étendre les possibilités d’Home Assistant, ils peuvent écouter et déclencher des événements (changement de température, changement de coordonnées GPS), offrir des services pour contrôler un appareil (ouvrir les volets, baisser le volume) et conserver ces états (la lampe est allumé, une vidéo est en cours de lecture, etc.).

Pour suivre cet article, des connaissances basiques en programmation Python seront nécessaires. Je vous conseille les tutoriels de apprendre-pythonopenclassrooms ou encore learnpython pour les anglophones.

Vous êtes prêts ? C’est parti.

Notre premier composant Home Assistant

Home Assistant fourni un ensemble de composants clé en main mais il est possible de créer des composants personnalisés.  En quelques lignes de code, nous allons créer le notre. Celui-ci va nous permettre d’afficher un état simple dans Home Assistant.

Premièrement, nous devons créer un fichier qui va décrire le comportement de notre composant. Afin que Home Assistant le prenne en compte, il devra être placé dans le dossier custom_components.

[gist https://gist.github.com/Dramloc/9801119532f855bb73a34c266b99b268 /]

Nous allons maintenant décrire le comportement de notre composant en ajoutant les lignes suivantes au fichier hello_devotics.py.

[gist https://gist.github.com/Dramloc/cdbbd4f42e58253986274b6f4d7ca0bf /]

Il ne nous reste plus qu’à indiquer à Home Assistant qu’il doit charger le composant en ajoutant la ligne suivant au fichier configuration.yaml :

[gist https://gist.github.com/Dramloc/e276b5c3da45969c4c4882b9b5a242e5 /]

Notre premier composant est déjà prêt !

Il ne reste plus qu’à relancer Home Assistant. Dans la partie « Aperçu », nous pouvons voir notre état.

Un composant simple Home Assistant. Une carte représente l'état du composant avec le titre "Devotics" et l'état "author" avec la valeur "Antoine".

La partie « Historique » permet de contrôler les changements de valeur de notre état.

Capture d'écran de l'historique de l'état. L'état "author" a la valeur "Antoine".

Nous pouvons également changer l’état manuellement en allant dans la partie « Outils de développement » > « États »

Capture d'écran de l'écran de contrôle des états d'Home Assistant. On peut voir l'état "devotics.author" et le modifier à l'aide du formulaire.

Configurer notre composant Home Assistant

Notre premier composant est très simple et manque un peu de modularité : certaines personnes ne s’appellent pas Antoine. Dans cette partie, nous allons voir comment rendre notre composant configurable, nous pourrons alors le partager et chacun pourra le personnaliser selon ses envies.

Pour ce faire, nous allons modifier le fichier hello_devotics.py de la façon suivante :

[gist https://gist.github.com/Dramloc/816d37c431af2d49d693fdada0145b2b /]

Avec ces quelques changements, notre composant devient configurable. Si nous rechargeons Home Assistant, nous devrions voir la valeur par défaut « ¯\_(ツ)_/¯ » s’afficher.
Nous pouvons changer la valeur de l’état en modifiant le fichier configuration.yaml :

[gist https://gist.github.com/Dramloc/148ae659ee8debbda05c3de4e23fb51e /]

Un composant plus complexe

Nous avons vu les bases sur les états de Home Assistant. Nous allons maintenant créer un composant un peu plus complexe.

Ici, j’ai choisi de créer un composant qui nous permettra d’afficher l’auteur et le texte du dernier SMS reçu. Pour cela, nous aurons besoin de créer un service qui nous permettra de mettre à jour les détails du SMS.
Créons d’abord un nouveau fichier devotics_sms.py pour décrire notre composant :

[gist https://gist.github.com/Dramloc/3e93aaa20bb693018525eea01f151713 /]

Comme avec notre premier composant, ce composant va stocker des états : le nom du contact et le texte du message. Nous ajoutons cependant une nouveauté, nous enregistrons un service auprès de Home Assistant. Celui-ci nous permet de récupérer les nouvelles valeurs et de mettre à jour les états. Pour pouvoir tester notre composant, nous allons le référencer dans le fichier configuration.yaml :

[gist https://gist.github.com/Dramloc/23d32755935ddeeb00c10d70de0b914c /]

En redémarrant Home Assistant, nous pouvons voir notre composant s’afficher sur la page d’accueil avec nos deux états.

Capture d'écran du composant SMS. L'état "contact_name" a pour valeur "John Doe", l'état "text" a pour valeur "Brunch this weekend?".

Tester notre composant avec Home Assistant

Pour vérifier que notre service fonctionne bien, nous pouvons l’appeler manuellement en allant dans la partie « Outils de développement » > « Services ». Nous y retrouvons le service que nous avons enregistré et pouvons l’appeler avec le JSON suivant pour changer notre état :

[gist https://gist.github.com/Dramloc/4dd1e067c83bb02b400140f8db34b941 /]

Capture d'écran de l'appel de service Home Assistant, le service "devotics_sms.update_sms" est sélectionné et le champ "Service Data" est rempli avec du JSON.

Les états devraient se mettre à jour et afficher les nouvelles valeurs.

Tout fonctionne ? Nous pouvons continuer.

Automatiser l’appel au service Home Assistant

Home assistant expose tous les services enregistrés via une API HTTP. Cela signifie que notre service est disponible depuis n’importe où et peut être appelé depuis d’autres applications d’automatisation comme IFTTT.
Pour faire fonctionner notre composant, j’ai créé un petit scénario IFTTT : si je reçois un SMS, alors j’appelle notre service avec le nom du contact et le contenu du message.
J’ai utilisé Maker pour effectuer l’appel du service avec la configuration suivante :

Configuration Maker IFTTT pour Home Assistant

L’URL à utiliser est de ce format : <url-home-assistant>/api/services/devotics_sms/update_sms?api_password=<password-home-assistant>, l’URL d’Home Assistant est celle que vous avez configurée pour pouvoir accéder à Home Assistant en dehors de chez vous et le mot de passe est celui configuré dans le fichier configuration.yaml.

Vous pouvez tester le fonctionnement en attendant un message de votre grand-mère ou en vous envoyant un message à vous-même.

Conclusion

J’espère que cet article vous a permis d’un peu mieux comprendre les bases des composants Home Assistant et quelques possibilités que ceux-ci peuvent offrir. Nous verrons dans un prochain article des fonctionnalités plus complexes de ceux-ci. D’ici là, je vous laisse vous amusez à créer vos composants personnalisés.

9 réponses

  1. Etienne dit :

    Merci pour cet article 🙂 bien utile pour appréhender la création de composants.

  2. Ludovic dit :

    Super Tuto!
    Je n’ai pas réussi à voir en regardant d’autres tuto s’il était possible de faire appel à d’autres services depuis un composant
    Saurais tu comment faire?

    Merci d’avance

    • Antoine Colmard dit :

      Salut Ludo, merci pour ton commentaire !

      La façon la plus simple pour appeler un autre service est la suivante :
      hass.services.call(DOMAIN, SERVICE_NAME, data)

      Par exemple pour ajouter une notification sur la page d’accueil :
      hass.services.call('persistent_notification', 'create', {'message': 'Hello'})

      Bon courage pour ta configuration 🙂

  3. Ludovic dit :

    Impec merci! 🙂
    J’avais fini par trouver, la doc home assistant n’est pas toujours très claire…

  4. D’abord, merci pour ce très bon article.
    Si tu peux faire une vidéo sur le sujet, ce sera une très bonne idée.

  5. Fred dit :

    Bonjour, j ai un souci après l ajout de add ons, ils n’apparaissent pas dans aperçu et ni sur statues. Je ne trouve pas pourquoi. je récuse que je débute. Merci pour le retour

    • Antoine Colmard dit :

      Bonjour Fred,
      Il y avait quelques problèmes sur les extraits de code l’article, je les ai mis à jour.
      Lorsque vous voulez tester des modifications sur un composant, il faut bien penser à relancer Home Assistant pour voir les modifications.

      Dites-moi si ça règle vos problèmes 🙂

  6. Fred dit :

    Bonjour,
    Mes add ons n apparaissent pas dans aperçu et states, je comprend pas pourquoi
    Que faut il faire
    Merci

  7. fabien dit :

    Bonjour,

    les liens gist semblent mort… 🙁

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.