加入了此次涂鸦实战训练营(基于App SDK玩转IoT App开发),次要指标是基于涂鸦的SDK开发一个基于IoT的控住智能灯的App。SDK反对iOS和Android开发,我加入此次的实战营次要目标是为了学习物联网的相干开发,本人理解一些Android的开发(并不长于Android UI的开发),所以我的App采纳Android SDK开发,UI的也是比拟简陋,次要以验证性能为主。

此次实战营须要一些Android或iOS的开发根底,新建一个Android的工程,并增加涂鸦的SDK参考Demo即可,上面次要探讨涂鸦的API应用。

Demo如下:

基于涂鸦 App SDK 开发一款 Android App 并管制智能灯

基于涂鸦 App SDK 疾速地开发一款 iOS IoT App

以下内容为涂鸦开发者“@徐阳创作,经其受权编辑公布:


性能次要分为以下几局部,账户治理,家庭治理,设施配网和设施管制。

账户治理

账户治理分为两个局部,用户注册和用户登录

用户登录

 

在界面上获取用户名和明码,而后赞登录按钮的回调函数中调用涂鸦的api,并且利用Toast输入后果。

1.  TuyaHomeSdk.getUserInstance().loginWithPhonePassword("86", uerName, password, new ILoginCallback() {    2.      @Override    3.      public void onSuccess(User user) {    4.          Toast.makeText(MainActivity.this, "登录胜利" , Toast.LENGTH_SHORT).show();    5.          //Toast.makeText(MainActivity.this, "登录胜利,用户名:" +TuyaHomeSdk.getUserInstance().getUser().getUsername(), Toast.LENGTH_SHORT).show();    7.          Intent intent = new Intent(MainActivity.this,MenuActivity.class);    8.          startActivity(intent);    10.      }    12.      @Override    13.      public void onError(String code, String error) {    14.          Toast.makeText(MainActivity.this, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();    15.      }    16.  });    

用户注册

用户注册其实分为两个局部,一个是获取验证码,一个是依据验证码注册账户

  • 获取验证码的过程,在获取按钮的回调函数中调用涂鸦API
1.  TuyaHomeSdk.getUserInstance().getValidateCode("86",uerName, new IValidateCallback(){    3.      @Override    5.      public void onSuccess() {    7.          Toast.makeText(MainRegisterActivity.this, "获取验证码胜利", Toast.LENGTH_SHORT).show();    9.      }    13.      @Override    15.      public void onError(String code, String error) {    17.          Toast.makeText(MainRegisterActivity.this, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();    19.      }    21.  });    
  • 取得验证码后调用涂鸦api,进行账户的注册
1.  TuyaHomeSdk.getUserInstance().registerAccountWithPhone("86",uerName,password,validatecode, new IRegisterCallback() {    3.      @Override    5.      public void onSuccess(User user) {    7.          Toast.makeText(MainRegisterActivity.this, "注册胜利", Toast.LENGTH_SHORT).show();    9.      }    11.      @Override    13.      public void onError(String code, String error) {    15.          Toast.makeText(MainRegisterActivity.this, "code: " + code + "error:" + error, Toast.LENGTH_SHORT).show();    17.      }    19.  });    

家庭治理

家庭治理蕴含新建家庭,删除家庭等。其中还包含新建room,将设施增加到room中,我的App中并没有实现room的性能,有趣味可本人参考api实现。

  • 设施的配网,设施管制都须要家庭id,所以新建家庭是必须的。

    

枚举家庭

1.  TuyaHomeSdk.getHomeManagerInstance().queryHomeList(new ITuyaGetHomeListCallback() {    3.      @Override    5.      public void onSuccess(List<HomeBean> homeBeans) {    7.          // do something    9.          //text_view.sette    11.          String stMsg = "ListHome Success,homesize="+homeBeans.size()+"n";    15.          for(int i=0;i<homeBeans.size();i++)    17.          {    19.              stMsg += "Home Id:" + homeBeans.get(i).getHomeId() + "n";    21.          }    25.          text_view.setText(stMsg);    29.          mHomeBeans = homeBeans;    33.      }    35.      @Override    37.      public void onError(String errorCode, String error) {    39.          // do something    41.          text_view.setText("ListHome Failedn");    43.      }    45.  });    

新建家庭

1.  List<String> rooms = new ArrayList();    3.  rooms.add("myhome1");    5.  TuyaHomeSdk.getHomeManagerInstance().createHome("myhome", 0, 0, "sh", rooms, new ITuyaHomeResultCallback() {    7.      @Override    9.      public void onSuccess(HomeBean bean) {    11.          // do something    13.          text_view.setText("NewHome Successn");    15.      }    17.      @Override    19.      public void onError(String errorCode, String errorMsg) {    21.          // do something    23.          text_view.setText("NewHome Failed"+"n");    25.      }    27.  });    

删除家庭

1.  if(mHomeBeans == null)    3.  {    5.      text_view.setText("No Homen");    7.      return;    9.  }    11.  for(int i=0;i<mHomeBeans.size();i++) {    13.      TuyaHomeSdk.newHomeInstance(mHomeBeans.get(i).getHomeId()).dismissHome(new IResultCallback() {    15.          @Override    17.          public void onSuccess() {    19.              // do something    21.              text_view.setText("DeleteHome Successn");    23.          }    27.          @Override    29.          public void onError(String code, String error) {    31.              // do something    33.              text_view.setText("DeleteHome Failed" + error + "n");    35.          }    37.      });    39.  }    

设施配网

在配网按钮的回调中获取控件上的ssid,passwd的住,而后调用涂鸦配网API。

设施配网API须要homeid 所以必须实现家庭的治理,才能够进行设施的配网。

设施配网API调用胜利后,利用取得控件上的ssid,passwd,开始播送配网。

 1.   TuyaHomeSdk.getActivatorInstance().getActivatorToken(homeId, new ITuyaActivatorGetToken() {    3.      @Override    4.      public void onSuccess(String token) {    6.          ActivatorBuilder builder = new ActivatorBuilder()    7.              .setSsid(ssidName)    8.              .setContext(EZActivity.this)    9.              .setPassword(password)    10.              .setActivatorModel(ActivatorModelEnum.TY_EZ)    11.              .setToken(token)    12.              .setListener(new ITuyaSmartActivatorListener() {    14.                  @Override    15.                  public void onError(String errorCode, String errorMsg) {    16.                   Toast.makeText(EZActivity.this, "配网失败", Toast.LENGTH_SHORT).show();    17.                  }    19.                  @Override    20.                  public void onActiveSuccess(DeviceBean devResp) {    21.                   //多个设施同时配网,将屡次回调    23.                   Toast.makeText(EZActivity.this, "配网胜利", Toast.LENGTH_SHORT).show();    25.                   /*TuyaHomeSdk.newRoomInstance(roomId).addDevice(devResp.devId, new IResultCallback() {    26.                       @Override    27.                       public void onSuccess() {    28.                           // do something    29.                           Toast.makeText(EZActivity.this, "addDevice胜利", Toast.LENGTH_SHORT).show();    30.                       }    31.                       @Override    32.                       public void onError(String code, String error) {    33.                           // do something    34.                           Toast.makeText(EZActivity.this, "addDevice失败", Toast.LENGTH_SHORT).show();    35.                       }    36.                   });*/    38.                   finish();    41.                  }    43.                  @Override    44.                  public void onStep(String step, Object data) {    46.                   Toast.makeText(EZActivity.this, "配网Step:" + step, Toast.LENGTH_SHORT).show();    48.                   finish();    49.                  }    50.               });    52.          ITuyaActivator mTuyaActivator = TuyaHomeSdk.getActivatorInstance().newMultiActivator(builder);    53.          mTuyaActivator.start();    55.      }    57.      @Override    58.      public void onFailure(String s, String s1) {    60.      }    61.  });

设施管制

     

UI做的比拟简陋,实现开关灯,和5路灯的管制

管制灯须要调用getHomeDetail 失去设施的handle,在菜单页面的设施管制的回调函数中,先取得设施,而后启动以后的页面:

1.  TuyaHomeSdk.newHomeInstance(mHomeBeans.get(0).getHomeId()).getHomeDetail(new ITuyaHomeResultCallback() {    3.      @Override    5.      public void onSuccess(HomeBean bean) {    7.          // do something    9.          List<DeviceBean> dev = bean.getDeviceList();    11.          if(dev.size()>0)    13.          {    15.              Intent intent = new Intent(MenuActivity.this,DeviceActivity.class);    17.              intent.putExtra("devid",dev.get(0).getDevId());  // 传递参数,依据须要填写    19.              startActivity(intent);    21.          }    23.          else    25.          {    27.              text_view.setText("No Fevicen");    29.          }    35.      }    41.      @Override    43.      public void onError(String errorCode, String errorMsg) {    45.          // do something    47.          text_view.setText("Home Errorn");    49.      }    51.  });    

开关灯

1.  dps = "{"1": true}";    3.  //dps = "{"102": "00ffff"}";    5.  mDevice.publishDps(dps, new IResultCallback() {    7.      @Override    9.      public void onError(String code, String error) {    11.          Toast.makeText(DeviceActivity.this, "开灯失败", Toast.LENGTH_SHORT).show();    13.      }    17.      @Override    19.      public void onSuccess() {    21.          Toast.makeText(DeviceActivity.this, "开灯胜利", Toast.LENGTH_SHORT).show();    23.      }    25.  });    
  • 关灯,设为false

其余命令相似。

图片色彩和人脸识别

还实现了图片色彩和人脸检测的性能,次要是采纳了他人的开源计划

https://github.com/bifan-wei/FaceDetector

取得图片数据,而后计算图片的平均值而后设置rgb,检测到人脸后设置高亮。

设想一下,“月上柳梢头,人约黄昏后”。你和你的心上人牵手回家,鸦雀无声,你拿着求婚戒指的手曾经全是汗。一开门,家里的灯泡检测到人脸,一盏盏开启,为你烘托出浪漫的气氛,最初,单膝下跪,抱得美人归。

这里有很多施展的空间,增加各种检测算法,检测不同的场景来设置不同的灯色彩。

总结

  1. 涂鸦的API应用很简略,通过账户,家庭,房间对设施的治理定义也很正当,参考涂鸦的API doc就实现了管制设施根本的性能。这次的流动工夫较短,其实还是须要开发者具备肯定的Android或者iOS的开发技术。因为我本人并非Android开发,只是以前简略的学习过一点点,而且平时工夫也无限,所以这次做的UI和实现的性能也是比较简单,次要是以性能验证为主了。
  2. 在开发过程中获取家庭的详细信息 getHomeDetail 这个API开始没有调用,导致始终取得不到设施id,特此记录一下
  3. 灯的性能点文档介绍不清晰,

//设置 dpId 为 101 的布尔型性能点示例 作用:开关关上 dps = {"101": true};
参考Demo的代码,开关的性能点为1。其余性能相似。
还有灯的模式和5路灯关系没有弄的很明确。