見出し画像

おばあちゃんダッシュボタン作ってみた

はじめに

いわゆるラズパイ工作です。今は亡きAmazon Dashボタンも使ってます。

あと、タイトルには「おばあちゃんダッシュボタン」と書いてますが、「おばあちゃんの元に両親がダッシュするボタン」の略です。
おばあちゃんはダッシュしません。

経緯


発端は2018年のGWくらいに実家に帰った時のことでした。
95歳を超えた祖母が、家の中で転びやすくなってしまい、自分で起き上がることもできないため、近くに誰もいない時に転んだら怖いという話をしていたので(両親は同居していますが、1階と2階の半二世帯住宅っぽい感じになっているので、何かあっても気付きにくい)、そういう時に両親を呼べる仕組みを考えました。

祖母に携帯電話は渡してあるのですが、家の中では持ち歩かないし祖母にとっては重い物なので、携帯よりも軽くて小さくて持ち運びがしやすいということで、Amazon Dashボタンを採用。
※当時いつぞやの忘年会の景品でもらったやつが手元にあり、いつか遊んでみたいと思っていた。

ちなみに介護用だと設置型のボタンは結構あるみたいですが、「あんなの転んで動けなくなった時に 押しに行けなくて意味がない」と祖母が言っていて、確かにその通りだなと。

おばあちゃんダッシュボタンの構築

<仕組み>
1. ラズパイで家庭内WiFiの通信を監視する
2. Amazon Dash ボタンを押す
3. Amazon Dash ボタンがWiFi経由でAmazonに接続しようとする
4. ラズパイがAmazon Dashボタンからの通信を検知して、メール送信プログラムを実行
5. メールが送信される

<用意したもの>
・Amazon Dash ボタン
・スマホ(AmazonアプリからAmazon Dashボタンの設定をするためだけに使用)
・ノートPC
・Raspberry Pi 3(電源ケーブルとセットのやつ)
・microSDカード(ラズパイ用)
・LANケーブル(ラズパイ用)

<構築手順>
1. ラズパイの準備
本来はキーボードとかモニターとか直接繋げてやるっぽいですが、うちにそんなものはないので、以下を参考にしてノートPCからssh接続して諸々設定。LANケーブルでネットワークに繋いでおく。
http://independence-sys.net/main/?p=975

2. Amazon Dashボタンの設定
ここから先は以下のサイトを参考にしています。
https://tomosoft.jp/design/?p=9562
 
まずはアプリのAmazon Dashボタンの設定メニューからWiFiに繋ぐ設定をします。
商品を選ぶところで画面を閉じて終了するのがポイント(商品を届かないようにするため)。
 
ちなみにAmazon Dashボタンはプライム会員じゃないと買えないみたいなのですが、使用するのは別にプライム会員じゃなくても大丈夫らしく、設定も特に問題なくできました。

3. Amazon Dash ボタンのMACアドレスを取得
参考サイト通りにやったら上3桁が表示されずMACアドレスを特定できなかったのですが、とりあえず次の手順に進み、プログラムを動かしてみたらMACアドレスがログに全部表示されたので、そこから拾ってきました。

4. メール送信プログラムを作成
参考にしたサイトがPythonを使っていたのでPythonで作成。Node.jsでも良さそう。
サンプルソースには以下の手を加えましたが、大体そのまま使用。
・送信元をgmailにしたら送信エラーになったのでちょっと修正
・宛先を複数にできるよう修正

5. 起動して動作確認
プログラムを起動した状態でAmazon Dash ボタンを押して、メールが届くことを確認。

6. メール送信プログラムの自動起動設定
メール送信プログラムをサービス登録して、ラズパイの電源を入れると自動起動するよう設定。

運用開始

2018年夏、お盆に実家に帰ったついでに設置して運用を開始しました。
Amazon Dash ボタンが祖母の握力で押せるかという懸念もあったのですが、こちらは特に問題はなさそうでした。

緊急事態じゃなくても呼び鈴的に使ってねーという話をしておいたのですが、たまに押されていることが確認できたので、結構便利に使われていたようです。

トラブル発生その1


2018年の年末頃から、メールが飛ばなくなったという連絡がありました。
実家に帰った際に確認してみたところ、どうやら検知はできているのにメールを飛ばすところでエラーになっている模様。

おかしいなーと思ってメール送信に使っているGmailのアカウントにログインしたら、送信ブロックの通知が来ていました。
Gmailの方でセキュリティ厳しくしたのか何なのか、メール送信しているプログラムが「安全性の低いアプリ」と見なされるようになったっぽい。

とりあえずセキュリティ設定の「安全性の低いアプリからのアカウントへのアクセスを許可する」を有効にしたところ解決しました。

ちなみにこの時はこれで解決したのですが、この後もちょいちょいGmailのセキュリティ設定が 「安全性の低いアプリからのアカウントへのアクセスを許可しない」になっていて、メールが飛ばなくなることがありました。
何かのきっかけで設定が変わってしまう模様。なぜだ…。

トラブル発生その2


2019年3月、Amazon Dash ボタンが販売停止になりました。
https://www.itmedia.co.jp/news/articles/1903/01/news108.html

そして2019年8月、Amazon Dash ボタンのサービスが終了しました。
https://www.itmedia.co.jp/news/articles/1908/02/news084.html

どうもその頃からメールが飛ばなくなっていたようです。
調査に乗り出したのが2020年7月、サービスが終了してから1年くらい経過していました。

で、色々調べたところ、サービス終了とともにAmazon Dash ボタンは文鎮化する仕組みになっていた模様。
(参考記事)https://zmzlz.blogspot.com/2020/01/amazon-dash.html

おばあちゃんダッシュボタンの仕組み上、ボタンが押されてWiFi経由で外に出ようとしたところをラズパイで検知してメールを送るだけなんで、サービス終了してもボタン自体はWiFi経由で通信しようとするだろうから使えるかなと思ってたんですが、どうもサービス終了後に1回でもボタンを押すとファームウェアが更新されて何もできなくなるらしい。
Amazon用意周到すぎる。

というわけでAmazon Dash ボタンは使えなくなりましたが、仕組み的にはラズパイが何らかのボタンが押されたことを検知できさえすればいいので、安いBluetoothボタンを買ってきて、それをAmazon Dashボタンの代わりに使うことにしました。

おばあちゃんダッシュボタン(改)の構築

<前準備>
以前はラズパイを有線LANで繋いで両親の茶の間(2階)に置いてたのですが、ボタンとラズパイ間の通信方法がBluetoothになるに当たって、ラズパイ本体を祖母の部屋(1階)に置く必要があり、有線接続できなくなるので、ラズパイにWiFiの設定をしました。
※前にもチャレンジしてうまくできてなかったんですが、今回やったら特に問題なく成功。

この辺を参考に設定。
https://dev.classmethod.jp/articles/raspberrypi-remote-connect/

<構築手順>
ちょうどBluetoothボタンを使ってラズパイで遊んでる記事があったので、これを参考にしてBluetooth対応に改修。
https://jellyware.jp/kurage/raspi/daiso_btshutter.html

1. Bluetoothボタンをペアリング
上で紹介したページを参考に、Bluetoothボタンをペアリングします。

2. プログラムの修正
ボタン押下を検知するところだけ上記ページを参考にして、他は今まで使っていたメール送信ロジックを流用。
※ボタン2つありますが、どっちを押してもメール送信するようにしました。
 
ついでにメールを飛ばしたことが分かるように、送信後に音が出るようにもしました。
mp3ファイルを用意して「mpg321」というコマンドを使用(上のページでも紹介されてます)。
http://portaltan.hatenablog.com/entry/2017/03/15/123956
※ちなみにこれラズパイにイヤホンジャックスピーカーをつけてないと音が鳴らない上に、祖母は耳が遠くて絶対に聞こえないと思われるので、あんまり意味はないです。

<動作確認>
・ボタンを押してメールが飛びつつ音声が鳴ることを確認
・別の部屋から押しても反応することを確認
・Bluetoothボタンの電源を入れ直しても反応することを確認
・ラズパイ再起動後も特に特別な操作なしで反応することを確認

画像1

再運用開始


2020年11月、コロナに気を付けつつ実家に設置に行きました。
最初なぜかボタンを押しても全然反応しなくて困りましたが、電池を交換したら問題なく動いて一安心。
あと、なぜか父親にメールが飛ばない問題がありましたが、単に父親のdアカウントがロックされてメール受信できなくなってただけでした。
※docomoのページにログインする時にパスワード3回間違えて、ロックされたまま1年くらい放置してたらしい。気付け。

一応祖母の行動範囲(トイレとか脱衣所とか隣の部屋とか)から一通りボタンを押して確認してみましたが、特に問題なく反応。
意外とBluetoothって壁とかドアとかあっても大丈夫な模様です(まあ実際そういうものなのですが、結構疑っていた)。

その後今日にいたるまで、たまにメールが送られてきてるので、ちゃんと使えているみたいです。
あとは本当に緊急事態がないことを祈るばかり。

おばあちゃんダッシュボタン(改)の改良

2022年現在、「トラブル発生その1」で紹介した、Gmailが勝手にセキュリティ強化してメール飛ばなくなる現象が多発したので、めんどくさくなってLINE通知に切り替えることにしました。

ソースコードの中でメール送信していた部分を削除して、LINE Notify(https://notify-bot.line.me/ja/)のマイページから家族のグループLINE宛のトークンを発行し、APIをcurlコマンドで実行してメッセージを送信する方式に移行。
具体的には以下の行を追加。

import os    

cmd = 'curl -X POST -H "Authorization: Bearer <トークン>" -F "message=<メッセージ>" https://notify-api.line.me/api/notify'
os.system(cmd);

正直こっちの方が書く行も少ないし、専用のGoogleアカウントを作ったりする手続きもなくて楽でした。今となってはメールより気付いてもらいやすいし。
最初からLINEにすれば良かった…。

再々運用開始

というわけで、LINE通知方式にして再々運用を開始しました。
まだ何もないので押されてませんが、テストした限りでは問題なさそうでした。またしばらく様子を見たいと思います。

おわりに


数年がかりで色々ありましたが、外部サービスを利用してるといろんなものに振り回されることを実感しました。
というかAmazon Dash ボタンの寿命短すぎない…?あと文鎮化まではしなくて良かったんじゃない…?
事前に手を打っておけば文鎮化されずに済んだようなのですが、気付いた時には時すでに遅しでした…。

ラズパイでまた何か工作したいなーと思いつつ、強い動機がないと重い腰が上がらず…。
また何かやったらどこかで公開したいと思います。