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

使用SDK開發(fā)

物聯(lián)網(wǎng)平臺(tái)提供各類設(shè)備端SDK,支持您使用SDK開發(fā)設(shè)備。本文介紹使用物聯(lián)網(wǎng)平臺(tái)提供的Java SDK開發(fā)設(shè)備。

前提條件

已在物聯(lián)網(wǎng)平臺(tái)云端創(chuàng)建產(chǎn)品和設(shè)備,并獲取設(shè)備證書(ProductKey、DeviceName和DeviceSecret)。具體操作,請(qǐng)參見(jiàn)云端配置

背景信息

實(shí)際開發(fā)中,請(qǐng)根據(jù)開發(fā)時(shí)使用的語(yǔ)言、平臺(tái),選用合適的設(shè)備端SDK。更多信息,請(qǐng)參見(jiàn)下載設(shè)備端SDK。本示例使用Java SDK開發(fā)設(shè)備。

準(zhǔn)備工作

  • 準(zhǔn)備開發(fā)環(huán)境。具體操作,請(qǐng)參見(jiàn)工程配置

  • 開發(fā)Java語(yǔ)言物模型。具體操作,請(qǐng)參見(jiàn)物模型開發(fā)

示例代碼

說(shuō)明

為了避免初始化時(shí)訂閱大量Alink協(xié)議中系統(tǒng)Topic帶來(lái)的性能開銷,平臺(tái)提供了免訂閱能力,即物聯(lián)網(wǎng)平臺(tái)幫設(shè)備進(jìn)行Topic訂閱。Topic相關(guān)說(shuō)明,請(qǐng)參見(jiàn)什么是Topic

  1. 下載Java SDK Demo,然后解壓。

  2. 修改src/main/java/com.aliyun.alink.devicesdk.demo目錄下ThingSample.java文件中上報(bào)屬性、上報(bào)事件和監(jiān)聽下行服務(wù)的代碼,內(nèi)容如下。

    • 上報(bào)屬性

          public void reportDemoProperty(){
              /**
               * 上報(bào)屬性
               */
              Map<String, ValueWrapper> properties = new HashMap<String, ValueWrapper>();
      
              // key為物模型中屬性標(biāo)識(shí)符"acOutMeterIty",value需要遵循屬性值規(guī)范:int類型,取值范圍在0~200之間;
              properties.put("acOutMeterIty", new ValueWrapper(10));
      
              LinkKit.getInstance().getDeviceThing().thingPropertyPost(properties, new IPublishResourceListener() {
      
                  @Override
                  public void onSuccess(String s, Object o) {
                      System.out.println("=====thingPropertyPost success=======");
                      System.out.println(s);
                      System.out.println(JSON.toJSONString(o));
                  }
      
                  @Override
                  public void onError(String s, AError aError) {
                      System.out.println("=====thingPropertyPost failure=======");
                  }
              });
      
              // 上報(bào)屬性之后,云端會(huì)返回響應(yīng)結(jié)果,此處是監(jiān)聽云端返回的屬性reply
              LinkKit.getInstance().registerOnNotifyListener(new IConnectNotifyListener() {
      
                  @Override
                  public void onNotify(String s, String s1, AMessage aMessage) {
                      System.out.println("===PROPERTY REPLY===");
                      System.out.println("TOPIC:" + s1);
                      System.out.println("Payload:" + JSON.toJSONString(aMessage));
                  }
      
                  @Override
                  public boolean shouldHandle(String s, String s1) {
                      return false;
                  }
      
                  @Override
                  public void onConnectStateChange(String s, ConnectState connectState) {
                  }
              });
          }
    • 上報(bào)事件

      public void reportDemoEvent() {
              /**
               * 上報(bào)事件
               */
              HashMap<String, ValueWrapper> eventMap = new HashMap<String, ValueWrapper>();
      
              // key為物模型中事件參數(shù)的標(biāo)識(shí)符"gunNum", value為事件參數(shù)值需要遵循數(shù)值規(guī)范:int類型,取值范圍0~100之間;
              eventMap.put("gunNum", new ValueWrapper.IntValueWrapper(50));
      
              OutputParams eventOutput = new OutputParams(eventMap);
      
              // 參數(shù)identity為"startChaResEvt"屬于物模型事件標(biāo)識(shí)符。
              LinkKit.getInstance().getDeviceThing().thingEventPost("startChaResEvt", eventOutput, new IPublishResourceListener() {
                  public void onSuccess(String resId, Object o) {
                      System.out.println("=====thingEventPost success=======");
                      System.out.println(resId);
                      System.out.println(JSON.toJSONString(o));
                  }
      
                  public void onError(String resId, AError aError) {
                      System.out.println("=====thingEventPost failure=======");
                  }
              });
          }
    • 監(jiān)聽下行服務(wù)

          private ITResRequestHandler mCommonHandler = new ITResRequestHandler() {
              public void onProcess(final String identify, final Object result, final ITResResponseCallback itResResponseCallback) {
                  ALog.d(TAG, "onProcess() called with: s = [" + identify + "], o = [" + result + "], itResResponseCallback = [" + itResResponseCallback + "]");
                  try {
                      /**
                       * 設(shè)置屬性(property)的模式
                       */
                      // "set"為設(shè)置屬性默認(rèn)的標(biāo)識(shí)符
                      if ("set".equals(identify)) {
                          // TODO 用戶需要設(shè)置真實(shí)設(shè)備的屬性
                          /**
                           * 向云端同步設(shè)置好的屬性值
                           */
                          Map<String, ValueWrapper> desiredProperty = (Map<String, ValueWrapper>) ((InputParams) result).getData();
      
                          LinkKit.getInstance().getDeviceThing().thingPropertyPost(desiredProperty, new IPublishResourceListener() {
      
                              @Override
                              public void onSuccess(String s, Object o) {
                                  if (result instanceof InputParams) {
                                      Map<String, ValueWrapper> data = (Map<String, ValueWrapper>) ((InputParams) result).getData();
                                      //                        data.get()
                                      ALog.d(TAG, "收到異步下行數(shù)據(jù) " + data);
                                      // 響應(yīng)云端接收數(shù)據(jù)成功
                                      itResResponseCallback.onComplete(identify, null, null);
                                  } else {
                                      itResResponseCallback.onComplete(identify, null, null);
                                  }
                              }
      
                              @Override
                              public void onError(String s, AError aError) {
                                  AError error = new AError();
                                  error.setCode(100);
                                  error.setMsg("setPropertyFailed.");
                                  itResResponseCallback.onComplete(identify, new ErrorInfo(error), null);
                              }
                          });
      
                          /**
                           * 服務(wù)(service)的模式
                           */
                          // "startChaResService"為服務(wù)的標(biāo)識(shí)符
                      } else if ("startChaResService".equals(identify)) {
      
                          Map<String, ValueWrapper> inputParams = (Map<String, ValueWrapper>) ((InputParams) result).getData();
                          // TODO 根據(jù)服務(wù)入?yún)nputParams執(zhí)行設(shè)備邏輯,比如啟動(dòng)充電
                          // 充電完成后,向云端返回輸出參數(shù)
                          OutputParams outputParams = new OutputParams();
                          // key為"charm"屬于物模型中"startChaResService"服務(wù)出參標(biāo)識(shí)符,value為出參值遵循數(shù)據(jù)規(guī)范:int類型,數(shù)據(jù)范圍1~100之間;
                          outputParams.put("charm", new ValueWrapper.IntValueWrapper(20));
      
                          itResResponseCallback.onComplete(identify, null, outputParams);
      
                      } else {
                          // 根據(jù)不同的服務(wù)做不同的處理,跟具體的服務(wù)有關(guān)系
                          OutputParams outputParams = new OutputParams();
                          // 根據(jù)特定服務(wù),按照服務(wù)規(guī)范返回服務(wù)的出參。
                          itResResponseCallback.onComplete(identify, null, outputParams);
                      }
                  } catch (Exception e) {
                      e.printStackTrace();
                      ALog.d(TAG, "云端返回?cái)?shù)據(jù)格式異常");
                  }
              }
      
              public void onSuccess(Object o, OutputParams outputParams) {
                  ALog.d(TAG, "onSuccess() called with: o = [" + o + "], outputParams = [" + outputParams + "]");
                  ALog.d(TAG, "注冊(cè)服務(wù)成功");
              }
      
              public void onFail(Object o, ErrorInfo errorInfo) {
                  ALog.d(TAG, "onFail() called with: o = [" + o + "], errorInfo = [" + errorInfo + "]");
                  ALog.d(TAG, "注冊(cè)服務(wù)失敗");
              }
          };
  3. 在device_id.json文件中配置設(shè)備證書信息(productKeydeviceNamedeviceSecret)。

      "productKey": "*****",
      "deviceName": "*****",
      "deviceSecret": "*************",
  4. 在src/main/java/com.aliyun.alink.devicesdk.demo目錄下HelloWorld.java文件中,配置MQTT接入域名。具體內(nèi)容,請(qǐng)參見(jiàn)查看實(shí)例終端節(jié)點(diǎn)

    config.channelHost = pk + ".iot-as-mqtt." + deviceInfoData.region + ".aliyuncs.com:1883";
  5. 運(yùn)行HelloWorld.java文件。

    代碼運(yùn)行成功后:

    • 上報(bào)屬性成功,云端返回如下REPLY信息,表示設(shè)備與物聯(lián)網(wǎng)平臺(tái)成功進(jìn)行通信。云端返回的REPLY信息

    • 設(shè)備收到屬性設(shè)置指令,在物理設(shè)備上修改屬性完成后,建議將新屬性同步上報(bào)到云端。

后續(xù)步驟

設(shè)備調(diào)試