protocol-通信协议驱动
通信协议层驱动库是一种主要面向 TCP 通信方式提供的编解码补充能力。
以 Http、WebSocket、Mqtt 为例,虽然这些协议都标准的 TCP 应用层协议。但其 Body/Payload 承载的数据格式和业务含义,却因人而异、因场景而异、因设备而异。
通信协议驱动库位于res/library/protocol
目录,该目录下的每一个 lua 文件的文件名便代表该驱动的 protocolKey。
Directorydriver-box
Directoryres
Directorylibrary
Directoryprotocol
- http_server_环境传感器.lua
- http_client_开关.lua
- websocket_照明.lua
- mqtt_水电气表.lua
- …
其工作原理与 设备驱动库 大致相同,都是通过在 Lua 脚本中内置 encode
和 decode
函数,
实现通信数据与 driver-box 内置标准化数据结构的互转。
decode 函数的入参为一个结构化的字符串,格式规范随具体的插件而定:
- HttpServer 插件
- HttpClient 插件
- WebSocket 插件
- MQTT 插件
无论是何种插件,其出参是统一的数据结构,并支持批量返回设备列表信息,包括点位和事件。
encode 函数的出入参设计与 decode 函数刚好相反。 对上层应用而言,所有的下行指令都是围绕着设备点位开展的读写操作行为。
所以,如论对接何种通信插件 ,encode 的入参可以用统一的数据结构表达:
参数名 | 类型 | 说明 |
---|---|---|
deviceId | string | 设备ID |
rw | string | 读写类型,枚举值:read 、write |
points | object | 点位列表,格式如下:[{"name":"pointName_1","value":"val_1"},{"name":"pointName_2","value":"val_2"}] |
encode 函数的入参为一个结构化的字符串,格式规范随具体的插件而定:
- HttpServer 插件
- HttpClient 插件
- WebSocket 插件
- MQTT 插件