Amazon Echo에서 Raspberry Pi (에서 적외선 리모컨 등) 제어 (로컬 편)

감사의 말



미쿠민 P 님의 Twitter 포스트에서 fauxmo를 알았습니다. 미쿠민 P씨, 고마워요.

할 수 있는 일


  • Raspberry Pi에서 Belkin WeMo 디바이스를 에뮬레이트하여 Amazon Echo의 스마트 홈 디바이스로 인식하고 Alexa에 대한 정형 액션을 통해 Raspberry Pi에서 명령을 실행합니다. (WeMo 장치가 없어도 움직입니다!)
  • 참고로 node-red-contrib-alexa-home-skill 을 사용하는 방법은 여기 에 썼습니다.

  • WeMo Switch 의 에뮬레이트이므로 ON/OFF만입니다.

  • 필요한 것


  • Raspberry Pi (3B 및 Zero WH에서 작동 확인)
  • Amazon Echo(Dot에서만 동작 확인은 하고 있습니다.)
  • 기타 (적외선 LED를 조작하는 경우 적외선 LED 등)

  • 장점


  • Hue 또는 Belkin과 같은 스마트 홈 지원 물리적 장치가 없더라도 Raspberry Pi에서 액세스 할 수있는 물건은 Amazon Echo로 제어 할 수 있습니다 (예 : 적외선 리모컨)

  • node-red-contrib-alexa-home-skill과 달리 외부 서버는 필요하지 않으므로 서버 유지 보수 또는 서버 작동 중지를 신경 쓸 필요가 없습니다. (hardill 씨 빚을지고 있습니다.)
  • 서버를 거치지 않고 로컬 LAN에서 실행되므로 반응이 빠릅니다.

  • 절차



    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로 다시 시작할 때 시작했습니다.
  • 2018/05/27 추가
    환경에 따라서는, cron @reboot 로 실행하는 경우, 네트워크 서비스가 일어나고 있지 않는 경우가 있으므로, sleep 30;등으로 30초 정도 기다릴 필요가 있는 것 같습니다.
    (새로운 환경을 구축하면 일어나지 않게되고 원인을 조사하면 네트워크 서비스가 시작되지 않았기 때문입니다 ...)

  • 기타


  • Python2.7 전제입니다만, Python3에 대응하는 풀릭 가 오르고 있는 것 같습니다.

  • node-red-contrib-alexa-local 은 실제 장치가 필요한 것 같았고, 디스커버리에서 먼저 가지 않았습니다.
  • 미쿠민P님의 투고에도 있는 대로, M5Stack 에도 포팅 되고 있습니다.
  • 처음에는 Raspberry Pi 3B에서 움직이고 있었지만, 우연히 Raspberry Pi Zero WH가 입수했기 때문에 현재는 Zero WH로 움직이고 있습니다. Zero WH라면 Node-RED를 움직이는 것이 엄격하다고 하는 정보 가 있습니다만, 이쪽은, Python 직접이므로 Zero WH에서도 특히 문제 없게 움직이고 있는 것 같습니다.
  • 좋은 웹페이지 즐겨찾기