Zigbee: различия между версиями

Нет описания правки
Строка 47: Строка 47:
== zigbee2mqtt == <!--T:10-->
== zigbee2mqtt == <!--T:10-->


=== Описание ===
<!--T:11-->
<!--T:11-->
[https://github.com/Koenkk/zigbee2mqtt zigbee2mqtt] - Это мост, позволяющий управлять Zigbee устройствами через MQTT. Работает на Node.js, позволяет легко интегрировать Zigbee устройства в различные системы автоматизации такие как Home Assistant, Node Red и тд.
[https://github.com/Koenkk/zigbee2mqtt zigbee2mqtt] - Это мост, позволяющий управлять Zigbee устройствами через MQTT. Работает на Node.js, позволяет легко интегрировать Zigbee устройства в различные системы автоматизации такие как Home Assistant, Node Red и тд.
Строка 52: Строка 53:
Вы найдете всю необходимую информацию на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt].
Вы найдете всю необходимую информацию на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt].


== wb-zigbee2mqtt ==
=== Установка === <!--T:15-->
 
wb-zigbee2mqtt - Это простой конвертер из zigbee2mqtt в Wiren Board MQTT Conventions. Конвертер написан на движке правил wb-rules>=2.6.0, скрипт устанавливается в папку с системными правилами wb-rules-system
 
== Установка == <!--T:15-->


Запустите консоль и введите командуː
Запустите консоль и введите командуː


<pre>$ apt update && apt install -y zigbee2mqtt wb-zigbee2mqtt</pre>
<pre>$ apt update && apt install -y zigbee2mqtt</pre>


<div class="mw-collapsible mw-collapsed" style="width:600px">
<div class="mw-collapsible mw-collapsed" style="width:600px">
Строка 125: Строка 122:


</div>
</div>
== Конфигурация == <!--T:18-->
=== Конфигурация === <!--T:18-->
<!--T:19-->
<!--T:19-->
После установки нужно настроить контроллер.
Если Вы используете модуль расширения [[WBE2R-R-ZIGBEE]],то убедитесь, что правильно выставили модуль в Configs => Hardware Modules Configuration.
Если Вы используете модуль расширения [[WBE2R-R-ZIGBEE]],то убедитесь, что правильно выставили модуль в Configs => Hardware Modules Configuration.


Далее зайдите в папку /mnt/data/root/zigbee2mqtt/data и отредактируйте файл configuration.yaml ː
Далее в папке /mnt/data/root/zigbee2mqtt/data отредактируйте файл configuration.yaml ː


<pre>
<pre>
homeassistant: false
homeassistant: false
permit_join: true
permit_join: false
mqtt:
mqtt:
   base_topic: zigbee2mqtt
   base_topic: zigbee2mqtt
Строка 154: Строка 149:
</pre>
</pre>


== Запуск ==
=== Запуск ===
Для запуска, остановки и перезапуска сервиса используйте команды  
Для запуска, остановки и перезапуска сервиса используйте команды  


Строка 163: Строка 158:
</pre>
</pre>


== Добавление устройств ==
=== Добавление устройств ===


Что бы добавить Zigbee устройство убедитесь, что в настройках моста включен параметр "permit_join" :
Что бы добавить Zigbee устройство убедитесь, что в настройках моста включен параметр "permit_join" :
Строка 175: Строка 170:
Более подробная информация на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt].
Более подробная информация на [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 в подходящие под конвенцию топики.  
== wb-zigbee2mqtt ==
=== Описание ===
wb-zigbee2mqtt - Это простой конвертер из zigbee2mqtt в Wiren Board MQTT Conventions. Конвертер написан на движке правил wb-rules>=2.6.0, скрипт устанавливается в папку с системными правилами wb-rules-system.  


Пока разработка не закончена есть несколько способов взаимодействия с добавленными в zigbee2mqtt устройствамиː
=== Принцип работы ===
В версии wb-rules 2.6.0 появилась возможность подписываться на произвольные mqtt топики. Конвертер wb-zigbee2mqtt запрашивает у zigbee2mqtt список всех подключенных устройств, подписывается на их топики. При получении данных от устройств конвертер парсит json, создает виртуальный девайс и посылает в него полученную информацию. Так же конвертер создает виртуальный девайс "zigbee2mqtt" и передает в него логи, версию, состояние (online\offline) моста zigbee2mqtt, Есть возможность включить и выключить режим добавления устройств. А так же там расположена кнопка "update devices". При нажатии на эту кнопку конвертер заново запрашивает у моста список добавленных девайсов и если появились какие-то новые устройства - так же подписывается на них.


* Установить конвертер от стороннего разработчика ( На пример '''[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
<pre>$ apt update && apt install wb-zigbee2mqtt</pre>


Про третий пункт подробнееː
=== Добавление устройств ===


# В файле '''/mnt/data/root/zigbee2mqtt/data/configuration.yaml''' параметр '''base_topic''' измените на '''/devices/zigbee2mqtt/controls''' как это показано на скриншоте ниже. Сохраните файл. [[Файл:Zigbee2.PNG|700px|thumb|center| /mnt/data/root/zigbee2mqtt/data/configuration.yaml]]
Для добавления нового устройства переведите контрол "Permit join" в положение "on". Далее следуйте инструкции к устройству. В основном требуется зажать кнопку "pair" на несколько секунд и дождаться "мигания" светодиода.
# В файле '''/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'''"
=== Управление устройствами ===
 
Управление устройствами через конвертер wb-zigbee2mqtt пока не реализовано. Но управлять устройствами можно стандартными инструментами - через wb-rules (функция publish)
Далее необходимо зайти в вкладку rules и в правилах создать виртуальный девайс с именем топика в который мы получаем данные (в нашем случае zigbee2mqtt) и с контролами для каждого zigbee устройства, что у Вас добавлено в zigbee2mqttː


Пример:
<syntaxhighlight lang="js">
<syntaxhighlight lang="js">
defineVirtualDevice("zigbee2mqtt", { //Указываем топик, который мы указали в configuration.yamlː  /devices/../controls
  publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "ON" }), 2, false);
    title: "Zigbee Devices",
publish("zigbee2mqtt/0x00158d0001f3fc34/set", JSON.stringify({ state: "OFF" }), 2, false);
    cells: {
        '0x00158d0002729348': { // zigbee кнопка
            type: "text",
            value: "",
          readonly: false
        },
        '0x00158d0002389b55': { // zigbee датчик температуры и влажности
            type: "text",
            value: "",
          readonly: false
        },
        '0x00158d0001f3fc34': { // zigbee выключатель в подрозетник
            type: "text",
            value: "",
          readonly: false
        },
    }
});
</syntaxhighlight>
 
После сохранения все данные приходящие от указанных в правиле zigbee устройств будут видны в веб интерфейсе. Данные приходят в формате JSON и с ними уже можно работать в движке правил.
 
<syntaxhighlight lang="js">
// Правило: При двойном нажатии на 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); // переключаем левую кнопку zigbee выключателя.
                }
            }
        })
    }
});
 
// Правило: Если влажность выше 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>
547

правок