Raspberry PiとGoogle カレンダでGoogle Homeにゴミの日を教えてもらう
“Raspberry Piを使ってGoogle Homeに時報サービスをしてもらいましょう”
“Raspberry Piを使ってGoogle Homeに1時間後に雨が降る可能性を予測してもらいましょう“の続きです。
“Google Home“に話しかけて何かを教えてもらうのって、意外に面倒、ということで、これまで時報と天気予報(降水強度)を、予め決めたタイミングで”Google Home”に喋ってもらうようにしました。やっぱり、尋ねるよりも喋ってくれる方が、個人的には自然なAIのあり方だよなあ、と思ったりする今日このごろです。
そんな流れで、今回は、ゴミの収集日を、”Google Home”に喋って教えてもらうようにしてみました。とは言っても、ゴミの収集日だけじゃなくて、今日の予定をちゃんと教えてくれるんですけどねえ。
(1) Google カレンダーにゴミの収集日を登録しておきましょう
今回は、”Google カレンダー“に登録したゴミの収集日を”Google Home”に喋ってもらうので、事前にゴミの収集日を登録しておきます。
ゴミの収集日は地域によって様々なルールがあると思いますが、我が家のエリアでは、不燃ゴミが第2, 4月曜日、資源ゴミと燃えるゴミが毎週火、水、土曜日、と決まっているので、そのルールに沿って、カレンダーには繰り返しのイベント扱いで登録しておきます。なお、今回は、終日のイベントに未対応なので、ゴミを出すだろう時間を具体的に指定したうえで登録して下さい。
(2) Google Calendar APIを利用する準備をしましょう
Googleさんは、”Google カレンダー”に外部からアクセスできるAPIを用意しているだけじゃなくて、いろいろな開発言語のサンプルを分かり易く公開しています。
そのなかで、”Python”でAPIを利用する方法とサンプルが、”Python Quickstart | Calendar API | Google Developers“というWebページで公開されています。以下、このページで説明している内容をベースにTALKを進めていきます。
“Step 1: Turn on the Google Calendar API”では、”Calendar API”を利用する準備として、プロジェクトの登録とAPIを使うために必要な認証情報の取得までの手続きを説明しています。具体的な内容については、重複するため、このTALKでは割愛しますが、おおよその流れをピックアップして紹介しておきます。
“こちら“をクリックした後、画面左下の”続行”ボタンをクリックします。
手順に沿って、プロジェクトを登録した後、引き続き、APIを使用する際に必要な認証情報を取得します。
今回は、”Python”スクリプト内部でAPIを呼び出すため、”その他”を選択して、適当な名前を付けておきます。
以上で、認証情報を作成できました。この後、作成した認証情報が記録されたJSONファイルを、手順に従ってダウンロードして下さい。ダウンロードしたJSONファイルの名前を”client_secret.json”に変更して下さい。
以上で、準備完了です。
(3) ライブラリをインストールしましょう
“Step 2: Install the Google Client Library”に記載の通り、ライブラリをインストールして下さい。
pip install --upgrade google-api-python-client
(4) サンプルスクリプトを実行してみましょう
“Step 3: Set up the sample”に掲載されているサンプルの”Python”スクリプトをそのままファイルに書いて保存して下さい。
では、スクリプトを実行してみましょう。あ、ここでは、”Raspberry Pi”上の”ターミナル”を使って下さい。というのも、スクリプトを実行して、最初にAPIを利用する際、Webブラウザが起動して、Googleへのサインインと、アクセス許可を求められるためです。
python quickstart.py
問題なく実行が完了すると、こんな感じで、”Google カレンダー”に登録したゴミの収集日が表示されます。
(5) Google Homeに喋ってもらう文章をテキストファイルに書き出しましょう
先程、実行したサンプルの”Python”スクリプトをベースに、”Google Home”にゴミの収集日であることを喋ってもらうよう、テキストファイルに喋ってもらう文書を書き出しましょう。
実際に使用するスクリプトでは、日本語を扱うので、最初の一行目を以下の通り追加します。
# -*- coding: utf-8 -*-
from __future__ import print_function
import httplib2
import os
“main”部分を、以下の通り書き換えて下さい。
def main():
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
service = discovery.build('calendar', 'v3', http=http)
now = datetime.datetime.now()
today_start = str(now.year) + '-' + str(now.month).zfill(2) + '-' + str(now.day).zfill(2) + 'T00:00:00+09:00'
today_end = str(now.year) + '-' + str(now.month).zfill(2) + '-' + str(now.day).zfill(2) + 'T23:59:59+09:00'
eventsResult = service.events().list(
calendarId='primary', timeMin=today_start, timeMax=today_end, singleEvents=True,
orderBy='startTime').execute()
events = eventsResult.get('items', [])
event_text = ''
if not events:
event_text = '今日の予定はありません'
file = open('/home/pi/event_google_home_notifier.txt', 'w')
file.writelines(event_text)
file.close()
return event_text
else:
for event in events:
start = event['start'].get('dateTime', event['start'].get('date'))
event_text += str(start[11:13])+'時'+str(start[14:16])+'分に'
event_text += event['summary'].encode('utf_8')
file = open('/home/pi/event_google_home_notifier.txt', 'w')
file.writelines(event_text)
file.close()
return event_text
(6) google-home-notifierをインストールしましょう
“Google Home”に喋ってもらうためには、”google-home-notifier“をインストールする必要があります。
詳しい内容は、以前のTALK “Raspberry Piを使ってGoogle Homeに時報サービスをしてもらいましょう”を参考して下さい。
(7) Google Homeにテキストファイルの内容を読んでもらいましょう
前回のTALK “Raspberry Piを使ってGoogle Homeに1時間後に雨が降る可能性を予測してもらいましょう“と同様、テキストファイルに書き出した文書を”Google Home”で読んでもらうためのスクリプトを用意します。
nano googlehome-event_report.js
var googlehome = require('google-home-notifier');
var language = 'ja'; // if not set 'us' language will be used
googlehome.device('書斎', 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/event_google_home_notifier.txt", 'utf8', function (err, data) {
if (err) {
throw err;
}
googlehome.notify(data, function(res) {
console.log(res);
});
});
それでは、スクリプトを実行しましょう。
node googlehome-event_report.js
(8) 書いたスクリプトを定期的に実行するクーロンを設定しましょう
cronを使って、上記で用意したスクリプト 2本を定期的に実行するようにしておきましょう。なお、一日中、喋られても何なので、POOHの場合は、午前7時から8時までの間、毎時1回、喋ってくれるようにしました。
crontab -e
03 7-8 * * * python /home/pi/quickstart.py
04 7-8 * * * node googlehome-event_report.js
sudo /etc/init.d/cron start
|
|
|
ホームページ “THE POOH FILES”にも是非お立ち寄り下さい。
“Adobe Stock“でベストショットな写真素材を販売中です。是非ご覧下さい。