DeCONZ + Node Red = автоматизация

26 февраля 2019, 15:06

В прошлой статье мы подключились к DeCONZ из Node Red и начали получать сообщения в дебаг панели, сегодня сделаем простейшую автоматизацию, в которой нажатие кнопки выключателя будет включать/выключать умную лампу.

Для этого нажмем кнопку выключателя и найдем в дебаг панели сообщение, содержащее информацию о нажатии, разворачиваем сообщения, нажав треугольнички, и находим строку, которая выглядит примерно так: buttonevent: 2002, где 2002 - это номер ивента в деконзе, в котором первая двойка означает что началась правая кнопка (1 - левая), последняя двойка означает короткое нажатие. Наводим мышку на эту строку, она подсвечивается, и справа появляются 3 квадратика. Щелкаем мышкой по левому из них - и мы скопировали путь к этой характеристике в буфер обмена.

В левой колонке находим ноду Switch, перетаскиваем в наше флоу и соединяем с нодой, принимающей сообщения от деконз. Входим в редактирование ноды двойным кликом мыши, в графу Property вставляем путь к ивенту из буфера обмена, назначаем условие, что значение этого ивента ненулевое. Таким образом мы отфильтруем из всех сообщений от деконз только те, которые означают нажатие одной из кнопок. 

Прицепив ноду Debug к выходу из ноды switch, мы в дебаг колонке можем убедиться, что через свитчи проходят только нажатия кнопок:

Добавляем еще один switch, в котором отфильтруем события по конкретному выключателю, для этого в дебаг колонке копируем путь к id выключателя и вставляем его в propertie ноды switch. Значение выставляем равное значению из дебаг сообщения от нужного выключателя.

Следующий switch будет разделять нажатия левой и правой кнопки. Мы добавили отдельно условия для левой и правой кнопки, соответственно у ноды появляются 2 вывода. В будущем флоу будет иметь 2 продолжения, свое для левой и правой кнопки, в примере будем настраивать только правую:

Отправив GET запрос (статья) в формате айпи шлюза:порт/api/<apikey>/lights получаем список всех ламп, находим нужную нам и смотрим ее ID, в моем случае 35

Теперь нам надо получить состояние этой лампы в Node Red, для этого воспользуемся нодой http request. URL заполняем в виде: айпи шлюза:порт/api/<apikey>/ID Метод: GET

Если мы все сделали правильно, то при каждом нажатии на правую кнопку выключателя, на выходе из ноды http request видим состояние нужной нам лампы:

Далее нодой Switch разделим включенные и выключенные состояния лампы:

Затем с помощью ноды Change для каждого из полученных состояний, изменим это состояние на противоположное:

И, наконец, с помощью ноды http request посылаем PUT запрос формата айпи шлюза:порт/api/<apikey>/ID/state

Если мы все сделали правильно, то после применения изменений, лампочка , мамочка будет управляться выключателем. Напоследок небольшой бонус: если вы скопируете нижеприведенный код в буфер обмена, затем в интерфейсе Node Red нажмете Меню - import - clipboard и там вставите этот код, то вы импортируете наше флоу целиком, останется только подправить айпи адрес, порт, apikey и id устройств:

[{
    "id": "410c797b.1ef2",
    "type": "tab",
    "label": "Flow 4",
    "disabled": false,
    "info": ""
}, {
    "id": "79435e64.308fd",
    "type": "websocket in",
    "z": "410c797b.1ef2",
    "name": "Деконз",
    "server": "",
    "client": "5ca7f5bc.f64c94",
    "x": 113.5,
    "y": 325,
    "wires": [
        ["2f43ff4.c3c0d", "44b379bc.b0db08"]
    ]
}, {
    "id": "2f43ff4.c3c0d",
    "type": "debug",
    "z": "410c797b.1ef2",
    "name": "Деконз",
    "active": false,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "x": 235.5,
    "y": 241,
    "wires": []
}, {
    "id": "44b379bc.b0db08",
    "type": "switch",
    "z": "410c797b.1ef2",
    "name": "Нажатия кнопок",
    "property": "payload.state.buttonevent",
    "propertyType": "msg",
    "rules": [{
        "t": "nnull"
    }],
    "checkall": "true",
    "repair": false,
    "outputs": 1,
    "x": 338.5,
    "y": 326,
    "wires": [
        ["bca257f8.cfc32", "85893bba.1f2f18"]
    ]
}, {
    "id": "bca257f8.cfc32",
    "type": "debug",
    "z": "410c797b.1ef2",
    "name": "кнопки",
    "active": false,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "x": 407,
    "y": 238,
    "wires": []
}, {
    "id": "85893bba.1f2f18",
    "type": "switch",
    "z": "410c797b.1ef2",
    "name": "мама",
    "property": "payload.id",
    "propertyType": "msg",
    "rules": [{
        "t": "eq",
        "v": "23",
        "vt": "str"
    }],
    "checkall": "false",
    "repair": false,
    "outputs": 1,
    "x": 523,
    "y": 325,
    "wires": [
        ["89b448b9.f7bd18", "2c0797cd.2e67a"]
    ],
    "outputLabels": ["On/Off"]
}, {
    "id": "89b448b9.f7bd18",
    "type": "debug",
    "z": "410c797b.1ef2",
    "name": "мама",
    "active": false,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "x": 596,
    "y": 240,
    "wires": []
}, {
    "id": "2c0797cd.2e67a",
    "type": "switch",
    "z": "410c797b.1ef2",
    "name": "лев/прав",
    "property": "payload.state.buttonevent",
    "propertyType": "msg",
    "rules": [{
        "t": "eq",
        "v": "1002",
        "vt": "str"
    }, {
        "t": "eq",
        "v": "2002",
        "vt": "str"
    }],
    "checkall": "false",
    "repair": false,
    "outputs": 2,
    "x": 685,
    "y": 322,
    "wires": [
        ["a2827fbb.b36fe"],
        ["ae0f2e3f.48ee9", "a2827fbb.b36fe"]
    ],
    "outputLabels": ["On/Off", "Brighter-ShortPress"]
}, {
    "id": "ae0f2e3f.48ee9",
    "type": "http request",
    "z": "410c797b.1ef2",
    "name": "Получить состояние Мама-спот",
    "method": "GET",
    "ret": "obj",
    "url": "http://127.0.0.1:80/api/8EE4111F2F/lights/35",
    "tls": "",
    "x": 948,
    "y": 328,
    "wires": [
        ["6164f2e7.e83d0c", "172f15a.74babea"]
    ]
}, {
    "id": "a2827fbb.b36fe",
    "type": "debug",
    "z": "410c797b.1ef2",
    "name": "лев/прав",
    "active": false,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "x": 813,
    "y": 232,
    "wires": []
}, {
    "id": "6164f2e7.e83d0c",
    "type": "debug",
    "z": "410c797b.1ef2",
    "name": "Состояние",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "x": 1132,
    "y": 217,
    "wires": []
}, {
    "id": "172f15a.74babea",
    "type": "switch",
    "z": "410c797b.1ef2",
    "name": "вкл/выкл",
    "property": "payload.state.on",
    "propertyType": "msg",
    "rules": [{
        "t": "false"
    }, {
        "t": "true"
    }],
    "checkall": "true",
    "repair": false,
    "outputs": 2,
    "x": 1223,
    "y": 324,
    "wires": [
        ["d3b8409c.c35528"],
        ["26d30678.4346b2"]
    ]
}, {
    "id": "d3b8409c.c35528",
    "type": "change",
    "z": "410c797b.1ef2",
    "name": "вкл",
    "rules": [{
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "{\"on\":true}",
        "tot": "json"
    }],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 1391,
    "y": 289,
    "wires": [
        ["671260df.f794a"]
    ]
}, {
    "id": "26d30678.4346b2",
    "type": "change",
    "z": "410c797b.1ef2",
    "name": "выкл",
    "rules": [{
        "t": "set",
        "p": "payload",
        "pt": "msg",
        "to": "{\"on\":false}",
        "tot": "json"
    }],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 1392,
    "y": 342,
    "wires": [
        ["671260df.f794a"]
    ]
}, {
    "id": "671260df.f794a",
    "type": "http request",
    "z": "410c797b.1ef2",
    "name": "Вкл/выкл мама",
    "method": "PUT",
    "ret": "obj",
    "url": "http://127.0.0.1:80/api/8EE4111F2F/lights/35/state",
    "tls": "",
    "x": 1585,
    "y": 316,
    "wires": [
        []
    ]
}, {
    "id": "5ca7f5bc.f64c94",
    "type": "websocket-client",
    "z": "",
    "path": "ws://127.0.0.1:8088",
    "tls": "",
    "wholemsg": "false"
}]

На этом на сегодня всё, удачных автоматизаций.


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

  1. Евгений Лузин (EvLuz)
    Евгений Лузин (EvLuz) 4 месяца назад

    Спасибо за статью, для меня пока сложновато, но надо попробовать.

  2. (Silverow)
    (Silverow) 4 месяца назад

    Слишком мудреные алгоритмы. 

    1) первй свитч совсем не нужен, так как второй и так будет пропускать только два конкретных значения

    2) включать лампу путем проверки состояния и переключения сильно сложнее чем просто включать.

    • Сергей Цыганов (Tsvdonsk)
      Сергей Цыганов (Tsvdonsk) 4 месяца назад

      С первым утверждением могу согласиться, второе утверждение я не понял. В моем примере нажатие кнопки выполняет разные действия в зависимости от текущего состояния лампы. Если вы знаете, как выбрать, что посылать лампе, вкл или выкл, не проверив при этом состояние лампы, расскажите.

      • (Silverow)
        (Silverow) 4 месяца назад

        Вчера в ночи подумал, что свитч разделяет состояние выключателя вкл/выкл, а у Вас разные кнопки. Но все равно - состояние лампы особого смысла проверять нету. Нажата кнопка, значит нужно переключить

  3. (Silverow)
    (Silverow) отредактировано 4 месяца назад
    Комментарий был удален
  4. Григорий Абрамов (grishmanCH)
    1000x_image.png?1551381086

    Все заработало! Вот даже добавил датчик движения :)

К списку статей

Похожие статьи

04 апреля 2019, 17:48
Расскажу о том за ~1 час перевезти УД с 2мя USB стиками с Raspberry PI на Synology NAS.
14 ноября 2018, 06:43
Плагин для интеграции в Athom Homey дочерних zigbee-устройств, подключенных на координаторы deCONZ - RaspBee или ConBee.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
09 января 2019, 17:34
Небольшая статья о том, зачем нужна малина, почему автоматизации в HomeKit это не очень хорошо и чем USB стик лучше отдельного шлюза.
16 февраля 2019, 18:11
Как расширить zigbee сеть на базе Deconz за 350 рублей или как перейти с zigbee2mqtt на Deconz, не выбрасывая ваш стик CC2531.
21 ноября 2018, 15:15
тем кто уже в курсе что такое deCONZ и тем кто только присматривается.
09 ноября 2018, 17:31
В данной статье рассматривается определенный подход инсталляции и конфигурации базовой среды, для последующей возможности простой, в плане настройки, автоматизации УД с помощью симбиоза HomeAssistant и Node-RED.
18 апреля 2019, 09:07
Раньше, я был глуп и уверен, что zigbee-модули не услышат датчики на больших расстояниях. Я ошибался…
25 февраля 2019, 15:34
Устанавливаем Node Red и подключаем к нему DeCONZ.
25 января 2019, 15:04
Hassio в Docker - установка куда угодно включая Deconz