Статья

Добавляем Google Home в WirenBoard

Для решения этой задачи нам потребуется установленный Node-RED. А дальше уже все просто, ставим в Node-RED пакеты:

node-red-contrib-googlehome node-red-contrib-wirenboard

У нас появятся следующие плиточки:

Для работы пакета для Google Home, необходимо зарегистрироваться на сайте https://googlehome.hardill.me.uk/

Решение не официальное и работает через сторонний сервер, так что на ваш страх и риск.

В приложении Google Home жмем кнопку «Add».

Далее нажимаем кнопку «Настроить устройство».

Дальше выбираем кнопку «Совместимо с сервисами Google».

В поиске ищем «NR-GAB».

При добавлении запросит авторизацию, вводим логин и пароль с сайта https://googlehome.hardill.me.uk/.

Вы великолепны! Осталось добавить виртуальных устройств. Для этого переходим в раздел Devices https://googlehome.hardill.me.uk/user/devices

и добавляем любые устройства, ничего сложного:

Добавляем все, что хотим видеть в Google Home, предлагаю использовать те же имена, что и в WirenBoard или других системах, короче говоря, на ваше усмотрение. Устройства есть, но чем они управляют? Правильно, пока ничем.

Идем в Node-RED. Вытаскиваем на Flow плитку Google Home.

Конфигурируем плитку, добавляя аккаунт с чудо сервиса прокладки и видим все наши устройства:

Акцентировать на этом много внимания не буду, плитки WB точно так же настраиваются.

Далее настраиваем все взаимосвязи. Делаю инвертированными парами, для обеспечения обратной связи. Дело муторное, но возможное.

Бонус – это все работает удаленно, надобности находиться управляющему устройству в сети Wi-Fi нет.

Проанализировать, что приходит от плитки Google Home, можно добавить плитку Debug, соединить их и потыкать устройством. В случае с лампочкой, получим следующее окно дебага:

msg.payload : Object object command: "action.devices.commands.OnOff" params: object on: true online: true

Это означает, что на входе будет тип команды (command) и значение переключателя (params -> on). Значение параметра online нас особо не интересует.

true - включение, false - соответственно, выключение. Для разных устройств в документации рекомендуют еще передавать значение поля command.

Забегая вперед скажу, что плитки WB принимают просто голое значение на msg.payload, для реле это "0" или "1", для диммера - значение от 0 до 255.

Напишем функцию преобразования ответа плитки Google Home для плитки WB:

if (msg.payload.params.on === true){ msg.payload = 1; } else { msg.payload = 0; } return msg;

Хорошим тоном является чистка лишнего от передающих плиток, но мешать это может только когда параметры имеют одно имя.

Делается кодом JS в функции:

delete msg._confId;

В примере я этого не использую, все названия разные. Для обратной совместимости можно использовать следующий код функции:

if (msg.payload == "1"){ msg.payload = { command: "action.devices.commands.OnOff", params: { on: true } }; } else { msg.payload = { command: "action.devices.commands.OnOff", params: { on: false } }; } return msg;

От плиток WB тоже приходит голое значение в msg.payload, в функции мы его анализируем и формируем запрос для плитки Google Home.

Совет начинающим в Node-RED: обязательно пользуйтесь плитками Debug, наглядно видно, что происходит в вашей программе. В случае с анализом выводов плиток, у каждого параметра есть кнопка "copy path", при копировании пути параметра, сразу понятны все вложенности (после копирования, в начале пути вставить "msg.").

Флоу для импорта в NR и анализа:

[{"id":"a3eb06c.ce829f8","type":"tab","label":"Google home","disabled":false,"info":""},{"id":"de2b1b39.4b1278","type":"google-home","z":"a3eb06c.ce829f8","conf":"fabf43e4.9cb2e","device":"6348","acknowledge":true,"name":"Реле 1","topic":"","x":390,"y":580,"wires":[["150eaa8f.c0d4f5"]]},{"id":"195d1748.208509","type":"wirenboard-in","z":"a3eb06c.ce829f8","name":"","server":"58c389fc.46d588","channel":["/devices/wb-mr6c_164/controls/K1"],"outputAtStartup":true,"x":360,"y":640,"wires":[["f1451387.f3be6"]]},{"id":"f1451387.f3be6","type":"function","z":"a3eb06c.ce829f8","name":"","func":"if (msg.payload == \"1\"){\n msg.payload = {\n command: \"action.devices.commands.OnOff\",\n params: {\n on: true\n }\n };\n} else {\n msg.payload = {\n command: \"action.devices.commands.OnOff\",\n params: {\n on: false\n }\n};\n}\n\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":540,"y":640,"wires":[["efe5dac6.ac83c8"]]},{"id":"efe5dac6.ac83c8","type":"google-home-response","z":"a3eb06c.ce829f8","conf":"fabf43e4.9cb2e","device":"6348","name":"Реле 1","x":700,"y":640,"wires":[]},{"id":"91369284.c19ce","type":"wirenboard-out","z":"a3eb06c.ce829f8","name":"","server":"58c389fc.46d588","channel":["/devices/wb-mr6c_164/controls/K1"],"command":"/on","commandType":"wb_cmd","payload":"payload","payloadType":"msg","x":730,"y":580,"wires":[]},{"id":"150eaa8f.c0d4f5","type":"function","z":"a3eb06c.ce829f8","name":"","func":"if (msg.payload.params.on === true){\n msg.payload = 1;\n} else {\n msg.payload = 0;\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":540,"y":580,"wires":[["91369284.c19ce"]]},{"id":"93512863.fcf1f8","type":"google-home","z":"a3eb06c.ce829f8","conf":"fabf43e4.9cb2e","device":"6361","acknowledge":true,"name":"Бра","topic":"","x":390,"y":700,"wires":[["130a276c.f4f3c9"]]},{"id":"9406e729.56f088","type":"wirenboard-out","z":"a3eb06c.ce829f8","name":"","server":"58c389fc.46d588","channel":["/devices/wb-mrgbw-d_112/controls/White"],"command":"/on","commandType":"wb_cmd","payload":"payload","payloadType":"msg","x":750,"y":700,"wires":[]},{"id":"dfa77f52.05f66","type":"wirenboard-in","z":"a3eb06c.ce829f8","name":"","server":"58c389fc.46d588","channel":["/devices/wb-mrgbw-d_112/controls/White"],"outputAtStartup":true,"x":340,"y":760,"wires":[["6e0ee3dd.47a71c"]]},{"id":"130a276c.f4f3c9","type":"function","z":"a3eb06c.ce829f8","name":"","func":"var br = msg.payload.params.brightness\nmsg.payload = 255/100*br;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":540,"y":700,"wires":[["9406e729.56f088"]]},{"id":"ca373ffb.0aea8","type":"google-home-response","z":"a3eb06c.ce829f8","conf":"fabf43e4.9cb2e","device":"6361","name":"Бра","x":690,"y":760,"wires":[]},{"id":"6e0ee3dd.47a71c","type":"function","z":"a3eb06c.ce829f8","name":"","func":"var br = msg.payload;\n msg.payload = {\n command: \"action.devices.commands.BrightnessAbsolute\",\n params: {\n brightness: br\n }\n };\n\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":540,"y":760,"wires":[["ca373ffb.0aea8"]]},{"id":"fabf43e4.9cb2e","type":"google-home-conf","z":"","username":"klouner"},{"id":"58c389fc.46d588","type":"wirenboard-server","z":"","name":"WB","host":"192.168.1.46","mqtt_port":"1883","mqtt_username":"","mqtt_password":""}]

На iOS немного криво работает обратная связь, просьба владельцев Android устройств проверить, что все моментально отрабатывается. На iOS нужно перезапускать приложение, чтоб увидеть что статус поменялся.

0

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

Устройства


WirenBoard

Wiren Board 6

(4 отзыва)

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