原创 / 智能家庭 / 电脑研究 / 计算机科学

【SmartHome】使用Python制作拍手开灯-基于HomeAssistant PythonAPI

感受到Google Home以及Alexa的语音助手带来的便捷体验后,想到了使用拍手来开灯的想法,由于在家里已经部署了Home Assistant并且考虑到它的可二次开发的特性,使用Home Assistant API制作了这个程序。 拍两下手可判断开灯状态来进行开灯或关灯,支持设置拍手次数执行不同操作。

Home Assistant是一个开源智能家居管理平台: Home Assistant is an open-source home automation platform running on Python 3. Track and control all devices at home and automate control. Perfect to run on a Raspberry Pi. 官网:https://www.home-assistant.io/   GitHub 详情页:https://github.com/KrunkZhou/PI-Clap   代码部分:


import pyaudio import sys import threading import time from time import sleep from array import array import KRUNKHOMEAPI as kapi import homeassistant.remote as koapi #You will need to download homeassistant python api

def main(): kapi.api=koapi.API('sample.com', 'password','8123') # HA-API:domain, password, port check=kapi.apicheck() if check: start() kapi.endscript()

clap = 0 wait = 1 flag = 0 pin = 24 exitFlag = False

def toggleLight(c): domain = 'light' #domain switch_name = 'light.lamp' #switch name print (str(kapi.get_state(switch_name))) lamp=kapi.get_state(switch_name) if (lamp.state=='off'): kapi.turn_on(domain,switch_name) else: kapi.turn_off(domain,switch_name) sleep(1) print("Light toggled")

def waitForClaps(threadName): global clap global flag global wait global exitFlag global pin print ("Waiting for more claps") sleep(wait) if clap == 2: print ("Two claps") toggleLight(pin)

elif clap == 3:

#elif clap == 4: #exitFlag = True print ("Claping Ended") clap = 0 flag = 0

def start(): global clap global flag global pin

chunk = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 44100 threshold = 3000 max_value = 0 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, output=True, frames_per_buffer=chunk) try: print ("Start") while True: data = stream.read(chunk) as_ints = array('h', data) max_value = max(as_ints) if max_value > threshold: clap += 1 print ("Clapped") if clap == 1 and flag == 0: t=threading.Thread( target=waitForClaps, args=("waitThread",) ) t.start() flag = 1 if exitFlag: sys.exit(0) except (KeyboardInterrupt, SystemExit): print ("\rExiting") stream.stop_stream() stream.close() p.terminate()

if __name__ == '__main__': main()


下载: https://github.com/KrunkZhou/PI-Clap

写于 2018/04/09 · Krunk Zhou

一起聊聊