关于sdk:DIY一款能随周围环境变化的智能灯泡求婚必备

加入了此次涂鸦实战训练营(基于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路灯关系没有弄的很明确。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理