Zlinky_TIC
Zlinky_TIC copied to clipboard
Intégration zha
Hello,
Plus un ticket de demande qu'un vrai bug. Mais c'est essentiel pour l'utilisation. Qui s'occupe de l'intégration via ZHA de zlinky ? Merci
Bonjour, Pour le moment personne à ma connaissance, je n'ai pas eu le temps de vraiment regarder comment faire la requête auprès des dev ZHA. J'imagine qu'il n'y a pas grand chose à faire mais peut-être que cela requiert un zha-quirks. J'essaie de regarder dans la semaine ...
Bonjour,
merci beaucoup. Dans le doute, j'avais créé un ticket ici : https://github.com/zigpy/zigpy-zigate/issues/103
Bonjour, Je pense que c'est plus sur ZHA qui faut faire la demande. Zigpy est capable de gérer l'appareil je pense. C'est plus l'intégration vers HA qui faut faire
Cela semble s'intégrer nativement dans ZHA:
Mais il y a comme un problème d'unité ou de virgule.
Etonnant chez moi, j'ai beaucoup moins d'informations .
Même en supprimant et relançant l'association ... :
EDIT : vous ne semblez pas utiliser de zigate. Cela est peut être la différence. (zigpy plus à jour chez vous)
J'utilise effectivement une passerelle zzh avec firmware Z-Stack supportée par zigpy-znp, et il s'agit d'une version de développement de Home Assistant mise à jour le 31 octobre.
J'ai la même chose que @pdecat avec une zigate
J'imagine qu'il doit manquer quelques informations :)
Le fait que le module apparaisse comme "Router" semble indiquer qu'il faudra probablement un zha_quirks pour mieux le configurer non ?
@MichaelBitard tu es sous quel version de hass ? vraiment étonné de ne pas voir les mêmes fonctionnalités :S j'espère pas une version casé du zlinky :/
EDIT : tu as quoi dans "informations zigbee" ? @fairecasoimeme une idée ce qui peut cause la non exposition de certaines fonctionnalités ?
merci :)
La dernière à jour normalement:
System Health
version | core-2021.11.2 |
---|---|
installation_type | Home Assistant OS |
dev | false |
hassio | true |
docker | true |
user | root |
virtualenv | false |
python_version | 3.9.7 |
os_name | Linux |
os_version | 5.10.17-v7 |
arch | armv7l |
timezone | Europe/Paris |
Home Assistant Community Store
GitHub API | ok |
---|---|
Github API Calls Remaining | 5000 |
Installed Version | 1.15.2 |
Stage | running |
Available Repositories | 904 |
Installed Repositories | 7 |
Home Assistant Cloud
logged_in | false |
---|---|
can_reach_cert_server | ok |
can_reach_cloud_auth | ok |
can_reach_cloud | ok |
Home Assistant Supervisor
host_os | Home Assistant OS 6.6 |
---|---|
update_channel | stable |
supervisor_version | supervisor-2021.10.8 |
docker_version | 20.10.8 |
disk_total | 13.9 GB |
disk_used | 7.0 GB |
healthy | true |
supported | true |
board | rpi3 |
supervisor_api | ok |
version_api | ok |
installed_addons | Terminal & SSH (9.2.1), Syncthing (1.18.3), Signal (10.16.0), Z-Wave JS (0.1.47) |
Lovelace
dashboards | 2 |
---|---|
resources | 4 |
views | 9 |
mode | storage |
Il est où le panel "informations zigbee" ?
La dernière à jour normalement:
System Health
version core-2021.11.2 installation_type Home Assistant OS dev false hassio true docker true user root virtualenv false python_version 3.9.7 os_name Linux os_version 5.10.17-v7 arch armv7l timezone Europe/Paris Home Assistant Community Store Home Assistant Cloud Home Assistant Supervisor Lovelace Il est où le panel "informations zigbee" ?
Just ici :)
Ha ok, en anglais c'est zigbee device signature :)
{
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4151, maximum_buffer_size=127, maximum_incoming_transfer_size=100, server_mask=11264, maximum_outgoing_transfer_size=100, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": 260,
"device_type": "0x0053",
"in_clusters": [
"0x0000",
"0x0003",
"0x0702",
"0x0b01",
"0x0b04",
"0xff66"
],
"out_clusters": [
"0x0019"
]
},
"242": {
"profile_id": 41440,
"device_type": "0x0061",
"in_clusters": [
"0x0021"
],
"out_clusters": [
"0x0021"
]
}
},
"manufacturer": "LiXee",
"model": "ZLinky_TIC",
"class": "zigpy.device.Device"
}
J'imagine que si quirk il y a, ça sera ici : https://github.com/zigpy/zha-device-handlers par contre mes compétences s'arrêtent là malheureusement.
Ha ok, en anglais c'est zigbee device signature :)
{ "node_descriptor": "NodeDescriptor(logical_type=<LogicalType.Router: 1>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress|RxOnWhenIdle|MainsPowered|FullFunctionDevice: 142>, manufacturer_code=4151, maximum_buffer_size=127, maximum_incoming_transfer_size=100, server_mask=11264, maximum_outgoing_transfer_size=100, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=False, *is_full_function_device=True, *is_mains_powered=True, *is_receiver_on_when_idle=True, *is_router=True, *is_security_capable=False)", "endpoints": { "1": { "profile_id": 260, "device_type": "0x0053", "in_clusters": [ "0x0000", "0x0003", "0x0702", "0x0b01", "0x0b04", "0xff66" ], "out_clusters": [ "0x0019" ] }, "242": { "profile_id": 41440, "device_type": "0x0061", "in_clusters": [ "0x0021" ], "out_clusters": [ "0x0021" ] } }, "manufacturer": "LiXee", "model": "ZLinky_TIC", "class": "zigpy.device.Device" }
J'imagine que si quirk il y a, ça sera ici : https://github.com/zigpy/zha-device-handlers par contre mes compétences s'arrêtent là malheureusement.
La mise à jour a permit de remonter plus d'informations. (étonnant car il est noté nul part dans le changelog un upgrade de la lib zigpy )
Plus qu'à corriger l'unité/virgule et vérifier qu'il y ai bien une évolution des métriques :)
Après quelques jours de suivis, la remontée est hératique, parfois j'en ai tous les heures, parfois plusieurs heures sans rien. Espérons qu'une intégration ZHA réel corrige tout ça :)
Pour info, j'ai ouvert une issue pour l'ajout du quirk : https://github.com/zigpy/zha-device-handlers/issues/1146
J'ai creusé un peu la question pour faire un quirk.
Il y a quelques subtilités sur comment remonter les infos qui ne fonctionnent pas encore.
La puissance par exemple: avec Zlinky c'est remonté sur le endpoint 1, Cluster 0x0B04, attribut 0x050F.
Si l'on regarde dans gérer les clusters, c'est l'attribut apparent_power
.
Hors, celui qui est remonté par ZHA comme sensor, c'est
active_power
.
Ces deux valeurs proviennent du même cluster (0xB04, "ElectricalMeasurement") et il semblerait que ZHA ne permette qu'un sensor par cluster : https://github.com/zigpy/zha-device-handlers/issues/605#issuecomment-753713044
L'info n'est pas super récente. Je ne sais pas si c'est encore le cas. Si ça l'est, je pense qu'il faut écrire un quirks qui prend la valeur de "apparent_power" et la renvoie pour "active_power".
Pour ce qui est du voltage, je crois que le mode historique ne renvoit pas cette info, c'est seulement le mode standard. @fairecasoimeme pourra surement confirmer. Ayant mon linky en mode historique je ne peux pas tester.
Les info de courrant fonctionnent bien.
L'index de consommation fonctionne correctement mais il faut explicitement demander la valeur dans le menu "gérer les clusters" pour que ce soit mis à jour. Je ne sais pas pourquoi c'est comme ça, mais je ne suis pas le seul dans ce cas : https://github.com/fairecasoimeme/Zlinky_TIC/issues/19#issue-1048835803 Il faut peut être spécifier dans le quirk sur c'est une valeur à actualiser. C'est à creuser...
J'ai commencé à faire le quirk et pour l'instant j'en suis là :
from zigpy.quirks import CustomDevice
from zigpy.types import basic
from zhaquirks import Bus, LocalDataCluster
from zigpy.profiles import zha
from zhaquirks.const import (
DEVICE_TYPE,
ENDPOINTS,
INPUT_CLUSTERS,
MODELS_INFO,
OUTPUT_CLUSTERS,
PROFILE_ID,
)
from zigpy.zcl.clusters.general import (
Basic,
GreenPowerProxy,
Identify,
Ota,
)
from zigpy.zcl.clusters.smartenergy import Metering
from zigpy.zcl.clusters.homeautomation import (
ElectricalMeasurement,
MeterIdentification
)
LIXEE = "LiXee"
class ZLinkyTIC(CustomDevice):
"""ZLinky_TIC from LiXee"""
signature = {
MODELS_INFO: [(LIXEE, "ZLinky_TIC")],
ENDPOINTS:{
1: {
PROFILE_ID: zha.PROFILE_ID,
DEVICE_TYPE: zha.DeviceType.METER_INTERFACE,
INPUT_CLUSTERS: [
Basic.cluster_id,
Identify.cluster_id,
Metering.cluster_id,
MeterIdentification.cluster_id,
ElectricalMeasurement.cluster_id,
0xff66, # Manufacturer Specific
],
OUTPUT_CLUSTERS : [
Ota.cluster_id
]
},
242: {
PROFILE_ID: 41440,
DEVICE_TYPE: 0x0061,
INPUT_CLUSTERS: [
GreenPowerProxy.cluster_id
],
OUTPUT_CLUSTERS: [
GreenPowerProxy.cluster_id
]
}
}
}
replacement= {}
Pour le endpoint 242, je n'ai rien trouvé dans zigpy pour le PROFILE_ID
et DEVICE_TYPE
, donc j'ai hardcodé les valeurs.
Il faut maintenant remplir le dictionnaire replacement
. Il faudra probablement créer un cluster ElectricalMeasurement
custom pour faire ce que je décrivais plus haut (renvoyer la valeur de apparent_power
pour active_power
), et peut être d'autres choses, mais pour l'instant je ne sais pas encore bien comment faire ça.
Je crois que développer un quirk n'est pas ce qu'il faudrait faire (ou en tout cas pas la seule chose à faire).
Le problème vient du fait que ZHA n'a pas de sensor pour apparent_power
mais en a un pour active_power
(pour la partie power). Visiblement c'est pas bien compliqué de rajouter un sensor pour un nouvel attribut. cf ici (et également les classes du dessous ElectricalMeasurementRMSCurrent
, etc...)
Il faut juste spécifier correctement les attributs du cluster. L'unité Volt-Ampères existe déjà dans Home Asisstant, pas besoin de la céer.
Je crois que quelque chose comme ça devrait être suffisant :
@MULTI_MATCH(channel_names=CHANNEL_ELECTRICAL_MEASUREMENT)
class ElectricalMeasurementApparentPower(ElectricalMeasurement, id_suffix="apparent_power"): # pas sûr pour le id_suffix
"""Apparent Power measurement."""
SENSOR_ATTR = "apparent_power"
_device_class = DEVICE_CLASS_POWER
_unit = POWER_VOLT_AMPERE
_div_mul_prefix = "ac_power"
@property
def should_poll(self) -> bool:
"""Poll indirectly by ElectricalMeasurementSensor."""
return False
Cependant ça va bloquer. En effet, les devices de la classe power
ne supportent (pas encore) les Volt-Ampères comme unité : https://github.com/home-assistant/core/issues/57236
On peut toujours dire qu'il s'agit de Watt en changeant POWER_VOLT_AMPERE
par POWER_WATT
. Puisqu'un Watt est homogène à une puissance et un Volt-Ampère aussi. Physiquement ce n'est pas faux mais c'est pas la bonne unité en pratique. (Pour les histoire d'homogénéité, voir ici spécifiquement la section Principes généraux d'homogénéité)
Je crois qu'il faudra quand même faire un quirk pour définir les ac_power_multiplier
et ac_power_divisor
(0X0604 et 0X0605 du cluster ElectricalMeasurement). Sinon le sensor va multiplier par None
et on aura pas de valeur exploitable.
Bonne nouvelle, il suffit "juste" de rajouter un nouveau sensor comme je le disais dans mon dernier post et ça fonctionne (enfin presque) :
J'ai testé en éditant le fichier homeassistant/components/zha/sensor.py
. Dans une installation Docker il est situé dans /usr/src/homeassistant
. Si vous faites la manip, attention à bien importer POWER_VOLT_AMPERE
dans le from homeassistant.const import ...
Pas de problèmes avec l'unité en Volt-Ampères finalement. Il reste cependant le problème de l'actualisation. Tout comme l'indexe de consommation, il faut explicitement demander via l'interface "gérer les clusters" la valeur du champ pour qu'il soit mis à jour.
Peut-être est-ce lié à cette isssue https://github.com/fairecasoimeme/Zlinky_TIC/issues/24 ?
J'ai fait la PR qui est ici : https://github.com/home-assistant/core/pull/59857
Il reste cependant le problème de l'actualisation. Tout comme l'indexe de consommation, il faut explicitement demander via l'interface "gérer les clusters" la valeur du champ pour qu'il soit mis à jour.
La réponse semble avoir été apportée dans la PR: https://github.com/home-assistant/core/pull/59857#discussion_r751705878
Il reste cependant le problème de l'actualisation. Tout comme l'indexe de consommation, il faut explicitement demander via l'interface "gérer les clusters" la valeur du champ pour qu'il soit mis à jour.
La réponse semble avoir été apportée dans la PR: home-assistant/core#59857 (comment)
Oui effectivement je n'avais pas vu qu'il fallait rajouter l'attribut à cet endroit également ! Malheureusement ce n'était pas le seul soucis qui bloquait l'actualisation 😕. J'ai testé en faisant la correction en local et l'actualisation ne se fait toujours pas. Le problème ne vient peut-être pas de ZHA 🤔. Un autre indice qui va dans ce sens, c'est que l'indexe de consommation est déjà intégré dans ZHA ici (et également la partie reporting ici). L'actualisation fonctionne sur d'autres appareils Zigbee, mais pas pour le Zlinky_TIC. Je corrigerai la PR en ajoutant la partie reporting et aussi les test qui sont manquants pour que la PR soit acceptée. Il restera le quirk pour convertir les Wh en KWh pour l'indexe de consommation, mais ça, ça ne devrait pas être trop compliqué :crossed_fingers:
La Pull Request sur ZHA est mergée 🥳 ! Ici le lien de la pull request pour le quirk : https://github.com/zigpy/zha-device-handlers/pull/1161 Le quirk sert juste à convertir les Wh en kWh pour pourvoir l'intégrer dans la partie Energie de home assistant.
Malheureusement, l'actualisation de l'index de consommation ne fonctionne pas. Cependant j'avais dit une bétise. J'ai une autre prise en zigbee qui rapport l'indexe et effectivement celui ci ne semple pas s'actualiser tout seul. Il doit falloir creuser du côté ZHA pour ça. Mais l'actualisation de la puissance en VA fonctionne elle !
@ralmn, est-ce que dans votre version du external_converters
pour le ZLinky_TIC l'index de consommation s'actualise bien tout seul sans qu'il soit besoin d'aller requêter la valeur manuellement ?
Non je suis obligé (comme pour pas mal de valeur) de lire la valeur périodiquement. Comme indiqué en #24 il faudra attendre une nouvelle version du firmware
Hello,
Donc si je résume l'état des lieux :
- soucis d'unité : corrigé via un Quirk merci @N0ciple !
- soucis de valeur qui ne se met pas à jour (update à faire ou attendre la version du firmware qui corrige ça )
- soucis des autres sensors qui ne remontent pas : corrigé via le Quirk.
J'ai tout bon ? ;)
D'autres choses avant d'avoir d'avoir une intégration au petits ognons ?
@max5962 C'est presque ça. Pour ce qui est du troisième point, ce n'est pas via un quirk mais via une modification directement dans l’intégration zha.
Pour info les sensors dispo dans zha (avant la PR) étaient rms_voltage, rms_current, active_power et current_summ_delivered (index de consommation). active_power n'est pas dispo sur ZLinky_TIC, c'est pour ça que j'ai rajouté le sensor apparent_power lui fonctionne. (Il y a une petite difference physique entre les deux, apparent_power, c'est la grandeur en Volt-Ampères que l'on peut voir sur son linky quand on appuie sur les boutons et qui correspond à la puissance apparente soutirée).
Si on résume les sensors dispo, ça nous fait : voltage, courrant, puissance apparente et indexe de consommation. Ça me semlble être les sensors plus pertinent. A savoir: le voltage n'est disponnible que sur les Linky en mode standard, pas en mode historique.
Les autres sensors (comme au pif : l'option tarifaire et la puissance souscrite) ne sont pas rapportés dans ZHA. Pour les rajoutés il faudrait faire une autre modification. Et pour le coup, pas sûr que ça soit accepté puisque ça ne servirait que pour le Zlinky_TIC.
Voilà, j'espères que c'est plus clair :ok_hand:
EDIT : Dans l'état actuel des choses, il y a 3 choses à attendre qui sont, dans l'ordre :
- que la PR pour le quirk soit mergée + intégré dans une release
- qu'il y ait une nouvelle release de Home assistant qui prenne ma PR + update la version des quirks
- que le nouveau firmware du ZLinky_TIC soit dispo (pour la partie actualisation automatique)
@N0ciple apparent_power
remonte parfaitement et se met à jour tout seul, merci !
La correction de l'unité Wh en kWh fonctionne aussi parfaitement et la mise à jour se fait toute seule également.
À noter, je vois ceci dans les logs :
2021-11-20 10:30:10 WARNING (Recorder) [homeassistant.components.sensor.recorder] sensor.lixee_zlinky_tic_electrical_measurement_apparent_power has unknown unit VA
2
- u ZLinky_TIC soit dispo (pour la partie actualisation automatique)
Une nouvelle version est disponible ou vous avez modifié votre instance locale ?
Une nouvelle version est disponible ou vous avez modifié votre instance locale ?
Il s'agit d'un environnement de développement local.
La correction de l'unité Wh en kWh fonctionne aussi parfaitement et la mise à jour se fait toute seule également.
À noter, je vois ceci dans les logs :
2021-11-20 10:30:10 WARNING (Recorder) [homeassistant.components.sensor.recorder] sensor.lixee_zlinky_tic_electrical_measurement_apparent_power has unknown unit VA 2
Oui effectivement, l'unité Volt-Ampère existe mais je crois qu'elle n'a pas été ajouté comme une unité de puissance, ce qui explique le warning. Mais ça n'empêche pas le bon fonctionnement je crois. La documentation ne donne que les Watts comme unité de puissance : https://developers.home-assistant.io/docs/core/entity/sensor/
@pdecat avec la modif du quirk en local, même l'index de conso en kWh est bien updaté automatiquement ? Pour ma part je croyais que c'était le cas mais en fait c'était juste mis à jour au redémarrage de HA ou en requêtant la valeur à la main.
Bonjour j'ai acheté un module ZLinky_TIC que j'ai recu recemment mais je n'arrive pas a avoir la conso ! Il a été reconnu comme le votre dans le module zigbee de HA mais après je n'ai pas vraiment compris comment vous avez pu avoir la conso instantannée! dsl je suis pas un psecialiste....une petite explication ou tuto serait cool merci d'avance a vous
Bonjour @seblang,
Toutes les personnes ici (moi y compris) qui ont des infos que vous n'avez pas ont modifié les fichiers en local à la main pour avoir de nouvelles fonctionnalités.
La bonne nouvelle c'est que nous avons fait en sorte que ces modifications soient intégrées dans home assistant. Cependant, depuis que ces modifications ont été intégrées dans le code de home assistant, il n'y a pas eu de mise à jour de publiées.
Si tout va bien, dans la prochaine version de home assistant (2021.12.0 j'imagine), la puissance apparente soutirée sera disponible. Il y a également un quirk qui permettra entre autre de faire la conversion Wh vers kWh pour l'indexe de consommation; Cependant, je ne suis pas sûr que ce quirk sera intégré dans la prochaine version de home assistant, il faudra peut-être attendre encore un peu.
Et pour finir, l'indexe de consommation ne se met pas à jour tout seul. Je crois que ça sera réglé dans le prochain firmware sur ZLinky_TIC. Mais là encore, il faudra attendre encore peu qu'il soit publié.