"에!? 아침은 비가 내리지 않았는데! 우산 가져오지 않아~."를 해결하는 GoogleHome 제휴 앱을 만들어 보았다

소개



Google Home을 사용하여 귀가 시간의 날씨가 악천후이면 매일 아침 자동으로 우산을 잊지 않도록 음성 통지 해주는 작은 앱을 만들었습니다.
IFTTT라든지 사용하면 LINE이나 메일, PUSH 통지는 간단하게 할 수 있습니다만, 역시 음성으로 가르쳐 준 분이 잊지 않고 편리하다고 생각합니다.
이제 젖어 돌아가거나 갑자기 비닐 우산으로 지출하거나 비가 멈출 때까지 쓸데없는 잔업을 할 필요가 없습니다.

서버 측 프로그램은 Python, Google Home 연계는 Node.js의 google-home-notifier에서 개발했습니다.
GitHub의 리포지토리는 여기입니다. 배포 방법도 게재하고 있습니다.

완제품 동영상



완제품 동영상을 YouTube에 게시했습니다.

GoogleHome을 자발적으로 말하는 방법



여기 편한 기사을 참고로 Node.js의 google-home-notifier라는 라이브러리를 사용했습니다.

알고리즘 개요


  • cron에서 OpenWeatherMap REST-API를 사용하여 지정된 도시의 날씨 정보 얻기
  • 미리 설정된 귀가 시간대의 날씨가 악천후 (비, 눈, 번개 중 하나) 인 경우 Google Home에 음성 알림 요청
  • Google Home 음성 알림



  • 단지, 이것뿐입니다.
    이번에는 Server는 라즈파이를 사용했습니다.

    소스 코드



    일기 예보 정보를 OpenWeatherMap의 REST-API를 이용하여 취득하여 그것을 바탕으로 NodeJS 파일을 실행할지 여부를 판단하는 메인 프로그램입니다.

    weather.py
    import configparser
    import datetime
    import requests
    import os
    import logging.config
    
    # コンフィグファイル読み込み
    inifile = configparser.ConfigParser()
    inifile.read("config.ini")
    
    # ログコンフィグファイル読み込み
    logging.config.fileConfig("logging.conf")
    logger = logging.getLogger("root")
    
    # 本日の日付を取得
    today = str(datetime.date.today())
    
    # 帰宅時間を取得
    back_time = inifile.get("back_time", "back_time")
    
    # 天気情報取得パラメータ設定
    city_id = inifile.get("openweathermap", "city_id")
    app_id = inifile.get("openweathermap", "app_id")
    params = {"id": city_id, "APPID": app_id}
    headers = {"content-type": "application/json"}
    
    # 天気情報を取得
    response = requests.get("http://api.openweathermap.org/data/2.5/forecast", params=params, headers=headers)
    data = response.json()
    
    # 本日の帰宅時間の天気情報を抽出
    weather_today_back_time = ""
    for date_time in data["list"]:
        if date_time["dt_txt"].startswith(today) and date_time["dt_txt"].endswith(back_time):
            weather_today_back_time = date_time["weather"][0]["main"]
            logging.info("The weather of going home time: " + weather_today_back_time)
    
    # もし悪天候であればGoogleHomeを喋らせるNodeJSを実行
    if weather_today_back_time == "Rain" or weather_today_back_time == "Snow" or weather_today_back_time == "Thunderstorm":
        js_file = inifile.get("googlehomenotifier", "js_file")
        command = "/usr/local/bin/node " + js_file
        os.system(command)
    

    GoogleHome에 음성 알림 요청을 실행하는 프로그램은 여기입니다.
    이 기사의 것을 거의 그대로 유용했습니다.

    main.js
    const googlehome = require('google-home-notifier')
    const language = 'ja';
    
    googlehome.device('Google-Home', language);
    googlehome.ip("192.168.11.3");
    googlehome.notify('今日の帰宅時間頃は天気が崩れそうです。傘を忘れずに。', function(res) {
      console.log(res);
    });
    

    미래



    GUI로 설정할 수 있도록 하거나, 전철의 지연을 음성 통지해 주기도 만들어 보고 싶다.

    좋은 웹페이지 즐겨찾기