塩焼きブログ

塩焼きに関しての研究内容を公開しています

Python3で家の家電をコントロールする

HomeBridgeで家をスマホからコントロールできるようにしているのだが、iPhoneを取りに行くのすら面倒くさくなった。せっかくHomeBridge用にconfig.jsonに自宅の家電をコントロールするための赤外線情報があるので、それをparseしてターミナルから操作することにした。Pythonで書いたのは勉強がてら。Groovyとで悩んだけど今日はIDE開きたくなかったから。。

使い方

そのまま叩くとアクセサリ一覧

$ python3 home.py
IRKit0002.local リビングの電気
IRKit0002.local リビングの冷房
IRKit0001.local 寝室の冷房
IRKit0001.local 寝室の電気
IRKit0002.local テレビ
IRKit0001.local ルンバ

こんな感じで使います

$ python3 home.py リビングの電気 on_form
$ python3 home.py リビングの電気 off_form

コード

家の中で使うのでかなり適当です。今日は早く寝ようと思ったけど簡単じゃなかった眠い。。Python慣れてないのでひとまずこれで。。

#!/usr/local/bin/python3
# coding: utf-8

import urllib.request, sys, json

f = open("/path/to/config.json")
config = json.load(f)
f.close()

accessories = {}
for it in config['accessories']:
    accessories[it['name']] = it

if len(sys.argv) == 3:
    name = sys.argv[1]
    action = sys.argv[2]

    accessory = accessories[name]
    infrared_code = json.JSONEncoder().encode(accessory[action]).encode('utf-8')
    target_url = 'http://' + accessory['irkit_host'] + '/messages'
    method = "POST"
    headers = {
        "Content-Type": "application/json",
        "X-Requested-With": "curl"
    }

    request = urllib.request.Request(
        target_url,
        data=infrared_code,
        method=method,
        headers=headers
    )
    with urllib.request.urlopen(request) as response:
        sys.exit()

    sys.exit()

for k, v in accessories.items():
    print(v['irkit_host'], k)

まとめ

素直にiPhone取りに行けばよかった眠い。。が、代償にPythonを好きになった。

参考