inSona-Developer Site

总览

inSona照明控制系统由硬件、云端、⽤⼾App组成。 硬件包括⽹关、灯具、传感器、⾯板等。

⽹关通过蓝⽛MESH协议与其他设备进⾏通信,通过Wi-Fi或者有线与云端/本地服务器通信。App通过局域⽹或者服务器与⽹关通信,并实现设备的控制。

⽹关:⼀个特殊硬件设备,所有系统的其他类型设备统称为⼦设备,⽽与之相对的就是⽹关, 称为桥设备。⼦设备本⾝只有蓝⽛通信能⼒,⽽桥设备同时具备蓝⽛和WiFi和以太⽹能⼒。桥设备是连接互联⽹和蓝⽛MESH⽹络的桥梁,在中间承担协议翻译,信息存储和转发的功能。

inSona提供本地控制协议,第三⽅设备可以通过局域⽹发现协议扫描发现附近的⽹关,然后设备可以⽹关建⽴TCP连接,后续所有操作都建⽴在TCP通讯的基础上。整个流程如下: 本地发现⽹关-->建⽴socket连接-->同步设备信息-->设备控制/状态同步等。

inSona API

inSona API 用于从本地网关通过TCP连接获取到蓝牙mesh网络内的设备信息

版本历史

开始吧

  1. 获取网关IP地址,通过inSona APP操作添加网关设备
  2. 进入网关页面,查看网关设备IP
  3. 通过控制TCP连接与网关建立会话

建立TCP连接

通过TCP建立网络连接,网关端口号为:8091

以Python为例

from socket import *

HOST = '127.0.0.1' # or 'localhost'
PORT = 8091
BUFSIZ =1024
ADDR = (HOST,PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)

控制协议

消息内容

客⼾端和⽹关之间使⽤JSON格式的消息进⾏交互,消息基于TCP协议进⾏传递;消息之间 以“\r\n”作分隔

请求消息的基本格式如下:

{
    "version": 1,
    "uuid": 1234,
    "type": "all",
    "method": "c.query"
}

字段定义

version:
协议版本,⽬前只有⼀个可⽤版本1。

uuid:
请求uuid,请求消息与回应消息的uuid相同,可根据这个来匹配

method:
方法名

⽬前以⽀持的上下⾏消息的⽅法有如下⼏种:

方向 Method 说明
客户端->网关 c.query 请求mesh内设备信息
网关->客户端 s.query 返回mesh内设备信息
客户端->网关 c.control 控制设备
网关->客户端 s.control 返回控制设备是否成功
网关->客户端 s.event 网关主动通知

同步设备

客户端发起同步请求

{
    "version": 1,
    "uuid": 1234,
    "type":"all",
    "method": "c.query"
}

服务端返回设备信息

字段 含义
devices 设备列表
rooms 房间列表,可与devices中设备的roomId对应表示设备所处房间
did 设备唯一标识
pid 表示产品型号
ver 软件版本
alive 设备在线状态 (1.在线,0.不在线)
name 设备名称(APP内修改)
type 设备类型:
灯具(1984)
开合帘(1860)
卷帘(1861)
开合帘带角度(1862)
面板(1218)
传感器(1344)
func 说明 value 说明
2 只能开关的设备 0/1 关/开
3 只能调亮度的灯或窗帘 0-100 当前亮度或位置百分比
4 双色温灯 0-100,
0-100
亮度百分比,
色温百分比 色温0表示最暖 100表示最冷
5 HSL灯 0-100,
0-360,
0-100
亮度百分比,
色相(如红色为0,绿色120,蓝色240),
饱和度
9 面板按键
N 按键数量
10 传感器
14 空调 0/1,
1-5,16,
0,1,2,7,
16-30,
-10-40
开关,
风速,1最小,5最大,16自动
模式,0通风,1制热,2制冷,7除湿
设定温度
环境温度
21 地暖 0/1,
10-30,
-10-40
开关,
设定温度
环境温度
24 新风 0/1,
1-5,16
开关,
风速,1最小,5最大,16自动

代码示例:

{
    "version": 1,
    "uuid": 1234,
    "method": "s.query",
    "result": "ok",
    "rooms": [{
        "roomId": 6,
        "name": "办公区"
    }, {
        "roomId": 14,
        "name": "会议室"
    }],
    "devices": [{
        "did": "ECC57F10015800",
        "pid": 3,
        "ver": "61719",
        "type": 1984,
        "alive": 1,
        "roomId": 2,
        "name": "左",
        "func": 0,
        "funcs": [],
        "value": []
    }, {
        "did": "ECC57F1003E000",
        "pid": 3,
        "ver": "61719",
        "type": 1984,
        "alive": 1,
        "roomId": 2,
        "name": "右",
        "func": 0,
        "funcs": [],
        "value": []
    }, {
        "did": "ECC57F1031F100",
        "pid": 256,
        "ver": "61706",
        "type": 1984,
        "alive": 1,
        "roomId": 26,
        "name": "会议过道",
        "func": 4,
        "funcs": [2, 3, 4, 11],
        "value": [0, 100, 8]
    }, {
        "did": "ECC57F10327200",
        "pid": 256,
        "ver": "61706",
        "type": 1984,
        "alive": 1,
        "roomId": 26,
        "name": "茶柜灯",
        "func": 4,
        "funcs": [2, 3, 4, 11],
        "value": [0, 100, 8]
    }, {
        "did": "ECC57F1038DD00",
        "pid": 256,
        "ver": "61706",
        "type": 1984,
        "alive": 1,
        "roomId": 26,
        "name": "沙发射灯",
        "func": 4,
        "funcs": [2, 3, 4, 11],
        "value": [0, 54, 8]
    }]
}
表示有2个设备  其中单设备为 "F0ACD777770300" 支持亮度色温,当前为on,50%,50%,
组地址“A0” 支持亮度色温,当前为on,50%,50%
“F0ACD760002D00” 为传感器
"rooms"为当前蓝牙网络内的房间信息,roomId与设备内的roomId对应
{
    "did": "ECC57F11A6B0FF",
    "pid": 27,
    "ver": "61736",
    "type": 1218,
    "alive": 1,
    "roomId": 1,
    "name": "大厅右面板",
    "func": 9,
    "funcs": [9],
    "value": [4]
}

面板数据,通过value[4]代表此面板按键数量为4键面板

关于灯具类型区分,inSona设备分为 继电器开关,单色温调光,双色温,RGB,RGB+双色温
根据同步返回的数据,对设备的funcs进行解析
【2,11】继电器的灯 【2,3,11】 只调光的灯 【2,3,4,11】双色温灯 【2,3,5,11】RGB灯 【2,3,4,5,11】 RGB+双色温
            

控制设备

客户端发起控制设备请求

字段 含义
did string
设备唯一标识
action string
控制类型
value int[]
控制参数
transition int
灯控时的渐变时间,0表示默认,单位毫秒(ms)

action 和 value 说明

action(value长度) value 含义
onoff(1) 0/1 开关
level(1) 0-100 调节亮度或窗帘百分比
temperature(1) 0-100 色温百分比 色温0表示最暖 100表示最冷
ctl(2) 0-100,
0-100
亮度百分比,
色温百分比 色温0表示最暖 100表示最冷
hsl(3) 0-100,
0-360,
0-100
亮度百分比,
色相(如红色为0,绿色120,蓝色240),
饱和度
scene(1) 0-255 触发场景,场景号获取通过c.query.scene
lightmode(1) 0-单色温呼吸
1-双色温白光呼吸
2-双色温暖光呼吸
3-双色温暖白呼吸
呼吸模式
adaptiveLight(1) 0/1 节律开关
curtainStop(0) NA 窗帘停止
curtainAngel(1) 0-180 窗帘的角度控制
swBgLightness(1) 0-100 面板背光灯亮度
sensorEnable(1) 0/1 传感器启用禁用
acOnoff(1) 0/1 空调开关
acMode(1) 0-通风
1-制热
2-制冷
7-除湿
空调模式
acTemperature(1) 16-30 空调温度,摄氏度
acSpeed(1) 1-5,16 1表示风量最小
5表示风量最大
16表示自动
fhOnoff(1) 0/1 地暖开关
fhTemperature(1) 10-30 地暖温度,摄氏度
faOnoff(1) 0/1 新风开关
faSpeed(1) 1-5,16 1表示风量最小
5表示风量最大
16表示自动

代码示例:

{
    "version": 1,
    "uuid": 1,
    "method": "c.control",
    "did": "F0ACD777770300",
    "action": "onoff",
    "value": [0],
    "transition": 0
}            
表示把设备"F0ACD777770300"设为关闭

{
    "version": 1,
    "uuid": 1,
    "method": "c.control",
    "did": "a0",
    "action": "level",
    "value": [30],
    "transition": 0
}    
表示把组设备"a0"设为亮度30%

{
    "version": 1,
    "uuid": 1,
    "method": "c.control",
    "did": "ECC57F10B3C500",
    "action": "curtainstop",
    "value": [],
    "transition": 0
}
"action": "curtainstop",为窗帘停止命令 value为空
                    

服务端返回控制设备是否成功

如果控制成功服务端将返回“OK”

{
    "version": 1,
    "uuid": 1,
    "method": "s.control",
    "result": "ok"
}

服务器主动上报event

evt 值 含义
"meshchange" 配置或在线状态变化,客户端需重新发送 (c.query) 同步设备
"status" 设备状态改变。 did,func,value解析同"服务端返回设备信息"
"sensor" 传感器检测状态变化
"switch.key" 按键事件
"scene.recall" 触发场景
"scene.off" 场景关闭
"heartbeat" 心跳包,1分钟发一次

设备状态改变

代码示例:

{
    "version": 1,
    "uuid": 14,
    "method": "s.event",
    "evt": "status",
    "did": "F0ACD777770300",
    "func": 2,
    "value": [0]
}
表示设备"F0ACD777770300"被关了

{
    "version": 1,
    "uuid": 16,
    "method": "s.event",
    "evt": "status",
    "did": "F0ACD777770300",
    "func": 4,
    "value": [15, 50]
}
表示设备"F0ACD777770300"亮度色温被调到15%,50% 

通过开关模式打开设备,当设备打开是反馈数据如下
{
    "version": 1,
    "uuid": 617,
    "method": "s.event",
    "evt": "status",
    "did": "A9",
    "func": 2,
    "value": [1],
    "status": [4, 85, 0]
}
value [1] 表示设备被打开,status[4,85,0]  4表示双色温CTL命令,85表示当前亮度,0表示色温值
                

传感器状态上报事件

value[0]值 value[1]值
1-人感 1-有人 0-无人
2-光感 lux值

{
    "version": 1,
    "uuid": 4,
    "method": "s.event",
    "evt": "sensor",
    "did": "F0ACD760002D00",
    "func": 10,
    "value": [1, 1]
}               
表示传感器" F0ACD760002D00"人感被触发值为1

面板按键状态上报事件

value[0] value[1]
按键序号 按键事件
0-按下
1-松开
2-长按
3-双击
4-旋转 value[2]=旋转百分比[-100,100]

{
    "version": 1,
    "uuid": 1632,
    "method": "s.event",
    "evt": "switch.key",
    "did": "ECC57F108F3BFF",
    "func": 9,
    "value": [3, 0]
}
表示面板" ECC57F108F3BFF"第3个按键被按下 【3,0】代表按键3被按下

同步场景数据

客户端发起同步请求

{
    "version": 1,
    "uuid": 1234,
    "method": "c.query.scene"
}

服务端返回设备信息

代码示例:

{
    "version": 1,
    "uuid": 0,
    "method": "s.query.scene",
    "scenes": [{
            "sceneId": 2,
            "name": "喝茶"
        },
        {
            "sceneId": 4,
            "name": "会议"
        }]
}

场景控制

客户端发起控制场景请求

{
    "version": 1,
    "uuid": 1,
    "method": "c.control",
    "action": "scene",
    "value": [33],    此value为上面同步获取的场景ID 
    "transition": 0
}