<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3957字,需瀏覽 8分鐘

           ·

          2021-03-17 13:36



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


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


          完成下面這個有趣的實驗,你所需要的東西有:


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

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

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

          4. 一個樹莓派


          原理流程圖如下:


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


          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]


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


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



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


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

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


          我的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) 電腦賬號 電腦密碼 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,請進入BOOT中開啟,非常簡單,相關(guān)操作可自行查閱主板的說明書。


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


          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 中可以下載,請根據(jù)自己的需要進行修改。


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


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


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


          作者:Ckend

          來源:Python實用寶典


          _往期文章推薦_

          解放雙手!用Python控制你的鼠標和鍵盤




          如需了解付費精品課程教學答疑服務
          請在Crossin的編程教室內(nèi)回復: 666

          瀏覽 319
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美日韩三级片 | 经典三级久久 | 欧美日韩一卡 | 亚洲日韩中文字幕视频在线 | 噜噜色色 |