1. 程式人生 > >小米智慧家居之Yeelight智慧燈開放API開發嘗試

小米智慧家居之Yeelight智慧燈開放API開發嘗試

這兩年,智慧家居發展變慢了,似乎是泡沫後的沉澱。各方協議不統一,也限制了智慧家居的普及。

按照通訊協議,控制Yeelight燈需要如下步驟:

1. App UDP廣播特定字串;

2. 燈收到上述廣播後迴應字串,包含IP、ID;

3. App拿到上述燈資訊後,建立TCP連線;

4. App按照通訊協議中的命令,即可控制燈的開關、亮度、顏色等。

Demo:

//UDP廣播,探測裝置
    QByteArray datagram = "M-SEARCH * HTTP/1.1\r\n\
HOST: 239.255.255.250:1982\r\n\
MAN: \"ssdp:discover\"\r\n\
ST: wifi_bulb";

    int ret = udp_socket.writeDatagram(datagram.data(), datagram.size(), mcast_addr, udp_port);
    qDebug()<<"udp write "<<ret<<" bytes";

//分析收到燈的迴應資訊,提取IP、ID
// 是否有待處理的訊號
        qDebug()<<"udp receive data";
        udp_datagram_recv.resize(udp_socket.pendingDatagramSize()); //以資料包的大小初始化datagram
        udp_socket.readDatagram(udp_datagram_recv.data(), udp_datagram_recv.size()); //讀取資料
        qDebug()<<udp_datagram_recv.data();

        QByteArray start_str;
        QByteArray end_str;
        QByteArray rtn_str;

        //提取bulb_ip
        start_str.clear(); end_str.clear(); rtn_str.clear();
        start_str.append("Location: yeelight://");
        end_str.append(":");
        sub_string(start_str, end_str, rtn_str);
        if(rtn_str.isEmpty() == false)
        {
            bulb_ip = rtn_str;
        }

        //提取bulb_id
        start_str.clear(); end_str.clear(); rtn_str.clear();
        start_str.append("id: ");
        end_str.append("\r\n");
        sub_string(start_str, end_str, rtn_str);
        if(rtn_str.isEmpty() == false)
        {
            bulb_id_str = rtn_str;
        }

        //過濾重複探測到的bulb
        bulb_t bulb_tmp(bulb_ip.toStdString(), bulb_id_str.toStdString());
        ib = std::find(bulb.begin(), bulb.end(), bulb_tmp);
        if (ib == bulb.end())
        {
            bulb.push_back(bulb_tmp);

            QStringList items;
            QString tmp;
            tmp = bulb_ip;
            items << tmp;
            ui->comboBox->addItems(items);
        }
//建立TCP連線
    tcp_socket.close();//關閉上次的連線
    int device_idx = ui->comboBox->currentIndex();
    if(bulb.size() > 0)
    {
        tcp_socket.connectToHost(QHostAddress(bulb[device_idx].get_ip_str().c_str()), bulb[device_idx].get_port());
    }
    else
    {
        qDebug()<<"Bulb is empty";
    }

//傳送控制命令
    QByteArray *cmd_str =new QByteArray;
    cmd_str->clear();
    cmd_str->append("{\"id\":");

    int device_idx = ui->comboBox->currentIndex();
    if(bulb.size() > 0)
    {
        cmd_str->append(bulb[device_idx].get_id_str().c_str());
        qDebug() << "combox index  = " << device_idx;

        cmd_str->append(",\"method\":\"toggle\",\"params\":[]}\r\n");
        tcp_socket.write(cmd_str->data());
        qDebug() << cmd_str->data();
    }
    else
    {
        qDebug()<<"Bulb is empty";
    }

本QT程式是跨平臺的,可以編譯成Win/Android等平臺可執行程式,完整原始碼下載:http://download.csdn.net/detail/syrchina/9592080

相關推薦

小米智慧家居Yeelight智慧開放API開發嘗試

這兩年,智慧家居發展變慢了,似乎是泡沫後的沉澱。各方協議不統一,也限制了智慧家居的普及。 按照通訊協議,控制Yeelight燈需要如下步驟: 1. App UDP廣播特定字串; 2. 燈收到上述廣播後迴應字串,包含IP、ID; 3. App拿到上述燈資訊後,建立TCP連線

智慧家居家電智慧控制系統

智慧家居之家電智慧控制系統是一個非常棒的中控系統。前面說我我們的智慧家居主機系統非常強大,可以連線任意電子裝置(電視、音響、空調、冰箱......)成為子系統。家電智慧控制系統為智慧家居主機系統子系統之一,為我們的家庭生活解決不少小麻煩。 還記得在遠古時代,我們看電影還是用碟的。那時候特別麻煩,雖然有遙控器

智慧家居情景模式被動系統

智慧家居管家智慧控制系統是一個自動化與智慧化的家居控制系統。系統可以根據主人主觀意識隨意的進行操作而執行。手機上點一點手指就是一個指令,一個小小的動作就像觸發我們系統的機關讓他完成一系列工作。有時候我們連用手指點一下的麻煩都不需要,因為智慧系統不僅僅可以解碼我們的主動操控動作,還可以解碼時間、地點、溫度、溼度

Ehome:智慧家居基於USB攝像頭免驅的視訊採集伺服器

4. 視訊伺服器 4.1 攝像頭的驅動 ['uvc子系統']: usb video class     核心中自帶了滿足uvc格式的攝像頭驅動,如果你手中的攝像頭滿足uvc規範,該攝像頭就是免驅,只需要對核心進行配置,將uvc模組對應的程式碼編譯到uImage 判斷攝像頭

自己動手實現智慧家居溫溼度資料採集儲存(DHT11,MySql)

【前言】 一個熱愛技術的人一定向往有一個科技感十足的環境吧,那何不親自實踐一下屬於技術人的座右銘:“技術改變世界”。 就讓我們一步步動手搭建一個屬於自己的“智慧家居平臺”吧(不要對這個名詞擡槓啦,技術在手,怎麼設計實現因人而異),本文只做拋磚引玉,各路大神如果有更好的想法可以各顯神通,當然能在評論區留下更好

自己動手實現智慧家居溫溼度數碼管展示(四位共陽數碼管)

【前言】 一個熱愛技術的人一定向往有一個科技感十足的環境吧,那何不親自實踐一下屬於技術人的座右銘:“技術改變世界”。 就讓我們一步步動手搭建一個屬於自己的“智慧家居平臺”吧(不要對這個名詞抬槓啦,技術在手,怎麼設計實現因人而異),本文只做拋磚引玉,各路大神如果有更好的想法可以各顯神通,當然能在評論區留下更好

Unity3D製作智慧家居設計軟體——智慧裝修

------對設計師友好------ 智慧裝修領域水太深,個體戶正常的裝修流程是:找裝修公司——找設計師——設計師出效果圖——使用者看效果——提修改需求——設計師加班出效果圖——使用者看效果——提修改需求——設計師拼命加班出效果圖——使用者看效果——提修改需求——設計師

2019智慧家居展覽會-資訊智慧家居博覽會

 展會將於2019年5月16日至18日在北京舉行,本屆展會面積將達到35000平方米,本屆將規劃六大主題展區分別為智慧家居、智慧養老、智慧硬體、智慧娛樂、智慧社群、智慧機器人等覆蓋智慧家居全領域,大會將是專業性最強、規格最高、規模最大、影響力最廣、實效性最強的智慧行業展會.【展會推廣的好處在於客戶可以直接真實

智慧家居專案(1):軟體開發流程

結合公司開發過的產品以及對自學知識的總結,整理出此係列文章  。側重點還是在軟體部分。 公司開發某個專案,肯定是為了盈利賺錢。開發的專案無非就是自己的產品或者承接甲方的開發任務。 大體的流程可以分為幾個部分或階段:                          

「助力小米智慧家居生態搭建」綠米服務商首創4S服務理念

作為最早加入小米生態鏈的企業之一,綠米聯創一直著重研發智慧家居品類產品,並推動產品的大眾化普及。智慧家居的核心在於產品和服務,在小米智慧家居體系中,綠米產品貫穿了全屋智慧最基礎的部分,通過門鎖、閘道器、開關、插座、感測器等,實現家居環境中各個板塊的互聯互通,同時綠米服務商提供的整體方案設計和安裝服務

小米智慧家居技術分析

小米智慧家居以小米多功能閘道器為中心,搭配門窗感測器、人體感測器和無線開關。其中門窗感測器可以配合智慧燈泡、空氣淨化器等裝置,完成進門自動開燈、關窗後自動開啟空氣淨化器等功能。人體感測器可以和多功能閘道器配合,使用者檢測寵物出門情況,使用者下床自動開燈等。而無線開關和小米智慧插座配合,則可以實現一鍵

家居服務類機器人WIFI智慧餵食器

wifi智慧小車模組+花生殼+STM32+APP 實現功能為視訊傳輸與遠端控制 1.wifi智慧小車模組 該模組可以連線你所在地方的wifi,先使其成為訪問該模組的內網。步驟1’通過網線或該模組的熱點與電腦連線,在路由器管理頁面(192.168.1.1)設定連

同為智慧家居服務,Z-Wave和ZigBee誰會勝出?

眼下最火的話題就要數物聯網了,而物聯網下又分為智慧城市、智慧家居等等。那大家是知道的,在還沒有一個統一的行業規定前,連線方式可謂是百花齊放,不說別的,NB-IoT、LoRa、eMTC、藍芽這些大家都應該知道,其實還有很多,就比如今天要介紹的這二位,也是眼下最熱門的兩種智慧家居連線方式,Z-W

智慧家居 樹莓派 從玩不轉到摔爛(1)

  智慧家居 樹莓派  從玩不轉到摔爛(1) 最近想做一款智慧家居的應用玩玩,學習的路很遠,一個玩軟體忽然和硬體結合起來一下子有些不適應,但是對我們來說沒有什麼是適應不適應的,擼起袖子就是幹。今天給大家帶來的是樹莓派(Raspberry Pi  簡稱 R

專業高科技展-2019智慧智慧家居博覽會

2019亞洲智慧家居博覽會簡稱“C-SMART2019”,作為智慧家居行業的經貿盛會,集結了一大批國內外的智慧家居主機、智慧安防、智慧門鎖、智慧晾衣機、家庭影院、智慧社群、智慧家電等行業的著名企業,展示了新產品、新技術、新成果;本次展覽以“智慧創新,改變生活!”為主題,通過完美展示智慧家居領域產業鏈和智慧技術

【Android開發智慧家居系列】(四):UDP通訊傳送指令

【Android開發—智慧家居系列】(四):UDP通訊傳送指令   思路回顧 【1】手機連線WIFI模組  【2】UDP通訊對WIFI模組傳送指令,以和WIFI模組保持連線狀態  【3】UDP通訊對WIFI模組傳送指令,讓其搜尋可用的無線網,返回WIFI列表

【Android開發智慧家居系列】(三):手機連線WIFI模組

【Android開發—智慧家居系列】(三):手機連線WIFI模組   概述   實現連線WIFI的功能會用到一個工具類,原始碼可以點選連結下載。網上這些類似的工具類裡的程式碼差不多是一樣的。連線無線網主要有兩個方法:    其中有一個Connect方法,還有一

【Android開發智慧家居系列】(二):用手機對WIFI模組進行配置

【Android開發—智慧家居系列】(二):用手機對WIFI模組進行配置   版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/u010924834/article/details/49496729   在實際開發中,我開

2018香港秋燈展TUV南德聚焦智慧家居及植物照明

香港2018年11月5日電 /美通社/ -- 由香港貿發局主辦的第20屆香港國際秋季燈飾展(以下簡稱秋燈展)及第三屆香港國際戶外及科技照明博覽(以下簡稱戶外及科技照明博覽),分別於10月27至30日在香港會議展覽中心及10月2

智慧家居實訓第五天 中文字型檔

===========中文字型檔============ 你要顯示文字的區域 int   Clean_Area(int X,  //x座標起始點                  int