本帖最后由 alei643 于 2018-1-17 16:36 编辑
导航帖:
Node Red 系列教程之一 初识Node Red
Node Red系列教程之二 使用Node Red建立第一个Flow Node Red系列教程之三 实现Node Red与Home Assistant之间的联动
前方高能预警:本帖包含较大容量的Gif动画,动画缓冲时间可能会有点长,爪机党请注意流量。
一、Node Red安装
1、Raspbian
树莓派的映像中已经预装Node Red,可以通过下面的命令升级:
如果要在树莓派启动时运行Node Red,执行下面的命令:
sudo systemctl enable nodered.service
Node Red 其它命令:
停止运行:
查看日志:
2、Hass.io
在Addon Store中添加下面的插件库
https://github.com/notoriousbdg/hassio-addons
3、官方提供Docker安装包,查看相关命令请移步官方
安装完成之后,访问http://Your Node Red Services IP Address:1880 使用Node Red。如果是在树莓派和Docker中安装,我们还可以在HA中添加下面的代码,将Node Red加入到HA的左侧导航菜单中
panel_iframe:
nodered:
title: 'Node-Red'
icon: 'mdi:shuffle-variant'
url: 'http://Your Node Red Services IP Address:1880/'
二、Node Red UI
是不是已经迫不及待想要体验Node Red强大的功能了,先不要着急,让我们先来了解一下Node Red的使用方法和注意事项,以便我们可以快速上手使用Node Red,并创建自己的Flow。
Node Red WEB UI 中分为三个工作区域,分别是“功能区”、“流程编辑区”、“交互区”。图2.1所示
图2.1 Node Red WEB UI
功能区包含了“输入”、“输出”、“功能”等一些常用的Node节点,每一个Node节点都代表着一个功能,这些功能可以是TCP、UPD协议数据的输入,或者是JSON、XML语言格式的输出。同时借助开发人员开发的第三方Node节点,我们可以方便的实现更多复杂的功能,比如控制树莓派的GPIO。
我们将一个Node节点拖拽到中部的流程编辑区,双击Node节点配置必要的参数,并使用线将这些节点相互连接,就构成了一个Flow,通过点击页面右上角的Deploy实现该流程运行。
在开启配置第一个流程之前,有一些操作细节需要注意,图2.2中是一些不同功能的Node呈现不同的UI视觉,他们是有区别的, 为了直观提醒开发者当前Node的分类、状态等信息。灰色方形UI(1)表示该Node节点需要连线,在左侧代表需要有输入节点,在右侧代表需要有输出节点。蓝色的圆点UI(2)代表该Node有参数可以选择设定,如果部署后更改了节点的参数,再次部署前会以高亮状态显示。红色的三角代UI(3)表该Node有必要的参数需要设定。大方形UI(4、5)类似一个虚拟按键功能,用来开启或者屏蔽改Node节点功能,方便开发者调试。
图2.2 Flow中的UI视图
图2.3中是流程正常运行的UI界面,黄色的小方框代表该节点有数据输入,但已经被Node中设定的条件过滤,后方的注释是最后一次接收数据的时间,蓝色的小方框代表该节点输出执行成功,注释为发送的数据和时间。
图2.3 Flow 运行时的UI视图
图2.4同样为流程正常运行时的界面,展示的信息与图2.3稍有区别,这些细节功能主要为开发者提供直观的视图。
图2.4 Flow运行时的UI视图
三、Node Red 制作第一个流程
啰嗦了那么多,让我们正式开始制作一个简单的流程,下面这个流程只包含了两个组件,输入分组中的Inject和输出分组中的debug。我们将这两个组件拖拽到主工作视图中,并用导线将两个流程连接,然后点击Deploy部署该Flow。我们打开右侧交互区的debug视图,你会发现好像什么都没有发生,别急,回到主视图中,点击inject节点的左侧虚拟按键,这时候交互区debug视图就应该有调试的信息出现了。 我们再次回到主视图中,双击Inject组件,打开参数配置窗口,我们将Repeat参数中的none修改为interval,点击save保存参数,然后点击Deploy重新部署该流程,再次点击Inject的虚拟按键,查看交互区的debug信息,看看发生了什么。 这一次,Inject组件被激活后,将每1秒钟执行一次输出动作,将时间戳的数据传送给debug组件。
3.1 第一个Flow流程动画(点击放大观看)
我们再来制作一个稍微复杂一点的流程,下面这个动画中的流程使用了TCP、delay、switch、change、debug五个Node。简单介绍一下该流程实现的功能,使用TCP组件在Node Red端建立一个端口为1881的TCP Server,如果监听到有数据输入,delay节点延时5秒,将接收到的数据传送给switch节点,switch节点判断该数据是不是自己想要的,如果不是则丢弃数据,如果是,则将该数据发送给change节点,change将该数据进行二次加工,并发送给debug组件。
3.2 第二个Flow流程动画(点击放大观看)
Node Red为了方便开发者分享制作的流程,提供便捷的流程导入和导出功能,只要在Node Red视图中点击右上角菜单图标,选择导入,选择剪贴板,在打开的剪贴板选项卡中粘贴Flow代码,然后点击导入。我将第二个例子的代码分享在下面:
[{"id":"56723380.1b6ddc","type":"tab","label":"Flow 2","disabled":false,"info":""},{"id":"b78f746a.444778","type":"tcp in","z":"56723380.1b6ddc","name":"","server":"server","host":"","port":"1881","datamode":"stream","datatype":"utf8","newline":"","topic":"","base64":false,"x":107,"y":222,"wires":[["38691e83.e2ac62"]]},{"id":"afa3e295.d695d","type":"debug","z":"56723380.1b6ddc","name":"","active":true,"console":"false","complete":"false","x":792,"y":210,"wires":[]},{"id":"38691e83.e2ac62","type":"delay","z":"56723380.1b6ddc","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":280,"y":217,"wires":[["61e13a76.917154"]]},{"id":"61e13a76.917154","type":"switch","z":"56723380.1b6ddc","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"hello","vt":"str"}],"checkall":"true","outputs":1,"x":424,"y":213,"wires":[["1d0ff414.462e0c"]]},{"id":"1d0ff414.462e0c","type":"change","z":"56723380.1b6ddc","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"hello world","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":596,"y":212,"wires":[["afa3e295.d695d"]]}]
这一节就先到这里了,本来按计划是这一贴介绍一下如果实现Node Red和HA的结合,写着写着发现基础内容还有好多需要介绍,看官们还是多忍一下吧。
|