alei643 发表于 2018-1-12 14:27:15

Node Red系列教程之二 使用Node Red建立第一个Flow

本帖最后由 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,可以通过下面的命令升级:   bash <(curl -sL https://raw.githubusercontent.co ... -nodejs-and-nodered)
            如果要在树莓派启动时运行Node Red,执行下面的命令:
sudo systemctl enable nodered.service
            Node Red 其它命令:
            停止运行:node-red-stop
            查看日志:
node-red-log

         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.3Flow 运行时的UI视图
         图2.4同样为流程正常运行时的界面,展示的信息与图2.3稍有区别,这些细节功能主要为开发者提供直观的视图。
图2.4Flow运行时的UI视图


三、Node Red 制作第一个流程

          啰嗦了那么多,让我们正式开始制作一个简单的流程,下面这个流程只包含了两个组件,输入分组中的Inject和输出分组中的debug。我们将这两个组件拖拽到主工作视图中,并用导线将两个流程连接,然后点击Deploy部署该Flow。我们打开右侧交互区的debug视图,你会发现好像什么都没有发生,别急,回到主视图中,点击inject节点的左侧虚拟按键,这时候交互区debug视图就应该有调试的信息出现了。          我们再次回到主视图中,双击Inject组件,打开参数配置窗口,我们将Repeat参数中的none修改为interval,点击save保存参数,然后点击Deploy重新部署该流程,再次点击Inject的虚拟按键,查看交互区的debug信息,看看发生了什么。 这一次,Inject组件被激活后,将每1秒钟执行一次输出动作,将时间戳的数据传送给debug组件。

          **** Hidden Message *****
3.1 第一个Flow流程动画(点击放大观看)
          我们再来制作一个稍微复杂一点的流程,下面这个动画中的流程使用了TCP、delay、switch、change、debug五个Node。简单介绍一下该流程实现的功能,使用TCP组件在Node Red端建立一个端口为1881的TCP Server,如果监听到有数据输入,delay节点延时5秒,将接收到的数据传送给switch节点,switch节点判断该数据是不是自己想要的,如果不是则丢弃数据,如果是,则将该数据发送给change节点,change将该数据进行二次加工,并发送给debug组件。
**** Hidden Message *****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的结合,写着写着发现基础内容还有好多需要介绍,看官们还是多忍一下吧。



honky 发表于 2018-1-12 14:31:40

感谢楼主费心分享

apple4105 发表于 2018-1-12 15:09:52

感谢楼主分享

weans1975 发表于 2018-1-12 15:12:23

感謝分享。

neroxps 发表于 2018-1-12 16:05:28

感谢楼主分享,啊 一直想学Node Red

人生观 发表于 2018-1-12 16:12:02

谢谢 正需要

crazybobby 发表于 2018-1-12 16:57:59

学习!!!!!

xinfan 发表于 2018-1-12 17:28:28

这个得学,比ha自带的自动化应该简单

wanyakui520 发表于 2018-1-12 19:18:47

谢谢大神,感动啊 终于有个node red教程了

freexx 发表于 2018-1-12 19:24:17

继续继续学习。。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: Node Red系列教程之二 使用Node Red建立第一个Flow