Raspberry Piを使ってGoogle Homeに1時間後に雨が降る可能性を予測してもらいましょう

Raspberry Piを使ってGoogle Homeに時報サービスをしてもらいましょう”の続きです。

 

Google Home“に「OK Google, 今日の天気は?」って訊ねれば、天気予報を教えてくれるんですが、外出前の習慣にはなかなか出来ず、折角の機能が勿体無いなあ、と思っているところです。

それなら、以前のTALKでお話した通り、”Google Home”で時報を知らせてくれるようにしたので、その時に利用した”google-home-notifier“を使って、外出前の天気予報を勝手に喋ってくれる仕掛けを作ってみることにしました。ただ、普通の天気予報の内容だとザックリし過ぎなので、出掛けに雨が降る可能性を教えてくれるようにしてみました。

 

(1) 1時間後の時間雨量のデータを取得してみましょう

一般的な天気予報の内容でも良いのですが、外出前に一番知りたいのが雨が降る確率ですよねえ。

Yahoo! デベロッパーネットワーク“のうち、今回は、”Web API“として提供している”YOLP(地図):気象情報API“を活用すると、現在ならびに1時間後の時間雨量データを取得することができます。

このAPIで取得できるデータは、降水強度です(単位:mm/h)。説明によると、「降水強度は、気象レーダーで観測された降水の強さを時間雨量(mm/h)に換算した値で、実際の雨量とは異なります。」ということなんですが、ま、細かいことはともかく、時間雨量の値を参照すれば、雨が降るかどうか判断できそうなので、このWeb APIを利用してみることにします。

なお、APIの利用に先立ち、APIを利用する”アプリケーションを登録“して、APIでリクエストを発行する際に必須項目となるアプリケーションIDを用意しておく必要があります。

APIを利用して、リクエストを発行して、その結果にもとづき、Google Homeに喋ってもらう文章をテキストファイルに書き込むところまでの”Python“スクリプトを書いてみます。

nano /home/pi/weather_google_home_notifier.py

 

#!/usr/bin/env python

# coding: utf-8

import requests

import urllib

import pprint

import json

import struct

import subprocess

def main():

    url       = makeUrl()

    json_data = requestJson(url)

    current_rainfall  = currentRainfall(json_data)

    one_hour_rainfall = oneHourRainfall(json_data)

    if speakGoogleHomeIfNeeded(current_rainfall, one_hour_rainfall):

        message = ("1時間後の雨の量は、%s mmです" % (one_hour_rainfall))

        speak_google_home(message)

    else:

        message = ("1時間後に雨は降らない模様です")

        speak_google_home(message)

def makeUrl():

    APP_ID      = "アプリケーションID"

    BASE_URL    = "https://map.yahooapis.jp/weather/V1/place"

    COORDINATES = "緯度、経度"

    OUTPUT      = "json"

    yolp_url = BASE_URL + "?appid=%s&coordinates=%s&output=%s" % (APP_ID,COORDINATES,OUTPUT)

    return yolp_url

def requestJson(url):

    req       = requests.get(url)

    json_data = req.json()

    return json_data

def wetherData(json_data):

    return json_data['Feature'][0]['Property']['WeatherList']['Weather']

# 現在の時間雲量

def currentRainfall(json_data):

    weather = wetherData(json_data)

    return weather[0]['Rainfall']

# 1時間後の時間雲量

def oneHourRainfall(json_data):

    weather = wetherData(json_data)

    return weather[1]['Rainfall']

# 1時間後の時間雲量が現在の量よりも多いかどうか確認する

def speakGoogleHomeIfNeeded(current_rainfall, one_hour_rainfall):

   if one_hour_rainfall > 0:

       return True

    return False

# Google Homeに喋ってもらう文章をテキストファイルに書き込む

def speak_google_home(message):

    file = open('/home/pi/weather_google_home_notifier.txt', 'w')

    file.writelines(message)

    file.close()

if __name__ == '__main__':

    main()

 

続いて、テキストファイルの中身をGoogle Homeで読み上げるスクリプトを書いてみます。

こちらのスクリプトは、”google-home-notifier“をインストールしておくことが前提になります。詳しい説明は、以前のTALK Raspberry Piを使ってGoogle Homeに時報サービスをしてもらいましょう”をご覧ください。

で、こちらは、”google-home-notifier“と相性の良いJava Scriptで書いてます。ちなみに、”google-home-notifier“では専用サーバーを立てることもできるので、別のラズパイから”Python“でリクエストすることも可能なのですが、POOHの環境ではうまく実行できなかったので、今回は”Java Script“を用いて、ローカルで”google-home-notifier“を呼び出しています。

nano /home/pi/googlehome-weather_report.js

 

var googlehome = require('google-home-notifier');

var language = 'ja'; // if not set 'us' language will be used

googlehome.device('Google Homeの名前', language); // Change to your Google Home name

// or if you know your Google Home IP

//googlehome.ip('192.168.1.2', language);

var fs = require('fs');

fs.readFile("/home/pi/weather_google_home_notifier.txt", 'utf8', function (err, data) {

        if (err) {

        throw err;

        }

        

        googlehome.notify(data, function(res) {

                console.log(res);

        });

});

 

(2) 書いたスクリプトを定期的に実行するクーロンを設定しましょう

cronを使って、上記で用意したスクリプト 2本を定期的に実行するようにしておきましょう。なお、一日中、喋られても何なので、POOHの場合は、午前7時から9時までの間、毎時1回、喋ってくれるようにしました。

crontab -e

01 7-9 * * * python /home/pi/weather_google_home_notifier.py

02 7-9 * * * node googlehome-weather_report.js

 

sudo /etc/init.d/cron start

 

 

 

Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。
ホームページ “THE POOH FILES” にも是非お立ち寄り下さい。

tomohiko

長年に渡りMacintosh向けの自作アプリを作り続けているPOOHです。最近はiPhone,iPad向けアプリ開発にも挑戦中。グルメ、旅行、露天風呂、写真、サイクリング、映画、STAR TREKが大好き。レトロでSFなおもちゃを大量にコレクション。プレーリードッグと同居中。

おすすめ

コメントを残す