目的
これまで子供を学童に入れていましたが、段階的に鍵っ子にします。
一人っ子で家に誰もいないので、IoTでリモート見守りします。
要件
①家にいる様子を見る。
②家の電話に出るように呼びかける(親からの電話以外は取らせない)。
※子供はスマホなどは持っていません。
③ITに詳しくない妻でも①②ができるようにする。
構成
自宅に置いたRaspberry PI(3B)にカメラとスピーカーを接続し、
スマートフォンのSlackアプリからコマンドを送信して操作します。
Webカメラは通常のUSBカメラ、スピーカーはダイソーの300円のスピーカーを使用しました。
実装
/hubot/pibot/scriptsに以下を配置します。
hubotのスクリプト(①カメラ撮影してSlackにアップロード)
コマンド「cam」をpibotへのDMに書き込むと、
Webカメラで撮影した画像をSlackにアップロードします。
callraspi.coffee
module.exports = (robot) ->
robot.respond /cam/, (msg) ->
@exec = require('child_process').exec
command = "fswebcam -D 3 -S 20 -v -r 1280x720 /home/pi/hubot/pibot/scripts/sample.jpg;
curl -F file=@/home/pi/hubot/pibot/scripts/sample.jpg -F channels=【チャンネル】 -F token=【トークン】 https://slack.com/api/files.upload"
msg.send "take a picture"
@exec command, (error, stdout, stderr) ->
@msg.send error if error?
hubotのスクリプト(②電話に出るように呼ぶ)
コマンド「momo」をpibotへのDMに書き込むと、スピーカーから子供に呼びかける音声が流れます。
音声は、あらかじめJtalk作っておいた音声ファイルを再生するだけにしました。
call_momo.coffee
module.exports = (robot) ->
robot.respond /momo/, (msg) ->
@exec = require('child_process').exec
command = "aplay /home/pi/call_tomo.wav"
msg.send "ももくんを呼びました。"
@exec command, (error, stdout, stderr) ->
@msg.send error if error?
運用状況
意外と安定して使えます。3ヶ月ほど使用していますが、不具合はありませんでした。
Webカメラは、通常のカメラは焦点距離が近いので、遠めに調整する必要があります。