Od producenta Conbee - firmy dresden elektronik, dostaliśmy do testów takie dwa urządzenia:
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):
https://github.com/Koenkk/zigbee-herdsman-converters/tree/master/devices
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ą