ラズパイとGoogle Homeを使って30分に一回、時報をGoogle Homeで喋らせるようにしてみました。Macだとこういう機能がありますが、Macなしでできると便利かなと思ってやってみました。寝ているときに鳴ると困るので、照度センサーを使って明るいときだけ発動するようにしました。
使用機材
- 照度センサー: BH1750 (I2Cインターフェース)
- Raspberry PI
- Google Home Mini
照度センサーの使用方法はRaspberry Pi3で照射量を取得する(BH1750FVI)を参考にさせていただきました。
配線図
ADDRをGNDに落とすと、I2Cのアドレスは0x23になります。
現在時刻の取得
現在時刻はシェルコマンドで取得して、Pythonスクリプト経由でGoogle Homeへ投げます。
/home/pi/programs/now.sh
hh=$(date "+%k")
mm=$(date "+%-M")
if [ ${mm} = "0" ]; then
text=${hh}時です。
else
text=${hh}時${mm}分です。
fi
python3 /home/pi/programs/say.py ${text}
明るいときだけGoogle Homeを喋らせる
照度センサーから明るさ(ルクス)を元に、明るいときだけGoogle Homeを喋らせるます。あらかじめgoogle-home-notifierをセットアップしておきます。セットアップ方法はこちらを参考にしてください。
/home/pi/programs/say.py
import smbus
import sys
import os
def say(text):
# 明るさが30ルクス以上の場合に発話する
if lux() > 30:
os.system('curl -X POST -d "text=' + text + '" http://pi@raspberrypi0.local:8091/google-home-notifier')
def lux():
bus = smbus.SMBus(1)
addr = 0x23
data = bus.read_i2c_block_data(addr, 0x11)
lux = data[1] * 10
return lux
if __name__ == '__main__':
args = sys.argv
text = args[1]
say(text)
cronに設定する
毎時0分と、30分にシェルスクリプトを起動します。明るいときだけと言っても、深夜に鳴るとさすがにウザいので、7時〜24時の間だけ動作するようにcronを設定します。
$ crontab -l
0,30 0,7-23 * * * /home/pi/programs/now.sh
これで完成です。