- PVSM.RU - https://www.pvsm.ru -
На Хабре уже встречались [1] статьи [2] о том, как подружить ZigBee устройства различных производителей с системами управления умным домом, без использования фирменных хабов, вроде Xiaomi Gateway. Однако, инструкции для homebridge [3], я не нашел не только на Хабре, но и на других просторах интернета. Поэтому хочу поделиться опытом добавления ZigBee устройств в homebridge. Огромную благодарность надо выразить создателю ресурса zigbee2mqtt.io [4], там уже расписаны способы прошивки модема CC2531 и подключения к таким системам управления умным домом как Home Assistant [5], Domoticz [6] и Majordomo [7]. Статья рассчитана на пользователей, у которых уже установлен и настроен [8]homebridge.
Все действия в статье будут проводиться со следующим набором оборудования:
Инструкции по прошивке CC2531 на русском языке есть тут (через Pi) [10] и тут (через CCDebuger) [11].
Схематично всю цепочку работы можно изобразить так:
Теперь по порядку.
После прошивки модема необходимо установить MQTT брокер [12] (если еще не установлен).
Я использую Mosquitto, устанавливается так:
sudo apt install -y mosquitto mosquitto-clients #устанавка
sudo services mosquitto start # запуск
sudo systemctl enable mosquitto.service #автозапуск
Более подробную инструкцию по настройке можно посмотреть тут [13].
Теперь необходимо установить сервис zigbee2mqtt, который взаимодействует с модемом CC2531 и передает данные в Mosquitto:
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt
sudo chown -R pi:pi /opt/zigbee2mqtt
cd /opt/zigbee2mqtt
npm install
Для того чтобы запускать zigbee2mqtt как сервис, необходимо создать файл:
/etc/systemd/system/zigbee2mqtt.service
[Unit]
Description=zigbee2mqtt
After=network.target
[Service]
ExecStart=/usr/bin/npm start
WorkingDirectory=/opt/zigbee2mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
Если у вас уже был установлен MQTT брокер то прописать правильные параметры подключения к нему нужно в файле:
/opt/zigbee2mqtt/data/configuration.yaml
Запускаем сервис и добавляем его в автозапуск:
sudo systemctl start zigbee2mqtt
sudo systemctl enable zigbee2mqtt.service
Смотрим лог:
sudo journalctl -u zigbee2mqtt.service -f
`permit_join` set to `true` in configuration.yaml.
Allowing new devices to join.
Set `permit_join` to `false` once you joined all devices.
Zigbee: allowing new devices to join.
Connecting to MQTT server at mqtt://localhost
zigbee-shepherd ready
Connected to MQTT server
Можно приступать к интеграции с homebridge. На ресурсе zigbee2mqtt.io [4] есть список поддерживаемых [14] устройств и инструкции по созданию пары. Для примера рассмотрим добавление Xiaomi Wireless Switch.
Для просмотра событий в Mosquitto воспользуемся программой MQTT Explorer [15]. Запускаем, вводим адрес MQTT сервера, в моем случае он расположен по адресу 192.168.1.104
. Если все установлено правильно, то в дереве увидим ветку zigbee2mqtt. Переходим в нее. Теперь на Xiaomi Wireless Switch зажимаем кнопку Reset до появления мигания диода (около 5 секунд). Примерно через 10 секунд в ветке zigbee2mqtt мы увидим наше устройство и данные которое оно передает.
Если этого не происходит, то после появления мигания диода, попробуйте однократно нажимать Reset с периодичностью в секунду. Должно получиться так:
Разберем данные:
{
"linkquality":110,
"battery":100,
"voltage":3052,
"click":"single"
}
Поле Click содержит тип нажатия, их может быть пять:
Click, double click, triple click, long, long_release
Данные получать научились, теперь добавим Xiaomi Wireless Switch в homebrdige. Для взаимодействия с MQTT воспользуемся модулем homebridge-mqttthing [16]. Устанавливается так же, как и другие:
(sudo) npm install -g homebridge-mqttthing
Модуль поддерживает большое количество классов устройств начиная с выключателей и заканчивая термостатами. Для Xiaomi Wireless Switch больше всего подходит класс StatelessProgramableSwitch
. Для добавления нужно знать Topic (0x00158d00022c85ea)
и названия команд. Получается вот такой конфиг:
{
"accessory": "mqttthing",
"type": "statelessProgrammableSwitch",
"name": "Xiaomi Single Button",
"topics": {
"getSwitch": {
"topic": "zigbee2mqtt/0x00158d00022c85ea",
"apply": "return JSON.parse(message).click;"
}
},
"switchValues": [
"single",
"double",
"long_release"
]
}
По аналогии я добавил:
"accessories":
[
{
"accessory": "mqttthing",
"type": "occupancySensor",
"name": "Xiaomi Occupancy Sencor",
"topics": {
"getOccupancyDetected": {
"topic": "zigbee2mqtt/0x00158d000236b492",
"apply": "return JSON.parse(message).occupancy;"
}
},
"integerValue": true
},
{
"accessory": "mqttthing",
"type": "contactSensor",
"name": "Xiaomi Contatc Sencor",
"topics": {
"getContactSensorState": {
"topic": "zigbee2mqtt/0x00158d000278db8c",
"apply": "return !JSON.parse(message).contact;"
}
},
"integerValue": true
},
{
"accessory": "mqttthing",
"type": "statelessProgrammableSwitch",
"name": "Xiaomi Single Button",
"topics": {
"getSwitch": {
"topic": "zigbee2mqtt/0x00158d00022c85ea",
"apply": "return JSON.parse(message).click;"
}
},
"switchValues": [
"single",
"double",
"long_release"
]
},
{
"accessory": "mqttthing",
"type": "temperatureSensor",
"name": "Xiaomi Temperature Sencor",
"topics": {
"getCurrentTemperature": {
"topic": "zigbee2mqtt/0x00158d000201842c",
"apply": "return parseFloat(JSON.parse(message).temperature);"
}
},
"history": true
},
{
"accessory": "mqttthing",
"type": "humiditySensor",
"name": "Xiaomi Humidity Sencor",
"topics": {
"getCurrentRelativeHumidity": {
"topic": "zigbee2mqtt/0x00158d000201842c",
"apply": "return parseFloat(JSON.parse(message).humidity);"
}
},
"history": true
}
]
Проверяем:
Раньше я использовал модуль homebridge-mi-aqara, который добавляет ZigBee устройства, взаимодействуя с Xiaomi Gateway. При отказе от Gateway уменьшилось время отклика устройств, вдобавок я избавился от устройства которое сидит на моем WiFi и постоянно лезет в интернет.
Автор: Артём
Источник [17]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/umny-j-dom/326203
Ссылки в тексте:
[1] уже встречались: https://habr.com/ru/company/iobroker/blog/433340/
[2] статьи: https://habr.com/ru/post/430882/
[3] homebridge: https://homebridge.io/
[4] zigbee2mqtt.io: https://www.zigbee2mqtt.io/
[5] Home Assistant: https://www.home-assistant.io/
[6] Domoticz: http://www.domoticz.com/
[7] Majordomo: https://mjdm.ru/
[8] установлен и настроен : https://habr.com/ru/company/e-legion/blog/350312/
[9] CC2531 Dongle: https://ru.aliexpress.com/item/33011691700.html?spm=a2g0o.productlist.0.0.5d143db34eOPUW&algo_pvid=1caa81cb-0229-4709-8510-af107d0f3641&algo_expid=1caa81cb-0229-4709-8510-af107d0f3641-10&btsid=f8a43113-0c72-4f13-af64-30b6cc790432&ws_ab_test=searchweb0_0,searchweb201602_5,searchweb201603_52
[10] тут (через Pi): https://kvvhost.ru/2019/05/29/zigbee2mqtt-cc2531-raspberry-pi/
[11] тут (через CCDebuger): https://tech-geek.ru/zwave-and-zigbee-control/
[12] MQTT брокер: https://habr.com/ru/post/388231/
[13] тут: https://leodev.ru/blog/misc/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-mosquitto-%D0%B2-ubuntu/
[14] список поддерживаемых: https://www.zigbee2mqtt.io/information/supported_devices.html
[15] MQTT Explorer: http://mqtt-explorer.com/
[16] homebridge-mqttthing: https://www.npmjs.com/package/homebridge-mqttthing
[17] Источник: https://habr.com/ru/post/462459/?utm_source=habrahabr&utm_medium=rss&utm_campaign=462459
Нажмите здесь для печати.