DIY一款能隨周圍環境變化的智能燈泡,求婚必備!

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




 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章