Amazon Echo에서 Raspberry Pi (에서 적외선 리모컨 등) 제어 (로컬 편)
13006 단어 RaspberryPi파이썬달콤한알렉사
감사의 말
미쿠민 P 님의 Twitter 포스트에서 fauxmo를 알았습니다. 미쿠민 P씨, 고마워요.
할 수 있는 일
WeMo Switch 의 에뮬레이트이므로 ON/OFF만입니다.
필요한 것
장점
node-red-contrib-alexa-home-skill과 달리 외부 서버는 필요하지 않으므로 서버 유지 보수 또는 서버 작동 중지를 신경 쓸 필요가 없습니다. (hardill 씨 빚을지고 있습니다.)
절차
fauxmo를 로컬 (Raspberry Pi)의 적절한 디렉토리에 clone
git clone https://github.com/makermusings/fauxmo.git
종속 라이브러리 설치
pip install requests (←pip install requestになっていました…)
장치 정의 및 실행할 명령 지정 필요에 따라 수정.
그대로 지정한 IP 주소로 요청합니다. 여기서 각 장치에 대해 세 번째 요소로 포트를 지정하면 파이썬을 다시 시작해도 포트가 변경되지 않습니다.
FAUXMOS = [
['TV_ONOFF', exec_handler('code/tv_turnon.data', 'code/tv_turnon.data'),42200],
['TV_SILENT', exec_handler('code/tv_silent.data', 'code/tv_silent.data'),42201],
['TV_VOL', exec_handler('code/tv_vol_up.data', 'code/tv_voldown.data'),42202],
['TV_ECOSRC', exec_handler('code/tv_eco.data', 'code/tv_src.data'),42203],
['AMP_ONOFF', exec_handler('code/amp_turnon.data', 'code/amp_turnoff.data'),42210],
['AMP_VOL', exec_handler('code/amp_volup.data', 'code/amp_voldown.data'),42211],
['AMP_SRC_CDTUNER', exec_handler('code/amp_src_cd.data', 'code/amp_src_tuner.data'),42212],
['AMP_SRC_RECOPT', exec_handler('code/amp_src_recorder.data', 'code/amp_src_optical.data'),42213],
['LIVINGLIGHT_ONOFF', exec_handler('code/livinglight_turnon.data', 'code/livinglight_turnoff.data'),42220],
['LIVINGLIGHT_MODE_MINMAX', exec_handler('code/livinglight_mode_minlight.data', 'code/livinglight_mode_maxlight.data'),42221],
['LIVINGLIGHT_MODE_LIB_TAB', exec_handler('code/livinglight_mode_library.data', 'code/livinglight_mode_table.data'),42222],
['LIVINGLIGHT_MODE_LAMP_ECO', exec_handler('code/livinglight_mode_lamp.data', 'code/livinglight_mode_eco.data'),42223],
['RECORDER_ONOFF', exec_handler('code/recorder_turnon.data', 'code/recorder_turnoff.data'),42230],
['RECORDER_PAUSE', exec_handler('code/recorder_pause.data', 'code/recorder_play.data'),42231],
]
실행할 명령 추가
class exec_handler(object):
def __init__(self, on_cmd, off_cmd):
self.on_cmd = on_cmd
self.off_cmd = off_cmd
def on(self):
dbg("cmd: python %s/r02.py t %s" % (IR_PATH ,self.on_cmd))
r = subprocess.call(["python", os.path.expanduser("%s/r02.py" % IR_PATH), "t", os.path.expanduser("%s/%s" % (IR_PATH,self.on_cmd))])
return r
def off(self):
dbg("cmd: python %s/r02.py t %s" % (IR_PATH, self.off_cmd))
r = subprocess.call(["python", os.path.expanduser("%s/r02.py" % IR_PATH ), "t", os.path.expanduser("%s/%s" % (IR_PATH,self.off_cmd))])
return r
python fauxmo.py -d
로 부팅하면 Amazon Echo에서 디바이스 검색으로 감지됩니다. ( -d
는 콘솔에 디버그 출력하는 옵션입니다.)
Alexa 앱에서는 이런 느낌↓에 검출되었습니다.
동작이 확인되면 선인의 지혜 을 참고로 자동 기동을 설정합니다. crontab -e로 다시 시작할 때 시작했습니다.
git clone https://github.com/makermusings/fauxmo.git
pip install requests (←pip install requestになっていました…)
FAUXMOS = [
['TV_ONOFF', exec_handler('code/tv_turnon.data', 'code/tv_turnon.data'),42200],
['TV_SILENT', exec_handler('code/tv_silent.data', 'code/tv_silent.data'),42201],
['TV_VOL', exec_handler('code/tv_vol_up.data', 'code/tv_voldown.data'),42202],
['TV_ECOSRC', exec_handler('code/tv_eco.data', 'code/tv_src.data'),42203],
['AMP_ONOFF', exec_handler('code/amp_turnon.data', 'code/amp_turnoff.data'),42210],
['AMP_VOL', exec_handler('code/amp_volup.data', 'code/amp_voldown.data'),42211],
['AMP_SRC_CDTUNER', exec_handler('code/amp_src_cd.data', 'code/amp_src_tuner.data'),42212],
['AMP_SRC_RECOPT', exec_handler('code/amp_src_recorder.data', 'code/amp_src_optical.data'),42213],
['LIVINGLIGHT_ONOFF', exec_handler('code/livinglight_turnon.data', 'code/livinglight_turnoff.data'),42220],
['LIVINGLIGHT_MODE_MINMAX', exec_handler('code/livinglight_mode_minlight.data', 'code/livinglight_mode_maxlight.data'),42221],
['LIVINGLIGHT_MODE_LIB_TAB', exec_handler('code/livinglight_mode_library.data', 'code/livinglight_mode_table.data'),42222],
['LIVINGLIGHT_MODE_LAMP_ECO', exec_handler('code/livinglight_mode_lamp.data', 'code/livinglight_mode_eco.data'),42223],
['RECORDER_ONOFF', exec_handler('code/recorder_turnon.data', 'code/recorder_turnoff.data'),42230],
['RECORDER_PAUSE', exec_handler('code/recorder_pause.data', 'code/recorder_play.data'),42231],
]
class exec_handler(object):
def __init__(self, on_cmd, off_cmd):
self.on_cmd = on_cmd
self.off_cmd = off_cmd
def on(self):
dbg("cmd: python %s/r02.py t %s" % (IR_PATH ,self.on_cmd))
r = subprocess.call(["python", os.path.expanduser("%s/r02.py" % IR_PATH), "t", os.path.expanduser("%s/%s" % (IR_PATH,self.on_cmd))])
return r
def off(self):
dbg("cmd: python %s/r02.py t %s" % (IR_PATH, self.off_cmd))
r = subprocess.call(["python", os.path.expanduser("%s/r02.py" % IR_PATH ), "t", os.path.expanduser("%s/%s" % (IR_PATH,self.off_cmd))])
return r
환경에 따라서는, cron @reboot 로 실행하는 경우, 네트워크 서비스가 일어나고 있지 않는 경우가 있으므로, sleep 30;등으로 30초 정도 기다릴 필요가 있는 것 같습니다.
(새로운 환경을 구축하면 일어나지 않게되고 원인을 조사하면 네트워크 서비스가 시작되지 않았기 때문입니다 ...)
기타
node-red-contrib-alexa-local 은 실제 장치가 필요한 것 같았고, 디스커버리에서 먼저 가지 않았습니다.
Reference
이 문제에 관하여(Amazon Echo에서 Raspberry Pi (에서 적외선 리모컨 등) 제어 (로컬 편)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/michan06/items/daca38018243eeb6f61b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)