node-red教程3.1 inject介绍

  Node-red控件很多,我们可以根据自己的需要来选择。每个控件官方都带有详细的说明,接下来介绍一个典型的输入控件——inject。

3.1.1 inject的说明信息

  前边helloworld的例子中,我们已经认识了输入节点,接下来详细介绍它。
  Node-red内部自带了对控件的介绍。鼠标悬停在某个控件上,就会出现一些提示信息,例如:
node-red教程3.1 inject介绍_第1张图片
  点击节点时,页面右侧也会出现提示信息
node-red教程3.1 inject介绍_第2张图片
  阅读这些信息,就能对节点的使用有大概的了解。不过由于信息都是英文的,为了方便读者,我们会把常用控件的英文提示翻译过来
  以下是Inject的节点帮助信息
手动或定期地将消息注入到流中。消息有效负载可以是多种类型,包括字符串、JavaScript对象或当前时间。
输出
1 多种多样的载荷
消息需要配置载荷
2 string类型的topic
节点主题的配置是可选的。(可以配置topic,也可以不配置)
详细说明
注入节点可以启动带有特定载荷的流。默认的载荷是时间戳,时间戳的意思是从1970年1月1日到当前时间,经历了多少毫秒。
该节点还支持注入字符串、数字、布尔值、JavaScript对象或流/全局上下文值。
默认情况下,通过单击编辑器中的按钮来手动触发节点。它也可以被设置为定期注入或根据时间表(在特定的时间段内)进行注入。
它还可以配置为在每次启动流时注入一次。
可以指定的最大时间间隔是596小时/24天。但是,如果您查看的时间间隔超过一天,您应该考虑使用一个调度器节点来处理断电和重新启动。
注意:“时间间隔”和“在特定时间”选项使用标准CRON系统。这意味着如果填写的是20分钟,那么这20分钟会在整点20分以后,例如1:20,1:40,而不是从程序开始运行的20分钟,例如程序是2:11开始运行的,那么不使用CRON系统的话,下个20分钟就是2:31。如果你想从现在开始每20分钟-使用“间隔”选项。
注意:要在一个字符串中包含一个换行符,您必须使用一个函数节点来创建有效负载。(意思就是注入节点的字符串没办法包含换行符)
  帮助信息已经说得很清楚了,不过由于输入节点非常常用,且其它的输入节点跟它的原理都一样,所以我还是啰嗦一下,举常用的例子来说明。

3.1.2 输入时间戳

  添加输入节点(inject)与调试节点(debug)。连线,并且部署。
这里写图片描述
  点击时间戳的按钮,然后在调试窗口下应该能看到这样的一串数据
node-red教程3.1 inject介绍_第3张图片
  这个就是时间戳的值。关于时间戳的解释,节点帮助信息已经说得很清楚了,时间戳的意思是从1970年1月1日到当前时间,经历了多少毫秒。也就是从1970年1月1日到我写文章的这个时候,经历了1526978229517毫秒。从毫秒到当前时间的换算挺麻烦的,这里提供一个在线计算的工具
http://tool.chinaz.com/Tools/unixtime.aspx
node-red教程3.1 inject介绍_第4张图片
  如此一来就能方便的把毫秒转换为当前时间了。
  其实debug控件也很人性化的提供了转换功能,在调试窗口点击数字就能看到当前时间了
这里写图片描述
  再点击一下,能转换为十六进制的数据。虽然这个功能并没有什么用。
这里写图片描述

3.1.3 输入数字与数组

Inject节点的内容可以配置为数字或数组。
node-red教程3.1 inject介绍_第5张图片
  数字建议输入十进制,可以是整数也可以是小数。不建议输入十六进制,如果确实要输入十六进制的数可以转换为十进制输入。其实这是同一个数,0xc=12。
node-red教程3.1 inject介绍_第6张图片
node-red教程3.1 inject介绍_第7张图片
  如需输入数组,在“内容”一栏,要选择二进制,并且手动添加英文字符中的括号与逗号。注意,是英文字符的“,”。编程语言中几乎不会出现任何中文符号,后边见到的所有的与程序相关的符号都是英文。
node-red教程3.1 inject介绍_第8张图片
  使用debug节点观察到的输出的效果如下
node-red教程3.1 inject介绍_第9张图片

3.1.4 输入ASCII码

  ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统。
  在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)、以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。
  由此可以看出,ASCII码对于英文字符的显示很重要。例如,我们想让电脑显示大写字符H,需要用H对应的ASCII码,也就是72来表示。这个72并不代表数字的72,因为数字的72由数字7与数字2的ASCII码来表示,也就是55与50。
Inject的二进制流可以很方便的进行ASCII码与字符的转换。在“内容”输入框中输入一个单词,比如Hello。然后点击输入框右边的扩展按钮。可以看到一个新的页面,“缓冲区编辑器”。点击此页面的“完成”按钮。
node-red教程3.1 inject介绍_第10张图片
node-red教程3.1 inject介绍_第11张图片
  可以发现内容输入框已经自动转换为一个数组,而数组的内容正好是“Hello”的每个字符相对应的ASCII码。
node-red教程3.1 inject介绍_第12张图片
  在debug节点中可以看到这个数组:
node-red教程3.1 inject介绍_第13张图片
  点击数组,可以展开并显示为十六进制。
node-red教程3.1 inject介绍_第14张图片
  点击可以切换为字符,正是我们输入的“Hello”
node-red教程3.1 inject介绍_第15张图片
  从这个例子来看,如果不是因为可以输出数组,那么把字符转为ASCII码,与直接输出文字列的功能是否雷同?不会的。有一些控制符,比如回车、换行,无法在文字列中输出。但是它们有对应的ASCII码,通过查表可以得知:
node-red教程3.1 inject介绍_第16张图片
  回车换行对应的ASCII码值分别是13与10,在“内容”输入框中手动输入13与10即可。
node-red教程3.1 inject介绍_第17张图片

3.1.5 主题与名称

  节点属性中也可以配置主题(topic)与名称(name)。
  我们拖进来一个inject节点,并且更改内容为文字列,Hello World
这里写图片描述
  可以工作区中,节点的名字也是Hello World。
这里写图片描述
  双击debug节点,观察输出,默认是msg.payload。通过下拉菜单把它改为完整信息,并部署。
node-red教程3.1 inject介绍_第18张图片
  点击inject节点的输入按钮,可以再调试窗口看到以下信息:
node-red教程3.1 inject介绍_第19张图片
  其中:
_msgid毫无疑问就是节点的ID,既然是ID当然也就是独一无二的。
Topic就是主题,里边的内容为空,是因为我们没有设置。
Payload意思是有效负载或载荷,就是inject节点的内容输入框里的东西。这个名词让人感觉怪怪的,但其实很好理解。如果把数据包比喻为一辆货车,那么ID就是车牌号,topic可以是货车的品牌,payload就是货车上的货物。
通过以上的观察,我们可以发现,一个数据包至少包括了ID,topic与payload三个成员。
  接下来编辑inject节点,在“主题”输入框内输入topic
node-red教程3.1 inject介绍_第20张图片
  重新部署,并点击inject节点的按钮,对比调试窗口的信息,可以发现, 新的数据包增加了topic的内容。
node-red教程3.1 inject介绍_第21张图片
  接下来修改name。在“名称”输入框内填写name。
node-red教程3.1 inject介绍_第22张图片
  可以发现工作区中节点的名字发生变化。
node-red教程3.1 inject介绍_第23张图片
  部署并点击输入的按钮,可以观察到,name的信息并没有出现在debug窗口。
  以上实验说明:name属性只影响了工作区中节点的外观,并没有影响流中数据包的内容。
  Topic是数据包本身带的一个属性,其信息会随着数据包下发。在后续的学习中,有时会用到topic来判断数据包的来源。
  其它控件的topic与name属性与此类似,明白inject控件的topic与name如何使用以后,你就可以举一反三了。

3.1.6 重复发送

  到目前为止,我们使用inject节点给流程注入数据包的方法都是点击节点上的小按钮,这一点也不酷,程序根据我们的设定自己就能工作起来才好玩。而inject节点就有这么一个类似于“闹钟”的功能。
  双击编辑inject节点,通过下拉菜单选择“重复”输入框后的内容为“间隔”,然后下边一栏会紧接着出现每隔1秒。数字与单位都可以设置。比如设置为每隔5秒,然后点击完成,部署。
node-red教程3.1 inject介绍_第24张图片
  会发现调试窗口以5秒为间隔收到了很多消息。
node-red教程3.1 inject介绍_第25张图片
  注意,此时即便是关掉了浏览器,消息依旧会发送。在powershell运行了node-red的服务器,只要服务器没有关闭,流程当然会正常运行。
  如果需要让这个流停止工作,可以采用以下办法:
1 关掉服务器。可以选择关掉powershell,或者在powershell里按下ctrl+c,终止批处理操作。不过这种做法会使其它的流也停止工作。
2 修改流,断开节点之间的连线并部署。
3 关掉流,双击流的标签,把状态切换成“无效”。
node-red教程3.1 inject介绍_第26张图片
node-red教程3.1 inject介绍_第27张图片
  在“重复”的输入框里,还有另外两个选项,“特定时间”与“特定时间内间隔”。
node-red教程3.1 inject介绍_第28张图片
  先来解释“特点时间”,如果按下图设置,则每天12点,都会发出去一串数字,就好像手机定了一个闹钟,每天12点响起一样。
node-red教程3.1 inject介绍_第29张图片
  在“特定时间内间隔”就是在特定时间段内重复发送。如下图设置,则每天的8:20,8:40与9:00都会发送数据。
node-red教程3.1 inject介绍_第30张图片
  编辑页有一个提示消息:注意: “特定时间内间隔” 和 “特定时间” 会使用cron系统。
  详情查看信息页。
  如果去查找cron系统的概念,并不好理解这句话的意思。这个提示的意思是,使用”特定时间内间隔” 和 “特定时间”这两个选项的时候,发送消息的时间与程序运行的时间并无关系。接下来举例说明。
  例如使用“间隔”发送,每隔1分钟发送一次,这是不使用cron系统的。
node-red教程3.1 inject介绍_第31张图片
  我们看到数据包发送的时间是10:03:29,时间有零有整,正是因为程序运行的时间是10:02:29,程序运行1分钟以后发送了这个数据。
node-red教程3.1 inject介绍_第32张图片
  接下来使用在“特定时间内间隔”,也每隔1分钟发送一次,这是使用cron系统的。
node-red教程3.1 inject介绍_第33张图片
  我们可以发现接收数据包的时间是10:09:00,正好是一个“整”的时间。我并没有掐着表按下部署按键。这说明cron系统的时间只看“整”的时间,或者说“标准的”时间,并不关心程序是什么时候开始运行的。
node-red教程3.1 inject介绍_第34张图片
  如果希望在程序一开始运行就发送数据包,可以勾选此框:
node-red教程3.1 inject介绍_第35张图片

你可能感兴趣的:(node-red)