智能家居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. 流程图

img1

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 对接基本要求

  1. 能够提供所有设备列表数据,设备信息中要包含设备ID、设备名、设备类型
  2. 能够提供所有场景列表数据,场景信息中要包含场景 ID、场景名
  3. 能够提供所有房间列表数据,房间信息中要包含房间 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插件开发

  1. RS485插件开发首先需要设置6.4节的PLUG_FLAG_SMART_BUS标志,RS485操作文件节点为 /dev/ttyS5

  2. 485发送接收时需要操作的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 命令即可

results matching ""

    No results matching ""