mirror of
https://gitee.com/dgiiot/dgiot.git
synced 2024-12-05 13:47:46 +08:00
137 lines
7.4 KiB
Markdown
137 lines
7.4 KiB
Markdown
# Dlink协议
|
||
Dlink协议是针对物联网开发领域设计的一种数据交换规范,数据格式是JSON,用于设备端和物联网平台的双向通信,更便捷地实现和规范了设备端和物联网平台之间的业务数据交互。
|
||
|
||
## 协议框架
|
||
![dlink proctol.png](http://dgiot-1253666439.cos.ap-shanghai-fsi.myqcloud.com/shuwa_tech/zh/backend/dgiot/dlink%20proctol.png)
|
||
+ 设备层和用户层隔离,物理层和逻辑层隔离
|
||
+ 用户层mqtt权限与openApi权限保持一致性
|
||
+ 设备侧topic交互采用 {productId}/{deviceAddr}的组合来唯一标识设备, deviceAddr为设备物理地址
|
||
+ 用户侧topic交互采用{deviceId}来唯一标识设备,用{userId}来唯一标识用户,deviceId为设备虚拟地址
|
||
|
||
|
||
### 鉴权设计
|
||
+ %u 表示用Username做ACL规则
|
||
+ %c 表示用clientId做ACL规则
|
||
- 用户侧clientId用Token做ACL规则, Token是dgiot用户登录权限系统的token,与API权限一致
|
||
- 设备侧clientId为{productId}_{deviceAddr},或者 deviceAddr, 必须保证clientId的唯一性
|
||
|
||
| 客户端 | Username | Password | ClientId | 登录鉴权| 订阅ACL | 发布ACL|
|
||
| -------- | -------- | ------- | -------- |-------- | ------- | -------- |
|
||
| Device |{productId}|{productSecret}|clientId| 一型一密 | $dg/device/%u/# | $dg/thing/%u/# |
|
||
| Device |{productId}|{deviceSecret}|clientId| 一机一密 | $dg/device/%u/%d/# | $dg/thing/%u/%c/# |
|
||
| Device |{productId}|{productSecret}|clientId| 证书加密 | $dg/device/%u/# | $dg/thing/%u/# |
|
||
| User |{userId}|{Token}|{Token}| Token认证 | $dg/user/%c/# | $dg/thing/%c/# |
|
||
|
||
## topic设计
|
||
| 分类 | Topic | 发布者 | 订阅者 |
|
||
| -------- | -------- | ------- | -------- |
|
||
| 属性上报 |$dg/thing/{productId}/{deviceAddr}/properties/report|设备|平台|
|
||
| 告警上报 |$dg/user/alarm/{productId}/{deviceId}/properties/report|平台|用户|
|
||
| 组态消息 |$dg/user/konva/{DeviceId}/report|平台|用户|
|
||
| 卡片消息 | $dg/user/realtimecard/{DeviceId}/report|平台|用户|
|
||
| 设备状态消息 | $dg/user/devicestate/{DeviceId}/report |平台|用户|
|
||
| 子属性上报 |$dg/thing/{productId}/{deviceAddr}/gateway/sub_devices/properties/report|设备|平台|
|
||
| 子属性上报 |$dg/user/gateway/{deviceId}/sub_devices/properties/report|平台|用户|
|
||
| 属性设置 | $dg/thing/{deviceId}/properties/set/request_id={request_id}|用户|平台|
|
||
| 属性设置 | $dg/device/{productId}/{deviceAddr}/properties/set/request_id={request_id}|平台|设备|
|
||
| 属性设置 |$dg/thing/{productId}/{deviceAddr}/properties/set/request_id={request_id}|设备|平台|
|
||
| 属性设置 |$dg/user/{deviceId}/properties/set/request_id={request_id}|平台|用户|
|
||
| 属性获取 |$dg/thing/{deviceId}/properties/get/request_id={request_id}|用户|平台|
|
||
| 属性获取 |$dg/device/{productId}/{deviceAddr}/properties/get/response/request_id={request_id}|平台|设备|
|
||
| 属性获取 |$dg/thing/{productId}/{deviceAddr}/properties/get/response/request_id={request_id}|设备|平台|
|
||
| 属性获取 |$dg/user/{deviceId}/properties/get/request_id={request_id}|平台|用户|
|
||
| 属性获取 |$dg/thing/{productId}/{deviceAddr}/shadow/get/request_id={request_id}|设备|平台|
|
||
| 属性获取 |$dg/device/{productId}/{deviceAddr}/shadow/get/request_id={request_id}|平台|设备|
|
||
| 属性采集 |$dg/device/{productId}/{deviceAddr}/properties|平台|设备|
|
||
| 配置下发 |$dg/device/{productId}/{deviceAddr}/profile|平台|设备|
|
||
| 事件上报 |$dg/thing/{productId}/{deviceAddr}/events|设备|平台|
|
||
| 事件上报 |$dg/user/{deviceId}/events|平台|用户|
|
||
| 通道消息 |$dg/user/channel/{channelId}/{productId}/{deviceId}|平台|用户|
|
||
| 通道设置 |$dg/user/channel/{channelId}/commands/request_id={request_id}|用户|平台|
|
||
| 通道设置 |$dg/user/channel/{channelId}/commands/response/request_id={request_id}|平台|用户|
|
||
| 大屏消息 |$dg/user/dashboard/{dashboardId}/{productId}/{deviceId}|平台|用户|
|
||
| 组态大屏 |$dg/user/topo/{SessionToken}/{NodeType}/{NodeId}/report|平台|app|
|
||
| 云云对接 |$dg/bridge/{bridgetopic}|平台|平台|
|
||
| 设备初始化请求 |$dg/thing/{productId}/{deviceAddr}/init/request|设备|平台|
|
||
| 设备初始化响应 |$dg/device/{productId}/{deviceAddr}/init/response|平台|设备|
|
||
| taos 默认topic |$dg/taos/tdpool/{clientId}/# |平台|taos|
|
||
| taos sql |$dg/taos/tdpool/{clientId}/sql |平台|taos|
|
||
| taos 调试模式 |$dg/taos/tdpool/{clientId}/debug |平台|taos|
|
||
| taos 设置连接参数 |$dg/taos/tdpool/{clientId}/connect |平台|taos|
|
||
| taos sql执行结果 |$dg/thing/taos/{clientId} |taos|平台|
|
||
|
||
## payload设计
|
||
### 属性上报 ($dg/thing/{productId}/{deviceAddr}/properties/report)
|
||
+ dlink json格式
|
||
```json
|
||
{
|
||
"Power": "on",
|
||
"WF": 23.6
|
||
}
|
||
```
|
||
+ 透传/自定义
|
||
```
|
||
00002233441232013fa00000
|
||
```
|
||
### 事件上报 $dg/thing/{productId}/{deviceAddr}/events
|
||
```json
|
||
{
|
||
"Power": "on",
|
||
"WF": 23.6
|
||
}
|
||
```
|
||
|
||
## 通道接入
|
||
### grpc2tpc桥接
|
||
+ https://gitee.com/dgiiot/dgiot/tree/master/apps/dgiot_dlink/priv/example/java
|
||
----------------------------------------------------------------------------
|
||
Dlink RunTime Third-party Decode/Encode
|
||
+================================+ +========+==========+
|
||
| Dlink | | | |
|
||
| +--------------+--------- ---+ | gRPC | gRPC | User's |
|
||
| + tpc server | gPRC Client |---------------> | Server | Codes |
|
||
| +--------------|-------------+ | (HTTP/2) | | |
|
||
| | | | |
|
||
+================================+ +========+==========+
|
||
|
||
|
||
### http server
|
||
### http client
|
||
### mqtt client
|
||
### mqtt bridge
|
||
### tcp client
|
||
### udp server
|
||
### udp client
|
||
|
||
+ 支持grpc多语言编解码
|
||
|
||
```
|
||
Dlink RunTime Third-party Decode/Encode
|
||
+========================+ +========+==========+
|
||
| Dlink | | | |
|
||
| +----------------+ | gRPC | gRPC | User's |
|
||
| | gPRC Client | ------------------> | Server | Codes |
|
||
| +----------------+ | (HTTP/2) | | |
|
||
| | | | |
|
||
+========================+ +========+==========+
|
||
```
|
||
### gRPC
|
||
|
||
For instructions on how to use the language-specific gRPC runtime for a project,
|
||
please refer to these documents
|
||
|
||
- [C++](https://github.com/fastdgiot/grpc/tree/master/src/cpp): follow the instructions under the `src/cpp` directory
|
||
- [C#](https://github.com/fastdgiot/grpc/tree/master/src/csharp): NuGet package `Grpc`
|
||
- [Dart](https://github.com/grpc/grpc-dart): pub package `grpc`
|
||
- [Go](https://github.com/grpc/grpc-go): `go get google.golang.org/grpc`
|
||
- [Java](https://github.com/grpc/grpc-java): Use JARs from Maven Central
|
||
Repository
|
||
- [Kotlin](https://github.com/grpc/grpc-kotlin): Use JARs from Maven Central
|
||
Repository
|
||
- [Node](https://github.com/grpc/grpc-node): `npm install grpc`
|
||
- [Objective-C](https://github.com/fastdgiot/grpc/tree/master/src/objective-c): Add `gRPC-ProtoRPC` dependency to podspec
|
||
- [PHP](https://github.com/fastdgiot/grpc/tree/master/src/php): `pecl install grpc`
|
||
- [Python](https://github.com/fastdgiot/grpc/tree/master/src/python/grpcio): `pip install grpcio`
|
||
- [Ruby](https://github.com/fastdgiot/grpc/tree/master/src/ruby): `gem install grpc`
|
||
- [WebJS](https://github.com/grpc/grpc-web): follow the grpc-web instructions
|