Intégration Enocean dans Home Assistant

Comme évoqué précédemment, le relais Peha de type 452 FU-EBI(M) o.T. se différencie assez fortement des modules relais de type Nodon SIN-2-x-x ou autres clones avec EEP de type D2-01-12.


L’avantage de ce module Peha c’est qu’il intègre de nombreuses fonctions autonomes programmables assignables différemment sur les 2 voies du module. Fonctions elles-mêmes assignable par donneur d’ordre : Plusieurs fonctions de Temporisations, scènes, divers actionneurs (portes, mouvement, …). Malheureusement, il n’intègre pas la fonction variateur.
Par exemple plusieurs interrupteurs peuvent commander la voie 1 avec des tempo différentes pour chacun des interrupteurs qui le commandent. L’ensemble fonctionnel sans Home assistant, puis ajouter Homme Assistant pour visualiser l’état de la voie 1 et bien entendu le piloter.
A la maison, il me permet de commander les 2 boosts de la VMC depuis plusieurs endroits de la maison avec des temps de fonctionnement différents en fonction du lieu d’appel : De la cuisine pendant 30’ pour le petit boost et 10’ pour le grand boost et de la douche (inter sans fil ni pile Enocean) pour des durées de boost différentes. Et de n’importe où avec nos téléphones.

J’ai encore une fois pas mal galéré pour l’appairer avec HA, alors voici comment faire pour ce module.
Les deux voies doivent chacune s’appairer et se piloter indépendamment. Sur le module est inscrit les deux adresses (exploitables en VLD avec HA)


Dans mon cas : FF AB CE 01 pour la voie 0 et FF AB CE 03 pour la voie 1

Dans HA


switch peha1_0: # Petit boost VMC sur relais 0
  - platform: enocean
    id: [0xFF,0xAB,0xCE,0x01] # Adresse du premier canal (en VLD)
    name: petit_boost_vmc
    channel: 0

switch peha1_1: # Grand boost VMC sur relais 1
  - platform: enocean
    id: [0xFF,0xAB,0xCE,0x03] # Adresse du second canal (en VLD)
    name: grand_boost_vmc
    channel: 1

Pour l’appairage, toujours le même problème avec HA qui ne sait pas le gérer. Il faut appairer le module au dongle USB via Dolphinwiew.
Espérons qu’un jour quelqu’un ayant les compétences saura aller au bout de l’intégration des appareils Enocean.

Beaucoup de recherches ici et là et avec l’aide importante de @bakkerv pour mettre en place un code d’appairage fonctionnel.
Le code d’appairage pour le module Peha 452FU-EBI(M) est le : 80 FF 01 00 08 01 D2
Pour l’exercice, pour définir ce code qui se lit à l’envers, voir ici en page 19

Le module est donc de type EEP D2-01-08. Le code constructeur Peha est 00 01 (46 pour Nodon) avec un peu de lecture là ou
Le FF correspond à la demande d’appairage de toutes les voies (mais une seule à la fois pour ce module, comme çà pas de risque).
Et 80 la demande d’appairage (type d’appairage, attente de réponse, …)

Dans Dolphinwiew :
Après avoir connecté votre dongle à votre PC et connecté le port (COM3 ici) avec F5

Dans l’onglet Telegram transmit, cliquez sur Add operation et sélectionnez un message UTE en double cliquant sur UTE telegram. (UTE = Universal Teach in)
Réduisez le nombre de datas de 8 à 7 et collez le code d’appairage 80 FF 01 00 08 01 D2
Cliquez sur Set ID et cliquez sur EurID. Cela inscrit l’adresse générique de votre dongle dans ID (sender) ici 05 8B 88 77
Entrez l’adresse du canal que vous souhaitez piloter sur votre module (ici le canal 1 avec l’adresse FF AB CE 03)
Mettez votre module Peha en mode appairage en appuyant environ 1 seconde sur le bouton d’appairage (ici LRN2 pour le canal 1). Le bouton se met à clignoter en rouge.
Cliquez sur Execute selected pour envoyer le message.
Le voyant rouge du canal appairé doit s’arrêter de clignoter et rester allumé en rouge quelques secondes. (voir nota*)
Dans les 800 ms vous devriez recevoir le message de retour de votre module sous la forme (UTE/D4) 91 FF 01 00 08 01 D2
(Nota*) Pour un désappairage, effectuer la même procédure, et si le module était préalablement appairé, le voyant va s’arrêter de clignoter et s’éteindre pour valider l’ordre de désappairage.

Refaire la même opération pour appairer le second canal :

  • Changer le DestinationID selon le second ID inscrit sur votre module (Ici FF AB CE 01)
  • Conservez le même ID de votre dongle (ici 05 8B 88 77)
  • Mettez le second canal de votre module en appairage en appuyant sur le second bouton LRN jusqu’à ce qu’il clignote rouge (Ici LRN1 pour le canal 0).
  • Cliquez sur execute selected.

Voilà, y’à plus qu’à reconnecter votre dongle à votre serveur HA et redémarrer.

J’espère que çà vous facilitera la vie

Franck

1 « J'aime »

Merci pour toutes ces informations, il ne me reste plus qu’à essayer, mais c’est très encourageant.
J’ai un dernier équipement où je vais peut-être galérer pour appairage (Profil D2-01-0C) https://media.adeo.com/marketplace/75613776/3bfa4465-7d6e-4677-9ea3-336511237de6.pdf

C’est fort possible que tu ne puisses pas l’appairer à HA. Le code EEP D2-01-0C ne semble actuellement pas encore être pris en compte de manière native dans home assistant.
N’aurais-tu pas plutôt intérêt à prendre de simples relais D2-01-12 et adapter les tensions de sortie avec une diode ?
En tous cas, tiens nous au courant de tes avancées.

De mon coté, je commence à lire le peu de documents existants sur les vannes thermostatiques avec code EEP A5-20-01. Si quelqu’un en a déjà intégré… je suis preneur de toute info :wink:
https://ubiwizz.com/l-offre-produits-ubiwizz/11587-vanne-thermostatique-enocean.html

Salut @Arno ,
bon je migre de jeedom et je rencontre un problème.
J’ai 5 capteurs de Température nodon. J’ai bien branché ma clé enocean et fait l’intégration. Il me la voit sur le bon chemin.
Mais aucun module ne remonte. J’insère les lignes :

sensor:
  - name: Salle de bains
    platform: enocean
    id: [0x##,0x##,0x##,0x##]
    device_class: temperature

En remplacement les # par les numéros de mon module. Je reboot, toujours rien…
Je précise que mes modules sont (étaient) déjà appairés à la clé enocean sur mon jeedom…
Saurais tu m’aiguiller ?

Bonjour,

As-tu inséré ces deux lignes dans ton fichier configuration.yaml ?


enocean:
  device: /dev/ttyUSB0

Puis rebooter …

Salut, Ouep…ça aussi j’ai fait

Bizarre, ce profil était reconnu nativement.
Ce type de profil n’est pas vraiment associé à une clé (il ne reçoit pas d’ordre).
Je dois m’y remettre, je regarderais la configuration que j’avais mise en place

Chez moi les sondes sont toujours opérationnelles, et heureusement vu qu’elles pilotent le chauffage et qu’il n’est toujours pas coupé fin mai… été caniculaire qu’ils avaient predis…

Je pense que notre ami a résolu son problème (avec sa clé)

https://forum.hacf.fr/t/probleme-d-integration-des-cles-enocean-et-aeotec-sur-pi4/4554?u=bubule

Bonjour,

je rouvre le sujet pour les intéressés ! J’ai de l’enocean depuis 2 ans que je gère via un custom_component, en faisant des mise à jour régulières pour suivre les évolutions de HA.
Par contre c’est galère… l’Enocean est un peu le parent pauvre des protocoles alors que plein de gens l’utilisent dans leur coin, et qu’il possède de nombreux avantages !

Pour ceux qui sont intéressé, voici les décodages des trames pour :

Les boutons Nodon Soft Button (identiques à ceux-ci), les Nodon Soft Remote (ici), et les détecteurs de mouvement (ici) :

Binary sensor :

        """EEP: F6-02-02 - Nodon Soft Remote"""
        if packet.rorg == 0xF6:
            press = packet.data[1]
            if press == 0x70:
                self._state = 4
                self.schedule_update_ha_state()
                time.sleep(1)
                self._state = 0
                self.schedule_update_ha_state()
            elif press == 0x50:
                self._state = 3
                self.schedule_update_ha_state()
                time.sleep(1)
                self._state = 0
                self.schedule_update_ha_state()
            elif press == 0x30:
                self._state = 2
                self.schedule_update_ha_state()
                time.sleep(1)
                self._state = 0
                self.schedule_update_ha_state()
            elif press == 0x10:
                self._state = 1
                self.schedule_update_ha_state()
                time.sleep(1)
                self._state = 0
                self.schedule_update_ha_state()
            else:
                self._state = 0
                self.schedule_update_ha_state()
        
        """EEP: D2-03-0A - Nodon Soft Button"""
        if packet.rorg == 0xD2:
            press = packet.data[2]
            if press == 0x01:
                self._state = 1
                self.schedule_update_ha_state()
                time.sleep(1)
                self._state = 0
                self.schedule_update_ha_state()
            elif press == 0x02:
                self._state = 2
                self.schedule_update_ha_state()
                time.sleep(1)
                self._state = 0
                self.schedule_update_ha_state()
            elif press == 0x03:
                self._state = 3
                self.schedule_update_ha_state()
                time.sleep(1)
                self._state = 0
                self.schedule_update_ha_state()
            else:
                self._state = 0
                self.schedule_update_ha_state()

        """EEP: A5-07-03 - Nodon Detecteur de Mouvement"""

        if packet.rorg == 0xA5:
            press = packet.data[4]
            if press == 0x88:
                self._state = "on"
            elif press == 0x08:
                self._state = "off"
            else:
                self._state = "off"
            self.schedule_update_ha_state()

Ainsi que les détecteurs d’ouverture (ici) :

sensor :

class EnOceanDoorDetector(EnOceanSensor):
    """Representation of an EnOcean window handle device.
    EEPs (EnOcean Equipment Profiles):
    - D5-00-01
    """

    def value_changed(self, packet):

        """Update the internal state of the sensor."""
        packet.parse_eep(0x00, 0x01)
        contact_value = packet.parsed['CO']['value']

        if contact_value == 'open':
            self._attr_native_value = STATE_OPEN
        elif contact_value == 'closed':
            self._attr_native_value = STATE_CLOSED

        self.schedule_update_ha_state()

Pour le reste des détecteurs d’ouverture, reprendre le même schéma que le « WindowHandle »

Attention, ce ne sont pas forcément les intégrations les plus propres qui existent, mais elles ont l’avantage de fonctionner relativement bien.

Malgré mes questions sur le Discord, le forum anglais, et le GitHub, je n’ai jamais réussi à proposer la prise en charge de ces composants dans le code officiel pour ne plus utiliser de custom_component…

Si certains sont motivés, faites moi signe !

PS : Les bouton Enocean Enki chez LeroyMerlin sont bien moins chers (je les ai trouvés à en promo à 5€/bouton), et identiques aux Nodon ! Un vrai bon plan quoi :slight_smile:

PS 2 : Quite à faire, voici le lien vers le custom_component entier ici

4 « J'aime »

Je sui très intéressé, mais je ne suis pas encore au point pour l’intégration de mes propres custom component ; peux-tu m’indiquer la méthode d’intégration retenue ?

  1. Tu récupères le dossier ici que tu renommes enocean

  2. Tu le places ensuite dans /config/custom_components/ de ton arborescence HA (à créer s’il /custom_components/ n’existe pas déjà)

Ton arborescence devrait alors ressembler à : /config/custom_components/enocean/ avec tous les fichiers dedans

  1. Si ce n’est pas fait, tu créer ton INTÉGRATION ENOCEAN

  2. Dans ton fichier /config/binary_sensor.yaml, tu peux alors déclarer tes objets Enocean. Par exemple pour un Soft Bouton (ou un bouton Enki en l’occurence) :

  - platform: enocean #Bouton Enki
    name: Bouton Enki 1
    id: [0x81,0x00,0xC4,0x92]

Pour un capteur d’ouverture, c’est dans /config/sensor.yaml que je les place :

  - name: Detecteur_Fenetre_Chambre
    platform: enocean
    id: [0x05,0x0F,0x4C,0x6B]
    device_class: doordetector
  1. Redémarrer HA

Tu peux alors aller observer l’état de ton entité binary_sensor.bouton_enki_1 lorsque tu presses le bouton associé
Idem avec sensor.doordetector_detecteur_fenetre_chambre

Si tu as besoin d’autres exemple, n’hésite pas ! Je t’invite à regarder aussi les fichiers présents dans /custom_components/encoean pour savoir comment catégoriser les objets (binary ou sensor)

4 « J'aime »

Bonjour, je viens de suivre les recommandations pertinentes de l’article où pour remédier à l’impossibilité de piloter un switch à partir de HA (alors que la commande du module à partir de l’interrupteur physique est bien prise en compte dans l’aperçu) on envisage l’utilisation de DolphinView, j’ai suivi la mise en oeuvre proposée (code d’appairage en data, dans ID: ID de la clé, dans ID destination: l’ID du module, envoi du code lors de la mise du module en appairage). Dans STATUS, j’ai laissé 00.
Résultat: rien de changé, est-ce lié au champ STATUS?
merci pour votre réponse.

1 « J'aime »

Bonjour,

Quel type de module souhaites-tu appairer ?
(sinon oui, je ne me souviens pas avoir indiqué un quelconque status. Donc 00 devrait suffire)

Bonsoir,
Merci pour ta réponse, je souhaite appairer un module Ubiwizz (switch) pour allumer une lampe.

Il s’agit bien d’un module relais 2 voies avec EEP D2-01-12 ?
Si oui, reprends tranquillement pas à pas la procédure que j’ai décrite plus haut.

oui, c’est bien un relais 2 voies avec EEP D2-01-12. J e regarde cela. Merci

Bonjour Bubule,
j’ai repris pas à pas la manip que tu as présenté: je n’arrive toujours pas à commander le switch à partir de HA. Il me semble clair que l’appairage ne se fait pas car la lampe continue à clignoter durant 30 secondes environ après l’envoi du code d’appairage en data (A0 02 46 000 12 01 D2), le base ID unique obtenu à partir du SET ID, l’ID du module et un STATUS de 00.
Je reste démuni pour le moment, vois-tu une autre possibilité?
Merci

Merci beaucoup, j’ai fait les modifications sur les boutons et ça fonctionne.
C’est juste que je n’utilise pas les autres fichiers de conf et uniquement configuration.yaml
En cas de mise à jour (de HA), doit-on faire une manip ?
Ne devrait-on pas mettre en place directement un repo HACS (installable plus facilement) ?
Le custom intégration prend-il « le pas » sur l’intégration officielle (si profil EEP déjà supporté par exemple) ?
Excuse-moi pour les questions mais je ne suis pas encore trop au point.
Bonne journée !

Bonjour
Pourrais-tu faire une copie de ton écran avec Dolphinview juste avant le lancement de l’appairage ?

Edit : et si possible de l’étiquette de ton module.

Oui, le custom_component prend entièrement le pas sur l’intégration officielle.

Pour un repo HACS, ça serait le top mais je ne sais pas faire… en cas d’évolution de l’intégration officielle, elle ne sera pas répercutée sur nos instances, puisque le custom est prédominant.
Régulièrement je regarde si des mises à jours pertinentes (globalement autre que des Translations) sont disponibles et je réadapte en insérant les appareils non pris en charge nativement…
J’avoue que c’est un brin galère car à chaque fois il faut refaire le boulot pour recomprendre comment les dev ont modifiés l’intégration…
Le mieux serait que ces appareils soient nativement pris en charge…