參加了此次涂鴉實戰訓練營(基于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 one rror(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 one rror(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 one rror(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 one rror(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 one rror(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 one rror(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 one rror(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 one rror(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://www.uj5u.com/qita/250744.html
標籤:其他
