Siri+Raspberry PI+でIoT コーヒーメーカーの電源を入れる
配線
茶色と黒にコーヒーメーカに接続、青と赤をAC 100Vコンセントに接続する。
最初の一歩
raspberry pi からon off させてみよう。
broadlink sc1
ネット環境を調べよう。
netstat.py
import broadlink
ssid,passwd='ssid','password'
broadlink.setup(ssid,passwd, 3)
dev = broadlink.discover(timeout=20)
net=[]
for d in dev:
d.auth()
n=dict(type=d.get_type(),ip=d.host[0],port =d.host[1],
mac = "-".join([format(x,"02x") for x in [x for x in reversed(d.mac)]]),
timeout = d.timeout)
net.append(n)
print(net)
[{'type': 'SP2', 'ip': '192.168.1.151', 'port': 80, 'mac': '78-0f-77-17-5d-70', 'timeout': 10}]
Broadlink sc1は、sp2として認識される。
on_off.py
import broadlink,netaddr,time,binascii,json,sys
net1={'type': 'SP2', 'ip': '192.168.1.151', 'port': 80, 'mac': '78-0f-77-17-5d-70', 'timeout': 10}
sp2 = broadlink.sp2((net1["ip"], net1["port"]),netaddr.EUI(net1["mac"]),net1["timeout"])
sp2.auth()
sp2.set_power(False if sp2.check_power() else True)
実行するとon off を繰り返す。
本番プログラム
simplesw.py
'''
simple switch
'''
import broadlink,netaddr,time,binascii,json,sys
import logging,signal
net1={'type': 'SP2', 'ip': '192.168.1.151', 'port': 80, 'mac': '78-0f-77-17-5d-70', 'timeout': 10}
from pyhap.accessory import Accessory, Bridge
from pyhap.accessory_driver import AccessoryDriver
from pyhap.const import (CATEGORY_SWITCH)
logging.basicConfig(level=logging.INFO, format="[%(module)s] %(message)s")
class SW(Accessory):
category = CATEGORY_SWITCH
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
serv_tv = self.add_preload_service('Switch')
self.char_on = serv_tv.configure_char('On', setter_callback=self.sw)
def sw(self,value):
logging.info("スウィッチ: %s", value)
sp2 = broadlink.sp2((net1["ip"], net1["port"]),netaddr.EUI(net1["mac"]),net1["timeout"])
sp2.auth()
sp2.set_power(value)
def get_bridge(driver):
bridge = Bridge(driver, 'Bridge')
bridge.add_accessory(SW(driver, 'コーヒーメーカ'))
return bridge
driver = AccessoryDriver(port=51826, persist_file='simple.state')
driver.add_accessory(accessory=get_bridge(driver))
signal.signal(signal.SIGTERM, driver.signal_handler)
driver.start()
実行
pi@raspberrypi:~/hk_project/HAP-python$ python simple.py