なんで作ったの?+なにをするもの?
2019年の8月に、こんな感じのお出かけボードを作って玄関の壁に設置した。外出時に自分のブロックを右側の決まった位置に移す。帰ってきたら左側に戻す。もともとの制作理由は、最後にうちに帰ってきた人が、自分が最後なのかどうかを知るため。(最後の人がカギをかけるルールになっています)当時、Google Homeに何かをしゃべらせるためのネタを探していて、このボードを使ってみなの外出、在宅状況に合わせてGoogle Homeにアナウンスをさせるようにした。
全員外出時:「戸締り確認お願いします」
全員帰宅:「みんなうちにいます。玄関のカギをかけてください」
と言ってくれるようにした。
また、一人一人に対しては、「いってらっしゃい」、「おかえりなさい」とも言ってくれる。ブロックの裏には磁石があり、ボード裏のhall effect sensorでブロックの有り無し(外出側)を検出している。
これはこれで便利なのだが、次のステップのために、sqlデータベースを使う練習材料としてversion 2を作ることにした。外出帰宅の情報(タイムスタンプ)をデータベースに抜き差し(INSERT, SELECT)できるようにする。記録だけでは面白くないので、帰宅時に外出時間(duration)をGoogle Homeが言ってくれるようにした。これで、
「買い物行く。30分でもどる」
という約束が実現するのかどうかを、データをもって検証することができるのである。帰宅時に、
「パパおかえりなさい。パパさんの外出時間は、57分22秒でした」
などと言ってくれるので、「30分でもどる」は、いい加減であったことがわかるのである。
どういう仕組み?
もともとあったversion 1の仕組みに、オレンジ色の枠で囲まれた部分を追加してversion 2とした。
ブロックの位置に変更があるたびに、ボード上の状態が二つのRaspberry piに送出される(json data)。ひとつはNode-RED上のflowが受け取り、状態データに応じてメッセージを構築してGoogle Home miniに送信する。
例:「パパ、ママ、いってらっしゃい」(複数人分同時に変更するとそれにあわせた文を作るようにしてある)
Version 2で追加された経路では、flaskがjson dataを受け取ったあと、3つの情報、(誰が、外出・帰宅、timestamp)をdatabaseに書き込む。また、帰宅情報を受けた場合には、直近の外出timestampをdatabaseから取り出して外出していた時間を計算し、
「○○さんの外出時間は○○時間○○分○○秒です」
というメッセージ文に数字を埋め込んでNode-REDに送出する。Node-REDは受けた文章をGoogle Home miniに送信する。
使っている技(わざ)
興味のある方は、ここに出てくる文や単語をGoogle検索してさらに調べてみてください。
- Feather ESP32でwifi通信
- flaskでシンプルweb server
- Node-RED google home cast
- pythonからmysqlを操作する
使ってみて
毎日何時ごろ家を出て、何時ごろ帰宅するのかはすぐに答えられますが、何時間外にいるのか、と言われると自覚がない。ちょっとした買い物でどのぐらい時間を使っているのか、ごみを捨てに行くのにどのぐらいかかっているのか。そのあたりの普段意識しない時間感覚を軽い感じで与えてくれるところが気に入っています。
このあとの予定
さて、これはこれで小さく便利なのですが、家族からは、
「出かけるときに持ち物確認してくれるようにしてほしい」
「帰ってきたらすぐにやることを言ってくれるようにしてほしい」
などの要望があがっている。
それはいいねえ!
と思うのですが、それにはあなたがた、の、その「持ち物」とか「やること」とかを、しかも毎日変更がいるような情報を、どこかから入力できるような仕組みを作り、保存し、とりだせるようにしなければならない。ってことなのよ。
面白そうですね。
データベースとの連携もごくごく初歩ではありますができるようになりましたし、今後の課題にいれることにします。