Files

97 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
1. 0x36 上报数据格式
-------------------------------------------------------------------
P0 系统锁状态
0x00未锁定
0x01锁定
P1~P6 保留
P7 上报设备数量
P8~P13 设备参数描述一个设备参数固定为6Byte,具体格式如下:
DevType设备类型 1Byte
DevAddr设备地址 1Byte
DevLoop设备回路 2Byte
DevData设备状态 2Byte
P14 上报设备故障数量
P15~P20 上报设备故障数量
DevType设备类型 1Byte
DevAddr设备地址 1Byte
DevLoop设备回路 2Byte
ErrorType故障类型 1Byte
ErrorData故障内容 1Byte
-------------------------------------------------------------------
上报设备的状态具体参数需要查看备数*6Byte如果故障设备数为0则没有设备故障参数。
故障参数解析:
故障类型 故障内容
0x01 0:在线 1:离线
0x02 0~100电量
0x03 电流(10mA)
0x04 1901故障检测次数
0x05 设备回路故障具体设备,不同类型的设备上报状态的描述是不同的。
具体有多少设备状态需要上报,设备参数所占用的字节=设备数*6Byte
同样设备故障参数所占用的字节=设
2. 0x0F 下发数据格式
-------------------------------------------------------------------
P0控制设备总数
P1 ~P495设备控制参数描述一个设备控制参数固定为6Byte具体格式如下
DevType控制设备类型 - 1Byte
DevAddr控制设备地址 - 1Byte
Loop控制设备的回路地址 - 2Byte
Type控制设备的输出类型 - 2Byte
Type_L执行方式
Type_H执行内容
-------------------------------------------------------------------
该命令一般用于服务下发控制数据
3. 0x0F 上报数据格式
ACK (待补充)
4. 数据表结构
不可为空字段:
日志产生时间ts_ms
入库时间write_ts_ms
酒店index
房间index
方向(上传/下发index
命令字index
通讯帧号
UDP消息原文
记录行为类型ACK、下发控制、主动控制、设备回路状态index通过设备类型区分
可为空字段:
系统锁状态
本次上报数量
DevType设备类型 1Byte
DevAddr设备地址 1Byte
DevLoop设备回路 2Byte
DevData设备状态 2Byte
本次故障数量
DevType设备类型 1Byte
DevAddr设备地址 1Byte
DevLoop设备回路 2Byte
ErrorType故障类型 1Byte
ErrorData故障内容 1Byte
一条命令可能会有多条状态,每个状态生成一条记录,通过命令字和帧号来做串联。
一条UDP通讯可能对照多条数据库记录
5. 队列结构
队列分区数6
Topicblwlog4Nodejs-rcu-action-topic
6. 入库前特殊操作
- 定期从temporary_project表中读取数据并保存到`内存`以全局变量的形式每天凌晨1点从数据库更新一次。
- 每条数据写库之前需要根据项目ID从内存中读取项目信息。
- 我需要在现有数据表`rcu_action_events`里,添加一个字段:`loop_name`,用于存储回路名称。
- 查询`loop_name`的方法是:
- 根据要插入的数据中的`device_id``rooms`表中找出对应的房间 -> 得到 `room_type_id`
- 根据 `room_type_id``loop_address``loops` 表中查找对应的 `loop_name`
- `loop_address` 的生成规则:将数据的 `dev_type``dev_addr``dev_loop` 分别转换为 3 位字符串(不足前方补 0然后拼接。
- 例如:`dev_type=1, dev_addr=23, dev_loop=12` -> `001` + `023` + `012` -> `001023012`
- **兜底逻辑**:如果根据上述规则在 `loops` 缓存中未找到对应的 `loop_name`,则使用 `dev_type` 对应的设备名称(配置在 `ACTION_TYPE_DEV_TYPE_RULES` 中)默认名称。
- 格式:`[dev_type名称+'-'+dev_addr+'-'+dev_loop]`
- 例如:`dev_type=35` (名称: TimeCtrl), `addr=14`, `loop=21` -> `[35TimeCtrl-14-21]`
- 最后将找到的或生成的 `loop_name` 写入 `rcu_action_events` 表。
- 注意,所有查库操作都要通过内存缓存来实现。