[Article] Développer pour Home Assistant - Comment faire

Vous souhaitez développer vos propres intégrations pour vous ou pour la communauté Home Assistant ou tout simplement contribuer à une intégration existante ?
Alors, la série de tutoriels qui sont présentés ici est faite pour vous.

39 « J'aime »

Bonjour tout le monde,

Vos likes me font dire qu’il y a une attente sur ce sujet. Pour vous mettre un peu l’eau à la bouche, sachez que le premier article devrait être publié ce jour et qu’on essayera de tenir le rythme de 1 par semaine, avant le week-end. Comme ça vous aurez tout le week-end pour vous lancer :thinking: :wink: :grin:.

Ce thread pourra servir de support pour si les choses ne sont pas claires ou si avez des blocages. L’esprit entre-aide sera nécessaire tant le sujet est vaste.

L’objet n’est pas de faire de vous des experts (de toutes façons, je ne suis pas assez compétent) mais de vous donner envie de vous lancer, si ça vous titille. Si par ces articles, je peux vous éviter de galérer comme j’ai moi même galérer au début, l’objectif sera atteint :partying_face:

Amusez vous bien et comme c’est le printemps n’oubliez pas de sortir quand même … :smiling_face_with_three_hearts:

3 « J'aime »

Bravo et merci pour ton investissement, j’ai hâte de lire le premier tuto, pour comprendre comment tout cela s’articule.
Mème si sans doute je ne développerai jamais, mais au moins j’essaierai d’entrer dans les « tripailles » des intégrations…
Merci encore.

1 « J'aime »

jamais dire jamais. Jamais.

Merci @Jean-Marc_Collin ! Hâte de lire ces articles :slight_smile:

Premier article en ligne. A vous de jouer !

5 « J'aime »

Deuxième article en ligne ! On va apprendre à créer une intégration et mettre une entité simple.
C’est ici :

Attention de bien avoir déroulé le tuto 1 avec succès avant de démarrer.

N’hésitez pas à poser des questions / suggestions / critiques ici au besoin.

A vous de jouer !

4 « J'aime »

Bonjour,

Merci pour ce tuto. Je suis encore un peu tôt dans mon intégration HASS chez moi pour me lancer dans le dev d’une intégration mais je suis avec attention cette série pour voir comment je pourrais migrer mes plugins Jeedom vers des intégrations HASS à terme.

J’ai une question concernant le async_setup_platform. Tu indiques que cette fonction est appelée à chaque fois que la plateforme est appelée par un sensor. Dans le tuto est configuré que seul la plate-forme sensor est valide avec notre intégration.
Je présume donc que si l’on a :

sensor:
  - platform: tuto_hacs
    entity_id: tuto_hacs_entité
    name: Tuto HACS Entité
    dautres: attributs utiles
  - platform: tuto_hacs
    entity_id: tuto_hacs_entité2
    name: Tuto HACS Entité 2
    dautres: attributs utiles

La fonction async_setup_platform sera appelé 2 fois.

Mais comme la plateforme que l’on déclare dans const.YAML est un tableau, c’est que l’on peut avoir plus type de plateforme en même temps. Et donc est-ce que la fonction async_setup_platform s’applique uniquement aux sensors comme je le comprend dans le tuto, mais le nom laisse penser que c’est pour tout. Je veux bien un petit éclaircissement sur ce point s’il te plaît.
Merci

Bonjour @Jean-Marc_Collin
C’est une super initiative !
J’ai juste un doute sur la manière d’accéder à ce container après l’avoir fermé.
En suivant à la lettre le tuto, rien ne sera créé dans le dossier hacs-tuto.
Pour rouvrir le containter il faudra d’abord ouvrir docker, lancer le container, puis dans VSC, cliquer en bas à gauche sur le bouton vert et choisir « Attach to running container ».
Ou alors, il faut dès le début créer le fichier devcontainer.json, en passant par le bouton vert puis « Add Dev Container Configuration File » par exemple, puis les fois suivantes, ouvrir le dossier hacs-tuto puis cliquer sur le bouton vert et choisir « Reopen in Container ».
A moins que je passe à côté de quelque chose.
Bravo dans tous les cas, car c’est effectivement déroutant pour s’y retrouver.
Merci.

Hello @mguyard ,

La méthode async_setup_platform du fichier sensor.py est appelée pour chaque sensor déclaré dans le configuration.yamlet uniquement pour les sensor. Si tu as aussi configuré la plateforme switch, tu auras un fichier switch.py qui sera appelée pour chaque switch déclaré dans le configuration.yaml. Et le plus sûr, c’est d’essayer. Si tu as implémenté le tuto, n’hésites pas à expérimenter. C’est vraiment la meilleure manière de comprendre.

1 « J'aime »

Salut @Pol2Tls,

Pour relance un container après l’avoir fermer, tu peux en effet utiliser « Reopen in container ». J’ai jamais essayé « Attach to running container » puisque le container est lancé par VSC (et pas par docker directement). Mais j’imagine que ça doit marcher aussi. Expérimentes et dis nous ce qu’il en est, ça peut aider d’autres qui se pose la même question.

Si tu suis le tuto1, tu n’as pas besoin de faire « Add Dev Container Configuration File » mais il y a toujours plusieurs manières d’arriver au même résultat.
Dans le tuto, tu ouvres le répertoire tuto_hacs dans VSC, puis : « clic sur le bouton vert » + « New Dev Container ». Ca ajoute automatiquement le fichier « devcontainer.json » sans que tu es besoin de le faire explicitement.

Après on doit pouvoir (j’ai pas essayé), faire « Add Dev Container Configuration File » puis « Reopen in container ». Je suppose que ça fait la même chose (ou presque). Faut essayer, ca ne casse rien de toutes façons.

Troisième article en ligne ! Ce dernier vous présente les interactions entre les entités et le reste de l’écosystème…

C’est ici :

3 « J'aime »

Quatrième articles en ligne ! L’objectif de cet article est d’ajouter une IHM de paramétrage à notre intégration lors de son installation et paramétrage.

Bon développement :

5 « J'aime »

Me revoila plongé dans ce tuto pour simplifier mon environnement de dev. Encore une fois c’est vraiment super bien détaillé.

Petite question : Comment gère tu les différentes version de HA ? Via les dossier montés dans le devcontainer.json ?

2 possibilités:

  • en manuel: tu lances un terminal et tu tapes : pip install -r requirements_dev.txt etpip install -r requirements_test.txt,
  • en automatique: si tu veux qu’à chaque fois que tu remontes l’environnement (ie que tu rebuildes le container) il va chercher le dernier HA disponible, il faut ajouter une ligne devcontainer.json, "postCreateCommand": "pip install -r requirements_dev.txt && pip install -r requirements_test.txt". Ca va retélécharger la dernière version à chaque fois.

Je préfère la solution manuelle, histoire que ça ne fasse pas un update en plein dev. Il est (très) fréquent que les updates cassent des choses.

Et ce qui est important, c’est que si tu mets à jour requirements_dev.txt il faut absolument mettre à jour aussi requirements_test.txt. Les 2 marchent ensemble et quand ils sont désynchro c’est souvent la kata. Quand on comprend rien à ce qui se passe (plein d’erreur partout), c’est souvent à cause de ça.

Bonjour
Bravo pour cette serie de tuto. J’ai beaucoup apprecier et je travaille maintenant sur l’integration d’une VMC.
Tout est OK sauf sur la modifications des OptionsFlow
Les options sont bien modifiées mais j’ai une erreur sur le déchargement
Capture d’écran 2023-09-24 012233

 File "/config/custom_components/aldes/__init__.py", line 53, in update_listener
    await hass.config_entries.async_reload(entry.entry_id)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1243, in async_reload
    unload_result = await self.async_unload(entry_id)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1226, in async_unload
    raise OperationNotAllowed(
homeassistant.config_entries.OperationNotAllowed: The config entry ALDES_VMC (aldes) with entry_id c1f0daeca75cf198d65485fc2c3c30e7 cannot be unloaded because it is not in a recoverable state (ConfigEntryState.FAILED_UNLOAD)

Merci d’avance

Hello,

Je n’ai jamais vu cette erreur de mon coté.

C’est assez enigmatique comme erreur. Va falloir fouiller …

EDIT:

Y a un thread qui parle de ça ici : Device becomes unavailable · Issue #1268 · rospogrigio/localtuya · GitHub
C’est lié à l’intégration elle-même. Je pense qu’il y a un soucis dans ton intégration qui laisse les ConfigEntry dans un état pas stable.

Essaye peut être de repartir à zéro (reinstall de l’intégration), il est possible qu’à force de faire des essais tu ais une ConfigEntry qui est pas en forme.

Bonjour et merci pour ta réponse
J’ai déjà tout recommencé au plus minimaliste et l’erreur est réapparue.
Je vais tenter de refaire tout le tuto et voir ci cela fonctionne.

Alors je suis repartis de zéro.
J’ai repris tout test fichiers.
Attention, les extensions ne semblent pas correctes. Tu mets fr.yaml et strings.yaml. A corriger en .json
J’ai une erreur d’importation dans le fichier sensor.py:

from homeassistant.helpers.entity import DeviceInfo, DeviceEntryType

Le DeviceEntryType n’est pas reconnu.
Je le trouve bien dans un autre fichier:

from homeassistant.helpers.entity import DeviceInfo#, DeviceEntryType
from homeassistant.helpers.device_registry import DeviceEntryType

Avec ces modifications, et en ayant le « const.py » que tu n’as pas spécifié à la fin du Tuto n°4, je me retrouve avec la même erreur de déchargement.
En redémarrant Home Assistant, 2 nouvelles entités sont créées et les 2 anciennes toujours présentes mais indisponibles.
Je continue de chercher …

Hello, oui bien vu. Ca a changé avec Home Assistant 2023.09 (ce qui m’a valu une indispo du Versatile Thermostat).

Je vais corriger le tuto (et peut être le re-dérouler si il ne marche pas).

Ca c’est normal d’avoir les anciennes. Il faut les supprimer à la main.