Статья

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

В прошлой статье мы подключились к 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" }]

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


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

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

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

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

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

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

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



1000x_image.png?1551381086

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

Ну теперь по накатанной)


Вернуться назад

Устройства


Phoscon

deCONZ Conbee

(3 отзыва)

Вернуться назад