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. 界面点击或语控场景及设备
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. 交互图
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);