加入了此次涂鸦实战训练营(基于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,检测到人脸后设置高亮。
设想一下,“月上柳梢头,人约黄昏后”。你和你的心上人牵手回家,鸦雀无声,你拿着求婚戒指的手曾经全是汗。一开门,家里的灯泡检测到人脸,一盏盏开启,为你烘托出浪漫的气氛,最初,单膝下跪,抱得美人归。
这里有很多施展的空间,增加各种检测算法,检测不同的场景来设置不同的灯色彩。
总结
- 涂鸦的API应用很简略,通过账户,家庭,房间对设施的治理定义也很正当,参考涂鸦的API doc就实现了管制设施根本的性能。这次的流动工夫较短,其实还是须要开发者具备肯定的Android或者iOS的开发技术。因为我本人并非Android开发,只是以前简略的学习过一点点,而且平时工夫也无限,所以这次做的UI和实现的性能也是比较简单,次要是以性能验证为主了。
- 在开发过程中获取家庭的详细信息 getHomeDetail 这个API开始没有调用,导致始终取得不到设施id,特此记录一下
- 灯的性能点文档介绍不清晰,
//设置 dpId 为 101 的布尔型性能点示例 作用:开关关上 dps = {"101": true};
参考Demo的代码,开关的性能点为1。其余性能相似。
还有灯的模式和5路灯关系没有弄的很明确。