1.1. 接入指南

1.下载对接demo

链接: https://pan.baidu.com/s/179xcJ6HirWoDVofAcsJN5A 密码: 3vix,文件目录: jdsmart_open_sdk

2.编译demo, 将其安装在小可背景音乐主机上 demo内部两个核心包:jdbase.aar 和 jdsmart-common.aar 最新包可以点击这里下载 点击下载jdbase 点击下载jdsmart-common

3.熟悉整个家居控制流程

​ a. 登录

​ b. 导入设备及场景

​ c. 显示设备及场景

​ d. 界面点击或语控场景及设备

4.熟悉对接软件接口调用逻辑

5.实际工作展开

对接了解:
    实际上就是在demo进行二次开发。开发完成安装到小可主机,我们机器有相应的登录页面,页面在输入账号密码,
    点击登录后,主机会下发通知到插件里并将账号密码一起传到login()方法。在里面拿到账号密码进行厂商自己
    登录接口调用,并通过callback回调登陆结果,以及设置登录状态。主机上做相应操作,都会下发相应的通知到
    插件的相应方法。每个方法里的callback 回调相应的结果。登录,获取设备,控制设备,获取场景,控制场景。
    只需要把厂家的设备转换成demo里的JdSmartDevice数据结构(场景类似),然后JdbaseCallback 回调就行了。

    当前demo里有添加的虚拟数据,可以编译成APK运行到声必可主机来方便熟悉各部分操作流程。
    主机上桌面-设置-通用设置-智能家居设置-智能主机管理(密码admin)进入,就可以登录(demo账号密码随便输入)
    导入设备。导入后,就可以在桌面左屏看到刚才的设备,右屏看到场景。可以点击,或语音控制

a. 接入厂商SDK,可直接在demo中操作

关注两个类CustomSmartService和CustomSmartHost
背景音乐主机内部通过启动CustomSmartService服务来调用CustomSmartHost中的方法,实现对第三方智能家居平台设备信息的读取及控制。

b. 实现登录流程

关注 login(String name, String pwd, JdbaseCallback callback) 方法
如果是oauth登录
   1.在插件里设置登录类型,以及设置web登录链接
   在init()方法里
   mJdSmartHostInfo.setLoginType(JdSmartLoginConstant.LOGIN_TYPE_OAUTH);
   JdSmartLoginParas jdSmartLoginParas = new JdSmartLoginParas();
   jdSmartLoginParas.setPara0(weburl);//这里是登录链接
   mJdSmartHostInfo.setLoginParas(jdSmartLoginParas);
   2.小可上登录点击授权之后跳转到登录链接提供的 auth_callback 的URL链接,URL中带有相关参数。插件里收到相关信息后执行后续操作token

c. 实现设备和场景信息获取

关注 getAllDevices(JdbaseCallback callback) 和 getScenes(JdbaseCallback callback) 方法

d. 实现设备及场景控制

关注 controlDevice(JdSmartCtrlCmd cmd, JdbaseCallback callback) 和 controlScene(JdSmartScene jdsmartScene, JdbaseCallback callback) 方法

以上功能对接完成后,即可实现界面点击及语音控制设备和场景。

在demo的文件目录下有一个apidoc文件夹,里面包含详细注释内容供查看

1.2. 交互图

JdSmartOpenSdk

1.3. 重点说明

1. 删除虚拟数据

Demo中 initDemoDevices 添加虚拟智能设备、initScenes 添加虚拟场景、initSOSSensorRecord 添加虚拟报警记录,这些数据是为了演示背景音乐智能家居控制流程而添加的,实际对接中记得将其删除。

2. 数据类型转换

实现IJdSmartHost.java不同的接口函数,需要将JdSmartScene,JdSmartCtrlCmd,JdSmartDevice这些类转化为你的智能家居对应的类类型。例如,
//接口中需要将智能家居设备转化为JdSmartDevices 
getAllDevices(JdbaseCallback callback)
//接口中需要将JdSmartCtrlCmd转化为智能家居设备的执行指令 
controlDevice(JdSmartCtrlCmd cmd, JdbaseCallback callback)

3. 设置appid为域名

为简化第三方JdSmartOpen App后续升级及设备管理,第三方App需要通过getAppId()接口设置appId,为简化appid管理,我司不分配具体appid,为保证全球唯一,建议设置为贵司的域名。例如:美的集团设置appid值为 midea.com
注意:每个设备仅能绑定一次,并存入我司后台服务器。

4. 支持bugly热更新

可支持bugly升级demo。
参考链接:https://bugly.qq.com/docs/user-guide/instruction-manual-android-upgrade/?v=20181014122344
修改MyApplication.java 中APP_ID为自己的APP_ID,配置自己的版本升级

5. 必须设置zoneId, roomId字段

为了支持设备一键导入功能, 需要填写zoneId, roomId值
public class JdSmartDevice {
    String deviceType;
    String deviceSubType;
    String deviceId;
    String deviceId2;
    String uid;
    String deviceName;
    int online; //设备是否在线  online=1表示在线,online=0表示离线
    String zoneId; //楼层名, 强调说明,这个字段不是id,是楼层名,楼层名(只能是一楼,二楼类似这样的名字)
    String roomId; //房间名, 强调说明,这个字段不是id,是房间名
    ...

6. 重新导入设备函数调用逻辑

一键导入功能的管理界面有个 重新导入 按钮,它会首先调用CustomSmartHost.java 中的refeshDevice()接口, 再调用getAlldevices()接口

7. 主动上报设备信息改变

notifyDevicesChange 回调,如果设备初始化时间比较长,可以等待设备初始化完成后,调用这个接口,上层将会再次调用getAlldevices()接口去获取新设备

8. 主动上报场景信息改变

notifySceneChange 回调, 如果场景准备好,或场景名有变化,调用这个接口,上层将会再次调用getScenes()接口去获取最新的场景信息

9. 主动上报设备状态改变

单个设备状态发生改变调用sendUpdateDeviceMessage方法上报UI层刷新状态

10. 设置子设备类型

一些设备类型有子类型,像空调,多功能控制盒,灯等,注意区分

11. 不需要登录

初始化mJdSmartHostInfo时,如果设置mJdSmartHostInfo.setSupportLogin(false) 和 mJdSmartHostInfo.setLoginType(JdSmartLoginConstant.LOGIN_TYPE_DIRECT)  会直接跳过登录页

12. 安装了对接插件,机器重启说明 机器每次重启,会去启动插件的服务进行通信,随后会进入mCustomSmartHost.init()方法。之前登录时可以先保存账号密码,重启在init()里进行判断是否登陆过,登录过直接调用获取设备接口或API。 因为重启后,主机会下发获取设备getAllDevices()和获取场景getScenes(),所以init时先去判断调用,获取数据,在获取时在直接回调。这样操作可以在重启后直接拿到数据,防止重启后在去重新登录的操作。

13. 实现action自定义显示功能组件的两种方式

第一种:指令集固定的设备。更改默认的defaultActions.json文件,然后通过读取该文件给设备赋予action和attribute。参考代码如下:

String type = jdSmartDevice.getDeviceType();
String subtype= jdSmartDevice.getDeviceSubType();
List<String> actionList = DefaultInfoManager.getActions(type, subtype); //获取defaultActions.json文件中对应设备的action
JdSmartAttribute attribute =DefaultInfoManager.getAttribute(type, subtype);//defaultActions.json文件中对应设备的attribute
String[] actions = (actionList.toArray(new String[actionList.size()]));

jdSmartDevice.setActions(actions);
jdSmartDevice.setAttribute(attribute);

注意:DefaultInfoManager.getInstance(this);//需要在application中初始化

第二种:指令集动态变化的设备。初始化的时候自行添加,参考代码如下:

//根据实际设备自行添加对应的action和acttribute 
//例如action设置开关、温度、模式,那么acttribute需要对应action来设置属性
String [] actions = {ActionConstant.TURN_ON,ActionConstant.TURN_OFF,ActionConstant.SET_TEMPERATURE,ActionConstant.ADJUST_UP_TEMPERATURE,ActionConstant.ADJUST_DOWN_TEMPERATURE,ActionConstant.SET_MODE};
JdSmartAttribute attribute = new JdSmartAttribute();
//设置开关
List<String> powerState = Arrays.asList(AttributeValueConstant.ON, AttributeValueConstant.OFF);
attribute.setPowerState(powerState);
//设置模式  假设改设备支持的空调模式有制冷、制热、除湿和自动
List<String> mode = Arrays.asList(AttributeValueConstant.COLD, AttributeValueConstant.HEAT,AttributeValueConstant.DEHUMIDIFICATION,AttributeValueConstant.AUTO);
attribute.setMode(mode);
//设置温度范围
JdSmartAttribute.Range tempRange = attribute.new Range();
tempRange.setMax("31");
tempRange.setMin("16");
attribute.setTemperature(tempRange);

jdSmartDevice.setAttribute(attribute);
jdSmartDevice.setActions(actions);

results matching ""

    No results matching ""