Clé ZLINKY lixee avec ZHA + Conbee2_Remonter dans ENERGIE HP/HC

Hello todos,

je voulais partager avec la communauté un petit tuto et en profiter pour partager 2-3 tips pour ceux qui ont (ou qui veulent) la clé ZIGBEE Lixee ZLINKY (à brancher sur Linky pour obtenir via ZIGBEE les datas)

Ce qui suit ne concerne à date que mon usage à savoir un usage et intégration le plus simple possible, sur ZHA (pas ZigbeetoMQTT ou Z2M), avec une clé CONBEE2, et un abonnement fournisseur Elect HP/HC.

  • Installation super simple, RAS.
  • Mise à jour du firmware en OTA (constat qu’il était reçu en V1 alors qu’il existe la V4)
    J’ai mis dans mon fichier de config
zha:
zigpy_config:
ota:
otau_directory: /config/zigpy_ota
ikea_provider: false
ledvance_provider: flase

#Pour le temps de la mise à jour
logger:
default: info
logs:
homeassistant.components.zha: debug
zigpy: debug

Créer le dossier /config/zigpy_ota et j’y ai mis le fichier V4.ota dedans.

J’ai re démarré, attendu 10mn au moins et sans rien lancer comme ligne de commande la mise à jour s’est faite toute seule :slight_smile:

image

Constat dans les logs.

J’ai viré du fichier de config

logger:
default: info
logs:
homeassistant.components.zha: debug
zigpy: debug

et re démarré.

NEXT STEP !!

Constat :
La puissance instantanée remonte bien (toutes les 7 secs je crois) et l’intensité aussi.

MAIS : Ce qui m’embêtait et perdait de l’intérêt pour moi c’était le module « Energie » .
Rien ne remonte (après paramétrage bien sur) sur la 3em entité sur Index de consommation. Effectivement je vous passe les échanges sur Github, pour arriver à confirmer avec des collègues que nous avions bien des valeurs infos HP/HC cachées dans les arcanes des clusters du bidule. (mais non remonté nativement pour le moment par l’intégration sous ZHA :frowning_face:

Bref je vous partage pour ce faire le tips issu de la discussion ici : Intégration zha · Issue #18 · fairecasoimeme/Zlinky_TIC · GitHub)

L’astuce revient à " #skanx :pray: et je voulais vous la partager (car je la trouve simple et top), en attendant que l’intégration ZHA s’améliore nativement. : A nouveau les citations ci dessous reviennent à SKANZ (que je remercie à nouveau)

On peut utiliser le service [zha_toolkit.execute] (GitHub - mdeweerd/zha-toolkit: 🧰 Zigbee Home Assistant Toolkit - service for "rare" Zigbee operations using ZHA on Home Assistant) pour récupérer un attribut dans un cluster Zigbee, et le stocker dans un sensor.

J’ai donc défini deux sensors dans mes templates, et mis en place une automatisation qui appelle zha_toolkit.execute pour mettre à jour ces sensors toutes les minutes à partir des données présentes dans les attributs correspondants aux HC et HP du cluster ZLinkyTICMetering.

Les 2 sensors :

template:
- sensor:
  - name: lixee_zlinky_tic_metering_HC
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    state: unavailable

  - name: lixee_zlinky_tic_metering_HP
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    state: unavailable

L’important ici, c’est le state_class total_increasing qui va permettre de faire des statistiques, et notamment d’utiliser ces sensors dans le dashboard Energy. Le state unavailable permet d’éviter que quelque chose se serve des sensors avant que l’automatisation ait eu le temps de les initialiser.
Comme c’est un sensor sur lequel on va faire des stats, il faut aussi que la première donnée insérée dans ce sensor total_increasing soit le point de départ (le nombre de Wh affichés sur le compteur dans notre cas). Ça permet à HA de stocker des incréments horaires à partir de la somme totale des Wh (je sais pas si je suis très clair là…)
Par exemple, si on met state: 0, on se retrouve avec une conso de départ instantanée égale à l’historique du compteur, ce qui fausse un peu les données. En mettant state: unavailable, on s’assure que la première donnée insérée viendra bien du compteur lors du premier lancement de l’automatisaton.

Et l’automatisation :

alias: Read ZLinky_TIC HC + HP every minute
description: ''
trigger:
  - platform: time_pattern
    hours: '*'
    minutes: /1
    seconds: '0'
condition: []
action:
  - service: zha_toolkit.execute
    data:
      command: attr_read
      ieee: *"l'adresse de ta clé zlinky"*  ((sans les guillements !!))
      cluster: 1794
      attribute: 256
      state_id: sensor.lixee_zlinky_tic_metering_HC
      allow_create: false
  - service: zha_toolkit.execute
    data:
      command: attr_read
      ieee: "*l'adresse de ta clé zlinky"*  (sans les guillements !!)
      cluster: 1794
      attribute: 258
      state_id: sensor.lixee_zlinky_tic_metering_HP
      allow_create: false
mode: single

Dans data, Il faut remplacer la valeur ieee: « l’adresse de zlinky » par l’IEEE de ton Zlinky (dans Device info sur la fiche du device).
Avec state_id: sensor.x on stocke la valeur de l’attribut Zigbee dans l’état de notre sensor.
Au départ, j’avais spécifié les valeurs cluster: et attribute: en hexa, comme dans « manage clusters » mais j’ai l’impression qu’il me les reconvertit en decimal base 10 quand je sauvegarde.

Et en bonus, un template de sensor qui fait la somme HC + HP :

template:
  - name: lixee_zlinky_tic_metering_HC_HP_sum
    unit_of_measurement: "Wh"
    device_class: energy
    state_class: total_increasing
    state: >-
      {% if is_state('sensor.lixee_zlinky_tic_metering_HC', 'unavailable') %}
        unavailable
      {% elif is_state('sensor.lixee_zlinky_tic_metering_HP', 'unavailable') %}
        unavailable
      {% else %}
        {% set HC = states('sensor.lixee_zlinky_tic_metering_HC') | int %}
        {% set HP = states('sensor.lixee_zlinky_tic_metering_HP') | int %}
        {{ HC + HP }}
      {% endif %}

Ici, ce qui pourrait être une simple addition est en réalité un peu plus compliqué, car il faut encore gérer l’état initial des sensors. Avec ‹ unavailable ›, on s’en sort et ça fonctionne bien.

Au final, ce qui est bien avec 2 sensors séparés pour les HC et HP, c’est qu’on peut leur associer un coût différent dans le dashboard Energy.

Fin de citation de SKANZ (bravo encore !! )

Du coup le résultat après ces petites manips très simples :
image

Et après paramétrage de « Energie »

Au top !!!

A vous de jouer, et vraiment le ZLINKY répond parfaitement du coup à ce que j’attendais et me permet d’oublier définitivement l’intégration ENEDIS (de bonne volonté mais hasardeuse)

A toi qui veut un device Zigbee à brancher sur le LINKY et que tu utilises ZHA et une CONBEE 2, tu peux donc y aller !! :upside_down_face:

8 « J'aime »

Super.
Pour info, on peut mettre le nom de l’entité à la place de l’adresse IEEE si on veut se faciliter la recherche.

J’ai une clef similaire, pas encore commercialisé.
Pour avoir une estimation de la consommation instantanée en Watts, on peut faire:

- platform: derivative
  source: sensor.linky_1e010130_smartenergy_metering_summation_delivered
  name: current_summation_derived
  round: 3
  unit_time: h
  unit: kW
  time_window: "00:01:00"

Perso j’ai été étonné que ma conso en VA est quasiment le double de la conso en Watts quand la consommation est au minimum nocturne.

bonjour
je viens de recevoir ma zlinky lixee et souhaite l’intégrer avec ce tuto, mais je ne sais pas comment on procède à la mise à jour du firmware en OTA.
Alors si vous avez 5 mn pour m’expliquer je prends.
bonne journée

Je test aussi. Je pense qu’il faut télécharger le fw .ota sur cette page : Release ZLinky_TIC Router v5.0 · fairecasoimeme/Zlinky_TIC · GitHub

Tu le mets dans le bon dossier en suivant cette partie:

Pour l’instant pour moi ca ne fonctionne pas. Je fouille.

Bon du coup je viens de me rendre compte que le firmware est à jour en v4. Alors que l’integration dit 1… Je pense que ce sera suffisant le temps qu’on trouve une solution pour mettre a jour en v5

bonjour Landaisbenj
je vais de mon coté attendre un peu la sortie de la nouvelle version de Z2M qui devrait pas tarder :

bonne journée

#Landaisbenj La maj de Z2M a eu lieu, ma clé est correctement reconnu maintenant. Je devrai avoir des remontées d’ici qques heures.
bonne journée

Mince je suis sur zha pour le moment. Je verrai bien dans le temps, j’ai pas encore eu le temps de m’y repencher :confused:

Wow. Merci pour le tuto :heart:. Vraiment super utile et ca a ete relativement vite setup de mon cote!

Zlinky recu hier et j’ai tout qui fonctionne impec avec ZHA.

Si jamais il y en a qui se posent encore des question avec ZHA, j’ai ecrit un petit post en essayant d’expliquer ce que j’ai suivi pour y arriver (et ca inclu ce tuto): ZLinky_TIC - ou connecter simplement Linky en zigbee - #154 par max

Grand merci pour ce tuto qui ma bien aider.
Tout est ok, sauf que j’ai une erreur toute les minutes a cause de l’automatisation pour récupérer les infos.

Logger: homeassistant.components.automation.lecture_zlinky_tic_hc_hp_every_minute
Source: custom_components/zha_toolkit/utils.py:706
Integration: Automatisation (documentation, issues)
First occurred: 18:52:00 (2 occurrences)
Last logged: 18:52:00

Read ZLinky_TIC HC + HP every minute: Error executing script. Unexpected error for call_service at pos 1: 'NoneType' object has no attribute 'request_callback_rsp'
While executing automation automation.lecture_zlinky_tic_hc_hp_every_minute
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 367, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 570, in _async_call_service_step
    await service_task
  File "/usr/src/homeassistant/homeassistant/core.py", line 1636, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1673, in _execute_service
    await cast(Callable[[ServiceCall], Awaitable[None]], handler.job.target)(
  File "/config/custom_components/zha_toolkit/__init__.py", line 693, in toolkit_service
    raise handler_exception
  File "/config/custom_components/zha_toolkit/__init__.py", line 657, in toolkit_service
    await handler(
  File "/config/custom_components/zha_toolkit/__init__.py", line 742, in command_handler_default
    await default.default(
  File "/config/custom_components/zha_toolkit/default.py", line 33, in default
    await handler(app, listener, ieee, cmd, data, service, params, event_data)
  File "/config/custom_components/zha_toolkit/zcl_attr.py", line 241, in attr_read
    await attr_write(*args, **kwargs)
  File "/config/custom_components/zha_toolkit/zcl_attr.py", line 282, in attr_write
    result_read = await u.cluster_read_attributes(
  File "/config/custom_components/zha_toolkit/utils.py", line 706, in cluster_read_attributes
    return await cluster.read_attributes(attrs, manufacturer=manufacturer)
  File "/usr/local/lib/python3.9/site-packages/zigpy/zcl/__init__.py", line 297, in read_attributes
    result = await self.read_attributes_raw(to_read, manufacturer=manufacturer)
  File "/usr/local/lib/python3.9/site-packages/zigpy/quirks/__init__.py", line 231, in read_attributes_raw
    results = await super().read_attributes_raw(
  File "/usr/local/lib/python3.9/site-packages/zigpy/device.py", line 265, in request
    result, msg = await self._application.request(
  File "/usr/local/lib/python3.9/site-packages/zigpy_znp/zigbee/application.py", line 439, in request
    return await self._send_request(
  File "/usr/local/lib/python3.9/site-packages/zigpy_znp/zigbee/application.py", line 1401, in _send_request
    response = await self._send_request_raw(
  File "/usr/local/lib/python3.9/site-packages/zigpy_znp/zigbee/application.py", line 1287, in _send_request_raw
    self._znp.request_callback_rsp(
AttributeError: 'NoneType' object has no attribute 'request_callback_rsp'

d’ou viendrais le problème?

pour info j’ai le firmware v5 du zlinky et une clef sonoff zigbee 3.0.

Edit:
j’ai trouvé le problème je pense, j’ai débrancher rebrancher ma clef zigbee. Comme j’ai une rallonge usb, ca du bouger au niveau de connectique.
J’attends les remontées dans le panneau energie. a suivre…

Edit 2:
Tout est ok, ca fait plaisir.
zlinky

Hello tout le monde,
Après plusieurs mois à batailler avec les plugin Enedis et Enedisgateway2MQTT qui ne fonctionne pas chez moi 90% du temps. J’ai finalement acheté cette clé. Mon compteur est à l’extérieur à plus de 20m. Malgré celà, j’ai pu grace à un relais judicieusement placé à l’extérieur le faire fonctionner sans souci. Tout remonte maintenant en temps réel et parfaitement.
J’ai quelques questions:

  • J’ai cru comprendre qu’il y avait 2 modes de fonctionnement historique ou standard et que le standard était plus complet. Pour basculer sur le mode standard, est-ce que ça se fait sur la clé ? sur le linky ? ou chez l’opérateur ?
  • Est-ce qu’il est possible de récupérer automatiquement le tarif de l’opérateur (en eur/kwh) sur le compteur ?

pour le mode standard c’est par ton opérateur qui faut faire la demande.
Pour les tarifs je crois pas que c’est possible, tu peu voir juste le type de contrat ( BASE, HC).

regarde sur le github tu as toutes les infos des clusters GitHub - fairecasoimeme/Zlinky_TIC: Téléinformation Linky autoalimenté ZigBee 3.0

Bonjour,

J’aimerais intégrer les résultats de mon Zlinky + Conbee2 + Z2M dans ENERGIE HP/HC.
Je suis sûr que cela ne doit qu’une adaptation de ce que Kfran78 a expliqué dans son tuto mais comme je débute vraiment sur home assistant, je ne vois pas comment l’adapter a l’utilisation via Z2M

Pour l’instant j’ai ça qui fonctionne, mais comment faire pour en faire des statistiques incréments horaires et les insérer dans le module ENERGIE

Merci d’avance de votre aide

A vue de nez, il suffit simplement d’intégrer les 2 sensors HCHC (Heures Creuses) et HCHP (Heures pleines j’imagine) dans le module Energie (Paramètres > Tableaux de bord > Energie):

Ce qui doit permettre d’obtenir automatiquement un suivi de ce type (après un délai initial compris entre 1 et 2 heures le temps d’avoir le premier calcul horaire). si j’avais été plus malin, j’aurais aussi mis des noms de sensors plus parlants…

A noter que le prix du kWh EDF est de 0,1470 euro/kWh en heures creuses et 0,1841 euro/kWh en heures pleines auquel il faut ajouter le coût de l’abonnement qui n’est pas intégré dans ce tableau.

c’est ce que j’avais pensé mais cela ne fonctionne pas :
Il me met que j’ai consommé 1Kw par heure:

C’est pour cela que je pense qu’il faut faire des statistiques sur les increments de W par heure comme l’expliquais Kfran78 dans son tuto sauf que comme j’utilise Z2M, mais je suppose que j’ai pas besoin de l’automatisation.

par exemple pour le sensor HCHC j’ai ça cette nuit:
image

Reste a comprendre comment faire des stats d’increments de W par heure sur ces sensors

Effectivement, il y a un problème, la sensibilité du sensor semble être d’un kWh, le mien mesure des Wh par incréments de 10 secondes, mais j’utilise l’intégration ZHA, pas Z2M, je ne peux pas comparer.
image

A priori, il faut paramétrer 3 décimales pour les kWh, il y a peut-être d’autres paramètres dans l’intégration (un intervalle de mise à jour ?) mais je ne sais pas, n’utilisant pas Z2M, cf. ici: https://www.zigbee2mqtt.io/devices/ZLinky_TIC.html

Normalement l’intégration directe dans le tableau d’énergie des 2 sensors HCHP et HCHC ou BASE (ou Index 1 à 10 en mode Standard) fonctionnent sans souci sans rien faire de spécial (du moins avec Z2M)

J’ai trouvé, le pb était que dans Z2M, le kWh precision était sur 0, donc Z2M ne renvoyais que les KW, en le passant a 3 (donc envoi 3 chiffres après la virgule: les Watt), cela fonctionne maintenant correctement dans le tableau d’énergie.
Merci de votre aide.

petit question a part: il y a un intérêt a passer en mode standard ?

ca envoie plus d’info mais bon c’est pas forcement utile
surtout que c’est long : il faut demander a ton fournisseur l’électricité qui fait suivre la demande a Enedis

Moi je trouve que ça un intérêt. Déjà les index sont mieux géré qu’en mode historique, tu as plus d’info tel que l’abonnement choisi, des plages horaires plus détaille, la mesure de la tension. L’index base n’est pas partagé avec l’index HCHC et du coup c’est pas le boxon quand tu change d’abonnement. Et enfin tu as pas mal d’info sur l’état physique de ton compteur. En ce qui me concerne , je suis chez ohm énergie. J’ai fait la demande l’après midi via la page Facebook pour basculer en mode standard et le compteur a basculé la nuit suivante.