本文参考了node-red官方文档并结合自己的学习过程进行了总结
1.node-red介绍
node-red虚拟化开发工具是一个基于nodejs的可在浏览器上进行开发和设计的iot工具,它本身自带了一部分组件,同时用户也可以根据需要自定义新的组件加入到工具中,这些组件本身可以是硬件设备,web API或者在线服务,通过这些组件用户可以向搭建流程图一样编写自己的应用程序,组件本身屏蔽了一些底层具体实现,可以让用户把更多精力放在应用本身上。
由于node-red自带组件有限,况且许多用户会有一些个性化节点需求,node-red提供了自定义节点的功能,这也是其一大特点。
2.自定义节点构成
node组件本身一般包括两份文件:js文件和html文件,js文件主要定义了组件具体做些什么事情,有什么样的功能;html文件主要定义了组件的属性,组件编辑框格式和帮助信息。
js文件的基本格式如下:
module.exports = function(RED) {
function YourFunctionName(config) {
RED.nodes.createNode(this,config);
this.on('input', function(msg){
// 对输入的消息进行处理.
});
this.send(msg); //将消息输出
this.close('close', function(){
// 在重新deploy后,如节点需要清空一些状态,需注册该回调函数.
});
}
RED.nodes.registerType("nodetype",YourFunctionName);
}
当通过浏览器登录到node-red开发工具后,各节点都会向node-red进行注册,注册节点类型为"nodetype",该类型名字自己可以随便起,但要注意js中的类型名要与html中一致,并声明回调函数YourFunctionName,该函数实现了创建实例节点并注册一些监听函数。
html文件格式如下:
<script type="text/javascript">
RED.nodes.registerType('nodetype',{
category: 'function', //节点分类
color: '#a6bbcf', //节点背景颜色
defaults: {
name: {value:""} //以json格式定义一些属性值,在节点拖动到sheet中时,会通过config参数传递
},
inputs:1, //节点输入 0 or 1
outputs:1, //节点输出 0 or more
icon: "file.png", // 节点使用图标
label: function() { //节点标签
return this.name||"nodetype";
}
});
</script>
<script type=“text/x-red” data-template-name=“nodetype”>
<div class=“form-row”> //编辑框中每一行格式,一般是标签加输入框
<label for=“node-input-name”><i class=“icon-tag”></i> Name</label> //此处for的值应与defaults对象一致
<input type=“text” id=“node-input-name” placeholder=“Name”> //此处id应与for一致
</div>
</script>
<script type=“text/x-red” data-help-name=“nodetype”>
<p>A simple node that converts the message payloads into all lower-case characters</p> //节点提示信息
</script>
3.编写package.json文件
编写package.json文件可以使节点通过npm安装,package.json格式如下:
{
"name" : "node-red-samplenode",
"version" : "0.0.1",
"description" : "A sample node for node-red",
"dependencies": { //说明该模块依赖的其它模块
},
"keywords": [ "node-red" ],
"node-red" : {
"nodes": {
"sample": "sample/sample.js" //该js文件即你要编写的js文件名
}
}
}
4.部署新节点
编辑完上述两个文件,将其放入到node-red目录中的nodes文件夹下重新启动node-red工具即可在面板上看到新添加的node节点