设备控制

更新时间:2019-11-16 11:39:19

概述

设备控制 SDK 提供了 App 端的设备模型(属性,事件,服务),用来开发设备界面,实现手机对设备的查看和控

初始化

参考平台下载包里的说明文件。

如何使用

获取本地发现且支持本地控制的设备列表
本地通信功能是设备模型 SDK 提供的一项基础能力,它提供了在外网断连的情况下,局域网内设备控制的 feature。
当外网断连的情况下,本地通信模块会去搜寻当前局域网内的设备,如果被发现的设备是之前用户控制过的设备,那么此时可以通过本地通信链路去控制设备。
在外网断连时,如向云端拉取用户账号下的设备列表会失败,此时可以使用以下接口获取当前可以本地通信控制的设备列表。由于本地发现设备是一个较长的过程,所以第一次调用此接口时有可能返回为空,此时需要允许用户刷新设备列表。
此 API 在 sdk 版本 2.1.4 中新增

DeviceManager.getInstance().getLocalAuthedDeviceDataList();

返回值是一个 JSONArray 对象,对象内的数据格式具体请参见 根据设备获取绑定关系协议的

设备创建

PanelDevice panelDevice = new PanelDevice(iotid);

iotid 可以通过云端接口获取。具体请参见 物的核心模型服务

panelDevice.init(context, new IPanelCallback() {
            @Override
            public void onComplete(boolean b, Object o) {               
            }
        });

context是应用的上下文,IPanelCallback 是初始化回调接口

设备控制

设备控制是基于物的模型对设备定义的属性、事件、服务进行操作。关于属性、事件、服务的描述,请参见 生成物的模型TSL

获取设备状态

panelDevice.getStatus(new IPanelCallback() {
                    @Override
                    public void onComplete(boolean bSuc, Object o) {
                        ALog.d(TAG,"getStatus(), request complete," + bSuc);
                        JSONObject data = new JSONObject((String)o);
                    }
                });

获取设备属性

panelDevice.getProperties(new IPanelCallback() {
                    @Override
                    public void onComplete(boolean bSuc, Object o) {
                        ALog.d(TAG,"getProps(), request complete," + bSuc);
                        JSONObject data = new JSONObject((String)o);
                    }
                });

通过panelDevice 的getProperties接口,获取到设备当前的所有属性值。

设置设备属性

panelDevice.setProperties(paramsStr, new IPanelCallback() {
                    @Override
                    public void onComplete(boolean bSuc, Object o) {
                        ALog.d(TAG,"setProps(), request complete,"+bSuc);
                        JSONObject data = new JSONObject((String)o);
                    }
                });

paramsStr是设置属性协议中params参数的字符串,请参见物的模型服务

调用服务

panelDevice.invokeService(paramsStr, new IPanelCallback() {
                    @Override
                    public void onComplete(boolean bSuc, Object o) {
                        ALog.d(TAG,"callService(), request complete,"+bSuc);
                        JSONObject data = new JSONObject((String)o);
                    }
                });

paramsStr是调用服务中params参数的字符串,请参见物的模型服务

订阅所有事件

panelDevice.subAllEvent(new IPanelEventCallback() {
                    @Override
                    public void onNotify(String iotid,String topic, Object data) {
                        ALog.d(TAG,"onNofity(),topic = "+topic);
                        JSONObject jData = new JSONObject((String)data);
                    }
                },null);

iotid 参数是设备iotid
topic 参数是回调的事件主题字符串
Object data 是触发事件的内容

清理缓存

账号退出时需要清理账号缓存的数据

DeviceManager.getInstance().clearAccessTokenCache();

混淆配置


-keep class com.aliyun.alink.linksdk.tmp.**{*;}

-keep class com.aliyun.alink.linksdk.cmp.**{*;}

-keep class com.aliyun.alink.linksdk.alcs.**{*;}

-keep class com.aliyun.iot.ble.**{*;}

-keep class com.aliyun.iot.breeze.**{*;}

更多功能

获取物的模型

panelDevice.getTsl(new IPanelCallback() {
        @Override
        public void onComplete(boolean bSuc, Object data) {
               ALog.d(TAG,"doTslTest data:" + data) ;
        }
    });

开发者也可以使用云端接口来获取原始的物的模型。
具体请参见 物的核心模型服务-获取物的模板

Android 设备端支持

设备模型 SDK 不仅用于移动端 App 开发,也能用于运行 Android 系统的设备开发。
通过本地通信服务端可以让一个 Android 设备成为能被 APP 端访问和控制的设备。如带 Android 系统的空调,通过本地通信服务端可以让空调设备接收到 APP 端的操作请求,空调设备调整自身设置后返回响应的结果到 APP ,由 APP 显示最新的运行情况,整个过程在本地网络进行,安全快捷。

创建服务端设备

protected int mDefaultProfile = 3;
protected int mDefaultWorkMode = 3;
protected int mDefaultBrightness = 30;
//设置设备属性的初始值
Map<String,ValueWrapper> propertyValues = new HashMap<>();
propertyValues.put("profile",new ValueWrapper.IntValueWrapper(mDefaultProfile));
propertyValues.put("Brightness",new ValueWrapper.IntValueWrapper(mDefaultBrightness));
propertyValues.put("WorkMode",new ValueWrapper.IntValueWrapper(mDefaultWorkMode));
final DefaultServerConfig config = new DefaultServerConfig();
//服务端颁发的设备证书
config.mIotProductKey = mIotProductKey;
config.mIotDeviceName = mIotDeviceName;
config.mIotSecret     = mIotDeviceSecret;
//设置设备的基础信息
DeviceBasicData basicData = new DeviceBasicData();
basicData.setProductKey(productKey);
basicData.setDeviceName(deviceName);
//deviceModel为设备在后台开发得到的tsl字符串
basicData.setDeviceModelJson(deviceModel);
basicData.setLocal(true);
basicData.setPort(5683);
config.setBasicData(basicData);
config.setPropertValues(propertyValues);
//创建设备并初始化
IDevice mIDevice = DeviceManager.getInstance().createDevice(config);
mIDevice.init(null, new IDevListener() {
    @Override
    public void onSuccess(Object o, OutputParams outputParams) {
    }
    @Override
    public void onFail(Object o, ErrorInfo errorInfo) {
    }
});

注册设备信息并处理请求

在设备初始化成功后注册发现和设备三要素,处理客户端的请求并返回响应
注册发现协议并处理

mIDevice.regRes("dev",false, new ITResRequestHandler() {
    @Override
    public void onProcess(String s, InputParams inputParams, ITResResponseCallback itResResponseCallback) {
        ValueWrapper valueWrapper = new ValueWrapper();
        valueWrapper.setValue(deviceModelMap); 
        itResResponseCallback.onComplete(TmpConstant.METHOD_IDENTIFIER_DEV,null, new OutputParams("deviceModel",valueWrapper));
    }
});

注册三要素并处理

mIDevice.regRes("set",true, new ITResRequestHandler() {
    @Override
    public void onProcess(String identifier, InputParams inputParams, ITResResponseCallback itResResponseCallback) {
        boolean isSuc = true;
        OutputParams outputParams = new OutputParams();
        //根据参数处理请求
        //...
        if(isSuc){                                                                                
          itResResponseCallback.onComplete("set",null,outputParams);
        }else{
            itResResponseCallback.onComplete("set",new ErrorInfo(ErrorCode.ERROR_CODE,ErrorCode.PARAM_ERR_DESC),null);
        }
    }
});

蓝牙设备支持

连接/断开本地的蓝牙设备

此SDK相关功能在初始化后成功后,本地链路已经建立成功,不需要上层主动调用链接和断开接口。在一段时间后,遇见设备断开链接后,可以通过本地连接接口再次建立链接。
1 建立本地链接

panelDevice.startLocalConnect(new IPanelCallback() {
 @Override
 public void onComplete(boolean bSuc, Object o) {
    ALog.d(TAG,"startLocalConnect, onComplete,"+bSuc);
 }
});

2 断开本地链接

panelDevice.stopLocalConnect(new IPanelCallback() {
 @Override
 public void onComplete(boolean bSuc, Object o) {
    ALog.d(TAG,"stopLocalConnect, onComplete,"+bSuc);
 }
});

控制蓝牙设备

蓝牙设备的控制以及信息获取跟 Wi-Fi 设备的 API 是一致的,可以参考本文档前述章节。

results matching ""

    No results matching ""