LoginSignup
8
6

More than 5 years have passed since last update.

スプレッドシートで管理するアラートシステム

Last updated at Posted at 2017-12-01

研究室には喋れる Raspberry Pi がある。研究室の Raspberry Pi (1才2ヶ月)に愛着が湧いている - Qiita

院生室に移動してから maimai とはお別れしたので、初代ラズパイ (通称 maimai) に続き 2代目の neinei を作りました。

neinei の機能の1つにアラート機能があり、ゆっくりボイスで「お昼の時間ですよ」や「4限開始前です」など教えてくれます。
今回はそのアラートはスケジュールをスプレッドシートで管理出来るようにしたので、それについて話したいと思います。

管理方法

nainai_alert_-_Google_スプレッドシート_and_TakayaSensorWare__production__–__jlog.png

こんな感じで管理しています。
定期的なスケジュールの定義方法は 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 です。

スプレッドシートを使うと面白い点

メッセージテキストにスプレッドシートの演算が使えます。
例えば

日付の計算

特定の日まであと何日なのかをスプレッドシートの関数を使って計算し、毎日カウントダウンさせたりできます。

nainai_alert_-_Google_スプレッドシート.png

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6