参加了此次涂鸦实战训练营(基于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输出结果。
-
TuyaHomeSdk.getUserInstance().loginWithPhonePassword(
"86", uerName, password,
new ILoginCallback() {
-
@Override
-
public void onSuccess(User user) {
-
Toast.makeText(MainActivity.
this,
"登录成功" , Toast.LENGTH_SHORT).show();
-
//Toast.makeText(MainActivity.this, "登录成功,用户名:" +TuyaHomeSdk.getUserInstance().getUser().getUsername(), Toast.LENGTH_SHORT).show();
-
-
Intent intent =
new Intent(MainActivity.
this,MenuActivity.class);
-
startActivity(intent);
-
-
}
-
-
@Override
-
public void onError(String code, String error) {
-
Toast.makeText(MainActivity.
this,
"code: " + code +
"error:" + error, Toast.LENGTH_SHORT).show();
-
}
-
});
用户注册
用户注册其实分为两个部分,一个是获取验证码,一个是根据验证码注册账户
- 获取验证码的过程,在获取按钮的回调函数中调用涂鸦API
-
TuyaHomeSdk.getUserInstance().getValidateCode(
"86",uerName,
new IValidateCallback(){
-
-
@Override
-
-
public void onSuccess() {
-
-
Toast.makeText(MainRegisterActivity.
this,
"获取验证码成功", Toast.LENGTH_SHORT).show();
-
-
}
-
-
-
-
@Override
-
-
public void onError(String code, String error) {
-
-
Toast.makeText(MainRegisterActivity.
this,
"code: " + code +
"error:" + error, Toast.LENGTH_SHORT).show();
-
-
}
-
-
});
- 获得验证码后调用涂鸦api,进行账户的注册
-
TuyaHomeSdk.getUserInstance().registerAccountWithPhone(
"86",uerName,password,validatecode,
new IRegisterCallback() {
-
-
@Override
-
-
public void onSuccess(User user) {
-
-
Toast.makeText(MainRegisterActivity.
this,
"注册成功", Toast.LENGTH_SHORT).show();
-
-
}
-
-
@Override
-
-
public void onError(String code, String error) {
-
-
Toast.makeText(MainRegisterActivity.
this,
"code: " + code +
"error:" + error, Toast.LENGTH_SHORT).show();
-
-
}
-
-
});
家庭管理
家庭管理包含新建家庭,删除家庭等。其中还包括新建room,将设备添加到room中,我的App中并没有实现room的功能,有兴趣可自己参考api实现。
- 设备的配网,设备控制都需要家庭id,所以新建家庭是必须的。
枚举家庭
-
TuyaHomeSdk.getHomeManagerInstance().queryHomeList(
new ITuyaGetHomeListCallback() {
-
-
@Override
-
-
public
void onSuccess(
List<HomeBean> homeBeans) {
-
-
// do something
-
-
//text_view.sette
-
-
String stMsg =
"ListHome Success,homesize="+homeBeans.size()+
"\n";
-
-
-
-
for(
int i=
0;i<homeBeans.size();i++)
-
-
{
-
-
stMsg +=
"Home Id:" + homeBeans.get(i).getHomeId() +
"\n";
-
-
}
-
-
-
-
text_view.setText(stMsg);
-
-
-
-
mHomeBeans = homeBeans;
-
-
-
-
}
-
-
@Override
-
-
public
void onError(
String errorCode,
String
error) {
-
-
// do something
-
-
text_view.setText(
"ListHome Failed\n");
-
-
}
-
-
});
新建家庭
-
List<
String> rooms =
new ArrayList();
-
-
rooms.add(
"myhome1");
-
-
TuyaHomeSdk.getHomeManagerInstance().createHome(
"myhome",
0,
0,
"sh", rooms,
new ITuyaHomeResultCallback() {
-
-
@Override
-
-
public
void onSuccess(HomeBean bean) {
-
-
// do something
-
-
text_view.setText(
"NewHome Success\n");
-
-
}
-
-
@Override
-
-
public
void onError(
String errorCode,
String errorMsg) {
-
-
// do something
-
-
text_view.setText(
"NewHome Failed"+
"\n");
-
-
}
-
-
});
删除家庭
-
if(mHomeBeans ==
null)
-
-
{
-
-
text_view.setText(
"No Home\n");
-
-
return;
-
-
}
-
-
for(
int i=
0;i<mHomeBeans.size();i++) {
-
-
TuyaHomeSdk.newHomeInstance(mHomeBeans.get(i).getHomeId()).dismissHome(
new IResultCallback() {
-
-
@Override
-
-
public void onSuccess() {
-
-
// do something
-
-
text_view.setText(
"DeleteHome Success\n");
-
-
}
-
-
-
-
@Override
-
-
public void onError(String code, String error) {
-
-
// do something
-
-
text_view.setText(
"DeleteHome Failed" + error +
"\n");
-
-
}
-
-
});
-
-
}
设备配网
在配网按钮的回调中获取控件上的ssid,passwd的住,然后调用涂鸦配网API。
设备配网API需要homeid 所以必须完成家庭的管理,才可以进行设备的配网。
设备配网API调用成功后,利用获得控件上的ssid,passwd,开始广播配网。
设备控制
UI做的比较简陋,实现开关灯,和5路灯的控制
控制灯需要调用getHomeDetail 得到设备的handle,在菜单页面的设备控制的回调函数中,先获得设备,然后启动当前的页面:
-
TuyaHomeSdk.newHomeInstance(mHomeBeans.get(
0).getHomeId()).getHomeDetail(
new ITuyaHomeResultCallback() {
-
-
@Override
-
-
public
void onSuccess(HomeBean bean) {
-
-
// do something
-
-
List<DeviceBean> dev = bean.getDeviceList();
-
-
if(dev.size()>
0)
-
-
{
-
-
Intent intent =
new Intent(MenuActivity.this,DeviceActivity.
class);
-
-
intent.putExtra(
"devid",dev.get(
0).getDevId());
// 传递参数,根据需要填写
-
-
startActivity(intent);
-
-
}
-
-
else
-
-
{
-
-
text_view.setText(
"No Fevice\n");
-
-
}
-
-
-
-
-
-
}
-
-
-
-
-
-
@Override
-
-
public
void onError(
String errorCode,
String errorMsg) {
-
-
// do something
-
-
text_view.setText(
"Home Error\n");
-
-
}
-
-
});
开关灯
-
dps =
"{\"1\": true}";
-
-
//dps = "{\"102\": \"00ffff\"}";
-
-
mDevice.publishDps(dps,
new IResultCallback() {
-
-
@Override
-
-
public void onError(String code, String error) {
-
-
Toast.makeText(DeviceActivity.
this,
"开灯失败", Toast.LENGTH_SHORT).show();
-
-
}
-
-
-
-
@Override
-
-
public void onSuccess() {
-
-
Toast.makeText(DeviceActivity.
this,
"开灯成功", Toast.LENGTH_SHORT).show();
-
-
}
-
-
});
- 关灯,设为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路灯关系没有弄的很明白。
转载:https://blog.csdn.net/weixin_50563088/article/details/112762734