产品基本信息设置如下:
- 产品名称:名称为中文、字母、数字、下划线的组合,1位 - 20位且不能为空。
- 产品品类:选择您所创建产品的所属品类,不同类型产品的属性、事件等数据模板会有所不同。
- 设备类型:设备类型分为直连设备、网关、子设备3类,详情如下:
- 直连设备:此类设备可直接接入物联网开发平台且无挂载子设备。
- 网关:此类设备可直接接入物联网开发平台,并且可接受子设备加入局域网络。可以维持子设备的拓扑关系,将与子设备的拓扑关系同步到云端。
- 子设备:此类设备必须依托网关设备才可与物联网开发平台进行通信,例如 Zigbee、蓝牙、Modbus等设备。
- 认证方式:物联网开发平台提供两种认证方式用于设备与平台之间鉴权认证。
- 证书认证:在创建设备时,平台将为设备生成一个证书文件和一个私钥文件,实现设备与云之间的双向认证。
- 密钥认证:在创建设备时,使用平台为设备随机生成的 PSK。
- 通信方式:您可以选择 Wi-Fi、移动蜂窝(2G/3G/4G)、5G、BLE、LoRaWAN 等其它通信方式。
- 接入网关协议(设备类型选择为子设备可选):表示该产品下的设备作为子设备与网关的通讯协议类型。
- Zigbee:表示子设备和网关间的通讯协议为ZigBee。
- BLE:表示子设备和网关间的通讯协议为BLE。
- Modbus:表示子设备和网关间的通讯协议为Modbus-RTU。
- 自定义:表示子设备和网关间的通讯协议为其它标准或私有协议。
- 数据协议:默认采用物模型的数据协议,支持{key:xx,value:xx}和{key:value}两种模式的键值解析,同时支持xml,json,soap等通用编解码数据协议,您也可以自定义协议进行透传。
- 描述:字数不能超过80个,您可以根据需要选填。
物模型
物模型通过将物理实体设备进行数字化描述,构建其数字模型。在物联网开发平台定义物模型即定义产品功能。完成功能定义后,系统将自动生成该产品的物模型。
新建产品后可以引用已存在的物模型模板,也可以自定义物模型。
物模型类型包含三元素:属性、事件和行为。
功能元素 |
功能描述 |
功能标识符 |
属性 |
用于描述设备的实时状态,支持读取和设置,如模式、亮度、开关等。 包括以下六种基本数据类型: 布尔型:非真即假的二值型变量。例如,开关功能。 整数型:可用于线性调节的整数变量。例如,空调的温度。 字符型:以字符串形式表达的功能点,例如,灯的位置。 浮点型:精度为浮点型的功能点。例如,压力值的范围:0.0 - 24.0。 枚举型:自定义的有限集合值。例如,灯的颜色:白色、红色、黄色等。 时间型:string 类型的 UTC 时间戳(毫秒)。 同时,支持数组和结构体类型。 |
PropertiesId |
事件 |
用于描述设备运行时的事件,包括告警、信息和故障三种事件类型,事件型功能属性可以添加具体的事件参数,这些参数可以由属性中六种基本数据类型组成。可添加多个输出参数,例如环境传感器检测到空气质量很差,空调异常告警等。 |
EventId |
行为 |
用于实现更复杂的业务逻辑,可添加多个调用参数和返回参数。行为的输入参数和输出参数可添加属性中六种基本数据类型,用于让设备执行某项特定的任务。例如,开锁动作需要知道是哪个用户在什么时间开锁,锁的状态如何等。 |
ActionId |
数据模板格式参考
{ "version": "1.0", "profile": { "ProductId": "110", "CategoryId": "3" }, "properties": [ { "id": "power_switch", "name": "电灯开关", "desc": "控制电灯开灭", "required": true, "mode": "rw", "define": { "type": "bool", "mapping": { "0": "关", "1": "开" } } }, { "id": "color", "name": "颜色", "desc": "灯光颜色", "mode": "rw", "define": { "type": "enum", "mapping": { "0": "Red", "1": "Green", "2": "Blue" } } }, { "id": "brightness", "name": "亮度", "desc": "灯光亮度", "mode": "rw", "define": { "type": "int", "unit": "%", "step": "1", "min": "0", "max": "100", "start": "1" } }, { "id": "name", "name": "灯位置名称", "desc": "灯位置名称:书房、客厅等", "mode": "rw", "required": false, "define": { "type": "string", "min": "0", "max": "64" } } ], "events": [ { "id": "status_report", "name": "DeviceStatus", "desc": "Report the device status", "type": "info", "required": false, "params": [ { "id": "status", "name": "running_state", "desc": "Report current device running state", "define": { "type": "bool", "mapping": { "0": "normal", "1": "fault" } } }, { "id": "message", "name": "Message", "desc": "Some extra message", "define": { "type": "string", "min": "0", "max": "64" } } ] }, { "id": "low_voltage", "name": "LowVoltage", "desc": "Alert for device voltage is low", "type": "alert", "required": false, "params": [ { "id": "voltage", "name": "Voltage", "desc": "Current voltage", "define": { "type": "float", "unit": "V", "step": "1", "min": "0.0", "max": "24.0", "start": "1" } } ] }, { "id": "hardware_fault", "name": "Hardware_fault", "desc": "Report hardware fault", "type": "fault", "required": false, "params": [ { "id": "name", "name": "Name", "desc": "Name like: memory,tf card, censors ...", "define": { "type": "string", "min": "0", "max": "64" } }, { "id": "error_code", "name": "Error_Code", "desc": "Error code for fault", "define": { "type": "int", "unit": "", "step": "1", "min": "0", "max": "2000", "start": "1" } } ] } ], "actions": [ { "id": "unlock", "name": "开灯行为检测", "desc": "用于描述开灯的动作", "input": [ { "id": "open", "name": "开关", "define": { "type": "bool", "mapping": { "0": "关", "1": "开" } } }, { "id": "user", "name": "用户", "define": { "type": "string", "min": "0", "max": "2048" } } ], "output": [ { "id": "user", "name": "用户", "define": { "type": "string", "min": "0", "max": "2048" } }, { "id": "time", "name": "开灯时间", "define": { "type": "timestamp" } }, { "id": "state", "name": "灯的状态", "define": { "type": "bool", "mapping": { "0": "关", "1": "开" } } } ], "required": false } ] }
物模型协议
产品定义物模型后,设备可以根据物模型中的定义上报属性、事件,并可对设备下发控制指令。物模型协议包括了以下几部分。
- 设备初始信息上报:设备连接平台时上报的初始信息,便于平台展示设备详细信息,如设备 MAC 地址、IMEI 号。
- 设备属性上报:设备端将定义的属性根据设备端的业务逻辑向云端上报,周期上报或者变更即上报。
- 设备事件上报:设备可根据定义的物模型中的事件,当事件被触发,则根据设备事件上报的协议上报告警、故障等事件信息。
- 设备远程控制:从云端向设备端下发控制指令,即从云端设置设备的可写属性。
- 获取设备属性:获取设备最新的上报数据。
- 设备行为调用:云端可以通过 RPC 的方式通知设备执行某个动作行为,适用于应用需要实时获取设备的执行结果的场景。
设备单Topic上报&订阅
优点:Topic订阅数量少,通过method字段来路由,method可拓展其他类型消息,消息拓展方便,
缺点:服务端处理较复杂
上行请求 Topic (服务端订阅): /up/all/{ProductID}/{DeviceSN}
下行响应 Topic (设备端订阅): /down/all/{ProductID}/{DeviceSN}
上行请求: { "method": "baseinfo|property|event|reply", "token": "1234567", "params": { //支持key:value方式,也支持key:xxx,value:xxx方式 "name": "dev001", "imei": "ddd", "hardinfo": "ddd", "mac": "ddd", "ip": "ddd" } }
下行请求: { "method": "property|action|add|del", "token": "1234567", "params": { //支持key:value方式,也支持key:xxx,value:xxx方式 "name": "dev001", "imei": "ddd", "hardinfo": "ddd", "mac": "ddd" } } 设备控制响应: { "method": "reply", "token": "1234567", "params": { //支持key:value方式,也支持key:xxx,value:xxx方式 "code":0, "status":"some message" } }
设备多Topic上报&订阅
优点:通过Topic来路由消息,服务端业务处理方便。
缺点:Topic路由拓展不方便,涉及客户端改动,或者需进行路由转发
设备属性上行请求 Topic (服务端订阅):
- /up/property/{ProductID}/{DeviceSN}
- /up/event/{ProductID}/{DeviceSN}
- /up/action/{ProductID}/{DeviceSN}
- /up/sub/property/{ProductID}/{DeviceSN}
- 自定义Topic
设备属性下行响应 Topic (设备端订阅):
- /down/property/{ProductID}/{DeviceSN}
- /down/action/{ProductID}/{DeviceSN}
- /down/sub/property/{ProductID}/{DeviceSN}
- 自定义Topic
设备初始信息上报
平台展示设备详细信息时,一般会展示设备的 MAC 地址、IMEI 号、时区等基础信息。
设备上报主题:/up/property/{ProductID}/{DeviceSN} 设备上报: { "method": "info", "token": "1234567", "params": { "name": "dev001", "imei": "ddd", "module_hardinfo": "ddd", "mac": "ddd" } } 服务端无响应消息。
设备属性上报
当设备需要向云端上报设备运行状态的变化时,以通知云端业务系统接收设备上报属性数据,
设备上报主题:/up/property/{ProductID}/{DeviceSN} 设备上报: { "method":"property", "token":"123", //(时间戳也可以复用该字段) "params":{ //"timestamp":1628646783, "power_switch":1, "color":1, "brightness":32 } } 服务端无响应消息。
设备远程控制
使用物模型协议的设备,当需要通过云端控制设备属性和功能时,
服务端下发主题:/down/property/{ProductID}/{DeviceSN} 服务端请求: { "method": "property", "token": "123", //(时间戳也可以复用该字段) "params": { //"timestamp":1628646783, "power_switch": 1, "color": 1, "brightness": 66 } } 设备端回复主题:/up/property/{ProductID}/{DeviceSN} { "method":"reply", "token":"123", "params": { "code":0, "status":"some message" } }
服务端下发主题:/down/action/{ProductID}/{DeviceSN} 服务端请求: { "method": "action", "token": "123", //(时间戳也可以复用该字段) "params": { "actionId": "openDoor", } } 设备端回复主题:/up/action/{ProductID}/{DeviceSN} { "method":"reply", "token":"123", "params": { "code":0, "status":"some message" } }
设备事件上报
当设备需要向云端上报事件时,如上报设备的故障、告警数据,
设备上报主题:/up/event/{ProductID}/{DeviceSN} 设备上报: { "method":"event", "token":"123", //(时间戳也可以复用该字段) "params":{ //"timestamp":1628646783, "eventId":"PowerAlarm", "type":"info|alert|fault", "timestamp":1212121221, "Voltage":2.8, "Percent":20 } } 服务端无响应消息。
子设备管理
子设备身份注册后,需由网关向物联网平台上报网关与子设备的拓扑关系,然后进行子设备上线。
子设备上线过程中,物联网平台会校验子设备的身份和与网关的拓扑关系。所有校验通过,才会建立并绑定子设备逻辑通道至网关物理通道上。子设备与物联网平台的数据上下行通信与直连设备的通信协议一致,协议上不需要露出网关信息。
删除拓扑关系后,子设备不能再通过网关上线。系统将提示拓扑关系不存在,认证不通过等错误。
网关上报主题:/up/sub/{ProductID}/{DeviceSN} 网关上报: { "method":"register|add|del", "token":"123", //(时间戳也可以复用该字段) "params":{ //"timestamp":1628646783, "eventId":"PowerAlarm", "type":"info|alert|fault", "timestamp":1212121221, "Voltage":2.8, "Percent":20 } } 服务端回复主题:/down/sub/{ProductID}/{DeviceSN} { "method":"reply", "token":"123", "params": { "code":0, "status":"some message" } }
服务端下发主题:/down/sub/{ProductID}/{DeviceSN} 服务端下发: { "method":"list", "token":"123", //(时间戳也可以复用该字段) "params":{ //"timestamp":1628646783, "eventId":"PowerAlarm", "type":"info|alert|fault", "timestamp":1212121221, "Voltage":2.8, "Percent":20 } } 设备端回复主题:/up/sub/{ProductID}/{DeviceSN} { "method":"register|add|del", "token":"123", //(时间戳也可以复用该字段) "params":{ //"timestamp":1628646783, "eventId":"PowerAlarm", "type":"info|alert|fault", "timestamp":1212121221, "Voltage":2.8, "Percent":20 } }