通信
建立 WebSocket 连接 —— 基础数据包类型与结构。
地址
打开 WebSocket 连接并使用 JWT token 进行身份验证:
wss://<HOST>:6113/shelly/wss/hk_sock?t=<JWT>集成商通过 用户授权/权限授予 流程获取所需的主机地址,该信息来自集成商回调 URL 中提供的 host 参数。
<JWT> token 的获取方式参见 快速入门。
事件
由 Shelly Cloud 发送的事件。
Shelly:StatusOnChange
当设备状态发生变化时发送。
json
{
"event": "Shelly:StatusOnChange",
"deviceId": "string",
"status": {}
}event:"Shelly:StatusOnChange"deviceId: 设备 IDstatus: 设备特定的状态结构
Shelly:Settings
当通过设备界面更改设备设置时发送。
json
{
"event": "Shelly:Settings",
"deviceId": "string",
"settings": {}
}event:"Shelly:Settings"deviceId: 设备 IDsettings: 设备特定的设置结构
Shelly:Online
当设备在线状态发生变化时发送。
json
{
"event": "Shelly:Online",
"deviceId": "string",
"online": number
}event:"Shelly:Online"deviceId: 设备 IDonline: 在线状态(1= 在线,0= 离线)
命令
继电器与灯光控制请求
用于控制继电器或灯光类设备。
json
{
"event": "Shelly:CommandRequest",
"trid": number,
"deviceId": "string",
"data": {
"cmd": "relay" | "light",
"params": {
"id": number,
"turn": "on" | "off" | "toggle"
}
}
}cmd: 命令类型("relay"或"light")id: 通道 ID(从0开始)turn: 操作动作("on"、"off"或"toggle")
卷帘控制请求
用于控制卷帘窗设备。
json
{
"event": "Shelly:CommandRequest",
"trid": number,
"deviceId": "string",
"data": {
"cmd": "roller",
"params": {
"id": number,
"go": "stop" | "open" | "close"
}
}
}cmd:"roller"id: 通道 ID(从0开始)go: 操作动作("stop"、"open"或"close")
卷帘至指定位置请求
仅在设备已校准的情况下有效。
json
{
"event": "Shelly:CommandRequest",
"trid": number,
"deviceId": "string",
"data": {
"cmd": "roller_to_pos",
"params": {
"id": number,
"pos": number,
"rel": number,
"slat_pos": number,
"slat_rel": number
}
}
}id: 通道 ID(从0开始);即使单通道设备也必须提供。pos: 目标位置百分比(范围:0到100)。rel: 相对移动百分比(范围:[-100..100])。不能与pos同时使用。slat_pos: 百分比形式的百叶位置(如果支持)。slat_rel: 百叶相对移动百分比(如果支持)。不能与slat_pos同时使用。
更多详情请参阅 设备文档。
命令响应
命令请求的响应。
json
{
"event": "Shelly:CommandResponse",
"trid": number,
"deviceId": "string",
"user": number,
"data": {
"isok": boolean,
"res": "string"
}
}event:"Shelly:CommandResponse"trid: 事务 IDdeviceId: 设备 IDuser: 用户 ID(设备所有者)data.isok: 成功标志(成功时为true)data.res: 可选消息(例如错误描述)
操作
结果常量 — data.result
| 常量 | 描述 |
|---|---|
OK | 操作成功。 |
UNAUTHORIZED | 设备访问未授权。 |
WRONG_API_PARAMETERS | 请求格式错误。 |
WRONG_HOST | 请求发送到了错误的主机。 |
注意:
WRONG_HOST响应包含额外字段host,表示设备的实际所在位置。这不保证设备当前在线。
WRONG_HOST 示例响应
json
{
"event": "Integrator:ActionResponse",
"trid": number,
"user": "string",
"data": {
"result": "WRONG_HOST",
"deviceId": "string",
"host": "string"
}
}设备验证
验证设备是否具有有效的集成配置。
请求
json
{
"event": "Integrator:ActionRequest",
"trid": number,
"data": {
"action": "DeviceVerify",
"deviceId": "string"
}
}响应
json
{
"event": "Integrator:ActionResponse",
"trid": number,
"user": "string",
"data": {
"result": "string",
"deviceId": "string",
"deviceType": "string",
"deviceCode": "string",
"deviceStatus": {},
"accessGroups": "string"
}
}result: 上述结果常量之一。deviceId: 请求中提供的设备 ID(可选)。deviceType、deviceCode、deviceStatus: 仅当设备在云端在线时可用。accessGroups: 十六进制编码的字节,表示访问权限。
accessGroups 说明
一个字节(8 位),每位代表一个权限组。目前仅有一个组:
- 第 0 位(最低位):
control(位为1时启用)
| 十六进制 | 二进制 | 访问级别 |
|---|---|---|
00 | 00000000 | 仅读取(无控制权) |
01 | 00000001 | 读取 + 控制 |
示例:
accessGroups: "01"表示已授予控制权限。
获取设备设置
获取设备设置(仅当设备在云端在线时可用)。
请求
json
{
"event": "Integrator:ActionRequest",
"trid": number,
"data": {
"action": "DeviceGetSettings",
"deviceId": "string"
}
}响应
json
{
"event": "Integrator:ActionResponse",
"trid": number,
"user": "string",
"data": {
"result": "string",
"deviceId": "string",
"deviceType": "string",
"deviceCode": "string",
"deviceSettings": {}
}
}result: 上述结果常量之一。deviceId: 请求中提供的设备 ID(可选)。deviceType、deviceCode、deviceSettings: 仅当设备在云端在线时可用。