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

4352 байта добавлено ,  3 года назад
Нет описания правки
Строка 121: Строка 121:
permit_join: true
permit_join: true
mqtt:
mqtt:
   base_topic: /devices/zigbee2mqtt/controls
   base_topic: zigbee2mqtt
   server: 'mqtt://localhost'
   server: 'mqtt://localhost'
serial:
serial:
Строка 131: Строка 131:


Полное описание настроек можно найти на [https://www.zigbee2mqtt.io/configuration/configuration.html сайте zigbee2mqtt].
Полное описание настроек можно найти на [https://www.zigbee2mqtt.io/configuration/configuration.html сайте zigbee2mqtt].


После изменения настроек введите команду
После изменения настроек введите команду
Строка 159: Строка 158:


Более подробная информация на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt].
Более подробная информация на [https://www.zigbee2mqtt.io/ сайте zigbee2mqtt].
== Написание правил ==
Zigbee2mqtt имеет свою структуру топиков, не подходящую под [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”''', как это показано на скриншоте ниже. Сохраните файл. [[Файл: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 и в правилах создать виртуальный девайс с именем Вашего zigbee устройстваː
<pre>
defineVirtualDevice("zigbee2mqtt", { //Указываем топик, который мы указали в configuration.yamlː  /devicec/../controls
    title: "Zigbee Devices",
    cells: {
        '0x00158d0002729348': { //Указываем имя первого zigbee устройства
            type: "text",
            value: ""
        },
        '0x00158d0002389b55': {//Указываем имя второго zigbee устройства итд.
            type: "text",
            value: ""
        },
    }
});
</pre>
После сохранения правила все данные приходящие от устройств будут видны в веб интерфейсе. Данные приходят в формате JSON и с ними уже можно работать в движке правил. На пример напишем правило - по двойному нажатию на zigbee кнопку с именем '''0x00158d0002729348''' изменяем состояние базера контроллера.
<pre>
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"
                    dev["buzzer"]["enabled"] = !dev["buzzer"]["enabled"]; // изменяем значение баззера на противоположное.
                }
            }
        })
    }
});
</pre>
547

правок