自動化厨のプログラミングメモブログ │ CODE:LIFE

Python/ExcelVBA/JavaScript/Raspberry Piなどで色んなことを自動化

Rakuten miniとMacroDroidを使って登下校時の通知システムを0円で作る

f:id:maru0014:20210519230606p:plain 誤家庭の子育てITネタです。

メール通知だけの簡単バージョンとAlexaに喋らせる誤家庭バージョンの作り方を書いてみました。

背景

4月から娘が小学校に行き始めました。最初は保護者が一緒に登校して、帰りは先生方が付いて下校するのですが今月からは子供だけで下校することに。

学校までは遠くもないですが、やはり心配ということで登下校時の通知システムを構築しました。

自分で作るのが面倒ならこれが良さそうだけど、やっぱり無料が好きなもんで...

最初に検討したのは小型のGPS端末とLTE回線を使うみまもりサービス。

ソフトバンクのどこかなGPSは端末料金が11,576円、2年間通信料無料です。

ぶっちゃけこれでも良かったかもしれませんが、有事の際に通話もできないし3年目からは通信費も発生するしということでスマホを活用することにしました。

Rakuten Mobileが最適

f:id:maru0014:20210519223855p:plain

  • 1GBまで0円なのでLTE回線で動画でも見ない限りは0円で使い続けられる
  • Rakuten miniならめっちゃ小さくて軽い(高さ106.2mm×幅53.4mm、重量79g)のでランドセルに入れておいても邪魔にならない
  • ポイントバックキャンペーンを活用すれば実質0円で端末が手に入る
  • (我が家は楽天エコシステムにどっぷり浸かってる)

ということで0円のRakuten miniを持たせています。 そして通知システムにはMacroDroidというアプリを使えば完全に0円で構築できる...!!

MacroDroidとは

Androidデバイスの自動化アプリ。Taskerなどが有名ですが、MacroDroidはトリガーとアクションを設定するわかりやすいUIなのでこういった自動化アプリを触ったことがない人でも使いやすいアプリです。

play.google.com

基本説明は以下参照ください。

sp7pc.com

メール通知マクロを設定

我が家ではNode-REDというフロープログラミングシステムを使ってAlexaを喋らせることで通知していますが、メールでの通知であればMacroDroidの設定のみで実現できます。

登校メール

予め設定しておいた学校のGPS範囲に入った場合にメールを送信する。

トリガー

  • ジオフェンス内に入る

アクション

  • サイレント(バイブOFF)
  • メールを送る

条件

  • 時刻 07:00-13:00

条件は登下校時刻外に通りかかっただけで実行されないように設定します。

月~金曜日 という条件を足しても良いかも。

f:id:maru0014:20210519224019p:plain

下校メール

予め設定しておいた学校のGPS範囲から出た場合にメールを送信する。

トリガー

  • ジオフェンスから出る

アクション

  • バイブ(振動)のON/OFF
  • メールを送る

条件

  • 時刻 13:00-17:00

f:id:maru0014:20210519224039p:plain

聞かれそうな質問に予め答えておきます

Q. スマホを学校に持っていってもいいの?

  1. 校則によるので学校へ問い合わせましょう。 うちの学校は原則禁止で別途申請書の提出が必要でしたが、必要な理由(我が家は玄関の鍵がアプリで解錠するタイプなので必要)を記載して申請しました。

Q. うっかり鳴っちゃったらどうするの?

  1. サイレントモードの設定し忘れを防ぐためにMacroDroidのアクションで設定しています。 Androidのバージョンによってはサイレントモードにする時間帯を設定画面から選択できる場合もあります。

Q. 子供が学校でスマホ使っちゃわない?

  1. ファミリーリンクで利用可能時間を設定しましょう。学校に居る時間帯はロックされてアクセスコードを入力しないと使えないようにできます。

誤家庭向けのAlexa通知システム

さて、ここからはメールでの通知じゃ気づかねえよという人向けの家庭内アナウンスシステム(Alexaバージョン)での通知方法。

Node-REDの環境構築からアナウンスシステム構築までは過去記事を参照ください。

codelife.cafe

現在の我が家のNode-REDはこんなかんじ。各種ごはんの時間の通知などもここで行っています。

実際にMacroDroidから通知を受け取っているのは左上のMySmartHome/notifierノード。

これはMQTTブローカーBeebotteのサブスクライバーです。

f:id:maru0014:20210519224156p:plain

Beebotte自体の使い方は以下が分かりやすいです。

beebotteの使い方メモ.md · GitHub

各ノードの設定

mqtt in

サーバには mqtt.beebotte.com、ポートには 8883 を設定

f:id:maru0014:20210519224249p:plain

セキュリティタブにトークンを設定。

ここで token:token_xxxxxxxxx のように入力する必要があるので注意。

f:id:maru0014:20210519224257p:plain

あとは以下の通りトピックを指定して出力をJSONオブジェクトにする。

f:id:maru0014:20210519224305p:plain

changeノード

msg.messageに格納されているので changeノードで [msg.payload.data](http://msg.payload.data) に変換して渡す

f:id:maru0014:20210519224313p:plain

MacroDroidの設定

以下のとおりPOSTリクエストをシェルスクリプトによって送信することでbeebotteにパブリッシュできます。するとNode-REDでサブスクライブしているのでパブリッシュを検知してAlexaが喋りだすという流れ。

登校通知

予め設定しておいた学校のGPS範囲に入った場合にBeebotteにMessageを送信する

トリガー

  • 指定エリアに入った時

アクション

  • url 変数を設定
    • beebotteのURLをtoken付きで設定
  • message 変数を設定
    • 送信する内容を設定
  • シェルスクリプト
    • curl [lv=url] -X POST -H "Content-Type: application/json" -d '{"data" : "[lv=message]"}'

条件

  • 時刻 07:00-13:00

f:id:maru0014:20210519224323p:plain

下校通知

予め設定しておいた学校のGPS範囲から出た場合にBeebotteにMessageを送信する

トリガー

  • 指定エリアから出た時

アクション

  • url 変数を設定
    • beebotteのURLをtoken付きで設定
  • message 変数を設定
    • 送信する内容を設定
  • シェルスクリプト
    • curl [lv=url] -X POST -H "Content-Type: application/json" -d '{"data" : "[lv=message]"}'

条件

  • 時刻 13:00-17:00

f:id:maru0014:20210519224330p:plain

数日動作させてみての感想

ちまちまジオフェンスの範囲を調整して半径100mで学校を囲んだ上で条件に時刻を指定しておけばなんとか誤検知は無くせそうです。

教室内で検知できるWi-FiのSSIDを条件にしても良いかなと思ったんですが電波が微妙なやつしか無くてちゃんと動作できるかあやしいのでジオフェンスをトリガーにしてます。

もうしばらく運用してみて修正あれば随時反映していきます。