はじめに
雨が降り始めていることに気が付かないことって皆さんありませんか?
我が家は二重窓で外の音も聞こえないので、より気が付きにくいんですよ。
なので、どこの家庭にもあるAmazon Echoシリーズとラズパイで雨が降りそうな時に教えて貰う方法をざっくりと書いてみました。
降水情報はどこから取得するの?
Yahooさんの気象情報APIを活用します。
Yahoo!デベロッパーネットワークに登録して下記ページを参考に自宅の降水強度予測値を取得します。
https://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/weather.html
どうやってAlexaから教えて貰うの?
やり方は色々あるようですが、簡単そうなNode-Redを活用した方法を選択しました。
Node-REDをラズパイに導入して各種設定を行いましたが、長くなるので割愛させて頂きます。
Echoシリーズで通知させるためにNode-Redには、node-red-contrib-alexa-remote2-applestrudelというノードを追加しています。
降水情報をどうやって活用するの?
ラズパイに下記の処理を記載したシェルスクリプトを作成して、cronで7:00~22:00の間で2分に1回スクリプトを実行させます。
シェルスクリプトの処理について気になるところがあると思いますが後ほど解説します。
1⃣現在時から20分後の時刻を取得
2⃣curlコマンドとjqコマンドを使って、直近の過去降水情報から降水量の値だけをobservation.jsonとして保存
3⃣curlコマンドとjqコマンドを使って、現在時から20分後の情報から降水量の値だけをresult.jsonとして保存
4⃣mvコマンドを使って、③で保存したresult.jsonをforecast.jsonにリネーム
5⃣Sleep30秒
6⃣forecast.jsonをコピーしてlast_time.jsonとして保存
Node-REDでどうやって通知させるの?
下図のようにフローを作成してみました。
それぞれの処理内容については以下となっています。
①forecast.jsonの書き込みという名称ですが、実際はforecast.jsonのファイル変更を監視しています。
ファイルの変更をトリガーとして後続処理が動き始めます。
シェルスクリプトの3⃣と4⃣でresult.jsonとして保存したデータを、mvでforecast.jsonとして保存しなおすのはこのファイル変更監視がリダイレクトで直接forecast.jsonを指定すると、リダイレクトによって同名ファイルを上書きする前に実際は一旦削除がされているようで、後続の処理が2回動くのを回避する為に別ファイルとして保存をしてmvで上書きを行っています。
②observation.jsonに記載されているデータを読み込んでいます。
③②で読み込んだobservation.jsonの値が0であれば後続処理を実行します。
observation.jsonの値が0というのは、直近の過去降水量が0なのでまだ降っていない状況のことです。
既に雨が降っている状況で降水予報してしまうのを回避するためにこの判定を入れています。
④last_time.jsonに記載されているデータを読み込んでいます。
⑤④で読み込んだlast_time.jsonの値が0であれば後続処理を実行します。
last_time.jsonは前回の処理実行時のforecast.jsonの値が記載されています。
既に降水予報済みにもかかわらず複数回通知されてしまうのを回避する為にこの判定を入れています。
⑥forecast.jsonに記載されているデータを読み込んでいます。
⑦⑥で読み込んだforecast.jsonの値が0よりも大きければ後続処理を実行します。
forecast.jsonに記載されているデータは20分後の降水強度予測値なので、1以上であれば雨が降る可能性があるという想定です。
⑧Echoから雨が降るかもしれない通知を行います。
我が家は音声のみのEcho DotとEcho Pop、画面付きのEcho Show5があるので、NodeのParallelで音声のみ用にSpeak Regularを設定し、画面付き用にSpeak Announcementを設定しました。
最後に
こんな感じでAlexaに雨が降りそうなときに教えてもらう方法を書いてみました!
本当にざっくりと書いているので、ここってどうなってるの?といった問い合わせや、こう処理させた方が良いよ!といった意見があれば気軽にご連絡ください。
暇な時に反応すると思います。多分…
他にもEchoシリーズとラズパイ、Node-REDを使って色々遊べそうなので、何か作ったらストーリーに備忘を兼ねて書いていこうと思います。
最後まで読んでいただきありがとうございました。