孤独をこじらせてしまい、ついに現実逃避を始めてしまう私です。
要件定義
家に帰ったときに「おかえり」と言ってもらう。
ハードウェア構成
- Raspberry Pi 2 Model B
- BT4.0対応USBドングル(LBT-UAN04C2BK)
- BLEデバイス(Fitbit Charge HR)
ソフトウェア構成
- シェルスクリプト
- hcitool
- sudo apt-get install bluetooth bluez blueman
- Open JTalk - HMM-based Text-to-Speech System
- sudo apt-get install open-jtalk
要求分析と仕様化
- 出かけてから帰ったときに、「おかえり」と音声を流す
- 家に帰って1分以内に「おかえり」と言う
- 家を出て15分以上経過した場合は出かけたと判断する
- 「いってらっしゃい」は言わない
- 家にいる間は「おかえり」と言わない
実現方式
cron の設定とスクリプト
cron 設定
* * * * * sh /home/pi/welcome_back.sh
検出用スクリプト
#!/bin/sh DEVICE_MACADDR="XX:XX:XX:XX:XX:XX" WELCOME_BACK="おかえり" WAIT_TIME=10 DETECT_THRESH=5 NO_HOME_THRESH=15 JTALK_SCRIPT=/home/hoge/jtalk.sh DETECT_COUNT=\ `sudo timeout --signal=SIGINT ${WAIT_TIME} \ hcitool lescan | grep -c ${DEVICE_MACADDR}` if [ $? -ne 0 ]; then echo "reset bluetooth : " >> error_date.log date >> error_date.log sudo hciconfig hci0 down && sudo hciconfig hci0 up fi if [ ${DETECT_COUNT} -ge ${DETECT_THRESH} ]; then if [ `cat not_detect` -ge ${NO_HOME_THRESH} ]; then echo ${WELCOME_BACK} | sh ${JTALK_SCRIPT} fi echo "0" > not_detect else expr `cat not_detect` + 1 > not_detect fi
音声再生用スクリプト
#!/bin/bash HV=/usr/share/hts-voice/mei/mei_happy.htsvoice tempfile=`tempfile` option="-m $HV \ -s 19200 \ -p 100 \ -a 0.03 \ -b 0.5 \ -fm 0.6 \ -r 0.8 \ -u 0.0 \ -jm 1.0 \ -jf 1.0 \ -x /var/lib/mecab/dic/open-jtalk/naist-jdic \ -ow $tempfile" if [ -z "$1" ] ; then open_jtalk $option else if [ -f "$1" ] ; then open_jtalk $option $1 else echo "$1" | open_jtalk $option fi fi aplay -q $tempfile rm $tempfile
※ mei_happy.htsvoice はこちらのものを利用させていただいています。
おわりに
色々と試してみたので、勉強にはなったのではないだろうか。
しかし、何か大切なものを失った気がする。