はじめに

GoogleHome/ IFTTT/ Beebotte、そして Pyhtonを使えば声をトリガーに任意の作業ができる。前回、ダーゲットPCに対して、別のサーバを用意していたけれどもど、今回の場合は実行したいPCを用意すれば良い。

まずは結果を。

システム構築

基本的には前回の記事と同じだ。

マシンが違うので、異なるチャンネル beebotteで作成した。

出来るようになったこと

こである声をトリガにして、処理を実施するということができるようになった。

具体的には、

  • モニター OFF
  • モニターON
  • パソコン シャットダウン
  • パソコン Sleep
  • パソコン再起動

しかし、これだけではない。Linux上で実施するあらゆる操作がpythonコードを介して実現可能となった。これは大きな一歩だ。

#!/home/tsu-nera/anaconda3/envs/py3/bin/python
import paho.mqtt.client as mqtt
import json
import os

HOST = 'mqtt.beebotte.com'
PORT = 8883
CA_CERTS = '/home/tsu-nera/repo/python-scripts/mqtt.beebotte.com.pem'
TOKEN = '[チャンネルのトークン]'
TOPIC = 'Galleria/voice'

MONITOR_ON_CMD = "xset dpms force on"
MONITOR_OFF_CMD = "xset dpms force off"
PC_SLEEP_CMD = "systemctl suspend"
PC_OFF_CMD = "shutdown now"
PC_REBOOT_CMD = "shutdown -r now"

def on_connect(client, userdata, flags, respons_code):
    print('status {0}'.format(respons_code))

def on_message(client, userdata, msg):
    data = json.loads(msg.payload)["data"][0]
    print(data)
    if data["device"]=="monitor" and data["action"]=="on":
        os.system(MONITOR_ON_CMD)
    elif data["device"]=="monitor" and data["action"]=="off":
        os.system(MONITOR_OFF_CMD)
    elif data["device"]=="pc" and data["action"]=="スリープ":
        os.system(PC_SLEEP_CMD)
    elif data["device"]=="pc" and data["action"]=="シャットダウン":
        os.system(PC_OFF_CMD)
    elif data["device"]=="pc" and data["action"]=="再起動":
        os.system(PC_REBOOT_CMD)
    else:
        print("Ivalid requset")
    
if __name__ == '__main__':
    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    client.username_pw_set('token:%s' % TOKEN)
    client.tls_set(CA_CERTS)
    client.connect(HOST, PORT)
    client.subscribe(TOPIC)
    client.loop_forever()