IOTdm: 百讯物联网设备接入平台
http://wiki.baixun.com/x/P4AWAQ
- 设备连接
- 数据解析
- 规则转发
- 在线调试
- 简单的数值计算 比如0XFFF 转int ,乘以100 保留小数点位数
iotdm
├── iotdm-application 应用程序启动,web api,设备数据业务处理逻辑
│
├── iotdm-common 公共程序类,数据流转的实体类
│
├── iotdm-rule 转发规则,消费消息队列 触发规则并转发出去
│
└── iotdm-transport 设备接入与数据传输
dist 前端打包后文件
sql 第一次运行需要初始化的sql
Transport 接入设备,并开启socket,读取缓冲区数据,解析数据并发送Spring的Event
Application 监听Event 并进行程序处理(json解析,物模型匹配),处理结束后转发到MQ
Rule 监听MQ消息队列,并查询配置的规则,转发出去,每个转发是异步的(所以需要每次发送有超时时间)
Application 接受界面请求,并组装json(json里面包含类型与数据,类型主要是ota,control,config 具体含义后续补充);
Application 调用物模型插件函数,完成之后记录数据并生成唯一reqId并且发布Event
Transport 监听上述Event 并且在内存中找到Socket信息的引用,见数据发布到缓冲区
可以是数组,数据优先获取modelId的面的模型相关属性,不存在modelId则按照顺序匹配,匹配上结束
{
"key": "value",
"modelId": "模型名称" // 可以有 可以没,存在的话名称必须在模型中定义
}
二进制报文
0101010101
- 未使用百讯模版中db与redis,需要一些定制化开发
- redis 开启订阅通知
- 修改redis.conf 配置文件
# 原来是""空
notify-keyspace-events "Ex"
如果是运行中redis 使用如下命令更改,集群每个节点都要执行该命令
config set notify-keyspace-events Ex
- decode 需要js 插件解析
var jsonObj = {};
var uint8Array = new Uint8Array(payload.length);
for (var i = 0; i < payload.length; i++) {
uint8Array[i] = payload[i] & 0xff;
}
var dataView = new DataView(uint8Array.buffer, 0);
var tem = dataView.getInt8(0);
jsonObj = {
"tem": tem
};
return JSON.stringify(jsonObj);
- encode js
{
"toDeviceType": "COMMAND", // 枚举类 分别是 COMMAND,CONFIG,OTA
"commandLabel": "", //命令名称
"modelId": "" //模型id 允许为空
"params": {
"key1": "value1",
"key2": 10
}
}
v1.0.0 分支是基础版本开发分支,该分支主要迭代的功能是设备mqtt 连接,基础消息转发
待完成的功能点如下:
- TCP 连接服务
- 设备联动
- 数据持久化配置
- 执行init.sql
- 启动项目
- 将前端放置在nginx 服务
贵州百讯智汇科技有限公司