智能家居SDK对接协议 V1.1.0
| 版本 | 改动记录 |
|---|---|
| V1.0.0 | 初始版本 |
| V1.0.1 | 增加第六章,增加灯光情景 |
| V1.0.2 | 增加RS485插件开发&存储空间 |
| V1.0.3 | 增加插件反向控制中控屏设备指令集 |
| V1.0.4 | 增加插件发现设备及插件调试信息接口 |
| V1.0.5 | 修改设备控制和状态反馈部分 |
| V1.0.6 | 完善插件打包测试发布文档 |
| V1.0.7 | 增加继电器控制 |
| V1.0.8 | 增加产测方法 |
| V1.0.9 | 修改打包发布部分 |
| V1.1.0 | 增加电视类型 |
智能家居SDK对接方式,适用于有嵌入式linux下C开发能力的公司,可支持设备登录,发现设备,控制设备以及设备状态反馈。
一. 快速体验
1. 编译环境构建
本插件仅支持ubuntu系统下编译开发,点击下载 GCC交叉编译工具链。电脑安装adb工具(使用android标准的adb工具),并通过usb线连接电脑和声必可主机,不支持网络adb。
2. 下载demo插件
点击下载 demo插件, 通过 adb push jdsmart_demo_xxx_sunxi.ipk /data/jdsmart_demo.ipk 命令推送ipk文件至主机端, 然后在电脑端通过 adb shell 命令进入声必可主机终端,执行 opkg install /data/jdsmart_demo.ipk 命令,即可安装demo插件(仅需安装一次)。
3. 重启UI进程
通过 adb shell 命令进入声必可主机终端,执行 /etc/init.d/jd_ui restart命令,即可重启UI进程,并加载新的demo插件。
4. 智能家居demo演示说明
智能家居demo插件演示了登录二维码,发现设备及场景,设备状态反馈等基本功能。
可通过主机 桌面->设置->智能家居->智能主机管理查看登录二维码,demo演示10秒后自动登录成功,并发现设备。设备发现完成后,就可以在桌面左屏看到设备,右屏看到场景。然后可以点击或语音控制设备或场景。
登录 -> 发现设备及场景 -> 显示设备及场景 -> 界面点击或语控场景及设备
5. 第三方智能家居模块硬件对接(可选)
第三方智能家居可以将自有的硬件模块(如蓝牙、zigbee模块或485)替换掉原有zigbee硬件模块,以实现硬件网关和中控屏一体化集成,具体需要联系声必可商务和技术沟通细节。主控跟第三方智能家居硬件模块通过串口通信(可使用带流控的串口),节点是/dev/ttyS3。
二. 编译开发插件
1. 编译并调试demo插件
请先查看快速体验章节,安装好demo插件。点击下载 demo插件源码, 解压后修改build.sh文件中COMPILE_PREX路径为交叉编译器的路径,执行./build.sh命令可编译生成 libjdsmart_demo.so 并通过usb adb推送库更新至声必可主机。(如何开启ADB?可通过设置》关于本机》右上角空白处点击5次以上》进入开发者选项》勾选ADB调试即可)。执行 /etc/init.d/jd_ui stop命令,关闭UI服务,执行 /mnt/app/jd_ui/bin/SmartSpeaker, 启动UI应用,可通过c printf打印调试。
2. 流程图

3. API说明
对接插件需要实现如下函数,具体函数功能描述,参考demo源码注释。
/**
* @brief 预初始化
* @note
* @param params: 暂无
* @param listener: 应用层回调函数,需本地保存
* @retval
*/
int smarthome_preinit(char* params, callback_func listener);
/**
* @brief 初始化
* @note
* @param params: {
"uuid": "AIS后台绑定的插件设备id(如果使用AIS管理设备id和key)",
"key": "AIS后台绑定的插件设备key",
"deviceID": "本机设备唯一ID"
}
* @param listener: 暂不需要
* @retval
*/
int smarthome_init(char* params, callback_func listener);
/**
* @brief 获取状态
* @note
* @retval PLUGIN_STATE_FAIL
PLUGIN_STATE_IDLE
PLUGIN_STATE_INITED
PLUGIN_STATE_GET_CODE
PLUGIN_STATE_GET_TOKEN
PLUGIN_STATE_LOGGED
*/
int smarthome_get_state();
/**
* @brief 获取插件信息
* @note
* @retval
*/
char* smarthome_get_pluginfo();
/**
* @brief linux中控发送的控制指令
* @note
* @param params: {
"id":"vdevo161103533857949", //设备id
"type":"aircondition", //设备类型
"sub_type":"unknown", //设备子类型
"action":"SetTemperature", //动作
"value":"19" //值
}
* @param callback: (void* context, int code, void *result)
context: 暂时没有用到
code: 0:正常 -1:异常
result: code异常时传文本,用于显示,例如“控制失败,网络错误”
* @retval
*/
int smarthome_device_control(const char* params, callback_func callback)
/**
* @brief 发现设备,通常用于刷新设备列表
* @note
* @param method:
* @param callback:
* @retval
*/
int smarthome_device_discover(int method, callback_func callback);
/**
* @brief 重置或解除绑定
* @note
* @retval
*/
int smarthome_reset();
/**
* @brief 扩展命令
* @note
* @retval
*/
int smarthome_ioctl(char* cmd, char* key, char* value);
三. 协议描述
3.1 对接基本要求
- 能够提供所有设备列表数据,设备信息中要包含设备ID、设备名、设备类型
- 能够提供所有场景列表数据,场景信息中要包含场景 ID、场景名
- 能够提供所有房间列表数据,房间信息中要包含房间 ID、房间名
3.2 设备发现协议
示例:
{
"version":1, //版本号
"name":"DiscoveryDevicesResponse",
"devices":[
{
"deviceId":"vdevo162130282208556", //设备id
"deviceName":"彩光灯", //设备名
"online":1, //设备在线状态 1在线,0离线
"actions":[ //动作
{
"action":"TurnOn"
},
{
"action":"TurnOff"
},
{
"action":"SetMode",
"instructions":[
{
"value":"lightWhite",
"code":"lightWhite",
"desc":"白光"
},
{
"value":"lightColour",
"code":"lightColour",
"desc":"彩光"
},
{
"value":"lightScene",
"code":"lightScene",
"desc":"情景"
}
]
},
{
"action":"SetBrightness"
},
{
"action":"SetColorTemperature"
},
{
"action":"SetColor"
},
{
"action":"SetScene",
"instructions":[
{
"value":"light_scene_1",
"code":"light_scene_1",
"desc":"晚安"
},
{
"value":"light_scene_2",
"code":"light_scene_2",
"desc":"阅读"
},
{
"value":"light_scene_3",
"code":"light_scene_3",
"desc":"工作"
},
{
"value":"light_scene_4",
"code":"light_scene_4",
"desc":"休闲"
}
]
}
],
"properties":[ //属性
{
"name":"powerstate",
"value":"on"
},
{
"name":"mode",
"value":"lightWhite"
},
{
"name":"brightness",
"value":"18"
},
{
"name":"color_temperature",
"value":"10"
},
{
"name":"color_hsv",
"value":"{\"h\":0,\"s\":0,\"v\":1}"
}
],
"zone":"阳台", //房间名
"deviceType":"light", //设备类型
"deviceSubType":"unknown" //设备子类型
},
{
"deviceId":"SN8hzCSAbWrCtjIE",
"deviceName":"晨起",
"icon":"scene_meet",
"deviceType":"smartscene",
"actions":[
{
"action":"TurnOn"
}
]
}
]
}
3.3 设备控制协议
通过smarthome_device_control函数 params参数传递APP层控制指令。
亮度控制
{
"id":"vdevo162192408876410",
"type":"light",
"sub_type":"",
"action":"SetBrightness",
"value":"53" //亮度值为 0~100
}
颜色控制
{
"id":"vdevo162130282208556",
"type":"light",
"sub_type":"",
"action":"SetColor",
"value":"{\"h\":359.37823486328125,\"s\":0.75686275959014893,\"v\":1}" //h: 0~360 s: 0~1 v: 0~1
}
色温控制
{
"id":"vdevo161847485227864",
"type":"light",
"sub_type":"",
"action":"SetColorTemperature",
"value":"50" //色温值为0~100
}
温度控制
{
"id":"vdevo161103533857949",
"type":"aircondition",
"sub_type":"",
"action":"SetTemperature",
"value":"20" //温度值
}
风速控制
{
"id": "vdevo161103533857949",
"type": "aircondition",
"sub_type": "unknown",
"action": "SetWindSpeed",
"value": "medium"
}
模式控制
{
"id": "vdevo163635070912018",
"type": "aircondition",
"sub_type": "unknown",
"action": "SetMode",
"value": "cold"
}
风向控制
{
"version":1,
"deviceId":"vdevo161103533857949",
"name":"switch_horizontal", //switch_horizontal左右摆风,switch_vertical上下摆风
"value":"on" //on为开启,off为关闭
}
频道控制
{"id":"deviceid_xxx","type":"tv","action":"AdjustUpChannel"}
{"id":"deviceid_xxx","type":"tv","action":"AdjustDownChannel"}
声音控制
{"id":"deviceid_xxx","type":"tv","action":"AdjustUpVolume"}
{"id":"deviceid_xxx","type":"tv","action":"AdjustDownVolume"}
{"id":"deviceid_xxx","type":"tv","action":"Mute"}
3.4 设备属性状态反馈
参考demo源码,设备端的属性变化,通过 g_context->listener(NULL, PLUGIN_EVENT_ON_DEVICE_PROP_CHANGE, result); result参数传递给APP层。
在线状态属性反馈
{
"version":1,
"deviceId":"vdevo162088709984066#1",
"name":"online",
"value":"1" // 1为在线,0为离线
}
开关属性反馈
{"version":1,"deviceId":"vdevo163005316473671","name":"powerstate","value":"off"}
亮度属性反馈
{"version":1,"deviceId":"vdevo163005316473671","name":"brightness","value":"51"}
颜色属性反馈
{"version":1,"deviceId":"vdevo162130282208556","name":"color_hsv","value":"{\"h\":5,\"s\":1,\"v\":0.400000}"}
温度属性反馈
{"version":1,"deviceId":"vdevo163635070912018","name":"temperature","value":"26"}
模式属性反馈
{"version":1,"deviceId":"vdevo163635070912018","name":"mode","value":"cold"}
四. 目前所支持的设备品类
智能设备类
| 名称 | 功能 | 宏 | 类型 | 子类型 |
|---|---|---|---|---|
| 灯具 | 开关、亮度、冷暖、情景模式 | DEVICE_TYPE_LIGHT | light | |
| 开关 | 开关 | DEVICE_TYPE_SWITCH | switch | |
| 插座 | 开关 | DEVICE_TYPE_OUTLET | outlet | |
| 排插 | 开关 | DEVICE_TYPE_SOCKETS | sockets | |
| 窗帘 | 打开、关闭、暂停、开启百分比控制 | DEVICE_TYPE_CURTAIN | curtain | |
| 空调 | 开关、设置摄氏温度、工作模式、风速模式、上下摆风、左右摆风、当前温度 | DEVICE_TYPE_AIRCONDITION | aircondition | |
| 空气净化器 | 开关、工作模式、风速模式、当前温度、当前湿度、pm2.5、空气质量 | DEVICE_TYPE_AIRPURIFIER | airpurifier | |
| 新风 | 开关、工作模式、风速模式、当前温度、当前湿度、pm2.5 | DEVICE_TYPE_AIR_FRESHER | airfresh | |
| 晾衣架 | 开关、上升、下降、暂停、灯光、消毒、烘干、风干 | DEVICE_TYPE_HANGER | hanger | |
| 地暖 | 开关、工作模式、当前温度、设置摄氏温度 | DEVICE_TYPE_AIRCONDITION | aircondition | floor_heat |
| 温控器 | 开关、工作模式、当前温度、设置摄氏温度 | DEVICE_TYPE_AIRCONDITION | aircondition | temperature_ctrl |
| 电视 | 开关、上一频道、下一频道、音量加减、静音 | DEVICE_TYPE_TV | tv |
传感器类型
| 名称 | 功能 | 宏 | 类型 |
|---|---|---|---|
| 温湿度传感器 | 当前温度、当前湿度、电池电量百分比 | SENSOR_TYPE_WSD | temperature_humidity |
| 门磁传感器 | 门磁状态、电池电量百分比 | SENSOR_TYPE_MAGNETIC | magnetic |
| 燃气报警器 | 燃气检测值、电池电量百分比 | SENSOR_TYPE_GAS | gas |
| 水浸传感器 | 水浸检测状态、 电池电量百分比 | SENSOR_TYPE_WATER | water |
| pir传感器 | 人体感应状态、 电池电量百分比 | SENSOR_TYPE_PIR | pir |
| sos传感器 | 报警状态、电池电量百分比 | SENSOR_TYPE_SOS | sos |
五. 设备指令集及属性
5.1 设备指令集
| 宏 | 名称 | 说明 |
|---|---|---|
| DEVICE_ACTION_TURN_ON | TurnOn | 打开 |
| DEVICE_ACTION_TURN_OFF | TurnOff | 关闭 |
| DEVICE_ACTION_PAUSE | Pause | 暂停 |
| DEVICE_ACTION_TURN_UP | TurnUp | 上升 |
| DEVICE_ACTION_TURN_DOWN | TurnDown | 下降 |
| DEVICE_ACTION_SET_MODE | SetMode | 设置模式 |
| DEVICE_ACTION_SET_SCENE | SetScene | 设置情景 |
| DEVICE_ACTION_SWITCH_HORIZONTAL | SwitchHorizontal | 设置左右摆风 |
| DEVICE_ACTION_SWITCH_VERTICAL | SwitchVertical | 设置上下摆风 |
| DEVICE_ACTION_SET_TEMPERATURE | SetTemperature | 设置温度 |
| DEVICE_ACTION_SET_WINDSPEED | SetWindSpeed | 设置风速 |
| DEVICE_ACTION_SET_BRIGHTNESS | SetBrightness | 设置亮度 |
| DEVICE_ACTION_SET_COLOR_TEMPERATURE | SetColorTemperature | 设置色温 |
| DEVICE_ACTION_SET_COLOR | SetColor | 设置颜色 |
| DEVICE_ACTION_SET_PROGRESS | SetProgress | 设置进度 |
| DEVICE_ACTION_SWITCH_LIGHT | SwitchLight | 灯光 |
| DEVICE_ACTION_SWITCH_STERILIZE | SwitchSterilize | 消毒 |
| DEVICE_ACTION_SWITCH_AIRDRY | SwitchAirdry | 风干 |
| DEVICE_ACTION_SWITCH_DRYING | SwitchDrying | 烘干 |
| DEVICE_ACTION_ADJUST_UP_CHANNEL | AdjustUpChannel | 调频道+ |
| DEVICE_ACTION_ADJUST_DOWN_CHANNEL | AdjustDownChannel | 调频道- |
| DEVICE_ACTION_ADJUST_UP_VOLUME | AdjustUpVolume | 调音量+ |
| DEVICE_ACTION_ADJUST_DOWN_VOLUME | AdjustDownVolume | 调音量- |
| DEVICE_ACTION_MUTE | Mute | 静音 |
5.2 设备属性
| 宏 | 名称 | 说明 |
|---|---|---|
| DEVICE_PROPERTIE_MODE | mode | 模式 |
| DEVICE_PROPERTIE_TEMPERATURE | temperature | 温度 |
| DEVICE_PROPERTIE_CURRENT_TEMPERATURE | current_temperature | 当前温度 |
| DEVICE_PROPERTIE_WINDSPEED | windspeed | 风速 |
| DEVICE_PROPERTIE_POWERSTATE | powerstate | 电源状态 |
| DEVICE_PROPERTIE_BRIGHTNESS | brightness | 亮度 |
| DEVICE_PROPERTIE_CTRL | ctrl | 控制 |
| DEVICE_PROPERTIE_COLOR_HSV | color_hsv | 颜色(hsv格式) |
| DEVICE_PROPERTIE_COLOR_TEMPERATURE | color_temperature | 色温 |
| DEVICE_PROPERTIE_HUMIDITY | humidity | 湿度 |
| DEVICE_PROPERTIE_BATTERY_PERCENTAGE | battery_percentage | 电池电量 |
| DEVICE_PROPERTIE_SENSOR_INFO | sensor_info | 传感器信息 |
| DEVICE_PROPERTIE_SENSOR_GAS | sensor_gas_value | 燃气值 |
| DEVICE_PROPERTIE_PM | pm25 | PM2.5 |
| DEVICE_PROPERTIE_AIRQUALITY | air_quality | 空气质量 |
| DEVICE_PROPERTIE_SWITCH_LIGHT | switch_light | 灯光 |
| DEVICE_PROPERTIE_SWITCH_STERILIZE | switch_sterilize | 消毒 |
| DEVICE_PROPERTIE_SWITCH_AIRDRY | switch_airdry | 风干 |
| DEVICE_PROPERTIE_SWITCH_DRYING | switch_drying | 烘干 |
| DEVICE_PROPERTIE_PROGRESS | progress | 进度 |
| DEVICE_PROPERTIE_SWITCH_HORIZONTAL | switch_horizontal | 左右摆风 |
| DEVICE_PROPERTIE_SWITCH_VERTICAL | switch_vertical | 上下摆风 |
| DEVICE_PROPERTIES_VALUE_ON | on | 开 |
| DEVICE_PROPERTIES_VALUE_OFF | off | 关 |
5.3 模式定义
| 宏 | 名称 | 说明 |
|---|---|---|
| DEVICE_MODE_COLD | cold | 制冷 |
| DEVICE_MODE_HEAT | heat | 制热 |
| DEVICE_MODE_AUTO | auto | 自动 |
| DEVICE_MODE_AIRSUPPLY | airsupply | 送风 |
| DEVICE_MODE_DEHUMIDIFICATION | dehumidification | 除湿 |
| DEVICE_MODE_MANUAL | manual | 手动 |
| DEVICE_MODE_ENERGY | energy | 省电 |
| DEVICE_MODE_COMFORTABLE | comfortable | 舒适 |
| DEVICE_MODE_HOLIDY | holiday | 节日 |
| DEVICE_MODE_ECO | eco | eco |
| DEVICE_MODE_SLEEP | sleep | 睡眠 |
| DEVICE_MODE_PROGRAM | program | 程控 |
| DEVICE_MODE_FLOOR_HEAT | floorHeat | 地暖 |
| DEVICE_MODE_AUXILIARY_HEAT | auxiliaryHeat | 辅热 |
| DEVICE_MODE_SILENT | silent | 静音 |
5.4 风速定义
| 宏 | 名称 | 说明 |
|---|---|---|
| DEVICE_WINDSPEED_AUTO | auto | 自动 |
| DEVICE_WINDSPEED_HIGH | high | 高风 |
| DEVICE_WINDSPEED_MIDDLE | medium | 中风 |
| DEVICE_WINDSPEED_LOW | low | 低风 |
| DEVICE_WINDSPEED_HEALTH | health | 健康 |
| DEVICE_WINDSPEED_NATURAL | natural | 自然 |
| DEVICE_WINDSPEED_STRONG | strong | 强力 |
| DEVICE_WINDSPEED_QUIET | quietWind | 静音风 |
| DEVICE_WINDSPEED_SLEEP | sleep | 睡眠 |
| DEVICE_WINDSPEED_COMFORTABLE | comfortableWind | 舒适风 |
六、其他
6.1 log日志存储
插件可以将log日志存储到/tmp/路径,如果用户操作上传日志,日志将会打包上传到声必可服务器。参考如下代码,不要修改.smart.log的文件名。
static FILE* g_fp_log;
static int g_log_size;
void my_log(char* str) {
// printf("%s", str); //debug
if (g_fp_log == NULL) {
g_fp_log = fopen("/tmp/.smart.log", "w");
g_log_size = 0;
}
if (g_fp_log) {
int len = fprintf(g_fp_log, "%s", str);
fflush(g_fp_log);
g_log_size += len;
// printf(">>>> g_log_size=%d\n", g_log_size);
if (g_log_size > 1024 * 512) {
fclose(g_fp_log);
system("mv /tmp/.smart.log /tmp/.smart.log.0");
g_fp_log = NULL;
}
}
}
6.2 解除绑定
解除绑定退出登录时通常需要重启应用,可以调用 g_listener(NULL, PLUGIN_EVENT_REQ_REBOOT, NULL); 或 exit(0) 函数来重启应用。
6.3 插件打包测试发布
- 当开发完成,试量产前,需要将将编译好的插件库及配置文件等打包为ipk格式。首先下载ipk打包脚本 点击下载。解压后,打开ais_tlos_ipk_pack.sh文件,修改配置信息,注意
PKG_NAME即插件名称的设置,例如jdsmart_abcd。可通过设置》智能家居 》插件信息,查看到该名称为abcd。 - 运行ais_tlos_ipk_pack.sh文件,打包成ipk格式后。开发者通过adb shell终端
opkg remove jdsmart_demo命令先删除测试的的插件包,然后通过opkg install jdsmart_abcd_0.0.1-1_sunxi.ipk命令重新安装新的插件包。安装后,如果需要修改代码,调试更新动态库,则需要通过adb push覆盖终端设备的/data/libjdsmart_abcd.so文件。安装后,可通过设置》智能家居 》插件信息,查看插件相关的信息。 - 开发者测试通过后,将ipk包放在开发者的服务器上,并通过
opkg install http://xxx.com/xx.ipk测试通过后,将下载链接给声必可。开发者如有id参数需求,声必可访问下载链接时可以传递设备id参数。开发者还需提供测试设备的id设置>关于本机>拍个照给声必可。 - 声必可后台根据测试设备id标注对应的插件appid,配置ipk下载链接,未来插件如有升级,重复如上步骤。插件支持后台静默升级,已标注的设备恢复出厂设置后,联网会自动重新下载安装插件。
- 下批量生产订单时,需要通知业务标注好需要安装
appid的插件,声必可生产部门将会收集该订单的设备的id,并在声必可后台标注对应的插件。
6.4 Plug标志
可以在smarthome_get_pluginfo()函数中修改flag标志实现一些特定的功能。
| 标志 | 说明 |
|---|---|
| PLUG_FLAG_LOAD_OFFLINE | 支持离线加载 |
| PLUG_FLAG_STATE_FEEDBACK | 开关按钮待设备状态反馈后再改变 |
| PLUG_FLAG_SMART_BUS | 插件占用RS485设备,用于485插件对接开发 |
| PLUG_FLAG_NO_SMART_BUS | 插件禁用RS485,界面将不显示485相关配置 |
| PLUG_FLAG_PAIRD_DEVICES | 插件支持设备发现并自动配对功能 |
6.5 RS485插件开发
RS485插件开发首先需要设置6.4节的PLUG_FLAG_SMART_BUS标志,RS485操作文件节点为
/dev/ttyS5485发送接收时需要操作的IO节点为
/sys/xfocus/max485/pin_re,如下为485发送的伪代码:echo 1 > /sys/xfocus/max485/pin_re len = write(fd, data, datalen); int ret = ioctl(fd, 0xFFFF5555, 300);
6.6 插件空间以及数据存储
插件代码占用空间建议控制在4MB以内。插件数据可存储在/data/jdsmart_open/,空间不宜超过2MB,否则将会引起OTA升级空间不足。
6.7 插件反向控制中控屏设备指令集
通过调用如下slave_on_dp_cb函数,可向中控屏设备发送控制命令。相应的参数定义如下
/**
* @brief
* @note
* @param i0: //命令值
i1: //其他参数
s0: //其他参数
* @retval
*/
static void slave_on_dp_cb(int i0, int i1, char *s0) {
cJSON* root = cJSON_CreateObject();
cJSON_AddNumberToObject(root, "i0", i0);
cJSON_AddNumberToObject(root, "i1", i1);
cJSON_AddStringToObject(root, "s0", s0);
char* json_str = cJSON_PrintUnformatted(root);
cJSON_Delete(root);
g_listener(NULL, PLUGIN_EVENT_SLAVE_CONTROL, json_str);
free(json_str);
}
| 命令值(i0) | 命令名(宏定义) | 方向 | 功能 | 请求参数 | PubAck回复参数 |
|---|---|---|---|---|---|
| 100 | MEDIA_GET_METADATA | C->S | 获取元数据 | 无 | s0:参考元数据 |
| 101 | MEDIA_PLAY | C->S | 播放 | 无 | 无参数 |
| 102 | MEDIA_PAUSE | C->S | 暂停 | 无 | 无参数 |
| 103 | MEDIA_NEXT | C->S | 下一首 | 无 | 无参数 |
| 104 | MEDIA_PREV | C->S | 上一首 | 无 | 无参数 |
| 105 | MEDIA_SEEK | C->S | 跳播 | i1: 跳播位置,单位秒 | 无参数 |
| 106 | MEDIA_GET_POSITION | C->S | 获取播放位置 | 无 | s0: 当前时间(秒):总时间(秒) |
| 107 | MEDIA_SET_VOLUME | C->S | 设置音量 | i1: 音量值(0~100) | 无参数 |
| 108 | MEDIA_GET_VOLUME | C->S | 获取音量 | 无 | i1: 音量值(0~100) |
| 109 | MEDIA_GET_ALL_LOCAL_MEDIA | C->S | 获取所有本地歌曲信息 | 无 | s0:简单音乐元数据数组 |
| 111 | MEDIA_SWITCH_PLAY_MODE | C->S | 切换播放模式,如果是电台类,会提示不支持电台类模式切换 | 无 | 无参数 |
| 115 | MEDIA_GET_PLAY_MODE | C->S | 获取当前播放模式 | 无 | i1: 播放模式 0:重复所有 1:单曲循环 2:随机播放 |
| 116 | MEDIA_PLAY_TTS | C->S | 用语音播放TTS文本 | s0:TTS文本 | 无参数 |
| 117 | MEDIA_PLAY_HINT | C->S | 播放提示音。将会播放 /mnt/UDISK/custom/audio/tone/tone数字.mp3 数字为i1+1 | i1: tone id 取值范围[0~3] 对应音频文件tone[1~4].mp3 | 无参数 |
| 118 | MEDIA_PLAY_HINT_PATH | C->S | 播放提示音 | s0:完整的提示音路径 | 无参数 |
| 119 | MEDIA_GET_AUDIO_SOURCE | C->S | 获取当前的音源 | 无 | s0: 当前的音源 |
| 120 | MEDIA_SET_AUDIO_SOURCE | C->S | 切换音源 | s0:目标音源 | 无参数 |
| 123 | MEDIA_SET_SONGLIST | C->S | 播放收藏的歌单 | i1: 歌单id 0:睡眠 1:运动 2:工作 3:休闲 4:娱乐 5:回家 6:晨起 7:用餐 8:烹饪 |
无参数 |
| 150 | MEDIA_REPORT_METADATA | S->C | 反馈元数据 | s0:参考元数据 | Client无需回复 |
| 151 | MEDIA_REPORT_PlAY_STATE | S->C | 反馈播放状态 | i1: 播放状态 0:暂停 1:正在播放 2:缓冲结束 |
Client无需回复 |
| 152 | MEDIA_REPORT_VOLUME | S->C | 反馈音量 | i1:音量值(0~100) | Client无需回复 |
| 153 | MEDIA_REPORT_PLAY_MODE | S->C | 反馈当前的播放模式 | i1: 播放模式 0:重复所有 1:单曲循环 2:随机播放 3:顺序播放 |
Client无需回复 |
| 154 | MEDIA_REPORT_AUDIO_SOURCE | S->C | 反馈当前的音源 | 无 | s0:当前音源 sdcard:本地 bt:蓝牙 online:在线 auxin:外部音频 |
| 160 | MEDIA_GET_SONGLIST | S->C | 获取歌单 | s0.type: 请求歌曲json参数 0:最近播放列表 1:我的最爱 2:我的歌单 100:当前播放歌单 |
s0:音乐或歌单元数据数组 |
| 161 | MEDIA_PLAY_SONGLIST | C->S | 播放歌单 | s0:音乐元数据 i1:播放模式 |
无参数 |
| 200 | DEVICE_POWER_ON | C->S | 开屏 | 无 | 无参数 |
| 201 | DEVICE_POWER_OFF | C->S | 关屏 | 无 | 无参数 |
| 202 | DEVICE_POWER_REBOOT | C->S | 重启 | 无 | 无参数 |
| 203 | DEVICE_GET_POWER_STATUS | C->S | 获取开机状态 | 无 | i1: 0表示关机,1表示开机 |
| 204 | DEVICE_GET_INFO | C->S | 获取设备信息 | 无 | s0:小可主机信息 uuid、name、version等 |
| 210 | DEVICE_SWICTH_1 | C->S | 开关继电器1 | 无 | i1: 0表示关闭,1表示开启 |
| 211 | DEVICE_SWICTH_2 | C->S | 开关继电器2 | 无 | i1: 0表示关闭,1表示开启 |
| 212 | DEVICE_SWICTH_3 | C->S | 开关继电器3 | 无 | i1: 0表示关闭,1表示开启 |
6.7 带继电器产品接入指南
本节适用于声必可L9等带继电器产品,如设备不带继电器,可以忽略本章节。
6.7.1 查询本设备继电器信息
smarthome_preinit() 函数参数会传递继电器路数 switchs_count参数给插件
6.7.2 控制继电器开关
流程: 手机端操作继电器开关=>智能家居云把开关状态通知给插件=>插件上报开关状态到设备应用层=>应用层去控制继电器开关
参考demo源码,demo_device_relay_control()函数,通过 g_context->listener(NULL, PLUGIN_EVENT_SLAVE_CONTROL, result); 回调通知APP层去控制继电器开关。
6.7.3 继电器开关状态消息
流程: 设备端操作继电器开关=>设备端通知插件开关状态=>插件通知智能家居云开关状态
参考demo源码,smarthome_slave_report()函数,通过 DEVICE_REPORT_DEVICE_PROP 命令通知给插件
6.7.4 继电器开关重命名
流程: 手机端操作继电器开关重命名=>智能家居云把开关重命名消息通知给插件=>插件上报开关重命名到设备应用层
参考demo源码,demo_device_relay_rename()函数,通过 g_context->listener(NULL, PLUGIN_EVENT_SLAVE_CONTROL, result); DEVICE_SWICTH_NAME,回调通知APP层存储继电器名称。继电器开关重命名后,需要通知应用层PLUGIN_EVENT_ON_DEVICES_SYNC,重新拉取一遍设备,UI界面才能实时更新。
6.8 插件支持设备发现并自动配对功能
设置PLUG_FLAG_PAIRD_DEVICES标志,插件登录成功后,点击 设置→ 智能家居→ 智能主机管理,将会进入插件设备发现界面,点击设备发现按钮将调用smarthome_ioctl("discovery_device",,)接口,并显示的插件发现设备的过程信息,可支持多行文本。具体实现参考demo源码。
6.9 插件调试UI界面
点击 设置→ 智能家居→ 插件信息→ 插件信息处点击5次以上,将会进入插件调试UI界面,本界面将调用smarthome_ioctl("get_debug_info",,)接口获取需要显示的插件调试信息,可支持多行文本。
6.10 自定义场景图片
在插件中,可以通过icon字段(参考设备发现协议定义),自定义场景图片,如果未设置icon字段,上层应用将根据场景名称包含的特殊字符决定选择某些图片,如果不包含特殊字符,则随机使用4张默认场景图片。
static char* get_scene_pic(char *name) {
if(strstr(name, "回家"))
return "scene_go_home";
else if(strstr(name, "离家") || strstr(name, "外出") )
return "scene_leave_home";
else if(strstr(name, "晨起"))
return "scene_wakeup";
else if(strstr(name, "睡眠") || strstr(name, "睡觉"))
return "scene_sleep";
else if(strstr(name, "电影")) {
return "scene_movie";
}else if(strstr(name, "会客")) {
return "scene_meet";
}else if(strstr(name, "休闲")) {
return "scene_leisure";
}else if(strstr(name, "运动")) {
return "scene_sport";
}else if(strstr(name, "娱乐")) {
return "scene_entertainment";
}else if(strstr(name, "全开")) {
return "scene_all_light_on";
}else if(strstr(name, "全关")) {
return "scene_all_light_off";
}
else {
int hash_code = 随机int函数 % 4;
switch (hash_code)
{
case 1:
return "scene_default_1";
case 2:
return "scene_default_2";
case 3:
return "scene_default_3";
default:
return "scene_default_4";
}
}
}
6.11 产测方法
点击 设置→ 高级设置→ 右上角连续点击3次以上 → 测试模式 ,将会进入测试界面,将会自动调用smarthome_ioctl("test_mode_start",,)接口,插件开始进入产测,测试完成后,调用PLUGIN_EVENT_ON_TEST_RESULT消息通知测试结果,具体参考源码。
FAQ
FAQ.1 如何恢复出厂设置
点击 设置→ 关于本机→ 连续点击软件版本5次以上 → 恢复出厂设置→ 重置主机
FAQ.2 如何清除插件数据
点击 设置→ 智能家居→ 插件信息→ 右上角空白处点击5次以上→ 清除数据,将会删除 /data/jdsmart_open/ 路径下的数据
FAQ.3 插件如何播放tts文本
调用slave_on_dp_cb函数 MEDIA_PLAY_TTS 命令即可