GoogleHome과 minIRum 연동

OK! Google 전기를 켜고



9월 19일, 20일에 진행된 Google Cloud NEXT 18에 참가했습니다.
브레이크 아웃 세션을 메인으로 듣고 있었기 때문에
완전히 GoogleHome의 매력에 푹 빠졌습니다.

그래서 이전에 만든 minIRum을 GoogleHome과 연계시켜 보았습니다.

minIRum이란?



9SQ씨가 OSS로 공개하고 있는 IRkit의 기능 한정판? 입니다.
github - minIRum
최소한의 IRKit 클론을 만들어 iOS에서 가전을 제어합니다.

원래는 homebridge + iOS를 사용하는 가정으로 만들어졌기 때문에
Google Assistant와의 제휴는 여러가지 돌았으므로 여기에 남겨 둡니다.

했던 일



결론부터 말하면 IFTTT로 webhook을 불러 beebotte를 경유해 node-red로부터 curl을 두드리는 이미지입니다.
node-red 환경은 집 서버로 움직이고 있는 우분투 16.04를 사용하고 있습니다.
물론 스마트하게 라즈파이에서도 움직일 것입니다.
우선 node-red가 움직이는 환경이 있으면 괜찮습니다.

실행 환경


// サーバ
ubuntu 16.04

// ソフト・サービス
node-red (2.2.8)
beebotte
ifttt

// デバイス
google home mini
minIRum

방법



Google Assistant → IFTTT → beebotte → node-red → minIRum

IFTTT → beebotte → node-red의 길찾기



Google Assistant와 IFTTT와 beebotte의 연계는 전례가 산만큼 있었으므로 생략합니다.
참고로 한 것은 다음 기사입니다.
IFTTT와 Beebotte를 사용하여 GoogleHome에서 RaspberryPi 작업
IFTTT 트리거 및 동작을 ESP8266에서 실행
IFTTT에서 Raspberry Pi에 지시

어쨌든 GoogleHome을 목소리로 조작하여 node-red를 호출하면 나머지는 무엇이든 할 수 있습니다.

node-red로 GUI 프로그래밍



처음 만진 node-red였지만 GUI 덕분에 기억하는 것은 거기까지 고생하지 않았습니다.
우선 움직이고 싶은 사람은 이하를 참고해 주시면 좋겠습니다.



beebotte 응답을 mqtt로 수신하고 작동하도록 in mqtt 설정
IFTTT는 다음 이미지와 같이 json 형식의 명령을 보냅니다.



data 키에
  • All lights
  • Lights off
  • Night light
  • Favorite
  • Dark
  • Brightky

  • 를 전달할 수 있도록 IFTTT 레시피를 나눕니다.

    그 후 커맨드 판정의 Function으로 어느 적외선 코드를 부르는지를 분기시키고 있습니다

    명령 판정
    
    msg.headers = {"content-type":"application/json"};
    
    switch (msg.payload.data) {
        case 'All lights': // 全灯
            msg.payload = {
                "format": "raw",
                "freq": 38,
                "data": [9000, 4450, ...]
            };
            break;
        case 'Lights off': // 消灯
            msg.payload = {
                "format": "raw",
                "freq": 38,
                "data": [9000, 4450, ...]
            };
            break;
        case 'Night light': // 常夜灯
            msg.payload = {
                "format": "raw",
                "freq": 38,
                "data": [9000, 4450, ...]
            };
            break;
        case 'Favorite': // お気に入り
            msg.payload = {
                "format": "raw",
                "freq": 38,
                "data": [9000, 4450, ...]
            };
            break;
        case 'Brightly': // 明るく
            msg.payload = {
                "format": "raw",
                "freq": 38,
                "data": [9000, 4450, ...]
            };
            break;
        case 'Dark': // 暗く
            msg.payload = {
                "format": "raw",
                "freq": 38,
                "data": [9000, 4450, ...]
            };
            break;
        default:
            msg.payload = {
                "format": "raw",
                "freq": 38,
                "data": []
            };
            break;
    }
    return msg;
    

    명령의 수는 각자가 조작하는 적외선 리모컨에 맞게 변경하십시오.
    물론 적외선 코드도 있습니다.

    minIRum에서는 post에서 적외선 조작을하고 있기 때문에
    msg.headers에게 json의 content-type을 전달합니다.

    node-red로 POST를 보낼 때 망설이기 쉬운 포인트 같기 때문에 조심하십시오.
    그 후 기능에있는 http request의 블록을 연결
    메서드 POST
    URL에 http://로컬에 있는 minIRum 주소/messages
    을 설정합니다.

    이것으로 설정이 완료됩니다.

    요약



    때려서 죄송합니다.
    정리할 수 있을 만큼 기사가 아직 정리되어 있지 않기 때문에 시간을 보고 수시로 갱신해 갑니다.
    무언가의 계기가 되면 다행입니다.

    편집 리크, 코멘트로 실수하고 있는 개소 있으면 꼭 가르쳐 주세요.

    좋은 웹페이지 즐겨찾기