Raspberry Pi + Twitter + Google Home で「地震速報」メッセージを伝える!
最近、規模は小さいけど地震の発生頻度が気になるようになってきました。
地震速報といえばスマホなわけですが、自宅に設置してあるAIスピーカーって、そういう時に自発的に情報を喋ってくれると、もっと実生活で役に立つガジェットになれるのに、なぜ尋ねないと教えてくれないんでしょうね?
そんな細やかな疑問を解決すべく、今回は”Google Home“に地震速報をアクティブに知らせてもらう仕組みを作ってみようと思います。
< TwitterでツイートをGETする >
今回は、”Twitter”で地震速報を配信している”tenki.jp地震情報 (@tenkijp_jishin)”のツイートを取得して、最新かつ新規のツイートを”Google Home”で喋ってもらう、というストーリーで進めていきます。
“Twitter”上のツイートを取得するパッケージとして、今回は”node-twitter“を利用します。このパッケージは、”Twitter”が提供する”REST API”と”Stream API”の両方をサポートしているので、いろいろな場面で活用できそうです。
“node-twitter“をラズパイにインストールします。
npm install twitter
こちらが、”node-twitter“を利用する際の基本形です。
スクリプトの冒頭に記述する”consumer_key”, “consumer_secret”, “access_token_key”, “access_token_secret”は、Twitterの”開発者向けページ“で新しいアプリを登録した際に発行される認証情報です。詳しい内容は、過去のTALK Raspberry Piで航空機のADS-Bを受信してみました “SDR ADS-B 1090MHz 受信用アンテナ ssmtp mailutils mpack twython” (5)をご覧下さい。
まず始めに、”tenki.jp地震情報 (@tenkijp_jishin)”の最新ツイートを取得して、ツイートの作成日とツイート本文をターミナルに出力するスクリプトを作成します。
sudo nano /home/pi/twitter_get_test.js
スクリプトを実行してみます。
node twitter_get_test.js
< ツイートされた新規の地震速報をGoogle Homeが喋る >
それでは、”tenki.jp地震情報 (@tenkijp_jishin)”の最新ツイートを取得して、そのツイートが初めての内容だった場合に”Google Home”で知らせるようにします。
なお、”Google Home”が喋る仕組みは”google-home-notifier“というJava Scriptのライブラリでやってもらいます。インストール手順やセットアップ方法は、以下のTALKをご覧下さい。
・”Raspberry Piを使ってGoogle Homeに時報サービスをしてもらいましょう”
・”Raspberry PiとGoogle カレンダでGoogle Homeにゴミの日を教えてもらう”
・”Raspberry Piを使ってGoogle Homeに1時間後に雨が降る可能性を予測してもらいましょう”
先程作成したスクリプトに、”Google Home”に関する処理と新規のツイートかをチェックする比較処理を追記します。
スクリプトに新たに追記した部分のポイントは以下の通りです。
・取得したツイートが初めての内容なのかチェックする。
テキストファイルに保存した前回取得したツイート文と、今回取得したツイート文が同じかどうかで、新規か否かを確認するようにしました。
下のスクリプトでは、デバッグの都合上、
if (saved_tweet.length > 0 && tweet[0] == saved_tweet)
と記述している部分です。
本来であれば、
if (saved_tweet.length > 0 && tweet[0] != saved_tweet)
とすべきですが、それではいつまで経っても”Google Home”が喋るところをテストできないので、”==”としています。
テキストファイルの読み込みは、
let saved_tweet = fs.readFileSync("/home/pi/tweet.txt", 'utf-8');
テキストファイルへの書き出しは、
fs.writeFileSync("/home/pi/tweet.txt", tweet[0]);
としました。
なお、読み込み処理ではファイルの存在確認をしていないので、”tweet.txt”がないとエラーになってしまいます。ですので、事前に適当なテキストファイルを作成しておいて下さい。
・ツイート本文の不要な部分を削除する
ツイートを喋る際、URLやハッシュタグなどは不要なので、
スペースで区切って切り出した文字列の配列の先頭部分を喋るフレーズとして採用しています。
var text = tweets[0].text;
var tweet = text.split(" ");
〜
googlehome.notify(tweet[0], function(res)
sudo nano /home/pi/twitter_get_tweet.js
スクリプトを実行してみます。
上記のスクリプトを実行すると、必ず最新のツイートを”Google Home”が喋ってくれると思います。
node twitter_get_tweet.js
動作確認を終えたら、
if (saved_tweet.length > 0 && tweet[0] != saved_tweet)
と変更して下さい。
< 3分毎に最新のツイートをチェックする >
3分毎にスクリプトを実行するようcronを編集します。
crontab -e
編集を終えたら、cronをリスタート。
sudo /etc/init.d/cron restart
これで、我が家の書斎にある”Google Home”は、いままで以上にお喋りになりました。(地震はないに越したことはありませんが…)
ちなみに、現時点で”Google Home”が喋ってくれる内容は以下の通りです。ご参考までに。
・”Raspberry Piを使ってGoogle Homeに時報サービスをしてもらいましょう”
・”Raspberry PiとGoogle カレンダでGoogle Homeにゴミの日を教えてもらう”
・”Raspberry Piを使ってGoogle Homeに1時間後に雨が降る可能性を予測してもらいましょう”
・温湿度・気圧センサモジュール、Raspberry Pi、Google Homeで快適なお部屋作り (前半)
・Raspberry Pi + Bluetooth リモコンシャッター + Google Home で「こっちに来て!」メッセージ
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。