[Raspberry Pi] 特定の時刻にラズパイに喋らせてみる

# 目的
唐突ですが、僕はスイッチをオンにするとライトが点灯する電源タップを使っています。
僕の母親はどうもこの電源タップのライトの消費電力が気になるらしく、ライトを消すためにスイッチをオフにしてしまいます。
「消さないで!」とお願いしていても消されます。
デスクトップPCやラズパイの電源を落とされると困るのでどうしようかと考えた結果、

**常にラズパイに「電源タップのスイッチを消さないで!」と喋らせよう!**

となりました。その場で「電源タップのスイッチを消すな!」と言われて消す人はいないでしょう。
ラズパイを使ういい機会にもなるので、この方法で決まりです。

# 方法
## AquesTalk Piのダウンロード
ラズパイ上で音声合成といえば、「Open JTalk」や「AquesTalk Pi」があるそうです。
今回は、「AquesTalk Pi」を使うことにします。

まず、http://www.a-quest.com/products/aquestalkpi.html から「AquesTalk Pi」をダウンロードしましょう。

ダウンロードが終われば、ホームディレクトリに展開します。

##AquesTalk Piの使い方

ここからは、コマンドラインの作業になります。

まず、普通に喋らせたいときには、以下のようにします。

```
$ ~/aquestalkpi/./AquesTalkPi "電源タップのスイッチを消さないで!" | aplay
```

別にこのまま実行してもいいんですが、少し長いのでシェルスクリプトを書いてみます。
保存場所はaquestalkpiディレクトリ内です。

```:call_ban_off_power.sh
#!/bin/bash

echo "電源タップのスイッチを消さないで!" | ~/aquestalkpi/./AquesTalkPi -f -| aplay
```

権限を変更します。

```
$ chmod 755 ~/aquestalkpi/call_ban_off_power.sh
```
実行する

```
$ ~/aquestalkpi/./call_ban_off_power.sh
```

このままでは自分でコマンドを打たないといけません。
そこで自動で処理を行うために、cronを使います。

## cron
参考サイト: [Make. 何か作りたいモノづくりサイト-決まった時間に処理する](http://make.bcde.jp/raspberry-pi/%E6%B1%BA%E3%81%BE%E3%81%A3%E3%81%9F%E6%99%82%E9%96%93%E3%81%AB%E5%87%A6%E7%90%86%E3%81%99%E3%82%8B/)

上記の参考サイトを見ればある程度わかると思います。

まず、以下のコマンドでcronの設定を編集します。

```
$ crontab -e
```

このとき、僕はデフォルトでnanoが起動しました。
vimに変更したかったので一旦終了し、以下のコマンドを入力。

```
$ select-editor
```
vimを使いたいので3を入力しました。

```
Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 3
```

そして、再度cronの設定を編集します。

```
$ crontab -e
```
```:cron
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
```

cronは標準では分刻みの設定しかできません。
秒刻みの処理を行いときは時間は指定せず、コマンドを指定する場所でsleepを使い処理を書きます。

末尾に以下を追記します。

```
* * * * * for i in `seq 0 10 59`;do (sleep ${i}; ~/aquestalkpi/./call_ban_off_power) & done;
```

編集を終了し、1分ほど待つと、「電源タップのスイッチを消さないで!」と10秒間隔でラズパイが喋り出し始めるはずです!

# ラズパイ時報
「電源タップのスイッチを消さないで!」と言わなければいけない状況はレアケースだと思うので、もっと役に立ちそうなものをラズパイに言わせたい。
例えば、現在の時刻を言わせたいときは、以下のコマンドを入力。

```
$ echo "`date +%k`時`date +%-M`分になりました。" | ~/aquestalkpi/./AquesTalkPi -f -| aplay
```

先ほどと同様シェルスクリプトにしてしまいましょう。
権限の変更を忘れないように。

```:call_now_time.sh
#!/bin/bash

echo "`date +%k`時`date +%-M`分になりました。" | ~/aquestalkpi/./AquesTalkPi -f -| aplay
```

cronの設定にも以下を追記します

```
*/30 * * * * ~/aquestalkpi/./call_now_time.sh
```