设备触发的服务由设备的属性和事件上报而触发,与API服务流被外界的http请求触发不同,设备触发为设备主动产生上报数据,需要被平台及时感知与处理,具有非常广泛的应用场景。例如可以通过设备触发的服务流存储设备上报的数据、可以通过对设备上报的数据解析对另外一台或者一批设备进行操作,实现设备之间智能的联动。
(ps:为啥属性和事件触发是一起的而不是分开的,因为设备的属性和事件上报是一个Topic,系统依据)

服务开发官方文档地址:https://linkdevelop.aliyun.com/studioservice-doc#index.html(对应IoT Studio的LD3.0版本)。

设备触发上报的数据长啥样

回答这个问题,只需要简单的一个功能节点和API输出即可,通过调试日志,我们即可轻松获取到设备触发上报的数据格式。
image.png

  1. //属性上报
  2. {
  3. "deviceContext": {
  4. "productKey": [上报信息的产品的productKey],
  5. "deviceName": [上报信息的产品的deviceName],
  6. "gmtCreate": [上报信息的产品的创造事件的时间戳]
  7. },
  8. "props": {
  9. "[属性名1]": {
  10. "time": [设备上报信息的时间戳],
  11. "value": [设备上报的属性1的值]
  12. }
  13. }
  14. }

image.png

  1. //事件上报
  2. {
  3. "deviceContext": {
  4. "productKey": [上报信息的产品的productKey],
  5. "deviceName": [上报信息的产品的deviceName],
  6. "gmtCreate": [上报信息的产品的创造事件的时间戳]
  7. },
  8. "event": {
  9. "event1": {
  10. "outputs": {
  11. "intcome": [设备上报事件输出参数的值]
  12. },
  13. "eventCode": "event1",
  14. "eventName": [上报的事件名],
  15. "eventType": [上报的事件类型(信息/告警/故障)]
  16. }
  17. }
  18. }

对比上图,可以看出设备上报的属性以及事件的数据格式为:

字段内容 描述 示例
deviceContext 设备信息 {
“productKey”: “XXX”, // 设备的porductKey
“deviceName”: “XXX”, // 设备的deviceName
“gmtCreate”: 1538109258028 // 设备创建时间
}
props 设备上报的属性信息
当选择上报类型中包含“属性”时,会出现该字段。props字段内的具体内容请参考设备模型定义-功能-属性。
{
“LightStatus”:{ // 设备属性
“time”:1538109258010,
“value”:0
},
“LightVolt”:{ // 设备属性LightVolt
“time”:1538109258010,
“value”:1
}
}
event 设备上报的事件信息
当选择上报类型中包含“事件”时,会出现该字段。event字段内的具体内容请参考设备模型定义-功能-事件。
{
“Identifier1”:{ // 事件标识符
“eventCode”:”Identifier1”, // 事件标识符
“eventName”:”Warm”, // 功能名称
“eventType”:”info”, // 事件类型
“outputs”:{ // 输出参数
“outPara1”:2,
“outPara2”:0
}
},
“Identifier2”:{
“eventCode”:”Identifier2”,
“eventName”:”Warm”,
“eventType”:”info”,
“outputs”:{
“outPara1”:2,
“outPara2”:0
}
}
}

对设备数据判断报警的示例

对于设备数据判断报警一般可以从两方面入手,即:

  1. 在设备端进行判断,平台将判断参数以服务的形式下发至设备,设备本地判断是否报警,若报警则上报事件通知平台
  2. 在平台端进行判断,对于较为复杂的模式识别,由于终端资源受限往往需要在平台完成,平台可以对设备的状态进行判断从而进行报警通知以及设备间的联动,比如接下来尝试在平台端对设备的温度进行判断,超限则发送消息到钉钉机器人。

    设备模型

    本次示例以空气盒子为例,包含温度属性CurrentTemperature
    体验设备触发的服务 - 图3

服务开发

1.进入服务开发」创建一个服务应用。
2.在服务开发工作台创建下发消息到钉钉机器人的服务流(如下图所示)。
体验设备触发的服务 - 图4

3.配置服务流节点参数。

  • 配置设备节点参数,分别选择产品、设备、上报类型(触发设备可以是特定设备也可以是所有设备)

体验设备触发的服务 - 图5

  • 配置路由节点参数,筛选参数为props.CurrentTemperature.value,超限温度数值为23。

体验设备触发的服务 - 图6

  • 配置脚本节点脚本代码
  1. /**
  2. * @param {Object} payload 上一节点的输出
  3. * @param {Object} node 指定某个节点的输出
  4. * @param {Object} query 服务流第一个节点的输出
  5. */
  6. module.exports = function(payload, node, query) {
  7. var temp = payload.props.CurrentTemperature.value;
  8. console.log(payload);
  9. var res = "温度超限报警,报警温度值:" + temp;
  10. return res;
  11. }
  • 配置钉钉机器人节点参数如下过程:

体验设备触发的服务 - 图7
体验设备触发的服务 - 图8
体验设备触发的服务 - 图9
体验设备触发的服务 - 图10
发送至钉钉机器人的内容通过”{{payload}}"获取到上游节点的数据,并推送到绑定钉钉机器人的群中。
4.依次部署运行调试服务,在虚拟设备上报超过23摄氏度数值时,开发的服务将自动发送脚本中文字内容到钉钉机器人,无需购买服务器部署,通过可视化拖拽与配置快速实现数据处理逻辑。
体验设备触发的服务 - 图11

体验设备触发的服务 - 图12