きゃらりこ日誌

Raspberry Piで時報音を鳴らすためのシェルスクリプト

Raspberry Piで時報を鳴動させるためのシェルスクリプトを作ってみました。
最初は、誰かが作ったスクリプトをコピペするつもりだったのですが、三点時報(予報音3回+正報音の「ポッ、ポッ、ポッ、ポ〜ン」形式)や独自メロディに対応したものがなかったので作ってみました。
bashはほとんど使ったことがない上に、やっつけ仕事なので、ご容赦ください。

timesignal.sh

#!/bin/bash


# 第一引数(mp3ファイル名)が存在するか?
if [ -n "$1" ]
then
music=$1
else
music="/home/hoge/デフォルトの時報音.mp3"
fi

# 第二引数(再生オフセット)が存在するか?
if [ -n "$2" ]
then
offset=$2
else
offset=0
fi

# 動作開始時刻の1分後の時間(鳴動時刻)を取得して、UnixTimeに変換(秒は00秒に)
target_s=`date -d '+1 min' '+%Y-%m-%d %H:%M:00'`
target=`date +%s --date "${target_s}"`
target=`expr $target - $offset`
# 鳴動開始が遅れた場合、1秒遅れまでは許容
delay=`expr $target + 1`

while :
do
# 現在の時間をUnixTimeで取得
now=`date +%s`
if [ ${now} -lt ${target} ]
then
# まだ時間前
sleep 1
else
# 時間ちょうどor超過
if [ ${now} -le ${delay} ]
then
# 遅れなしor許容範囲内ならチャイムを鳴らす
mpg123 -g 100 -q ${music}
fi
break
fi
done


使い方はスクリプトを読めば解ると思いますが、軽く説明しておきます。
時報を鳴らしたい時刻の1分前に、このスクリプトをcronで起動してください。
00秒になったら時報音が鳴動します。
正報音の前に、予報音・独自メロディがある場合・は再生オフセットで何秒前から再生を開始するかを指定してください。
言うまでもありませんが精度はCPU負荷・NTP・内蔵時計・cronの仕様等に依存するので、再生オフセットを極端に長くしすぎない方がいいと思います。
なおRaspberry Piで試してみましたが、遅延はほとんど気にならず、実用上問題ありませんでした。
また時報音源の再生にmpg123を使っているので、事前にmpg123を入れておく必要があります。

シェルスクリプトの第一引数はmp3ファイルの場所、第二引数は再生オフセット(何秒前から再生を開始するか)を指定してください。
第一引数・第二引数が指定されなかった場合、スクリプト中で指定されたデフォルトの音声が鳴り、00秒になると鳴動開始します。
第二引数が指定されなかった場合、00秒になると鳴動を開始します。

【例】
毎日13:00に時報を鳴動させる場合、cronを以下のように設定。
(1分前の12:59にtimesignal.shを起動し、三点時報timesignal3.mp3(予報音3秒、正報音2秒)を3秒前(12:59:57)から鳴動)

59 12 * * * timesignal.sh /home/hoge/timesignal3.mp3 3


※追記
上記の例で使った三点時報のmp3ファイルが欲しい方は、お手元にダウンロードしてお使いください。他の用途で使用してもかまいませんが、販売・再配布は禁止です。