參加了此次塗鴉實戰訓練營(基於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路燈關係沒有弄的很明白。