首先在物联网平台要定义设备,包括定义设备基础信息、传输协议、鉴权方式及物模型等。
点击设备管理
->产品管理
->添加产品
进行创建产品,需要定义产品名称、传输协议等信息。传输配置内容需与设备实际连接方式保持一致。
产品是一类设备的模板,它们的物模型信息具有共性,例如:型号相同的两台温湿度传感器就属于同一个温湿度传感器的产品,它们与物联网平台的连接方式相同,能监测的点位也相同。
创建了产品后,需要配置产品的物模型,包括监测点位和属性状态。点击查看产品详情
->物模型
->添加测点
/添加属性
进行配置物模型。设备数据推送至物联网平台后将按配置的物模型进行过滤展示,因此请确保物模型配置的标识等信息与实际一致。
物模型是物理空间中的实体在物联网平台中的数字化表示,是附着在设备一种数据模型。测点表示设备可被监测的点位数据,例如:设备的产量。属性表示设备运行属性,其区别于测点的特征是数据变化频率不高,且更关注当前值,例如:设备运行状态。
建立好产品及物模型后,就可以创建设备了。点击设备管理
->设备管理
->添加设备
进行创建设备,需要选择设备所属产品,继承产品的基础信息和物模型配置,还需要确定设备连接平台的鉴权方式和凭据内容。
设备是具有传输数据的能力的单位,其对应着物理空间中的实体设备,例如:具体安装在某车间顶部的烟雾传感器。设备物模型是以所属产品当时的物模型配置为模板生成的,生成后独立管理,方便您结合设备实际情况对物模型进行调整。
不同设备接入物联网平台的流程方式大同小异,下文以MQTT协议传输+Access Token方式鉴权举例演示设备接入物联网平台。
获取设备的Access Token,并以此为令牌连接访问物联网平台。
以下举例某网关内的连接配置和调试工具“MQTTX”的连接配置:
Host: mqtt://
iot.cosmoplat.com
[正式环境] iot-uat.cosmoplat.com
[试用环境]
port: 1883
Username: ACCESS_TOKEN
设备连接成功后,物联网平台会显示对应设备状态为在线状态。
单设备直接连接物联网平台推送遥测数据示例:
示例数据内容表示:该设备运行中、监测温度97.5℃、湿度55%、伺服电机开启、开机时间2022-12-12 15:20:00
网关设备连接物联网平台推送挂载子设备的遥测数据示例:
示例数据内容表示:设备1(设备标识是:Device_1)的监测温度86.2℃、湿度65%;设备2(设备标识是:Device_2)的统计产量257件、实时称重129.72kg
单设备直接连接物联网平台推送客户端属性状态示例:
示例数据内容表示:该设备的序列号是SN-001、固件版本号是1.0.1、运行模式是高功率(定义枚举项1是低功率模式,2是高功率模式)
网关设备连接物联网平台推送挂载子设备的客户端属性状态示例:
示例数据内容表示:设备1(设备标识是:Device_1)的序列号是SN-074,固件版本号是1.0.1;设备2(设备标识是:Device_2)的序列号是SN-075,固件版本号是1.0.1
设备推送的遥测数据和属性状态,都能物联网平台实时查看。
点击查看设备详情
->遥测数据
查看最新的遥测数据。历史的遥测数据记录可点击历史数据
查看。
点击查看设备详情
->属性状态
查看最新的属性状态。
请求参数
POST /api/v1/${设备访问令牌}/telemetry HTTP/1.1
Host: https://iot.cosmoplat.com //[正式环境]
http://iot-uat.cosmoplat.com //[试用环境]
Content-Type: application/json
{
"temperature":76.58,
"humility": 45,
"msg" : "正常"
}
返回
http 200
物联网平台默认UDP端口为11451,设备可通过此端口进行推送数据
代码示例
本例使用了netty做udp协议传输
// 1,创建udp服务。通过DatagramSocket对象。
DatagramSocket socket = new DatagramSocket(SERVER_PORT);
// 2,确定数据,并封装成数据包。DatagramPacket(byte[] buf, int length, InetAddress address, int port)
Map<String, Object> map = Maps.newHashMap();
map.put("topic", "telemetry");
map.put("token", "ZiR***jpT");
map.put("data", JSONUtil.parseObj("{\"key1\":\"testText\",\"ts1\":1656311865000,\"key2\":23.4,\"key3\":true}"));
String data = JSONUtil.toJsonStr(map);
byte[] buf = data.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(SERVER_HOSTNAME), SERVER_PORT);
// 3,通过socket服务,将已有的数据包发送出去。通过send方法。
socket.send(dp);
Thread.sleep(5000);
// 4,关闭资源。
socket.close();
物联网平台提供设备模拟功能,可以通过规则链实现模拟推送设备属性状态、设备遥测数据。
您可以通过规则引擎
->规则链
的消息生成器
+保存属性
规则节点进行模拟推送设备属性状态(客户端属性)。
消息生成脚本示例
var msg = {
battery: (60 + Math.random()*40).toFixed(2),
servo: true,
};
var metadata = { data: 40 };
var msgType = "POST_ATTRIBUTES_REQUEST";//属性状态
return { msg: msg, metadata: metadata, msgType: msgType };
示例脚本内容表示:生成标识为battery的属性值是60 ~ 100的随机数,小数点后保留2位小数、标识为servo的属性值是true
您可以通过规则引擎
->规则链
的消息生成器
+保存时序数据
规则节点进行模拟推送设备遥测数据。
消息生成脚本示例
var msg = {
temperature: (0 + Math.random()*100).toFixed(2),
humidity: (0 + Math.random()*100).toFixed(0),
};
var metadata = { data: 40 };
var msgType = "POST_TELEMETRY_REQUEST";//遥测数据
return { msg: msg, metadata: metadata, msgType: msgType };
示例脚本内容表示:生成标识为temperature的测点值是0 ~ 100的随机数,小数点后保留2位小数、生成标识为humidity的测点值是0 ~ 100的随机数,整数(小数点后保留0位小数)
图示中的“物模型过滤”、“设备配置文件”、“消息类型路由器”规则节点是为了模拟真实设备数据处理流,以实现按照物模型配置过滤展示数据、按照告警规则触发告警记录。
物联网平台提供数据实时解析转换功能,您可以通过规则引擎
->规则链
的脚本转换
规则节点进行解析转换设备数据。
温度转换脚本示例
示例脚本内容表示:将华氏度℉转化成摄氏度℃,公式为 C=(F-32)÷1.8,小数点后保留2位小数
物联网平台支持通过直接RPC调用的或HTTP调用等方式的对设备进行反控(需设备支持反控)。
第①步:在物联网平台创建设备,获取设备的Access_Token,设备客户端连接至物联网平台并订阅 MQTT Topic:v1/devices/me/rpc/request/+
第②步:业务系统先进行登陆,获取后续接口调用所需的Token(Token可自行缓存)
http接口:/api/auth/login
,请求方式:post
请求参数
POST /api/auth/login
{
"username":"",
"password":""
}
返回
{
"token":"",
"refreshToken":""
}
第③步:业务系统调用设备控制http接口
请求参数
POST /api/rpc/oneway/{Device_id}
请求头:X-Authorization:Bearer (此处有一个空格)+第②步获取的token
{
"method":"",
"params":""
}
Device_id为物联平台的设备ID,method和params为业务系统自定义,设备客户端能识别即可
第④步:第②步获取的Token过期时间为150分钟,可通过定时任务重新请求或者通过刷新Token接口重新获取Token
请求参数
POST /api/auth/token
{
"refreshToken":"第②步返回的refreshToken"
}
返回
{
"token":"",
"refreshToken":""
}
第①步:在物联网平台创建网关及子设备,获取网关的Access_Token
网关需要向topic:v1/gateway/rpc推送报文{“device”:“设备名称”,“data”:{}}(连接多少设备需要推送多少条)进行网关与设备的绑定(上数也可绑定)。
第②步:业务系统先进行登陆,获取后续接口调用所需的Token(Token可自行缓存)
请求参数
POST /api/auth/login
{
"username":"",
"password":""
}
返回
{
"token":"",
"refreshToken":""
}
第③步:业务系统调用设备控制http接口
POST /api/rpc/oneway/{Device_id}
请求头:X-Authorization:Bearer (此处有一个空格)+第②步获取的token
{
"method":"",
"params":""
}
Device_id为物联平台的设备ID,method和params为业务系统自定义,设备客户端能识别即可
网关会收到报文:
{
"device":"设备标识",
"data":{
"id":1,
"method":"",
"params":""
}
}
第④步:第②步获取的Token过期时间为150分钟,可通过定时任务重新请求或者通过刷新Token接口重新获取Token
请求参数
POST /api/auth/token
{
"refreshToken":"第②步返回的refreshToken"
}
返回
{
"token":"",
"refreshToken":""
}