具有Node-Red的Homebridge自动化

我认为,homebridge的主要缺点之一是缺乏创建高级脚本的能力。 所有自动化都分配给家庭中心,该中心可以是iPad(已连接到充电设备),Apple TV或HomePod。 并非每个人都拥有这些设备,此外,HomeKit的自动化程度很差。 可以使用Node-Red纠正这种情况。 本文适用于已经安装和配置了 Homebridge的用户。



简要地说:Node-RED是通过在各个节点(块)之间建立链接来连接硬件,API和在线服务的工具。

官方网站上的定义:
Node-RED是一种编程工具,用于以新颖有趣的方式将硬件设备,API和在线服务连接在一起。
它提供了一个基于浏览器的编辑器,使您可以轻松地使用调色板中的各种节点将流连接在一起,只需单击即可将其部署到其运行时。


在Raspbian上,这已安装:

sudo apt-get install nodered sudo systemctl enable nodered.service sudo service nodered start 

默认情况下,节点红色在端口1880上运行。

有一个庞大模块库,其中包含各种功能的块集。 没有幸免和homebridge。 安装node-red-contrib-homebridge-automation

 cd ~/.node-red npm install node-red-contrib-homebridge-automation sudo service nodered restart 

让我们尝试打开灯泡。 为此,请拖动hb-control 功能块(此块将发送打开命令)并注入 (在本文的框架内,仅需手动激活脚本即可)。 对于hb块,您首次需要指定PIN并更新设备列表。 然后,您可以添加必要的块:



现在,通过单击注入模块中的按钮, 指示灯应点亮。 除了hb-contoll外,还有hb-event,hb-status和hb-resume块。 可以在官方资料库中找到有关这些块的详细说明。

功能块代码
 var ret_msg={}; ret_msg.payload = {}; ret_msg.payload.On = true; return ret_msg; 


功能块旨在使用JavaScript功能来处理数据。 该块接受msg变量以及有效载荷参数;默认情况下,Node-Red中的大多数块都可与有效载荷参数一起使用。

值得讨论的是Debug块,通过它您可以看到这些块的输出,以便您了解如果您的想法不起作用,那么错误是什么。

现在让我们做一些有趣的事情,例如,将MagicCube旋转90度后使灯光改变状态。 在上一篇文章中 ,我展示了如何与Homebridge成为zigbee设备的朋友。 与其他zigbee设备一样,MagicCube在配对后将出现在MQTT代理中。

Node-Red开箱即用地支持MQTT协议。 添加MQTT块,指定服务器地址和Topic多维数据集。



多维数据集可以传输以下状态:
摇动,唤醒,掉落,点击,滑动,flip180,flip90,rotate_left和rotate_right

添加开关块以将一种状态与另一种状态分开。 在开关中定义flip90摇动点击条件。 将顶部输出连接到hb-status以获取灯泡的当前状态。 通过反转状态,将hb-status模块连接Invert On Value模块,并将其输出连接到hb-controll,并在旋转多维数据集时,灯泡将更改开/关状态。 它看起来应该像这样:



取值码
 var ret_msg=msg; ret_msg.payload.On = !msg.payload.On; return ret_msg; 


可以从这里导入流:

流向
 [ { "id": "f0f31eb6.22f16", "type": "tab", "label": "Flow 1", "disabled": false, "info": "" }, { "id": "e0f72465.9e4fb8", "type": "mqtt in", "z": "f0f31eb6.22f16", "name": "", "topic": "zigbee2mqtt/0x00158d00010f0528", "qos": "2", "datatype": "auto", "broker": "8ec472b.e73e29", "x": 160, "y": 80, "wires": [ [ "43f74679.730588" ] ] }, { "id": "8539109.d872ff", "type": "debug", "z": "f0f31eb6.22f16", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "x": 670, "y": 60, "wires": [] }, { "id": "c5db7c5b.399f4", "type": "hb-status", "z": "f0f31eb6.22f16", "name": "Room1", "Homebridge": "HomeBridge", "Manufacturer": "YeeLight", "Service": "Lightbulb", "device": "HomeBridgeA1:23:AD:E3:CD:32YeeLightRoom100000043", "conf": "7948a496.505c2c", "x": 340, "y": 180, "wires": [ [ "9ef696d9.51a378" ] ] }, { "id": "43f74679.730588", "type": "switch", "z": "f0f31eb6.22f16", "name": "CubeActions", "property": "payload", "propertyType": "msg", "rules": [ { "t": "cont", "v": "flip90", "vt": "str" }, { "t": "cont", "v": "tap", "vt": "str" }, { "t": "cont", "v": "shake", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 3, "x": 150, "y": 240, "wires": [ [ "c5db7c5b.399f4" ], [], [] ] }, { "id": "f476dcba.a6511", "type": "hb-control", "z": "f0f31eb6.22f16", "name": "Room1", "Homebridge": "HomeBridge", "Manufacturer": "YeeLight", "Service": "Lightbulb", "device": "HomeBridgeA1:23:AD:E3:CD:32YeeLightRoom100000043", "conf": "7948a496.505c2c", "x": 700, "y": 180, "wires": [] }, { "id": "9ef696d9.51a378", "type": "function", "z": "f0f31eb6.22f16", "name": "Invert On Value", "func": "var ret_msg=msg;\nret_msg.payload.On = !msg.payload.On;\nreturn ret_msg;", "outputs": 1, "noerr": 0, "x": 520, "y": 180, "wires": [ [ "f476dcba.a6511" ] ] }, { "id": "8ec472b.e73e29", "type": "mqtt-broker", "z": "", "name": "mosquitto", "broker": "127.0.0.1", "port": "1883", "clientid": "", "usetls": false, "compatmode": true, "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "closeTopic": "", "closeQos": "0", "closePayload": "", "willTopic": "", "willQos": "0", "willPayload": "" }, { "id": "7948a496.505c2c", "type": "hb-conf", "z": "", "username": "111-11-111" } ] 


因此,可以从模块中“雕刻”出复杂的自动化方案。 在库中,您可以找到带有块集的模块,用于完全不同的任务,例如,用于录制视频监控摄像机或处理摄像机中的文件。

PS大声说:
我被这样的想法困扰着:无论技术如何发展,许多都离通过编程实现工作和生活过程的平凡自动化还很遥远。 我真的希望随着Node-RedBlockly等工具的出现,准入门槛将大大降低。 学习了如何从同一Node-Red中的多维数据集构建系统后,人们很可能会感兴趣地进入功能块并学习JS,然后一切都会自行发生。

Source: https://habr.com/ru/post/zh-CN462775/


All Articles