Zigbee: различия между версиями
Ian (обсуждение | вклад) |
|||
(не показаны 164 промежуточные версии 12 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:Подключение устройств | <languages/> | ||
== | <!--T:1--> | ||
{{DISPLAYTITLE:Wiren Board 6: Подключение устройств ZigBee}} | |||
== Аппаратная часть == <!--T:4--> | |||
[[Файл:WBE2R-R-ZIGBEE top.jpg|300px|thumb|right| Лицевая сторона модуля WBE2R-R-ZIGBEE]] | |||
[[Файл:WBE2R-R-ZIGBEE bot.jpg|300px|thumb|right| Обратная сторона модуля WBE2R-R-ZIGBEE]] | |||
[[Файл:Cc2531-usb.png|300px|thumb|right| USB стик СС2531]] | |||
<!--T:5--> | |||
Для работы контроллера с ZigBee устройствами необходимо подключить специальный модуль. Есть несколько вариантовː | |||
{ | * [[Wbe2r-r-zigbee|WBE2R-R-ZIGBEE - Модуль расширения Zigbee]] | ||
* USB Стик CC2531 (Можно приобрести на [https://ru.aliexpress.com/wholesale?SearchText=CC2531 Aliexpress.com]) | |||
* Модуль СС2530 c переходником usb-uart. Подключениеː | |||
<!--T:6--> | |||
{| class="wikitable" | |||
!USB-Serial Adaper | |||
!CC2530 | |||
|- | |||
|3V3 | |||
|VCC | |||
|- | |||
|GND | |||
|GND | |||
|- | |||
|TXD | |||
|P02 | |||
|- | |||
|RXD | |||
|P03 | |||
|} | |||
<!--T:7--> | |||
== | == Прошивка == <!--T:8--> | ||
<!--T:9--> | |||
С завода модуль [[WBE2R-R-ZIGBEE]] уже прошит оптимизированной для WB и SprutHub прошивкой. Однако если это необходимо, его можно перепрошить. | |||
Для | Для прошивки [[WBE2R-R-ZIGBEE]] или USB стика потребуется CC Debugger и загрузочный кабель. (Можно приобрести на [https://ru.aliexpress.com/wholesale?SearchText=CC2531+загрузочный+кабель Aliexpress.com]) Перед прошивкой установите [http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=swrc212&fileType=zip драйвер.] | ||
:< | |||
apt | Подключите CC Debugger к [[WBE2R-R-ZIGBEE]] или к USB стику через загрузочный кабель. Подключите USB кабель CC Debugger(a) к компьютеру. Скачайте и установите приложение [http://www.ti.com/tool/flash-programmer FLASH-PROGRAMMER] ( обычную версию, не v2) c сайта TI. Устройство должно определиться в таблице. Укажите путь к файлу прошивки. В области "Actions" выберите "Erase, program and verify" и нажмите кнопку "Perform actions". Полезную информацию по прошивке вы так же можете найти на [https://www.zigbee2mqtt.io/getting_started/flashing_the_cc2531.html сайте zigbee2mqtt]. | ||
</ | |||
== zigbee2mqtt == <!--T:10--> | |||
<!--T:11--> | |||
[https://github.com/Koenkk/zigbee2mqtt zigbee2mqtt] - Это мост, позволяющий управлять Zigbee устройствами через MQTT. Работает на Node.js, позволяет легко интегрировать Zigbee устройства в различные системы автоматизации такие как Home Assistant, Node Red и тд. | |||
<!--T:12--> | |||
Вы найдете всю необходимую информацию на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt]. | |||
== Установка == <!--T:15--> | |||
Настраиваем репозиторий Node JS | |||
<pre> | |||
curl -sL https://deb.nodesource.com/setup_12.x | bash - | |||
</pre> | |||
Устанавливаем необходимые компоненты | |||
<pre> | |||
apt-get install -y nodejs git make g++ gcc | |||
</pre> | |||
''Копируем файлы из репозитория zigbee2mqtt'' | |||
<pre> | |||
git clone https://github.com/Koenkk/zigbee2mqtt.git /mnt/data/root/zigbee2mqtt | |||
</pre> | |||
Настраиваем права | |||
<pre> | |||
chown -R root:root /mnt/data/root/zigbee2mqtt | |||
</pre> | |||
Заходим в директорию и запускаем установку | |||
<pre> | |||
cd /mnt/data/root/zigbee2mqtt | |||
npm ci | |||
</pre> | |||
В процессе установки будет показано несколько предупреждений. Их можно игнорировать. | |||
'''Оригинальная инструкция по установке zigbee2mqtt на [https://www.zigbee2mqtt.io/getting_started/running_zigbee2mqtt.html официальном сайте zigbee2mqtt.io]''' | |||
<!--T:16--> | |||
Для автоматического запуска zigbee2mqtt необходимо создать сервис. Для этого зайдите в папку /etc/systemd/system/ и создайте файл zigbee2mqtt.service | |||
Откройте файл и скопируйте в него следующий текстː | |||
<pre> | |||
[Unit] | |||
Description=zigbee2mqtt | |||
After=network.target | |||
[Service] | |||
ExecStart=/usr/bin/npm start | |||
WorkingDirectory=/mnt/data/root/zigbee2mqtt | |||
StandardOutput=inherit | |||
StandardError=inherit | |||
Restart=always | |||
User=root | |||
[Install] | |||
WantedBy=multi-user.target | |||
</pre> | |||
</ | |||
И сохраните файл. После этого для активации сервиса следует ввести в консоль команду | |||
<pre> | |||
systemctl enable zigbee2mqtt.service | |||
</pre> | |||
<!--T:17--> | |||
Полную инструкцию можно найти на [https://www.zigbee2mqtt.io/getting_started/running_zigbee2mqtt.html сайте zigbee2mqtt]. | |||
== Конфигурация == <!--T:18--> | |||
<!--T:19--> | |||
После установки нужно настроить контроллер. | |||
Если Вы используете модуль расширения [[WBE2R-R-ZIGBEE]],то убедитесь, что правильно выставили модуль в Configs => Hardware Modules Configuration. | |||
Далее зайдите в папку /mnt/data/root/zigbee2mqtt/data и отредактируйте файл configuration.yaml ː | |||
<pre> | |||
homeassistant: false | homeassistant: false | ||
permit_join: | permit_join: true | ||
mqtt: | mqtt: | ||
base_topic: zigbee2mqtt | base_topic: zigbee2mqtt | ||
server: 'mqtt://localhost' | server: 'mqtt://localhost' | ||
serial: | serial: | ||
port: /dev/ | port: /dev/ttyMOD3 | ||
advanced: | advanced: | ||
rtscts: false | rtscts: false | ||
last_seen: epoch | last_seen: epoch | ||
</pre> | |||
</ | |||
Полное описание настроек можно найти на [https://www.zigbee2mqtt.io/configuration/configuration.html сайте zigbee2mqtt]. | |||
После изменения настроек введите команду | |||
<pre> | |||
service zigbee2mqtt restart | |||
</pre> | |||
== | == Запуск == | ||
Для | Для запуска, остановки и перезапуска сервиса используйте команды | ||
<pre> | |||
service zigbee2mqtt start | |||
service zigbee2mqtt stop | |||
service zigbee2mqtt restart | |||
</pre> | |||
</ | |||
== | == Добавление устройств == | ||
Что бы добавить Zigbee устройство убедитесь, что в настройках моста включен параметр "permit_join" : | |||
<pre> | |||
permit_join: true | |||
</pre> | |||
Далее следуйте инструкции к устройству. В основном требуется зажать кнопку "pair" на несколько секунд и дождаться "мигания" светодиода. После этого устройство должно передать информацию о себе на контроллер. Иногда требуется дополнительно нажимать на кнопку каждую секунду, что бы устройство не "уснуло". После успешного добавления устройство автоматически появится во вкладке Devices. | |||
Более подробная информация на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt]. | |||
=== | == Написание правил == | ||
'''Zigbee2mqtt''' имеет свою '''[https://www.zigbee2mqtt.io/information/mqtt_topics_and_message_structure.html структуру MQTT топиков]''' , не подходящую под '''[https://github.com/wirenboard/homeui/blob/master/conventions.md MQTT конвенцию Wiren Board]'''. На данный момент идет разработка конвертера, который будет пересылать данные из топиков zigbee2mqtt в подходящие под конвенцию топики. | |||
Пока разработка не закончена есть несколько способов взаимодействия с добавленными в zigbee2mqtt устройствамиː | |||
* Установить конвертер от стороннего разработчика ( На пример '''[https://github.com/avp-avp/zigbee2wb конвертер от пользователя avp-avp]''' ) | |||
* Использовать для автоматизации '''[https://wirenboard.com/wiki/index.php?title=Node-Red Node-Red]''' | |||
* Cделать небольшое изменение в коде zigbee2mqtt, что бы получать данные в топики вида /devices/zigbee2mqtt/controls/../on | |||
Про третий пункт подробнееː | |||
# В файле '''/mnt/data/root/zigbee2mqtt/data/configuration.yaml''' параметр '''base_topic''' измените на '''/devices/zigbee2mqtt/controls''' как это показано на скриншоте ниже. Сохраните файл. [[Файл:Zigbee2.PNG|700px|thumb|center| /mnt/data/root/zigbee2mqtt/data/configuration.yaml]] | |||
# В файле '''/mnt/data/root/zigbee2mqtt/lib/controller.js''' (311 строка) к параметру “'''resolvedEntity.name'''” добавьте '''+ “/on”''', как это показано на скриншоте ниже. Сохраните файл. (Это поможет получать данные от zigbee устройств в топики "/on") [[Файл:Zigbee1.PNG|700px|thumb|center| /mnt/data/root/zigbee2mqtt/lib/controller.js]] | |||
# Перезапустите zigbee2mqtt командой '''service zigbee2mqtt restart''' | |||
После этих действий данные будут приходить в топики '''/devices/zigbee2mqtt/controls/../on''', где вместо ".." будет имя zigbee устройства. На пример "'''/devices/zigbee2mqtt/controls/0x00158d0002729348/on'''" | |||
Далее необходимо зайти в вкладку rules и в правилах создать виртуальный девайс с именем топика в который мы получаем данные (в нашем случае zigbee2mqtt) и с контролами для каждого zigbee устройства, что у Вас добавлено в zigbee2mqttː | |||
<syntaxhighlight lang="js"> | |||
defineVirtualDevice("zigbee2mqtt", { //Указываем топик, который мы указали в configuration.yamlː /devices/../controls | |||
title: "Zigbee Devices", | |||
cells: { | |||
'0x00158d0002729348': { // zigbee кнопка | |||
type: "text", | |||
value: "" | |||
}, | |||
'0x00158d0002389b55': { // zigbee датчик температуры и влажности | |||
type: "text", | |||
value: "" | |||
}, | |||
'0x00158d0001f3fc34': { // zigbee выключатель в подрозетник | |||
type: "text", | |||
value: "" | |||
}, | |||
} | |||
}); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
После сохранения все данные приходящие от указанных в правиле zigbee устройств будут видны в веб интерфейсе. Данные приходят в формате JSON и с ними уже можно работать в движке правил. | |||
<syntaxhighlight lang="js"> | |||
<syntaxhighlight lang=" | // Правило: При двойном нажатии на zigbee кнопку переключаем левую кнопку zigbee выключателя в подрозетник | ||
defineRule("button_control", { | |||
whenChanged: "zigbee2mqtt/0x00158d0002729348", | |||
then: function(newValue, devName, cellName) { | |||
JSON.parse(newValue, function(k, v) { // Парсим Json. Переменная "k" - ключ, переменная "v" - значение. | |||
if (k == 'click') { | |||
if (v == 'double') { // если значение ключа "click" равно "double" | |||
publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_left: "TOGGLE" }), 2, false); // переключаем левую кнопку выключателя. | |||
} | |||
} | |||
}) | |||
} | |||
}); | |||
// Правило: Если влажность выше 50% - включаем правую кнопку zigbee выключателя (канальный вентилятор). Если ниже - выключаем. | |||
defineRule("temp_control", { | |||
whenChanged: "zigbee2mqtt/0x00158d0002389b55", | |||
then: function(newValue, devName, cellName) { | |||
JSON.parse(newValue, function(k, v) { | |||
if (k == 'humidity') { | |||
if (parseFloat(v) >= 50.0) { | |||
publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_right: "ON" }), 2, false); | |||
} else { | |||
publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_right: "OFF" }), 2, false); | |||
} | |||
} | |||
}) | |||
} | |||
}); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Версия 13:32, 25 мая 2020
Аппаратная часть
Для работы контроллера с ZigBee устройствами необходимо подключить специальный модуль. Есть несколько вариантовː
- WBE2R-R-ZIGBEE - Модуль расширения Zigbee
- USB Стик CC2531 (Можно приобрести на Aliexpress.com)
- Модуль СС2530 c переходником usb-uart. Подключениеː
USB-Serial Adaper | CC2530 |
---|---|
3V3 | VCC |
GND | GND |
TXD | P02 |
RXD | P03 |
Прошивка
С завода модуль WBE2R-R-ZIGBEE уже прошит оптимизированной для WB и SprutHub прошивкой. Однако если это необходимо, его можно перепрошить.
Для прошивки WBE2R-R-ZIGBEE или USB стика потребуется CC Debugger и загрузочный кабель. (Можно приобрести на Aliexpress.com) Перед прошивкой установите драйвер.
Подключите CC Debugger к WBE2R-R-ZIGBEE или к USB стику через загрузочный кабель. Подключите USB кабель CC Debugger(a) к компьютеру. Скачайте и установите приложение FLASH-PROGRAMMER ( обычную версию, не v2) c сайта TI. Устройство должно определиться в таблице. Укажите путь к файлу прошивки. В области "Actions" выберите "Erase, program and verify" и нажмите кнопку "Perform actions". Полезную информацию по прошивке вы так же можете найти на сайте zigbee2mqtt.
zigbee2mqtt
zigbee2mqtt - Это мост, позволяющий управлять Zigbee устройствами через MQTT. Работает на Node.js, позволяет легко интегрировать Zigbee устройства в различные системы автоматизации такие как Home Assistant, Node Red и тд. Вы найдете всю необходимую информацию на сайте zigbee2mqtt.
Установка
Настраиваем репозиторий Node JS
curl -sL https://deb.nodesource.com/setup_12.x | bash -
Устанавливаем необходимые компоненты
apt-get install -y nodejs git make g++ gcc
Копируем файлы из репозитория zigbee2mqtt
git clone https://github.com/Koenkk/zigbee2mqtt.git /mnt/data/root/zigbee2mqtt
Настраиваем права
chown -R root:root /mnt/data/root/zigbee2mqtt
Заходим в директорию и запускаем установку
cd /mnt/data/root/zigbee2mqtt npm ci
В процессе установки будет показано несколько предупреждений. Их можно игнорировать.
Оригинальная инструкция по установке zigbee2mqtt на официальном сайте zigbee2mqtt.io
Для автоматического запуска zigbee2mqtt необходимо создать сервис. Для этого зайдите в папку /etc/systemd/system/ и создайте файл zigbee2mqtt.service
Откройте файл и скопируйте в него следующий текстː
[Unit] Description=zigbee2mqtt After=network.target [Service] ExecStart=/usr/bin/npm start WorkingDirectory=/mnt/data/root/zigbee2mqtt StandardOutput=inherit StandardError=inherit Restart=always User=root [Install] WantedBy=multi-user.target
И сохраните файл. После этого для активации сервиса следует ввести в консоль команду
systemctl enable zigbee2mqtt.service
Полную инструкцию можно найти на сайте zigbee2mqtt.
Конфигурация
После установки нужно настроить контроллер.
Если Вы используете модуль расширения WBE2R-R-ZIGBEE,то убедитесь, что правильно выставили модуль в Configs => Hardware Modules Configuration.
Далее зайдите в папку /mnt/data/root/zigbee2mqtt/data и отредактируйте файл configuration.yaml ː
homeassistant: false permit_join: true mqtt: base_topic: zigbee2mqtt server: 'mqtt://localhost' serial: port: /dev/ttyMOD3 advanced: rtscts: false last_seen: epoch
Полное описание настроек можно найти на сайте zigbee2mqtt.
После изменения настроек введите команду
service zigbee2mqtt restart
Запуск
Для запуска, остановки и перезапуска сервиса используйте команды
service zigbee2mqtt start service zigbee2mqtt stop service zigbee2mqtt restart
Добавление устройств
Что бы добавить Zigbee устройство убедитесь, что в настройках моста включен параметр "permit_join" :
permit_join: true
Далее следуйте инструкции к устройству. В основном требуется зажать кнопку "pair" на несколько секунд и дождаться "мигания" светодиода. После этого устройство должно передать информацию о себе на контроллер. Иногда требуется дополнительно нажимать на кнопку каждую секунду, что бы устройство не "уснуло". После успешного добавления устройство автоматически появится во вкладке Devices.
Более подробная информация на сайте zigbee2mqtt.
Написание правил
Zigbee2mqtt имеет свою структуру MQTT топиков , не подходящую под MQTT конвенцию Wiren Board. На данный момент идет разработка конвертера, который будет пересылать данные из топиков zigbee2mqtt в подходящие под конвенцию топики.
Пока разработка не закончена есть несколько способов взаимодействия с добавленными в zigbee2mqtt устройствамиː
- Установить конвертер от стороннего разработчика ( На пример конвертер от пользователя avp-avp )
- Использовать для автоматизации Node-Red
- Cделать небольшое изменение в коде zigbee2mqtt, что бы получать данные в топики вида /devices/zigbee2mqtt/controls/../on
Про третий пункт подробнееː
- В файле /mnt/data/root/zigbee2mqtt/data/configuration.yaml параметр base_topic измените на /devices/zigbee2mqtt/controls как это показано на скриншоте ниже. Сохраните файл.
- В файле /mnt/data/root/zigbee2mqtt/lib/controller.js (311 строка) к параметру “resolvedEntity.name” добавьте + “/on”, как это показано на скриншоте ниже. Сохраните файл. (Это поможет получать данные от zigbee устройств в топики "/on")
- Перезапустите zigbee2mqtt командой service zigbee2mqtt restart
После этих действий данные будут приходить в топики /devices/zigbee2mqtt/controls/../on, где вместо ".." будет имя zigbee устройства. На пример "/devices/zigbee2mqtt/controls/0x00158d0002729348/on"
Далее необходимо зайти в вкладку rules и в правилах создать виртуальный девайс с именем топика в который мы получаем данные (в нашем случае zigbee2mqtt) и с контролами для каждого zigbee устройства, что у Вас добавлено в zigbee2mqttː
defineVirtualDevice("zigbee2mqtt", { //Указываем топик, который мы указали в configuration.yamlː /devices/../controls
title: "Zigbee Devices",
cells: {
'0x00158d0002729348': { // zigbee кнопка
type: "text",
value: ""
},
'0x00158d0002389b55': { // zigbee датчик температуры и влажности
type: "text",
value: ""
},
'0x00158d0001f3fc34': { // zigbee выключатель в подрозетник
type: "text",
value: ""
},
}
});
После сохранения все данные приходящие от указанных в правиле zigbee устройств будут видны в веб интерфейсе. Данные приходят в формате JSON и с ними уже можно работать в движке правил.
// Правило: При двойном нажатии на zigbee кнопку переключаем левую кнопку zigbee выключателя в подрозетник
defineRule("button_control", {
whenChanged: "zigbee2mqtt/0x00158d0002729348",
then: function(newValue, devName, cellName) {
JSON.parse(newValue, function(k, v) { // Парсим Json. Переменная "k" - ключ, переменная "v" - значение.
if (k == 'click') {
if (v == 'double') { // если значение ключа "click" равно "double"
publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_left: "TOGGLE" }), 2, false); // переключаем левую кнопку выключателя.
}
}
})
}
});
// Правило: Если влажность выше 50% - включаем правую кнопку zigbee выключателя (канальный вентилятор). Если ниже - выключаем.
defineRule("temp_control", {
whenChanged: "zigbee2mqtt/0x00158d0002389b55",
then: function(newValue, devName, cellName) {
JSON.parse(newValue, function(k, v) {
if (k == 'humidity') {
if (parseFloat(v) >= 50.0) {
publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_right: "ON" }), 2, false);
} else {
publish("/devices/zigbee2mqtt/controls/0x00158d0001f3fc34/set", JSON.stringify({ state_right: "OFF" }), 2, false);
}
}
})
}
});