Zigbee: Capteur de qualité de l'air "Smart Air House keeper"

Hello @AlexTrovato !

J’ai acheté un capteur de qualité de l’air Zigbee (Smart Air Housekeeper), pour surveiller la qualité de l’air chez moi parce qu’à Bangkok c’est pas fou en ce moment :smiley:

Côté Zigbee2mqtt, tout est reconnu :

Le state envoyé JSON :

Maintenant, dans Gladys je n’ai pas le PM2.5 ni le formaldehyd pour l’instant :

Ce serait quoi la marche à suivre pour ajouter ça proprement à l’intégration Zigbee2mqtt ?

Je peux le faire moi même mais je voulais ton retour :slight_smile:

1 « J'aime »

Ce n’est pas très compliqué, mais il faut le savoir.

Déjà, il faut être certain que la catégories/le type existent dans Gladys.


Il est conseillé de partir de la page de ton device TuYa TS0601_smart_air_house_keeper control via MQTT | Zigbee2MQTT, puis de regarder le détail de l’« expose » pour ta feature (nous ne gérons pas les options) :

Ici, tu peux voir que ta feature est de type « numeric », que le nom de son attribut est formaldehyd, et tu as même son unité µg/m³.


Côté service zigbee2mqtt, les features sont découpées par type de valeur (voir fichiers dans le folder server/services/zigbee2mqtt/exposes) :

  • binary
  • numeric
  • enum → liste de valeurs
  • composite → composition « complexe »

Puis, dans chacun de ces fichiers, tu as différents attributs dans un objet « complexe » :

  • type : le type z2m
  • writeValue : la manière de transformer une valeur Gladys vers z2m
  • readValue : la manière de tranformer une valeur de z2m vers Gladys
  • feature : les valeurs par défaut pour les features de ce type
  • names : le mapping entre l’attribut z2m et la feature Gladys

Dans ton cas, c’est l’attribut « names » qui t’intéresse.
Dans celui-ci, tu trouveras des sous-objets, organisés de la sorte :

  • clé = attribut z2m
  • valeur = objet
    • feature = la feature Gladys correspondant à l’attribut z2m (category / type sont les minimum à renseigner)

Les informations read_only et has_feedback sont déterminées à partir de l’attribut access de l’expose.
Les informations min / max, unit sont déterminées à partir des attributs du même nom de l’expose.

Les unit peuvent être génériques, à ajouter dans ce fichier server/services/zigbee2mqtt/utils/features/mapUnit.js.

Toute surcharge ajoutée dans pour le mapping de ta feature peut être forcée en ajoutant l’attribut forceOverride: true à la feature définie (cf linkquality du fichier numeric). Avec cette option, les attributs calculés « génériquement » seront surchargés s’ils sont définits dans ton mapping.


Je pense que tu as toutes les informations pour ajouter un mapping de feature « basique ».

Pour les cas complexes (enum ou composite), ce sera d’autres explications plus détaillées.


Dis moi si tu t’en sors avec ça @pierre-gilles

9 « J'aime »

C’est magnifiquement expliqué

3 « J'aime »

C’est très clair @AlexTrovato, merci d’avoir pris le temps :slight_smile:

Je pense que ce message peut-être gardé quelque part si jamais on a des développeurs qui veulent nous aider à intégrer plus d’appareils Zigbee !

3 « J'aime »

@pierre-gilles
en faire un petit tuto serait bien car il vrai que c’est la partie manquante/frustrante pour voir si on peut aider car on a pas forcement le temps de devoir parcourir tout le forum pour recueillir par-ci par-là les infos nécessaires alors que ceux qui ont les connaissances nécessaires peuvent à moindre frais et à moindre temps partager leurs connaissances à travers un tuto et ensuite cela démultiplie les possibilités de dév par d’autres ! Le savoir ne vaut que quand il est partagé :wink:

1 « J'aime »

2 messages ont été scindés en un nouveau sujet : Est-ce que mon onduleur est compatible Zigbee2mqtt?