Développer une intégration?

Bonjour

J’aimerais savoir s’il y en a par ici qui ont déjà développés une intégration et quel est le degré de difficulté pour y parvenir ? En effet, je dois piloter des appareils (à travers une simple connexion Telnet) et pour le moment malheureusement la seule solution proposée par HA: aucune :frowning:
J’ai dû recourir à un module externe NodeRed qui est une belle cochonnerie à mon goût et qui a déja été en l’espace d’un an source de beaucoup trop de problèmes :confused:
Voulant donc me débarrasser au plus vite de NodeRed, je pensais partir d’une intégration existante qui utiliserait aussi une connexion en mode Telnet et adapter à partir de là ! Qu’en pensez-vous ? dans un premier temps mon intégration ferait uniquement du pilotage sans gestion des retours !

Merci par avance pour vos retours

Vincèn

Je vois pas mal de débutants qui parviennent à mettre sur pied une intégration. Tout est question de motivation - on peut partir d’un exemple (dont aussi fourni par l’équipe Home Assistant).

NodeRed me rappelle plus les environnements d’automatismes industrielles avec le développement d’automatismes sous forme graphique, entree-> sortie, etc. Il faut s’y faire quand on a l’habitude de la programmation impérative.

Il y a une fonction Home Assistant telnet pour des switch Sinon, Home Assistant propose quand meme les sensors de type command_line et aussi l’approche shell_command.
Il n’y a pas nécessairement besoin de développer une intégration pour exécuter un « script ».
Il y a aussi l’intégration pyscript.

Si possible, le mieux c’est évidemment de passer par ssh - le login automatique y est intégré et c’est chiffré - sinon c’est un peu plus « chiant » (avec expect ou autre).

Il y a sur le forum anglais plusieurs échanges autour de telnet, dont ou divers solutions sont abordés/référencés.

Autres (possibles sources d’inspiration):

2 « J'aime »

Bonjour,
il y a un tuto fait par @Jean-Marc_Collin.

5 « J'aime »

ben disons que surtout les environnements par exemple qui sont pas foutus de démarrer parce qu’un des appareils avec lesquels il interagit au niveau réseau n’est pas là c’est rédhibitoire :frowning:

Oui désolé je l’ai pas précisé mais j’ai déja creusé toutes ces solutions avec l’existant HA mais aucune n’est satisfaisante ou compatible avec une install HAOS :frowning:

Euh oui mais là je pilote des appareils donc malheureusement je choisis pas, je dois m’adapter à ce que me propose l’appareil en question :wink:

Merci pour tous ces liens que je vais creuser pour voir si je peux en tirer quelque chose et arriver à faire quelque chose d’exploitable :wink:

ah oui super je n’avais pas vu, je vais essayer de suivre son tuto et voir si j’arrive à faire quelque chose avec mes doigts pas doués :grin:

Merci bien en tout cas à vous deux pour les liens et l’aide :+1:

Salut,

développer une intégration à partir de 0 demande un peu de familiarité avec python, le language utilisé par HomeAssistant. Il existe un peu de documentation qui est facile à comprendre une fois qu’on a déjà assimilé les bases.
J’ai développé plusieurs intégrations, la première est difficile après ca va tout seul.

Quelques suggestions pour rendre le développement plus simple:

  • limite au maximum la configuration au début (la documentation du « config_flow », qui est utilisé pour configurer une intégration via l’UI, est très peu claire), il vaut mieux utiliser une configuration par fichier yaml au départ
  • n’hésite pas à regarder les entités existantes (par exemple le sensor, mais surtout les classes EntityDescription, par exemple: SensorEntityDescription qui permettent de décrire facilement une entité). Il ne faut pas hésiter à regarder une intégration simple que tu utiles déjà et voir comment elle est faite.
  • la clé pour développer vite est de trouver une façon d’obtenir un retour rapide sur ce que tu fais. Une fois le squelette de code en place, tu écris une ligne, tu lance un HA et tu vérifie que ca se comporte comme tu le souhaite.

:bulb: Si tu n’es pas très à l’aise en python, la solution ultime est d’écrire un programme dans le langage que tu connais le mieux pour faire un telnet2mqtt (dans la lignée des zigbee2mqtt par exemple).
Tu peux très facilement déclarer des entités via MQTT et les piloter. Sans avoir besoin de regarder le code d’HomeAssistant.

Ca permet d’avoir le schéma suivant: ton appareil ↔ telnet2mqtt ↔ server mqtt ↔ Home Assistant.

3 « J'aime »

Il y a plusieurs intégration qui utilisent déjà Telnet comme pour les ampli Onkyo ou Pioneer.
Ça doit pouvoir te servir de modèle j’imagine.

1 « J'aime »

Oui toujours pareil le plus dur est de s’y mettre et de comprendre les subtilités de la chose :grin:

Merci pour tes supers conseils que je vais soigneusement suivre :+1:

oui mais elles utilisent en fait une lib existante Python spécifique à ces appareils mais en restant dans ton idée j’ai trouvé celle pour les Denon où tout est codé dans l’intégration sans lib externe. Je vais commencer à essayer de comprendre celle-là et partir de cette base dans un premier temps.

On est bien d’accord que si je duplique les fichiers d’une intégration officielle et la renomme je peux la tester en l’ajoutant ensuite dans un répertoire dédié dans les custom_components ? :slight_smile:

1 « J'aime »

Oui, c’est le cas. Il faut également renommer l’intégration dans le fichier manifest.json

1 « J'aime »

Oui effectivement mais cela n’a pas l’air de marcher :frowning: voilà ce que j’ai fait:
j’ai récupéré les 3 fichiers qui composent l’intégration officielle pour Denon. Je les ai mis dans un dossier que j’ai nommé blustream que j’ai mis dans mon dossier custom_components. J’ai ensuite modifié le fichier manifest.json pour qu’il ait les bonnes infos de mon intégration:

{
  "domain": "blustream",
  "name": "Blustream ACM200",
  "codeowners": [],
  "documentation": "https://www.home-assistant.io/integrations/blustream",
  "iot_class": "local_polling"
}

J’ai redémarré HA mais si j’essaye d’ajouter une intégration et cherche blu… cela ne me donne rien :frowning: j’ai loupé quelque chose ?

Autrement une question existentielle: mon intégration va piloter une grille vidéo sur IP donc cela va être surtout des commandes de commutation. Le mieux est de rester avec un type Media Player non ? Je pensais utiliser un service pour passer à l’intégration la commutation à réaliser sur l’appareil piloté. Bonne idée ou pas ?

Salut,
Y 'a t’il une ligne dans les logs de démarrage qui indiquent une erreur au chargement de l’intégration, ou même juste une tentative de chargement ?
De mon coté, je travaille avec une instance HA dans un container et non mon « instance » HA. (cf par ici, les fichiers les + interessant .devcontainer/devcontainer.json et .vscode/task.json pour lancer/debugger)

1 « J'aime »

oups pas pensé à regarder, je pensais que tant que l’intégration était pas configurée HA ne faisait rien avec :wink: Effectivement le log m’a permis de trouver de suite le problème (en l’occurrence les custom ont besoin d’une clé de version):


Plus qu’à éditer/faire le code pour que ça pilote bien l’appareil :grin:

Ben je voulais faire ça aussi mais comme malheureusement pour coder de l’open-source il faut utiliser des logiciels propriétaires, je vais faire ça à la mano à l’ancienne (vu que le pilotage est assez simple ça devrait pas être trop compliqué :wink:

1 « J'aime »

Pas forcément besoin de système compliqué :slight_smile:
Sur un système linux, dans un repertoire qui contient le dossier custom_components: podman run --network=host -v $(pwd):/config ghcr.io/home-assistant/home-assistant:2023.10. (podman ~ docker)

C’est comme ca que je développe.

Merci bien mais j’y connais un peu rien à Docker et du coup c’est un peu du charabia pour moi ta commande magique :joy: :innocent:
Sinon j’ai un problème un peu bizarre avec mes premières expérimentations de mon intégration custom. Je suis parti sur la base de l’intégration Denon officielle qui se configure uniquement en mode GUI (plus en yaml) mais maintenant que j’en ai fait une custom intégration le mode GUI n’existe plus (je ne connais pas assez le fonctionnement interne de HA pour comprendre pour quelle raison) mais du coup comment faire pour la configurer en manuel ? car le site de HA pour l’intégration Denon ne donne plus de syntaxe yaml pour la config :frowning:

Même si peu documenté , la config UI n’est pas si compliqué…
Je ne peux que confirmer les conseils de kamaraclimber le rétro engineering, copier/coller et de la patience font l’affaire.

Tu peux éventuellement jeter un œil ici également.
Il manque peut être config_flow: true dans manifest.json ?

Merci pour ton retour mais il y a un truc qui me « chiffonne ». L’intégration native HA que j’ai copié (celle pour les récepteurs AV Denon) a bien une config UI mais dès que j’en fais une custom cela ne marche plus !! Il y a quelque chose de spécifique du fait que c’était une intégration native ? parce que l’intégration se configure bien en UI mais elle n’a pas de paramètre config_flow dans son manifest !
Je voulais repartir d’une intégration dispo dans HACS mais je n’en ai pas trouvé qui soit basé sur du telnet pour de la connexion à l’appareil piloté !
Merci pour ton lien je vais essayer de mettre ça en place dans mon intégration :slight_smile: