每次在编译前习惯性的看看教程,好了解整套流程以及避免一些坑,如果你是mac m1芯片,按网上教程需要修改 com.google.protobuf
的 classifier
为 osx-x86_64
因为在老版本中 protobuf
不支持m1,但是现在已经支持,指定为 osx-aarch_64
,相关话题:github
因为之前编译并没有对过程进行记录,所以本篇不包含编译笔记,后续有机会再记录编译过程形成笔记。
仪表盘部件
设备接入后,在控制设备之前,利用部件可以简单易懂的控制设备,同时也能了解到设备的连接状态。
新建仪表盘库
没啥好讲的,无脑操作,输入名字add就行了。
添加部件
这里以灯光举例,我添加一个Round switch用来控制灯光。在添加时,需要创建一个alias,同时指定你需要操作的设备。
设置参数
在高级-数值设定中绑定设备的操作value。示例:getValue_xxx
、setValue_xxx
,可以看出,一个是获取,一个是写入。然后add即可。
控制测试
在这里,你就可以控制开关了。
其他部件同理。
规则链
基本的操作就不写了,记录一些我实现的操作链
联动控制
非ThingsBoard PE版
需求示例
- 现有设备A、B、C(设备A为摄像头,设备B、C假设为灯光、空调)
- 当A设备识别到有人时,打开B、C设备的开关(模拟人员进入)
- 当A设备未识别到有人时,关闭B、C设备开关(模拟人员离开)
- PS:此处只记录A、B联动。
流程图(比较乱)
思路
1 摄像头识别有人,data在input
节点入(这是子链,主链有分流),通过script
筛选器节点分流;
2 分支1(人员进入)
2.1 通过change originator
节点进行发起者转换,换成B设备
注意,大多数name pattern 可以使用${},用来指定元数据中的key
2.2 通过originator telemetry
获取B设备当前遥测(状态)
2.3 通过script
筛选器判断是否需要开灯,相关数据由2.2提供,例如:已经开灯就不执行开灯操作。
1 | var newLMS = metadata.LMS0101001SWS001 == "\"1\""; |
2.4 编写开灯的script
变换节点
1 | var newMsg = {}; |
2.5 执行RPC动作节点,响应2.4的脚本
3 分支2(人员离开)
3.1 编写js脚本
1 | return {msg: {"timestamp": Date.now()}, metadata: metadata, msgType: "POST_ATTRIBUTES_REQUEST"}; |
3.2 通过save attributes
节点保存为属性
3.3 通过delay (deprecated)
节点延时60秒(60秒后关灯)
3.4 通过originator attributes
节点获取3.2保存的属性并写入元数据
3.5 通过change originator
节点进行发起者转换,换成B设备
3.6 通过script
筛选器判断时间差是否符合关灯要求(因为识别到有人会一直请求规则链,所以3.2的操作会让这个时间保存为最新时间)
1 | var newTimestamp = Date.now() - msg.timestamp; |
3.7 编写关灯的script
变换节点
1 | var newMsg = {}; |
3.8 执行RPC动作节点,响应3.7的脚本
至此,就是整个联动控制实现思路,如果你有更好的办法,欢迎评论指点。
未完待续…