Module Zigbee2MQTT non reconnu

Bonjour à tous !

Je débute dans Home assistant et j’ai acheté pas mal de périphériques Zigbee (détecteurs d’ouverture, sirène, prises …). Pour précision, j’utilise une clé zigbee Popp et Zigbee2MQTT.

J’ai reçu mon module de porte de garage (fiche produit), mais il n’est pas reconnu par Zigbee2MQTT. J’ai donc regardé la documentation.
Sachant que ce module est un Tuya, j’ai également regardé la documentation adaptée à Tuya : documentation Tuya

J’ai créé un fichier pour y faire mon « external converter » et le module passe bien en « Supporté » dans Zigbee2MQTT. J’ai bien inséré « fz.tuya_data_point_dump » dans le « fromZigbee » du converter. Mais le problème, c’est que dans les logs je ne vois aucun message de ce type : zigbee-herdsman-converters:tuya_data_point_dump: Received DP #103 from 0x123456789abcdef with raw data '{"dp":103,"datatype":2,"data":[0,0,0,215]}': type='commandDataResponse', datatype='value', value='215', known DP# usage: ["maxTemp","moesSboostHeatingCountdownTimeSet","neoDuration","hyExternalTemp","trsIlluminanceLux","msVacancyDelay","hochActivePower"]
Même lorsque j’ouvre la porte de garage avec l’interrupteur classique (alors qu’il devrait envoyer un message pour prévenir que l’état de la porte a changé).

Après avoir fait quelques recherches, j’ai trouvé cette PR dont le module ressemble énormément au mien (même vendor, même modelId). Il y a juste le model (GDC311ZBQ1 au lieu de PJ-ZGD01) et le manufacturerName qui change (_TZE200_wfxuhoea au lieu de _TZE200_nklqjk62).

J’aimerais donc savoir si je loupe quelque chose. Si les logs que je recherche doivent bien arriver dans l’onglet « Journaux » de l’interface Zigbee2MQTT et si c’est bien en modifiant l’état de la porte avec l’interrupteur que je pourrai récupérer ce log avec les infos.

2ème question, je vois qu’à l’étape suivante je devrai ajouter mon 1er data point. Pour cela, la doc indique qu’il faut ajouter du code dans « node_modules/zigbee-herdsman-converters/converters/fromZigbee.js ». C’est peut-être idiot, mais je ne trouve vraiment pas ce fichier. Ca doit être les vendors de Zigbee2MQTT, mais je ne vois pas où se trouve ce dossier sur le serveur.

Je sais que je pourrais simplement créer une issue sur le repo Github Zigbee2MQTT pour que quelqu’un crée le converter, mais j’aimerais comprendre et y arriver par moi même pour savoir comment faire les prochaine fois et en même temps aider la communauté :slightly_smiling_face:

Je dois avouer qu’une aide de votre part me ferais énormément de bien après 3 jours de recherches …
S’il faut plus de détails, n’hésitez pas à me demander !


[center]## System Health

version core-2022.2.6
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.98
arch x86_64
timezone Europe/Paris
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 5000
Installed Version 1.22.0
Stage running
Available Repositories 1049
Downloaded Repositories 3
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 7.4
update_channel stable
supervisor_version supervisor-2022.01.1
docker_version 20.10.9
disk_total 63.3 GB
disk_used 6.0 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons Duck DNS (1.14.0), Mosquitto broker (6.0.1), Zigbee2mqtt (1.23.0-1), Studio Code Server (4.1.0), Terminal & SSH (9.3.0), Node-RED (11.0.0), Home Assistant Google Drive Backup (0.105.2), Samba share (9.5.1)
Lovelace
dashboards 1
resources 2
views 4
mode storage
[/center] ___

Salut,

Perso, j’ai mis le fichier ici (HA Supervised)
image
Ajouté le chargement du module dans le fichier configuration.yaml
image
Et avec le bon contenu, ça se charge
A noter qu’il ya des trucs en ‹ whitelabel › qui permettent de mettre plusieurs nom/fabricant sur un même device

    {
        fingerprint: [{modelID: 'TS011F', manufacturerName: '_TZ3000_mvn6jl7x'},
            {modelID: 'TS011F', manufacturerName: '_TZ3000_raviyuvk'}, {modelID: 'TS011F', manufacturerName: '_TYZB01_hlla45kx'},
            {modelID: 'TS011F', manufacturerName: '_TZ3000_92qd4sqa'}],
        model: 'TS011F_2_gang_wall',
        vendor: 'TuYa',
        description: '2 gang wall outlet',
        toZigbee: extend.switch().toZigbee.concat([tz.moes_power_on_behavior, tz.tuya_backlight_mode]),
        fromZigbee: extend.switch().fromZigbee.concat([fz.moes_power_on_behavior, fz.tuya_backlight_mode]),
        exposes: [e.switch().withEndpoint('l1'), e.switch().withEndpoint('l2'),
            exposes.enum('power_on_behavior', ea.ALL, ['on', 'off', 'previous']),
            exposes.enum('backlight_mode', ea.ALL, ['LOW', 'MEDIUM', 'HIGH'])],
        whiteLabel: [{vendor: 'ClickSmart+', model: 'CMA30036'}],
        endpoint: (device) => {
            return {'l1': 1, 'l2': 2};
        },
        meta: {multiEndpoint: true},
    },

Avant toute chose, est-ce que tu as mis les log en debug ? SI tu ne l’as pas mis, c’est normal que tu n’es aucun retour.

Concernant ta 2ème question, ce fichier n’est pas à modifier (sauf si tu sais ce que tu fais). Le fichier que tu as créé et ajouté à ton external_converters suffit. En fait, le fichier que tu as créé vient se « greffer » au fichier node_modules/zigbee-herdsman-converters/converters/fromZigbee.js donc inutile de modifier ce dernier

@Pulpy , merci pour ta réponse. J’ai bien fais comme tu as dis. Ajouter un fichier GDC311ZBQ1.js dans le dossier config/zigbee2mqtt. Dans ce fichier, j’ai mis ce code :

const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;
const tuya = require("zigbee-herdsman-converters/lib/tuya");

const definition = {
    // Since a lot of Tuya devices use the same modelID, but use different data points
    // it's usually necessary to provide a fingerprint instead of a zigbeeModel
    fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_wfxuhoea'}],
    model: 'GDC311ZBQ1',
    vendor: 'LoraTap',
    description: 'Garage door opener',
    fromZigbee: [
        fz.ignore_basic_report, // Add this if you are getting no converter for 'genBasic'
        fz.tuya_data_point_dump, // This is a debug converter, it will be described in the next part
    ],
    toZigbee: [
        tz.tuya_data_point_test, // Another debug converter
    ],
    // onEvent: tuya.onEventSetTime, // Add this if you are getting no converter for 'commandMcuSyncTime'
    configure: async (device, coordinatorEndpoint, logger) => {
        const endpoint = device.getEndpoint(1);
        await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
    },
    exposes: [
        // Here you should put all functionality that your device exposes
    ],
};

module.exports = definition;

Grâce à ça, le module est passé en statut « Supporté » dans l’interface Zigbee2MQTT.
Le problème, c’est que dans l’onglet « Etat », je retrouve seulement "linkquality": 224, je n’ai aucune autre information sur l’état d’ouverture de la porte et je n’arrive pas à les récupérer.


@Carthage merci pour ta réponse également. J’ai bien mis la configuration « log_level » à debug.
Voici ma configuration complète si ça peut aider :

data_path: /config/zigbee2mqtt
external_converters:
  - GDC311ZBQ1.js
devices: devices.yaml
groups: groups.yaml
homeassistant: true
permit_join: false
mqtt:
  base_topic: zigbee2mqtt
serial:
  port: /dev/ttyUSB0
  adapter: ezsp
advanced:
  log_level: debug
  pan_id: 6754
  channel: 11
  network_key:
    - 1
    - 3
    - 5
    - 7
    - 9
    - 11
    - 13
    - 15
    - 0
    - 2
    - 4
    - 6
    - 8
    - 10
    - 12
    - 13
  availability_blocklist: []
  availability_passlist: []
device_options: {}
blocklist: []
passlist: []
queue: {}
frontend:
  port: 8099
experimental: {}
availability: false
socat:
  enabled: false
  master: pty,raw,echo=0,link=/tmp/ttyZ2M,mode=777
  slave: tcp-listen:8485,keepalive,nodelay,reuseaddr,keepidle=1,keepintvl=1,keepcnt=5
  options: '-d -d'
  log: false

Pour ta réponse à ma 2ème question, je dois louper quelque chose alors. Parce que mon fichier external_converters contient bien la const definition, mais d’après ce que je lis dans le point 5 de la doc spécial Tuya, je dois également modifier les fichiers convertes/fromZigbee et converters/toZigbee : Support new Tuya devices | Zigbee2MQTT
C’est d’ailleurs ce qu’a fait la personne qui a réalisé une PR pour un nouveau device qui ressemble énormément au mien : https://github.com/Koenkk/zigbee-herdsman-converters/pull/3714/files

Donc les logs doivent bien remonter au moment où j’ouvre/ferme la porte de garage « manuellement » pour que le module envoie son nouvel état ?
Et je dois bien les retrouver dans l’interface Zigbee2MQTT, onglet Journaux et avec ces filtres : Niveau: all, Filtrer sur le texte: vide et Log level: debug

Merci pour votre aide !

Salut

c’est logique, il manque le contenu de ce tableau

Regarde le module « similaire »

    {
        fingerprint: [{modelID: 'TS0601', manufacturerName: '_TZE200_nklqjk62'}],
        model: 'PJ-ZGD01',
        vendor: 'TuYa',
        description: 'Garage door opener',
        fromZigbee: [fz.matsee_garage_door_opener, fz.ignore_basic_report],
        toZigbee: [tz.matsee_garage_door_opener, tz.tuya_data_point_test],
        whiteLabel: [{vendor: 'MatSee Plus', model: 'PJ-ZGD01'}],
        configure: async (device, coordinatorEndpoint, logger) => {
            const endpoint = device.getEndpoint(1);
            await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
        },
        exposes: [exposes.binary('trigger', ea.STATE_SET, true, false).withDescription('Trigger the door movement'),
            e.action(['trigger']), exposes.binary('garage_door_contact', ea.STATE, true, false)],
    },

(c’est juste le milieu du fichier )

C’est dans le cas où ton/tes data point ne sont pas encore défini dans les fichiers fromZigbee et toZigbee.

Et comme a dit @Pulpy, tu n’as rien dans la partie exposes donc c’est normal que tu n’es aucune information

@Pulpy et @Carthage merci pour votre retour.

Effectivement je n’ai rien mis dans exposes car je ne savais pas encore quoi mettre.
Je pensais que grâce au fz.tuya_data_point_dump et au tz.tuya_data_point_test, j’allais récupérer des logs en appairant à nouveau le module et que dans ces logs j’aurais récupéré les data points qui m’auraient servis à compléter ce champs exposes et à ajouter la config des data points dans les fichiers fromZigbee.js et toZigbee.js.

Si je vous comprends bien, vous me conseillez d’utiliser les converters du module « similaire » et de reprendre également son exposes. Je trouve ça bizarre d’utiliser le converter fz.matsee_garage_door_opener alors que mon vendor est Loratap au lieu de Matsee, mais j’ai essayé quand même en modifiant seulement fingerprint.manufacturerName, model, whiteLabel.vendor et whiteLabel.model :

const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;
const tuya = require("zigbee-herdsman-converters/lib/tuya");

const definition = {
    // Since a lot of Tuya devices use the same modelID, but use different data points
    // it's usually necessary to provide a fingerprint instead of a zigbeeModel
    fingerprint: [
        {
            // The model ID from: Device with modelID 'TS0601' is not supported
            // You may need to add \u0000 at the end of the name in some cases
            modelID: 'TS0601',
            // The manufacturer name from: Device with modelID 'TS0601' is not supported.
            manufacturerName: '_TZE200_wfxuhoea'
        },
    ],
    model: 'GDC311ZBQ1',
    vendor: 'Tuya',
    description: 'Garage door opener',
    fromZigbee: [fz.matsee_garage_door_opener, fz.ignore_basic_report, fz.tuya_data_point_dump],
    toZigbee: [tz.matsee_garage_door_opener, tz.tuya_data_point_test],
    // onEvent: tuya.onEventSetTime, // Add this if you are getting no converter for 'commandMcuSyncTime'
    whiteLabel: [{vendor: 'Loratap', model: 'GDC311ZBQ1'}],
    configure: async (device, coordinatorEndpoint, logger) => {
        const endpoint = device.getEndpoint(1);
        await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
    },
    exposes: [exposes.binary('trigger', ea.STATE_SET, true, false).withDescription('Trigger the door movement'),
            e.action(), exposes.binary('garage_door_contact', ea.STATE, true, false)],
};

module.exports = definition;

Ensuite j’ai redémarré l’intégration Zigbee2MQTT. Puis j’ai reset et appairé à nouveau le module.
Bonne nouvelle, maintenant, dans l’onglet Etat du module, j’ai plus de données. Par contre tout est à null.

{
    "action": null,
    "garage_door_contact": null,
    "linkquality": 220,
    "trigger": null
}

Voici mes logs qui suivent l’apparairage avec la config ci-dessus (désolé il y a aussi des logs de 2 autres modules lave vaisselle et lave ligne) :

 Received MQTT message on 'zigbee2mqtt/bridge/request/permit_join' with data '{"device":null,"time":254,"transaction":"j8h41-2","value":true}'
Info Zigbee: allowing new devices to join.
Info MQTT publish: topic 'zigbee2mqtt/bridge/response/permit_join', payload '{"data":{"time":254,"value":true},"status":"ok","transaction":"j8h41-2"}'
Warning Device '0xa4c138f12c3108ac' left the network
Info MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0xa4c138f12c3108ac","ieee_address":"0xa4c138f12c3108ac"},"type":"device_leave"}'
Info MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"left_network","meta":{"friendly_name":"0xa4c138f12c3108ac"},"type":"device_removed"}'
Info Device '0xa4c138f12c3108ac' joined
Info MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0xa4c138f12c3108ac","ieee_address":"0xa4c138f12c3108ac"},"type":"device_joined"}'
Info Configuring '0xa4c138f12c3108ac'
Info MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":{"friendly_name":"0xa4c138f12c3108ac"},"type":"device_connected"}'
Info MQTT publish: topic 'homeassistant/switch/0xa4c138f12c3108ac/switch_trigger/config', payload '{"availability":[{"topic":"zigbee2mqtt/bridge/state"}],"command_topic":"zigbee2mqtt/0xa4c138f12c3108ac/set/trigger","device":{"identifiers":["zigbee2mqtt_0xa4c138f12c3108ac"],"manufacturer":"Tuya","model":"Garage door opener (GDC311ZBQ1)","name":"0xa4c138f12c3108ac"},"json_attributes_topic":"zigbee2mqtt/0xa4c138f12c3108ac","name":"0xa4c138f12c3108ac trigger","payload_off":"false","payload_on":"true","state_topic":"zigbee2mqtt/0xa4c138f12c3108ac","unique_id":"0xa4c138f12c3108ac_switch_trigger_zigbee2mqtt","value_template":"{% if value_json.trigger %} true {% else %} false {% endif %}"}'
Info MQTT publish: topic 'homeassistant/sensor/0xa4c138f12c3108ac/action/config', payload '{"availability":[{"topic":"zigbee2mqtt/bridge/state"}],"device":{"identifiers":["zigbee2mqtt_0xa4c138f12c3108ac"],"manufacturer":"Tuya","model":"Garage door opener (GDC311ZBQ1)","name":"0xa4c138f12c3108ac"},"enabled_by_default":true,"icon":"mdi:gesture-double-tap","json_attributes_topic":"zigbee2mqtt/0xa4c138f12c3108ac","name":"0xa4c138f12c3108ac action","state_topic":"zigbee2mqtt/0xa4c138f12c3108ac","unique_id":"0xa4c138f12c3108ac_action_zigbee2mqtt","value_template":"{{ value_json.action }}"}'
Info MQTT publish: topic 'homeassistant/binary_sensor/0xa4c138f12c3108ac/garage_door_contact/config', payload '{"availability":[{"topic":"zigbee2mqtt/bridge/state"}],"device":{"identifiers":["zigbee2mqtt_0xa4c138f12c3108ac"],"manufacturer":"Tuya","model":"Garage door opener (GDC311ZBQ1)","name":"0xa4c138f12c3108ac"},"json_attributes_topic":"zigbee2mqtt/0xa4c138f12c3108ac","name":"0xa4c138f12c3108ac garage door contact","payload_off":false,"payload_on":true,"state_topic":"zigbee2mqtt/0xa4c138f12c3108ac","unique_id":"0xa4c138f12c3108ac_garage_door_contact_zigbee2mqtt","value_template":"{{ value_json.garage_door_contact }}"}'
Info MQTT publish: topic 'homeassistant/sensor/0xa4c138f12c3108ac/linkquality/config', payload '{"availability":[{"topic":"zigbee2mqtt/bridge/state"}],"device":{"identifiers":["zigbee2mqtt_0xa4c138f12c3108ac"],"manufacturer":"Tuya","model":"Garage door opener (GDC311ZBQ1)","name":"0xa4c138f12c3108ac"},"enabled_by_default":false,"entity_category":"diagnostic","icon":"mdi:signal","json_attributes_topic":"zigbee2mqtt/0xa4c138f12c3108ac","name":"0xa4c138f12c3108ac linkquality","state_class":"measurement","state_topic":"zigbee2mqtt/0xa4c138f12c3108ac","unique_id":"0xa4c138f12c3108ac_linkquality_zigbee2mqtt","unit_of_measurement":"lqi","value_template":"{{ value_json.linkquality }}"}'
Info Starting interview of '0xa4c138f12c3108ac'
Info MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"friendly_name":"0xa4c138f12c3108ac","ieee_address":"0xa4c138f12c3108ac","status":"started"},"type":"device_interview"}'
Info MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"interview_started","meta":{"friendly_name":"0xa4c138f12c3108ac"},"type":"pairing"}'
Debug Received MQTT message on 'homeassistant/switch/0xa4c138f12c3108ac/switch_trigger/config' with data '{"availability":[{"topic":"zigbee2mqtt/bridge/state"}],"command_topic":"zigbee2mqtt/0xa4c138f12c3108ac/set/trigger","device":{"identifiers":["zigbee2mqtt_0xa4c138f12c3108ac"],"manufacturer":"Tuya","model":"Garage door opener (GDC311ZBQ1)","name":"0xa4c138f12c3108ac"},"json_attributes_topic":"zigbee2mqtt/0xa4c138f12c3108ac","name":"0xa4c138f12c3108ac trigger","payload_off":"false","payload_on":"true","state_topic":"zigbee2mqtt/0xa4c138f12c3108ac","unique_id":"0xa4c138f12c3108ac_switch_trigger_zigbee2mqtt","value_template":"{% if value_json.trigger %} true {% else %} false {% endif %}"}'
Debug Received MQTT message on 'homeassistant/sensor/0xa4c138f12c3108ac/action/config' with data '{"availability":[{"topic":"zigbee2mqtt/bridge/state"}],"device":{"identifiers":["zigbee2mqtt_0xa4c138f12c3108ac"],"manufacturer":"Tuya","model":"Garage door opener (GDC311ZBQ1)","name":"0xa4c138f12c3108ac"},"enabled_by_default":true,"icon":"mdi:gesture-double-tap","json_attributes_topic":"zigbee2mqtt/0xa4c138f12c3108ac","name":"0xa4c138f12c3108ac action","state_topic":"zigbee2mqtt/0xa4c138f12c3108ac","unique_id":"0xa4c138f12c3108ac_action_zigbee2mqtt","value_template":"{{ value_json.action }}"}'
Debug Received MQTT message on 'homeassistant/binary_sensor/0xa4c138f12c3108ac/garage_door_contact/config' with data '{"availability":[{"topic":"zigbee2mqtt/bridge/state"}],"device":{"identifiers":["zigbee2mqtt_0xa4c138f12c3108ac"],"manufacturer":"Tuya","model":"Garage door opener (GDC311ZBQ1)","name":"0xa4c138f12c3108ac"},"json_attributes_topic":"zigbee2mqtt/0xa4c138f12c3108ac","name":"0xa4c138f12c3108ac garage door contact","payload_off":false,"payload_on":true,"state_topic":"zigbee2mqtt/0xa4c138f12c3108ac","unique_id":"0xa4c138f12c3108ac_garage_door_contact_zigbee2mqtt","value_template":"{{ value_json.garage_door_contact }}"}'
Debug Received MQTT message on 'homeassistant/sensor/0xa4c138f12c3108ac/linkquality/config' with data '{"availability":[{"topic":"zigbee2mqtt/bridge/state"}],"device":{"identifiers":["zigbee2mqtt_0xa4c138f12c3108ac"],"manufacturer":"Tuya","model":"Garage door opener (GDC311ZBQ1)","name":"0xa4c138f12c3108ac"},"enabled_by_default":false,"entity_category":"diagnostic","icon":"mdi:signal","json_attributes_topic":"zigbee2mqtt/0xa4c138f12c3108ac","name":"0xa4c138f12c3108ac linkquality","state_class":"measurement","state_topic":"zigbee2mqtt/0xa4c138f12c3108ac","unique_id":"0xa4c138f12c3108ac_linkquality_zigbee2mqtt","unit_of_measurement":"lqi","value_template":"{{ value_json.linkquality }}"}'
Info Successfully configured '0xa4c138f12c3108ac'
Debug Received Zigbee message from '0xa4c138f12c3108ac', type 'readResponse', cluster 'genBasic', data '{"stackVersion":0}' from endpoint 1 with groupID 0
Debug Received Zigbee message from '0xa4c138f12c3108ac', type 'readResponse', cluster 'genBasic', data '{"dateCode":""}' from endpoint 1 with groupID 0
Debug Received Zigbee message from '0xa4c138f12c3108ac', type 'readResponse', cluster 'genBasic', data '{}' from endpoint 1 with groupID 0
Info Successfully interviewed '0xa4c138f12c3108ac', device has successfully been paired
Info Device '0xa4c138f12c3108ac' is supported, identified as: Tuya Garage door opener (GDC311ZBQ1)
Info MQTT publish: topic 'zigbee2mqtt/bridge/event', payload '{"data":{"definition":{"description":"Garage door opener","exposes":[{"access":3,"description":"Trigger the door movement","name":"trigger","property":"trigger","type":"binary","value_off":false,"value_on":true},{"access":1,"description":"Triggered action (e.g. a button click)","name":"action","property":"action","type":"enum"},{"access":1,"name":"garage_door_contact","property":"garage_door_contact","type":"binary","value_off":false,"value_on":true},{"access":1,"description":"Link quality (signal strength)","name":"linkquality","property":"linkquality","type":"numeric","unit":"lqi","value_max":255,"value_min":0}],"model":"GDC311ZBQ1","options":[],"supports_ota":false,"vendor":"Tuya"},"friendly_name":"0xa4c138f12c3108ac","ieee_address":"0xa4c138f12c3108ac","status":"successful","supported":true},"type":"device_interview"}'
Info MQTT publish: topic 'zigbee2mqtt/bridge/log', payload '{"message":"interview_successful","meta":{"description":"Garage door opener","friendly_name":"0xa4c138f12c3108ac","model":"GDC311ZBQ1","supported":true,"vendor":"Tuya"},"type":"pairing"}'
Debug Received Zigbee message from '0xa4c138f12c3108ac', type 'read', cluster 'genTime', data '["localTime"]' from endpoint 1 with groupID 0
Debug Received Zigbee message from '0xa4c138f12c3108ac', type 'attributeReport', cluster 'genBasic', data '{"65506":54,"65508":0,"appVersion":70}' from endpoint 1 with groupID 0
Debug Received Zigbee message from '0xa4c138f12c3108ac', type 'attributeReport', cluster 'genBasic', data '{"65503":"\r!�)f\u000e!�)\u0012"}' from endpoint 1 with groupID 0
Debug Received Zigbee message from 'lave_linge_buanderie', type 'readResponse', cluster 'haElectricalMeasurement', data '{"activePower":0,"rmsCurrent":0,"rmsVoltage":234}' from endpoint 1 with groupID 0
Info MQTT publish: topic 'zigbee2mqtt/lave_linge_buanderie', payload '{"current":0,"energy":0.58,"linkquality":144,"power":0,"power_outage_memory":"restore","state":"ON","voltage":234}'
Debug Received Zigbee message from 'lave_vaisselle_cuisine', type 'readResponse', cluster 'haElectricalMeasurement', data '{"activePower":0,"rmsCurrent":0,"rmsVoltage":234}' from endpoint 1 with groupID 0
Info MQTT publish: topic 'zigbee2mqtt/lave_vaisselle_cuisine', payload '{"current":0,"energy":1.03,"linkquality":120,"power":0,"power_outage_memory":null,"state":"ON","voltage":234}'
Debug Received Zigbee message from 'lave_linge_buanderie', type 'attributeReport', cluster 'genBasic', data '{"65506":48,"65508":0,"appVersion":68}' from endpoint 1 with groupID 0
Debug Received Zigbee message from 'lave_linge_buanderie', type 'readResponse', cluster 'haElectricalMeasurement', data '{"activePower":0,"rmsCurrent":0,"rmsVoltage":235}' from endpoint 1 with groupID 0
Info MQTT publish: topic 'zigbee2mqtt/lave_linge_buanderie', payload '{"current":0,"energy":0.58,"linkquality":148,"power":0,"power_outage_memory":"restore","state":"ON","voltage":235}'
Debug Received Zigbee message from 'lave_vaisselle_cuisine', type 'readResponse', cluster 'haElectricalMeasurement', data '{"activePower":0,"rmsCurrent":0,"rmsVoltage":235}' from endpoint 1 with groupID 0
Info MQTT publish: topic 'zigbee2mqtt/lave_vaisselle_cuisine', payload '{"current":0,"energy":1.03,"linkquality":120,"power":0,"power_outage_memory":null,"state":"ON","voltage":235}'
Debug Received Zigbee message from 'lave_linge_buanderie', type 'attributeReport', cluster 'seMetering', data '{"currentSummDelivered":[0,58]}' from endpoint 1 with groupID 0
Info MQTT publish: topic 'zigbee2mqtt/lave_linge_buanderie', payload '{"current":0,"energy":0.58,"linkquality":144,"power":0,"power_outage_memory":"restore","state":"ON","voltage":235}'
Debug Received Zigbee message from 'lave_vaisselle_cuisine', type 'attributeReport', cluster 'genBasic', data '{"65506":48,"65508":0,"appVersion":68}' from endpoint 1 with groupID 0
Debug Received Zigbee message from 'lave_vaisselle_cuisine', type 'attributeReport', cluster 'seMetering', data '{"currentSummDelivered":[0,103]}' from endpoint 1 with groupID 0
Info MQTT publish: topic 'zigbee2mqtt/lave_vaisselle_cuisine', payload '{"current":0,"energy":1.03,"linkquality":116,"power":0,"power_outage_memory":null,"state":"ON","voltage":235}'
Debug Received Zigbee message from 'lave_linge_buanderie', type 'readResponse', cluster 'haElectricalMeasurement', data '{"activePower":0,"rmsCurrent":0,"rmsVoltage":235}' from endpoint 1 with groupID 0
Info MQTT publish: topic 'zigbee2mqtt/lave_linge_buanderie', payload '{"current":0,"energy":0.58,"linkquality":148,"power":0,"power_outage_memory":"restore","state":"ON","voltage":235}'
Debug Received Zigbee message from 'lave_vaisselle_cuisine', type 'readResponse', cluster 'haElectricalMeasurement', data '{"activePower":0,"rmsCurrent":0,"rmsVoltage":235}' from endpoint 1 with groupID 0
Info MQTT publish: topic 'zigbee2mqtt/lave_vaisselle_cuisine', payload '{"current":0,"energy":1.03,"linkquality":116,"power":0,"power_outage_memory":null,"state":"ON","voltage":235}'
Debug Received Zigbee message from '0xa4c138f12c3108ac', type 'attributeReport', cluster 'genBasic', data '{"65506":54,"65508":0,"appVersion":70}' from endpoint 1 with groupID 0

Désolé si j’ai du mal à comprendre, mais je débute dans tout ça et j’avoue que ça me perd un peu. Mais j’ai envie d’y arriver quand même.
Je précise que j’utilise l’intégration Zigbee2MQTT, il n’y a pas besoin d’utiliser la version Edge pour avoir plus de logs ?

Et sinon, voici ce que j’ai dans les détails de l’appareil côté Home Assistant :

Bonne nouvelle, en cliquant sur Trigger la porte s’ouvre et se ferme ! Par contre l’état de la porte ne remonte pas via les 2 capteurs :thinking:
Savez-vous pourquoi ?

Edit : Quelques minutes plus tard, je suis retourné dans l’onglet Etat du module sur Zigbee2MQTT et je retrouve seulement "linkquality": 212. Bizarre que ça disparaisse …

Merci

Bon ça progresse.
Pour les capteurs, tu es certain que mécaniquement ils fonctionnent ? Alignement/Espacement OK ?

Oui il y a du mieux :slight_smile:
Oui je l’ai testé avec l’application Smart life vu que c’est du Tuya et tout fonctionnait bien, du coup j’ai du mal à comprendre pourquoi il ne remonte pas bien avec Zigbee2MQTT…
Je précise que je viens d’éditer mon précédent message pendant que tu répondais. Je ne sais pas si tu as vu mes dernières modifications ?

Alors je suis pas certain mais je ne pense pas qu’il soit possible d’avoir le module visible à la fois dans l’appli tuya et dans z2m…
En tout ça il faut s’assurer que ça ne casse pas l’appairage
Ensuite pour les capteurs qui ne captent pas, on arrive à la limite de ce que je sais bricoler avec les converters… A par rechercher d’autres modèles de modules dans ce genre pour comparer je vois pas trop

Il est normal que tu n’es pas de retour d’informations.
Concernant ton trigger, tu demandes de seulement définir un état et pour ton garage_door_contact, je ne suis même pas sûr que cette constante existe.

Essaies de remplacer :

  • Pour ton trigger : ea.STATE_SET par ea.ALL
  • Pour ton garage_door_contact : EA.STATE par ea.STATE_GET

A la suite de ça, tu relances Z2M et tu devrais normalement voir du changement

@Pulpy, non effectivement, vu qu’on reset le module pour l’appairé dans Zigbee2MQTT, il n’est plus visible sur Tuya. Mais en tout cas j’avais testé sur Tuya avant de l’appairé à Zigbee2MQTT et tout fonctionnait bien via l’application.
Merci en tout cas pour ton aide.


@Carthage Je pense comprendre un peu plus exposes via tes explications :

  • ea.STATE_SET pour envoyer une donnée au module
  • ea.STATE_GET pour récupérer un état du module
  • ea.ALL pour faire les 2
    C’est bien ça ?

J’ai remplacé trigger : ea.STATE_SET par ea.ALL. Il n’y a pas de différence mais je pense que c’est normal, car cette entité permet de mettre le contact pour ouvrir/fermer la porte. Mais ce n’est pas cette entité qui récupère l’état si je ne dis pas de bêtise. En tout cas elle envoie bien le signal (même si le bouton ne fonctionne pas à tous les coups, je ne sais pas pourquoi).

Pour l’entité garage_door_contact j’ai bien remplacé par ea.STATE_GET.

Voici le résultat :

  • Porte de garage_trigger n’a pas changé et envoie bien l’action d’ouvrir/fermer la porte. Par contre le bouton reste toujours en « désactivé », je ne sais pas si c’est normal
  • Porte de garage_action est passé de Inconnu à None. Il a l’air de se raffraichir lorsque j’ouvre/ferme la porte de garage, mais il reste toujours à None
  • Porte de garage_trigger reste toujours à Inconnu

Et voici ma config mise à jour :

const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;
const tuya = require("zigbee-herdsman-converters/lib/tuya");

const definition = {
    // Since a lot of Tuya devices use the same modelID, but use different data points
    // it's usually necessary to provide a fingerprint instead of a zigbeeModel
    fingerprint: [
        {
            // The model ID from: Device with modelID 'TS0601' is not supported
            // You may need to add \u0000 at the end of the name in some cases
            modelID: 'TS0601',
            // The manufacturer name from: Device with modelID 'TS0601' is not supported.
            manufacturerName: '_TZE200_wfxuhoea'
        },
    ],
    model: 'GDC311ZBQ1',
    vendor: 'Tuya',
    description: 'Garage door opener',
    fromZigbee: [fz.matsee_garage_door_opener, fz.ignore_basic_report, fz.tuya_data_point_dump],
    toZigbee: [tz.matsee_garage_door_opener, tz.tuya_data_point_test],
    // onEvent: tuya.onEventSetTime, // Add this if you are getting no converter for 'commandMcuSyncTime'
    whiteLabel: [{vendor: 'Loratap', model: 'GDC311ZBQ1'}],
    configure: async (device, coordinatorEndpoint, logger) => {
        const endpoint = device.getEndpoint(1);
        await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
    },
    exposes: [
        exposes.binary('trigger', ea.ALL, true, false).withDescription('Trigger the door movement'),
        e.action(),
        exposes.binary('garage_door_contact', ea.STATE_GET, true, false)
    ],
};

module.exports = definition;

Essaies de remplacer e.action() par e.action(['trigger'])

Merci pour l’idée, mais ça ne change rien au bouton trigger et aux 2 capteurs :confused:

Pour être sûr, tu redémarre bien Z2M après chaque modification de ton converter ?

Et si tu peux rechercher ton device dans ton fichier database.db et le mettre ici, ça pourrai éventuellement nous aider

Oui je redémarre bien Z2M après chaque modification du fichier zigbee2mqtt/configuration.yaml.
Par contre je suis désolé mais je ne sais pas où je peux trouver ce fichier database.db.
Voici ce que j’ai dans config/zigbee2mqtt :
image

Attention, c’est bien après chaque modification de ton fichier GDC311ZBQ1.js qu’il faut redémarrer.

En théorie, le fichier database.db doit être dans ton dossier zigbee2mqtt :thinking:
C’est dans ce fichier que tu trouvera toutes les informations utiles à ton device.
Pour l’exemple, tu devrais avoir ceci pour chacun de tes devices :

{
  "id": 9,
  "type": "EndDevice",
  "ieeeAddr": "0x54ef4410001a16dc",
  "nwkAddr": 11172,
  "manufId": 4151,
  "manufName": "LUMI",
  "powerSource": "Battery",
  "modelId": "lumi.airmonitor.acn01",
  "epList": [
    1
  ],
  "endpoints": {
    "1": {
      "epId": 1,
      "inClusterList": [],
      "outClusterList": [],
      "clusters": {
        "genBasic": {
          "attributes": {
            "modelId": "lumi.airmonitor.acn01",
            "appVersion": 24
          }
        },
        "msTemperatureMeasurement": {
          "attributes": {
            "measuredValue": 1998
          }
        },
        "msRelativeHumidity": {
          "attributes": {
            "measuredValue": 5961
          }
        },
        "genPowerCfg": {
          "attributes": {
            "batteryVoltage": 28
          }
        },
        "aqaraOpple": {
          "attributes": {
            "247": {
              "type": "Buffer",
              "data": [
                1,
                33,
                57,
                11,
                3,
                40,
                19,
                4,
                33,
                168,
                1,
                5,
                33,
                19,
                0,
                6,
                36,
                2,
                0,
                0,
                0,
                0,
                8,
                33,
                24,
                1,
                10,
                33,
                239,
                219,
                12,
                32,
                1,
                100,
                41,
                202,
                7,
                101,
                33,
                138,
                23,
                102,
                33,
                101,
                0,
                103,
                32,
                1
              ]
            },
            "297": 1
          }
        },
        "genAnalogInput": {
          "attributes": {
            "presentValue": 10
          }
        }
      },
      "binds": [
        {
          "cluster": 1026,
          "type": "endpoint",
          "deviceIeeeAddress": "0x00212effff07d6c3",
          "endpointID": 1
        },
        {
          "cluster": 1029,
          "type": "endpoint",
          "deviceIeeeAddress": "0x00212effff07d6c3",
          "endpointID": 1
        },
        {
          "cluster": 1,
          "type": "endpoint",
          "deviceIeeeAddress": "0x00212effff07d6c3",
          "endpointID": 1
        },
        {
          "cluster": 12,
          "type": "endpoint",
          "deviceIeeeAddress": "0x00212effff07d6c3",
          "endpointID": 1
        }
      ],
      "configuredReportings": [
        {
          "cluster": 1,
          "attrId": 32,
          "minRepIntval": 3600,
          "maxRepIntval": 62000,
          "repChange": 0
        },
        {
          "cluster": 1029,
          "attrId": 0,
          "minRepIntval": 10,
          "maxRepIntval": 3600,
          "repChange": 100
        },
        {
          "cluster": 1026,
          "attrId": 0,
          "minRepIntval": 10,
          "maxRepIntval": 3600,
          "repChange": 100
        },
        {
          "cluster": 12,
          "attrId": 85,
          "minRepIntval": 10,
          "maxRepIntval": 3600,
          "repChange": 5
        }
      ],
      "meta": {}
    }
  },
  "appVersion": 24,
  "interviewCompleted": true,
  "meta": {
    "configured": -1878183807
  },
  "lastSeen": 1645127704089,
  "defaultSendRequestWhen": "immediate"
}

Essaies de stopper complètement Z2M et regarde si ce fichier est créé dans le dossier zigbee2mqtt

Je me suis trompé, c’est bien après chaque modification de GDC311ZBQ1.js que je redémarre zigbee2Mqtt.

J’ai arrêté zigbee2Mqtt, puis avec Studio Code Server je suis allé dans mon dossier /config/zigbee2mqtt/ et je n’ai pas de nouveau fichier nommé database.db :

Il ne faut pas utiliser la version Edge de Zigbee2Mqtt ou modifier une config pour l’avoir ?

Si ça peut aider, je précise que j’ai suivi ce tuto pour installer Mosquito et Zigbee2Mqtt : Installer Zigbee2mqtt Home Assistant - DOMOTRONIC

Non, pas besoin de modifier une configuration ou autre. Le fichier database.db doit être présent.
Maintenant, à voir s’il n’y a pas une configuration dans VS qui fait qu’il ignore les fichiers .db et donc, ne l’affiche pas.

Voici plus ou moins ce que tu dois voir dans le dossier zigbee2mqtt :

As tu créé l’utilisateur ? Car dans son tuto il ne créé pas d’utilisateur.

Voir ici si il n’y a pas des étapes manquantes