共计 7050 个字符,预计需要花费 18 分钟才能阅读完成。
加入了此次涂鸦实战训练营(基于 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 路灯关系没有弄的很明确。