研究室には喋れる Raspberry Pi がある。研究室の Raspberry Pi (1才2ヶ月)に愛着が湧いている - Qiita
院生室に移動してから maimai とはお別れしたので、初代ラズパイ (通称 maimai) に続き 2代目の neinei を作りました。
neinei の機能の1つにアラート機能があり、ゆっくりボイスで「お昼の時間ですよ」や「4限開始前です」など教えてくれます。
今回はそのアラートはスケジュールをスプレッドシートで管理出来るようにしたので、それについて話したいと思います。
管理方法
こんな感じで管理しています。
定期的なスケジュールの定義方法は cron の記法を使いました。
スプレッドシートをAPI化
Google App Script を使うことで Google Spread Sheet のデータにアクセスできるようになります。
動的に表示したいコンテンツをスプレッドシートで管理する楽なモデル - Qiita
Raspberry Pi から読む
# -*- coding: utf-8 -*-
import os
import subprocess
import datetime
import json
import requests
from say import say
home_path = os.environ['HOME']
base_path = os.path.dirname(os.path.abspath(__file__))
data_path = os.path.join(base_path, 'data.json')
data_url = "https://script.google.com/macros/s/***** - API の URL"
def main():
now = datetime.datetime.now()
check = {
'month': now.month,
'day': now.day,
'week': now.weekday() + 1,
'hour': now.hour,
'minute': now.minute,
}
# print(check)
r = requests.get(data_url)
data = r.json()
for schedule in data:
# month, day... それぞれの値についてチェック。空または現時刻と一致するか
if not all([len(schedule[k]) == 0 or v in schedule[k] for k, v in check.items()]):
continue
say(schedule['message'])
if __name__ == '__main__':
main()
力技ですがこれを cron で毎分呼び出してます。もっと長間隔で fetch してキャッシュデータを使うほうが理想です。
音声出力は aquestalkpi です。
スプレッドシートを使うと面白い点
メッセージテキストにスプレッドシートの演算が使えます。
例えば
日付の計算
特定の日まであと何日なのかをスプレッドシートの関数を使って計算し、毎日カウントダウンさせたりできます。