Zigbee2MQTT - device is NOT supported

Od producenta Conbee - firmy dresden elektronik, dostaliśmy do testów takie dwa urządzenia:

https://www.dresden-elektronik.com/product/scene-switch.html

https://www.dresden-elektronik.com/product/lighting-switch.html

Pomijające cenę, to bardzo ciekawy sprzęt z multum opcji do wykorzystania w automatyzacjach.

Niestety jak to bywa z nowymi produktami, nie ma ich na liście wspieranych przez Zigbee2MQTT, więc na tym przykładzie pokażemy jak dodać ich obsługę w AIS.
Aby cały proces był zrozumiały na początek odpalmy logi w konsoli - Narzędzia deweloperskie / Konsola - najlepiej w osobnym oknie - poleceniem:

pm2 logs

Praktycznie każde urządzenie zigbee, nawet to nie obsługiwane, powinno dać się sparować z Zigbee2MQTT. Przechodzimy do Konfiguracja / Konfiguracja Urządzeń Zigbee i uruchamiamy tryb permit_join przyciskiem Zezwól na dołączanie


w logach pojawi nam się wpis:

4|zigbee   | Zigbee2MQTT:debug 2021-09-16 15:50:05: Received MQTT message on 'zigbee2mqtt/bridge/request/permit_join' with data '{"device":null,"time":254,"transaction":"8t4wq-2","value":true}'
4|zigbee   | Zigbee2MQTT:info  2021-09-16 15:50:05: Zigbee: allowing new devices to join.
4|zigbee   | Zigbee2MQTT:info  2021-09-16 15:50:06: MQTT publish: topic 'zigbee2mqtt/bridge/response/permit_join', payload '{"data":{"time":254,"value":true},"status":"ok","transaction":"8t4wq-2"}'

Teraz pozostaje tylko wprowadzić urządzenie w tryb parowania zgodnie z instrukcją producenta (zwykle poprzez kilkusekundowe przytrzymanie przycisku)
a w logach pojawi się magiczne “NOT supported”:

4|zigbee   | Zigbee2MQTT:info  2021-09-16 16:05:03: Successfully interviewed '0x421842a21a2d5aee', device has successfully been paired
4|zigbee   | Zigbee2MQTT:warn  2021-09-16 16:05:03: Device '0x421842a21a2d5aee' with Zigbee model 'Lighting Switch' and manufacturer name 'dresden elektronik' is NOT supported, please follow https://www.zigbee2mqtt.io/how_tos/how_to_support_new_devices.html

Urządzenie pojawi się również na liście jako niewspierane:

Dodajemy nowe urządzenie.
Do konfiguracji Zigbee2MQTT dodajemy nowy plik z definicją nowego urządzenia poleceniem:

nano zigbee2mqtt/data/BN-600087.js

a w nim wklejamy początkową konfigurację:

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 definition = {
    zigbeeModel: ['Lighting Switch'], // The model ID from: Device with modelID 'lumi.sens' is not supported.
    model: 'BN-600087', // Vendor model number, look on the device for a model number
    vendor: 'dresden elektronik', // Vendor of the device (only used for documentation and startup logging)
    description: 'Dresden Elektronik Lighting Switch - 2 buttons', // Description of the device, copy from vendor site. (only used for documentation and startup logging)
    fromZigbee: [], // We will add this later
    toZigbee: [], // Should be empty, unless device can be controlled (e.g. lights, switches).
    exposes: [], // Defines what this device exposes, u>
};

module.exports = definition;

Zapisujemy i wychodzimy (Ctrl-s Ctrl-x).
Następnie edytujemy configuration.yaml

nano zigbee2mqtt/data/configuration.yaml

zmieniamy poziom logowania na debug

advanced:
  log_level: debug

oraz dodajemy odnośnik do nowego pliku:

external_converters:
  - BN-600087.js

Na koniec restartujemy usługę zigbee:

pm2 restart zigbee

i obserwujemy logi - zamiast NOT supported powinniśmy mieć coś takiego:

4|zigbee   | Zigbee2MQTT:info  2021-09-16 16:36:42: 0x00212effff06b652 (0x00212effff06b652): BN-600087 - dresden elektronik dresden elektronik Lighting Switch - 2 buttons (EndDevice)

a po wciśnięciu dowolnego przycisku:

4|zigbee   | Zigbee2MQTT:debug 2021-09-15 14:34:47: Received Zigbee message from '0x00212effff06b652', type 'commandOn', cluster 'genOnOff', data '{}' from endpoint 1 with groupID 17630
4|zigbee   | Zigbee2MQTT:debug 2021-09-15 14:34:47: No converter available for 'BN-600087' with cluster 'genOnOff' and type 'commandOn' and data '{}'

type ‘commandOn’, cluster ‘genOnOff’ to przykład komend, które należy odpowiednio zmapować - będą różne dla kolejnych przycisków, akcji dłuższego przytrzymania, itp. Trzeba je wszystkie przeklinać i odpowiednio wpisać do konfiguracji.
W praktyce większość konwerterów już istnieje, więc najlepiej wykorzystać je jako przykłady w naszej konfiguracji - szukamy podobnego urządzenia na liście zgodnych z zigbee2MQTT i jego definicji w jednym z plików (podział wg producentów):

Dla naszego Lighting Switch ostateczna definicja w pliku BN-600087.js wygląda tak:

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 definition = {
    zigbeeModel: ['Lighting Switch'], 
    model: 'BN-600087', 
    vendor: 'dresden elektronik', 
    description: 'dresden elektronik Lighting Switch - 2 buttons', 
    fromZigbee: [fz.battery, fz.command_recall, fz.command_on, fz.command_off, fz.command_move, fz.command_stop], 
    toZigbee: [tz.on_off], 
    exposes: [e.battery(), e.action(['recall_1', 'recall_2', 'recall_3', 'recall_4', 'on', 'off', 'brightness_move_down', 'brightness_move_up', 'brightness_stop'])], 
};

module.exports = definition;

Od teraz w AIS mamy odpowiednie encje do wykorzystania w automatyzacjach:

Pozostało potestować i można commit’ować do Zigbee2MQTT, aby pomoc tym, którzy nie potrafią :wink:

6 polubień