1. Homebase over TCP
1.1. 通讯协议
通讯基于 JSON-RPC 2.0,使用 TCP 短连接
成功返回
jsonrpc
{string} 必须为"2.0"id
{string} 必须与请求对象中的id一致result
{any} 执行结果, 根据接口类型返回不同的结果
{"jsonrpc": "2.0", "result": "some data", "id": "1"}
错误返回
jsonrpc
{string} 必须为"2.0"id
{string} 必须与请求对象中的id一致error
{object} 错误对象error.code
{int} 错误代码error.message
{string} 错误描述error.data
{string} 错误名称, (errorName)
错误名称需使用指定值,具体请参考 标准错误
{
"jsonrpc": "2.0",
"error": {
"code":10001,
"message": "error reason",
"data": "E_DRIVER_ERROR"
},
"id": "1"
}
1.2. 连接过程
- Homebase 获取到 TCP 驱动服务 IP地址 与 端口
- Homebase 建立与该驱动服务的连接
- Homebase 发送 TCP json-rpc call
- 设备收到 Homebase 发送 TCP 的 FIN 包代表 Homebase 的数据已全部发送完毕,可以开始解析数据并做相应的处理
- TCP 驱动返回结果完毕后断开连接
1.3. 指令
1.3.1. method:list
获取设备列表
输入参数
- params
- {Object} userAuth
- userId
- userToken
- {Object} userAuth
返回设备列表, 标准设备接口参考 Homebase 设备
- {Array} result
- {String} deviceId
- {Object} deviceInfo
- {String} state
- actions
--> {"jsonrpc": "2.0", "method": "list", "params": {"userAuth":{ "userId": "hello1234" }}, "id": "1"}
<-- {
"jsonrpc":"2.0",
"result":[
{
"deviceId":"test-id",
"name":"测试设备",
"type":"light",
"roomName": "办公室",
"homeName": "公司",
"actions":{
"switch":[
"on",
"off"
]
},
"state":{
"switch":"on"
},
"offline":false
}
],
"id":1
}
1.3.2. method:execute
- params
- userAuth, 可选
- userId
- userToken
- device
- deviceId
- deviceInfo
- state
- action
- property eg: 'color'
- name eg: 'num'
- value eg: 0xff0000
- userAuth, 可选
方法返回
- 可以返回设备最新 state
返回 null 会触发一次 get 请求来更新最新设备状态
result
--> { "jsonrpc": "2.0", "method": "list", "params": {"userAuth":{ "userId": "hello1234" }, "device": {"deviceId": "abc"}, "action": {"property": "switch", "name": "on"}}, "id": "1" }
// 返回 null 会触发一次 get 请求来更新最新设备状态
<-- { "jsonrpc": "2.0", "result": null, "id": "1"}
// 返回设备最新 state, 可以更新设备状态
<-- { "jsonrpc": "2.0", "result": {"switch": "on"}, "id": "1"}
1.3.3. method:command
- params
- method {String}
- params {Object}