日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

物模型SDK

物模型SDK提供了App端的物模型(屬性、事件、服務),用來開發設備界面,實現手機對設備的查看和控制。

依賴 SDK概述
API通道SDKAPI通道SDK,提供IoT業務協議封裝的HTTPS請求能力,并通過整合安全組件來提升通道的安全性。
長連接通道SDK長連接通道SDK,提供IoT業務協議封裝的云端數據下行能力;為App 提供訂閱、發布消息的能力,和支持請求響應模型。

初始化

初始化前需確保已集成安全圖片,初始化的操作請參見SDK初始化。

使用方式

本地通信功能是物模型SDK提供的一項基礎能力,它提供了在外網斷開的情況下,局域網內設備控制的特性。

當外網絡斷開時,本地通信模塊會搜尋當前局域網內的設備,如果發現的設備是App用戶曾經控制過的設備,此時可以通過本地通信鏈路去控制設備。

在外網斷開時,向云端拉取用戶賬號下的設備列表會失敗,此時可以使用以下接口獲取當前可以本地通信控制的設備列表。此API在SDK2.1.4版本中新增。

 DeviceManager.getInstance().getLocalAuthedDeviceDataList();

返回值是一個JSON Array對象,對象內的數據格式具體請參見根據設備獲取綁定關系協議的AccountDevDTO結構。

設備創建

PanelDevice panelDevice = new PanelDevice(iotid);

iotid可以通過云端接口獲取。具體請參見物的模型服務。

 panelDevice.init(context, new IPanelCallback() {
            @Override
            public void onComplete(boolean bSuc, Object o) {               
            }
        });
  //context是應用的上下文,IPanelCallback是初始化回調接口
  // bSuc表示初始化結果,true為成功,false為失敗
  // o表示具體的數據,失敗時是一個AError結構,成功時忽略

設備控制

設備控制是基于物的模型對設備定義的屬性、事件、服務進行操作。關于屬性、事件、服務的描述,請參見 生成物的模型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);
                        }
                    });
         // bSuc表示是否獲取成功,true為成功,false為失敗
         // o 表示具體的數據,失敗時是一個AError結構,成功時是json字符串格式如下
         /* {
                "code":200,
                "data":{
                    "status":1 
                    "time":1232341455
                }
            }
           說明:status表示設備生命周期,目前有以下幾個狀態,
            0:未激活;1:上線;3:離線;8:禁用;time表示當前狀態的開始時間
         */
  • 獲取設備屬性
    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);
                        }
                    });
         //bSuc表示是否獲取成功,true為成功,false為失敗
         //o表示具體的數據,失敗時是一個AError結構,成功時是json字符串格式如下
         /* {
               "code":200,
               "data":{
                     "WorkMode": {
                         "time": 1516347450295,
                         "value": 0
                      }
                }
            }
         */

    通過panelDevicegetProperties接口,獲取到設備當前的所有屬性值。

  • 設置設備屬性
      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 格式參考如下:
    /*
    {
        "items":{
            "LightSwitch":0
        },
        "iotId":"s66CDxxxxXH000102"
    }
    */
    //bSuc表示是否獲取成功,true為成功,false為失敗
    //o表示具體的數據,失敗時是一個AError結構,成功時忽略
                        

    paramsStr是設置屬性協議中params參數的字符串,請參見生成物的模型TSL

  • 調用服務
     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 格式參考如下
    /*
    {
        "args":{
            "Saturation":80,
            "LightDuration":50,
            "Hue":325,
            "Value":50
        },
        "identifier":"Rhythm",
        "iotId":"s66CDxxxxItXH000102"
    }
    */
    
    //bSuc表示是否獲取成功,true為成功,false為失敗
    //o表示具體的數據,失敗時是一個AError結構,成功時忽略
  • 訂閱所有事件

    App上用戶主動解綁一臺設備或者在設備端reset,云端會主動向App發送通知。App收到推送通知后,SDK內部會自動清除相關緩存數據,且發出解綁通知。具體的解綁通知格式請參見調用示例。

    panelDevice.subAllEvent(
            new IPanelCallback() {
                @Override
                public void onComplete(boolean bSuc, Object data) {
                      ALog.d(TAG,"doTslTest data:" + data) ;
                }
            }
            ,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);
    //IPanelCallback訂閱成功或者失敗時回調
    //IPanelCallback的onComplete接口回調其中的參數
    //bSuc表示是否獲取成功,true為成功,false為失敗
    //o 表示具體的數據。失敗時是一個AError結構,不會有事件回調,成功時忽略
    
    //IPanelEventCallback在事件觸發時回調
    //iotid參數是設備iotid
    //topic參數是回調的事件主題字符串
    //Object data參數是觸發事件的內容,類型為json字符串,格式參考如下
    /*
    {
        "params": {
          "iotId":"0300MSKL03xxxx4Sv4Za4",
          "productKey":"X5xxxxH7",
          "deviceName":"5gJtxDxxxxpisjX",
          "items":{
            "temperature":{
              "time":1510292697471,
              "value":30
            }
          }
      },
      "method":"thing.properties"
    }  
    */
    
    
    //當operation為Unbind時,表示該設備已解綁,解綁通知的格式參考如下
    //topic: /sys/${pk}/${dn}/app/down/_thing/event/notify
    /*
    {
        "identifier":"awss.BindNotify",
        "value":{
                "iotId":"apVtLzgkxxxxV000102",
                "identityId":"5063op37bxxxxxe0bfa9d98037",
                "owned":1,
                "productKey":"a2xxxxxyi",
                "deviceName":"IoT_Dev_33",
                "operation":"Unbind"
        }
    }
    */

清理緩存

賬號退出時需要清理賬號緩存的數據。

 DeviceManager.getInstance().clearAccessTokenCache();

獲取物的模型

panelDevice.getTslByCache(new IPanelCallback() {
        @Override
        public void onComplete(boolean bSuc, Object data) {
               ALog.d(TAG,"doTslTest data:" + data) ;
        }
    });
//bSuc表示是否獲取成功,true為成功,false為失敗
//data 為具體的返回數據,格式為json字符串,失敗時為一個AError結構
            

開發者也可以使用云端接口來獲取原始的物的模型。具體請參見物的模型服務

混淆配置

proguard-rules.pro文件中,加入以下代碼,排除不需要被混淆的類和方法。

-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.**{*;}

藍牙設備支持

藍牙設備受連接特性的約束,往往無法直接跟生活物聯網云端平臺連接,因而需要借助一個網關設備來實現藍牙設備與云端平臺的連接通道。手機在這一過程中可以充當網關角色。

此部分API提供以下幾方面的能力如下。

  • 提供發現藍牙設備/連接藍牙設備的能力
  • 提供連云通道,可以供藍牙設備數據上下云
  • 提供藍牙設備控制與數據獲取的能力
依賴 SDK概述
藍牙 Breeze SDK是按照規范實現的手機端藍牙 SDK,方便合作廠商在手機端快速接入藍牙功能。Breeze SDK包含的主要功能有:設備發現連接,設備通信,加密傳輸,大數據傳輸等。
移動端設備網關 SDK移動端設備網關SDK,運行于App上的子設備網關,對于無法直連網絡的子設備,如藍牙設備,提供子設備的管理功能,如子設備添加拓撲,刪除拓撲,上線,下線以及數據上下行等。
  • 藍牙API依賴導入

    在物模型SDK支持藍牙設備時,需要導入如下的依賴。您可以在生活物聯網控制臺,SDK下載頁面獲取相關的版本(相關操作請參見下載并集成SDK)。

    compile 'com.aliyun.alink.linksdk:lpbs-plugin-breeze:${version}'
        compile 'com.aliyun.alink.linksdk:breeze-biz:${version}'
        compile 'com.aliyun.alink.linksdk:breeze:${version}'
        compile 'com.aliyun.alink.linksdk:ble-library:${version}'
  • 初始化移動端設備網關SDK

    此功能模塊依賴移動端設備網關SDK。使用前請先初始化該SDK。

  • 使用藍牙接入注意事項

    使用藍牙設備前,App必須有如下權限,缺一不可。

    • 藍牙權限
    • 藍牙管理權限

    同時在apilevel 21(含level 21)之上的Anroid系統,須額外具有如下權限,缺一不可。

    • 低精度位置權限
    • 高精度位置權限
    說明

    除了上述權限,在API level 21(含level 21)之上的Anroid系統上,系統必須開啟位置服務,否則掃描將無法正常工作,如何開啟位置服務,參見Android開發參考文檔,需求位置權限及開啟位置服務的原因,參見官方說明。

    更多介紹,請參見官方文檔

  • 發現藍牙設備
    //discoverDevices 接口為發現本地設備接口
    //第一個參數是userdata,一般設置為null
    //第二個參數表示是否清理之前發現的設備。true表示清理;false表示不清理,一般使用false
    //第三個參數表示發現設備多久超時,單位為毫秒
    //第四個參數是過濾接口,返回true表示該設備為業務層需要的設備;返回false表示將該設備排除
    //第五個參數為返現回調接口,會將本地發現的設備通過該回調接口返回
    
            DeviceManager.getInstance().discoverDevices(null, false, 5000, new IDiscoveryFilter() {
                @Override
                public boolean doFilter(DeviceBasicData basicData) {
                    return true;
                }
            },listener);
  • 添加綁定藍牙設備

    藍牙設備的綁定流程分為兩個步驟。

    1. 藍牙設備通過App去云端上線,可以使用SDK提供的API完成。
      DevService.subDeviceAuthenLogin(params, new DevService.ServiceListener() {
                  @Override
                  public void onComplete(boolean isSuccess,Object bundle) {
                      ALog.e(TAG,"subDeviceAuthenLogin onComplete isSuccess:" + isSuccess + " bundle:" + bundle);
                      String productKey = null;
                      String deviceName = null;
                      if(bundle != null && bundle instanceof Bundle){
                          Bundle resultBundle = (Bundle)bundle;
                          productKey = resultBundle.getString(DevService.BUNDLE_KEY_PRODUCTKEY);
                          deviceName = resultBundle.getString(DevService.BUNDLE_KEY_DEVICENAME);
                      }
                      if(boneCallback != null){
                          boneCallback.success(getRspObject(isSuccess,productKey,deviceName));
                      }
                  }
              });
      
      
      //params 參數是子設備信息,參考格式如下:
      /*
      {
          "iotId":"your iotid",
          "productKey":"your productkey",
          "deviceName":"your deviceName "
      }
      */
      
      //ServiceListener 是回調接口,
      //isSuccess表示是否成功,true表示成功,false表示失敗
      //bundle是回調的擴展參數,包含設備的一些信息
      
                                  
    2. 上線成功后,調用云端API去做綁定賬號。綁定成功后通知SDK已經綁定成功。
      IoTCallback callback = new IotCallback(){
        @Override
        void onFailure(IoTRequest var1, Exception var2){
        }
      
        @Override
        void onResponse(IoTRequest var1, IoTResponse var2){
            SubDevInfo subDevInfo = new SubDevInfo(deviceInfo.productKey,deviceInfo.deviceName);
            DevService.notifySubDeviceBinded();
        }
      }
      
      Map<String, Object> params = new HashMap();
      params.put("deviceName", deviceInfo.deviceName);
      params.put("productKey", deviceInfo.productKey);
      IoTRequest request = (new IoTRequestBuilder()).setApiVersion("1.0.3").setAuthType("iotAuth").setPath("/awss/time/window/user/bind").setParams(params).build();
      IoTAPIClient ioTAPIClient = (new IoTAPIClientFactory()).getClient();
      ioTAPIClient.send(request, callback);
      
      
      //api 網關請求,接口需要設備的productKey,deviceName
      //具體請參見API通道SDK
  • 連接/斷開本地的藍牙設備

    此SDK相關功能在初始化后成功后,本地鏈路已經建立成功,不需要上層主動調用鏈接和斷開接口。在一段時間后,遇見設備斷開鏈接后,可以通過本地連接接口再次建立鏈接。

    1. 建立本地鏈接
      panelDevice.startLocalConnect(new IPanelCallback() {
        @Override
        public void onComplete(boolean bSuc, Object o) {
        ALog.d(TAG,"startLocalConnect, onComplete,"+bSuc);
        }
      });
      // bSuc 表示初始化結果,true為成功,false為失敗
      // o 為擴展參數,成功時忽略,失敗時是一個AError結構
    2. 斷開本地鏈接
      panelDevice.stopLocalConnect(new IPanelCallback() {
        @Override
        public void onComplete(boolean bSuc, Object o) {
        ALog.d(TAG,"stopLocalConnect, onComplete,"+bSuc);
        }
      });
      // bSuc 表示初始化結果,true為成功,false為失敗
      // o 為擴展參數,成功時忽略,失敗時是一個AError結構
  • 控制藍牙設備

    藍牙設備的控制以及信息獲取跟WiFi設備的API一致,參照本文檔前部分的內容。