1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        利用智能音箱語(yǔ)音控制電腦開關(guān)機(jī)

        共 3957字,需瀏覽 8分鐘

         ·

        2021-03-17 13:36



        大家好,歡迎來到 Crossin的編程教室 !


        智能家居是未來的一個(gè)趨勢(shì)。今天我們就來實(shí)現(xiàn)一個(gè)智能家居的雛形:利用智能音箱語(yǔ)音控制電腦開關(guān)機(jī)。


        完成下面這個(gè)有趣的實(shí)驗(yàn),你所需要的東西有:


        1. 路由器(能夠形成局域網(wǎng),且電腦已用網(wǎng)線連接)

        2. 一個(gè)智能音箱(本教程使用的是亞馬遜 Echo Dot 2)

        3. 主板支持wake on lan (大部分都支持)

        4. 一個(gè)樹莓派


        原理流程圖如下:


        接下里將按照這個(gè)流程圖進(jìn)行講解,首先是智能音箱和樹莓派的連接,我們需要讓樹莓派發(fā)出信號(hào),讓智能音箱將其認(rèn)作是智能家居并連接。由于我使用的是亞馬遜的智能音箱,因此我選擇了Fauxmo(https://github.com/n8henrie/fauxmo)進(jìn)行模擬。


        1. 在樹莓派上安裝Fauxmo


        Fauxmo的安裝方法見下方的操作或網(wǎng)址,注意這里的Python需要3.6以上:

        Install for development from GitHub

        1. git clone https://github.com/n8henrie/fauxmo.git

        2. cd fauxmo

        3. python3 -m venv .venv

        4. source ./.venv/bin/activate

        5. pip install -e .[dev]

        6. cp config-sample.json config.json

        7.  根據(jù)需求編輯(第一次可先忽略) config.json

        8. fauxmo [-v]


        成功后,請(qǐng)讓智能音箱重新搜索設(shè)備,如Echo dot是向他說 "find connected devices",或同一局域網(wǎng)下,在網(wǎng)頁(yè)端(alexa.amazon.com/spa/index.html)上點(diǎn)擊Discover devices.


        如果它成功發(fā)現(xiàn)了新的設(shè)備,則安裝成功。



        2. 修改Fauxmo配置,讓智能音箱能識(shí)別到新的“設(shè)備“


        Fauxmo其實(shí)很簡(jiǎn)單,我們只需要關(guān)注兩個(gè)地方,一個(gè)是源文件下的config.json. 這個(gè)文件是用來控制智能音箱能夠識(shí)別到的設(shè)備的。其次是plugins文件夾下的文件,這是樹莓派收到指令后將執(zhí)行的文件。由于開關(guān)機(jī)我們只需要使用Python進(jìn)行控制,因此我偷個(gè)懶使用了Fauxmo的commandlineplugin (下載地址: https://github.com/n8henrie/fauxmo-plugins/blob/master/commandlineplugin.py).

        即樹莓派得到指令后就開啟命令行,輸入相應(yīng)的操作。


        我的PC的config.json配置如下:


        "PcControl": {"path": "/home/pi/Documents/fauxmo/src/fauxmo/plugins/commandlineplugin.py","DEVICES": [    {        "name": "PC",        "port": 49915,        "on_cmd":"python2 /home/pi/Documents/Automatic/turnOnPC.py",        "off_cmd":"python /home/pi/Documents/Automatic/ShutdownAndRebootPC.py 192.168.199.236(該電腦局域網(wǎng)IP) 電腦賬號(hào) 電腦密碼 shutdown",        "state_cmd": ""    },    {        "name": "RebootPC",        "port": 49920,        "on_cmd": "python /home/pi/Documents/Automatic/ShutdownAndRebootPC.py 192.168.199.236 ckend ckend reboot",        "off_cmd": "python /home/pi/Documents/Automatic/ShutdownAndRebootPC.py 192.168.199.236 ckend ckend reboot",        "state_cmd": ""    }]},

        意思就是,如果我向echo說,turn on my PC , 它就通過49915端口訪問了plugins文件夾下的commandlineplugin.py,然后on指令的操作是讓CMD用python2訪問/home/pi/Documents/Automatic/文件夾下的turnOnPC.py文件。



        3. 增加turnOnPC.py文件和ShutdownAndRebootPC.py文件


        turnOnPC.py文件的用處就是通過wake on lan 喚醒電腦,需要提供電腦的Mac地址,不知道的話可以在CMD中輸入 ARP -a 查詢:


        def wake_on_lan(macaddress):    """ Switches on remote computers using WOL. """    # Check macaddress format and try to compensate.    if len(macaddress) == 12:        pass    elif len(macaddress) == 12 + 5:        sep = macaddress[2]        macaddress = macaddress.replace(sep, '')    else:        raise ValueError('Incorrect MAC address format')    # Pad the synchronization stream.    data = ''.join(['FFFFFFFFFFFF', macaddress * 20])    send_data = ''    # Split up the hex values and pack.    for i in range(0, len(data), 2):        send_data = ''.join([send_data,struct.pack('B', int(data[i: i + 2], 16))])    # Broadcast it to the LAN.    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)    sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)    sock.sendto(send_data, ('<broadcast>', 7))

        如果你的主板還沒有開啟WOL,請(qǐng)進(jìn)入BOOT中開啟,非常簡(jiǎn)單,相關(guān)操作可自行查閱主板的說明書。


        ShutdownAndRebootPC.py文件主要提供關(guān)機(jī)和重啟的操作,其原理是:通過SSH連接Windows系統(tǒng)執(zhí)行DOS關(guān)機(jī)/重啟的命令。


        def shutdown(ip=sys.argv[1], username=sys.argv[2], password=sys.argv[3]):    # ssh login    proc = pexpect.spawn("ssh %s@%s " % (str(username), str(ip)))    index = proc.expect([".*assword.*", ".*yes.*"])    if index > 0:        proc.sendline("yes")        proc.expect(".*assword.*")    proc.sendline(password)    proc.expect(".*你的用戶名>.*")    proc.send("shutdown.exe -s -t 00"+'\r\n')    # 重啟是 shutdown.exe -r -t 00    time.sleep(1)

        上述turnOnPC.py文件和ShutdownAndRebootPC.py文件的源代碼在https://github.com/Ckend/Pi-SmartHome 中可以下載,請(qǐng)根據(jù)自己的需要進(jìn)行修改。


        將上述文件放到前面指定的/home/pi/Documents/Automatic/下,重啟fauxmo,并讓智能音箱重新搜索,找到這幾個(gè)新增的設(shè)備,分別是:PC和RebootPC.成功后只要說 "Turn off PC" 即可關(guān)閉計(jì)算機(jī)。


        由于fauxmo僅僅適用于亞馬遜音箱,所以使用其他音箱的同學(xué)可能需要尋找一個(gè)相應(yīng)的模擬WeMo或其他智能設(shè)備的項(xiàng)目。接下來還會(huì)推送風(fēng)扇和臺(tái)燈的改造計(jì)劃,讓普通的它們變成可以語(yǔ)音控制的智能家居。希望各位折騰的開心!


        如果文章對(duì)你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~


        作者:Ckend

        來源:Python實(shí)用寶典


        _往期文章推薦_

        解放雙手!用Python控制你的鼠標(biāo)和鍵盤




        如需了解付費(fèi)精品課程教學(xué)答疑服務(wù)
        請(qǐng)?jiān)?strong>Crossin的編程教室內(nèi)回復(fù): 666

        瀏覽 319
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            免费又色又爽无遮挡的扒胸罩 | 不停地做h | 美日韩A片| 乱爱性全过程免费视频 | 很很干在线视频 | 婷婷五月综合久久中文字幕 | 欧美成人免费专区精品高清 | 雪柔夹精喂夫绿帽h文 | 巨胸喷奶水视频www网站 | 狠狠狠狠狠狠狠狠 |