主题
NATS数据总线
云组态平台提供了向 Nats 消息中间件转发数据的功能。用户可以通过向 Nats 订阅,获取实时数据更新。
参数名称 | 说明 | 默认值 |
---|---|---|
ProjectID | 项目ID | iotopo |
ModelID | 设备模型ID | |
DeviceID | 设备ID | |
PointID | 点位ID |
设备实时数据
消息主题:iot.platform.device.datas.{ProjectID}.{ModelID}.{DeviceID}.{PointID}
消息主题示例:
- 订阅 mydevice_01 设备下的所有测点数据:
iot.platform.device.datas.iotopo.*.mydevice_01.*
- 订阅 mydevice_01 设备下的 t1 测点数据:
iot.platform.device.datas.iotopo.*.mydevice_01.t1
- 订阅 mymodel_01 模型下的所有设备测点数据:
iot.platform.device.datas.iotopo.mymodel_01.*.*
消息体格式:
json
{
"deviceID": "D01",
"pointID": "P01",
"value": 1,
"quality": 0,
"timestamp": 1655342160703,
"tenantID": "iotopo",
"projectID": "iotopo",
"gatewayID": "G01"
}
Java 示例
javascript
package com.iotopo.topstack;
import io.nats.client.Connection;
import io.nats.client.Dispatcher;
import io.nats.client.Nats;
import io.nats.client.Subscription;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class DataConnector {
public static void main(String[] args) {
// 官方客户端地址:https://github.com/nats-io/nats.java
try {
Connection nc = Nats.connect("nats://127.0.0.1:4222");
// 订阅全部实时数据
Dispatcher d = nc.createDispatcher((msg) -> {
});
Subscription s = d.subscribe("iot.platform.device.datas.iotopo.>", (msg) -> {
String response = new String(msg.getData(), StandardCharsets.UTF_8);
System.out.println("Message received: " + response);
});
//s.unsubscribe(10);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
通道状态
topic:iot.platform.channel.state.{ProjectID}.{ChannelID}
json
{
"deviceID": "D01",
"pointID": "P01",
"value": 1,
"quality": 0,
"timestamp": 1655342160703,
"tenantID": "iotopo",
"projectID": "iotopo",
"gatewayID": "G01"
}
网关状态
topic:iot.platform.gateway.state.{ProjectID}.{GatewayID}
json
{
"projectID": "iotopo",
"gatewayID": "G01",
"state": 1, // 0: 离线, 1:在线
"timestamp": 1655342160703
}
设备状态
topic:iot.platform.device.state.{ProjectID}.{DeviceID}
json
{
"projectID": "iotopo",
"gatewayID": "G01",
"deviceID": "D01",
"state": 1, // 0: 离线, 1:在线
"timestamp": 1655342160703
}
告警推送
topic:iot.platform.alert.{ProjectID}.{DeviceID}
json
{
"id": "cak5i5te97ejrjko7qe0",
"status": "handled", // unhandled/handled/ignored
"createdAt": "2022-06-14T17:47:02.461192+08:00",
"recoveredAt": null,
"handledAt": "2022-06-14T17:47:09.123729+08:00",
"handler": "admin",
"orderCreated": true,
"title": "告警标题",
"content": "告警内容",
"remark": "确认信息备注"
"ruleTemplateID": "告警规则ID",
"deviceID": "c",
"pointID": "TEST",
"mode": "property",
"duration": 1,
"inputValue": "111",
"compareMode": ">",
"compareValue": "2",
}
字段说明
名称 | 类型 | 说明 |
---|---|---|
id | string | 告警记录标识 |
status | string | 告警状态:unhandled/handled/ignored |
createdAt | string | 告警发生时间,ISO8601 格式 |
recoveredAt | string | 告警解除时间,ISO8601 格式,空表示新产生的告警,不为空表示告警解除或者状态更新。 |
handledAt | string | 确认告警时间 |
handler | string | 告警确认人 |
remark | string | 确认信息备注 |
orderCreated | boolean | 是否创建工单 |
title | string | 告警标题 |
content | string | 告警内容 |
ruleTemplateID | string | 告警规则ID |
deviceID | string | 设备标识 |
pointID | string | 测点标识 |
inputValue | string | 告警值 |
duration | number | 持续时长(秒) |
mode | string | 触发方式:point:单测点not_upload:长时间不上传not_change:长时间数据不变化offline:设备离线expression:表达式 |
compareMode | string | 比较方式如下:>>=<<==!=区间内(between):测点值处于区间外时,触发告警。区间格式:(100, 200), [100,200]区间外(not_between):测点值处于区间内时,触发告警。数值偏差(diff):测点值与阈值的差值大于偏差值时,触发告警。 |
compareValue | string | 告警阈值 |
deadBand | number | 死区值 |
diff | number | 偏差值 |