登下校中の子どもの身を守るため、すぐに「しらせる」仕組みを考えてみた

はじめに
---
子どもがどこかで事件に巻き込まれたらどうしよう、そう心配しているお父さん、お母さんのために何かできることがないか、ちょっと考えてみました。

いかのおすし
---
「いかのおすし」とは「いかない、のらない、おおきなこえをだす、すぐにげる、しらせる」のかしら文字をとった防犯標語だそうです。
その中で**しらせる**に焦点を当ててみたいと思います。


|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/e359d548-6c8f-9bf2-d745-c0d2e4b9ce54.png" width="200">|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/ed17ced9-d05b-de7b-6fef-3d3433c0f13e.png" width="200">||
|:-:|:-:|:-:|
|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/aeb9c1e7-5850-0aaa-2f69-95c1dafef3ba.png" width="200">|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/0f8f0a43-39cd-60d5-452c-1267ccb6e6c3.png" width="200">|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/c18aaf90-c707-0b4f-cfe7-101b4162ae68.png" width="200">|

利用シーン
---
(1). 知らない人に声をかけられたら、**すぐにリモコンのボタンを押して**、その時間や現在位置をLINEで通知する。
(2). **車**に乗せられたら、**自動**でその時間や現在位置をLINEで通知する。

システム構成
---

参考：[@vimyum - わずか300円でIoTボタンを作る方法](https://qiita.com/vimyum/items/8b7548ca8cf45383c5b0)
参考：[engadget日本版 - ダイソーでスマホ用Bluetoothリモートシャッターを発見→分解→ちょい改造：ウェブ情報実験室](https://japanese.engadget.com/2017/10/26/bluetooth/)
参考：[@-あっとはっく - Androidの物理ボタンやセンサー機能を有効活用する豆知識まとめ! タッチパネル不要で操作できる](https://sp7pc.com/google/android/android-howto/23349)

(1). ハードウェア

- ダイソー リモートシャッター (AB Shutter 3) ... 緊急通知用ボタンとして使います。
- スマホ　... GPS端末のように使います。常に画面ロックし、音もでないようにします。画面ロック解除は親だけができるようにします。無駄にゲームやSNSで時間を費やすこともなく、データ通信量もほんの僅かで済みます。スマホはバッテリ食いなので、できるだけ最初から無駄なアプリがインストールされていない方が良いです。おすすめは**root化＋カスタムROM+格安SIM低速モード+モバイルバッテリ**です。

今回の動作環境は下記です。

**ASUS Zenfone2(Z00A)
LineageOS 14.1(Android 7.1.2), GApps 7.1, Magisk v16.3
IIJmio SIM**

(2). スマホのアプリ

- [MacroDroid - デバイス自動化](https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid&hl=ja) ... Androidのタスク自動化ができます。使い方はIFTTTに似ています。
- [Power Button to Volume Button](https://play.google.com/store/apps/details?id=com.teliapp.powervolume&hl=jp) ... 音量ボタンで画面のスリープ状態を解除するために使います。

(3). Webサービス

- [IFTTT](https://ifttt.com/) ... Webサービスの連携をします。
- [LINE](https://line.me/ja/) ... お父さん、お母さんへの通知に利用します。今回はLINEを使いましたが、他のものでも構いません。IFTTTで対応しているものが良いと思います。

![child5.png](https://qiita-image-store.s3.amazonaws.com/0/63318/24ecf97f-4d5d-35e3-50f9-8692dd7b3f4d.png)

初期設定
---
(1). スマホで**ダイソー リモートシャッター (AB Shutter 3)**を登録する。

**設定→Bluetooth→ON**にします。
その後**AB Shutter 3本体**の**電源をON**にすると、デバイス名が表示されます。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/41258d9a-eab2-b232-1ef7-b8ea2474cc13.png" width="200">|
|:-:|

そのデバイス名をタッチするとペアリングが完了します。
これで**AB Shutter 3本体**の**iOSボタン**を押すと、**音量上ボタン**が押されます。
AB Shutter 3は一定時間接続がないとペアリングが切れます。使う時だけ電源をONにすれば、その都度自動でペアリングします。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/689ad1ff-94a6-0ed5-baac-c3e783eb96e4.png" width="200">|
|:-:|

(2). スマホで**Power Button to Volume Button**のインストールと設定をする。

[Power Button to Volume Button](https://play.google.com/store/apps/details?id=com.teliapp.powervolume&hl=jp)からアプリをインストールし、起動します。
**無効**設定になっているので、

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/d09b3e04-63c8-c17d-e14f-f06921a4a4e8.png" width="200">|
|:-:|

**有効**設定にします。
これで**音量ボタンで画面のスリープ状態を解除**できます。
つまり**AB Shutter 3**の**iOSボタン**を押すと、**音量上ボタン**が押され、**画面のスリープ状態を解除**できます。


|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/5dec3acd-1041-1e22-2d19-0f62f44cb29e.png" width="200">|
|:-:|

(3). スマホで**MacroDroid - デバイス自動化**のインストールをする。

[MacroDroid - デバイス自動化](https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid&hl=ja)からアプリをインストールします。
**トリガー**、**アクション**、**条件**を使ってマクロを作成します。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/3e943786-603e-2518-7db6-bf78b8983595.png" width="200">|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/c178c1f3-aa46-f066-3171-62167fca1e2b.png" width="200">|
|:-:|:-:|
|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/44d75a99-5d8e-e6af-37a6-fe0ddd995708.png" width="200">|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/b1a8b28a-9cb7-be00-a71a-3f63c15a5ae8.png" width="200">|

その後、ロック画面時に**通知**が表示されないよう、**設定→通知**から

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/1736be95-7431-26f9-b75c-1ddda7a70f56.png" width="200">|
|:-:|

**すべての通知内容を表示する**を

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/d25423a0-db73-06d9-62e1-37b0c3bcb69d.png" width="200">|
|:-:|

**通知をすべて表示しない**に変更します。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/8ab0aa9a-88f4-e0db-78aa-f45502f9a28e.png" width="200">|
|:-:|

(4). **IFTTTで Webhooks → LINEの設定**をします。特定のWebアドレスを叩くとLINEへ通知するための設定です。
あらかじめWebhooksとLINEのアクセス許可が済んでいるものとします。

[IFTTT - Webhooks](https://ifttt.com/maker_webhooks) にアクセスします。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/e2027347-4536-21d3-245d-cca8b3572f94.png" width="500">|
|:-:|

**Documentation**をクリックし、Webhookのアドレスを確認します。
(例) **https\://maker.ifttt.com/trigger/{event}/with/key/aaaaaaaaaaaaaaaaaaaaaa**

aaaaaaaaaaaaaaaaaaaaaa には正式なキーが入ります。
引数は value1, value2, value3 を指定できます。
{event}には、後で指定するイベント名が入ります。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/9991acbd-7fb2-a2b7-c877-5e4ce52486fe.png" width="500">|
|:-:|

**this**で

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/347a507a-f8df-d014-b87a-8f9ecf2a1aae.png" width="500">|
|:-:|

**Webhooks**を選択し

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/f9e56e3b-22fa-0d52-e09a-e0ed396aa0a3.png" width="500">|
|:-:|

**Receive a web request**を選択し

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/f11875ba-9e3a-6edc-8cc1-c5d65449b593.png" width="500">|
|:-:|

**Event Name** を指定します。ここでは**child_emergency**を入力します。
そうするとWebhookのアドレスは
**https\://maker.ifttt.com/trigger/child_emergency/with/key/aaaaaaaaaaaaaaaaaaaaaa**
となります。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/669bfc3c-a09c-65bd-aae7-848d27e978b8.png" width="500">|
|:-:|

**that**で

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/ebc75384-89d4-1f17-531b-2c3563794750.png" width="500">|
|:-:|

**LINE**を選択し

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/0fd926b1-979f-a6bb-a488-27f65ef033c0.png" width="500">|
|:-:|

**Send message**を選択し

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/400763bd-8a48-2281-4c78-0b6581458607.png" width="500">|
|:-:|

**Recipient**で通知先を指定し、**Message**には通知するメッセージを指定します。
**Message**は画像の通りに指定します。

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/58451fd1-3995-7dc5-fab8-234e51e370e4.png" width="500">|
|:-:|



利用シーン１
---
**知らない人に声をかけられたら、すぐにリモコンのボタンを押して、その時間や現在位置をLINEで通知する。**

(1). 処理の流れ

**AB Shutter 3**の**電源ボタン**を**OFFからONに**する。
↓
**AB Shutter 3**の**iOSボタン**を押す。
↓
**自動**でスマホの**音量上ボタンが押される**。
↓
**自動**で**画面のスリープ状態が解除される**。
↓
更に続けて**AB Shutter 3**の**iOSボタン**を押す。
↓
MacroDroidでマクロが実行される（名前: AB_shutter3を押した）

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/397651d8-b60b-0956-4c4a-e776588000f1.png" width="200">|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/ce4cc40e-3ec7-3396-1723-e2abc042b28e.png" width="200">|
|:-:|:-:|

|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/25c22aef-514c-61f3-c055-6eb072176275.png" width="200">|
|:-:|

|LINEへ通知されるメッセージ|
|:-:|
|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/93db0a34-c16c-eb6e-b8ba-25b3b8d30b8e.png" width="200">|


**トリガー**
　User Input
　　**音量ボタンを押下**　
　　　アクセシビリティサービスを使用
　　　音量を上げた時
　　　前の音量を保持
　　　　　　
**アクション**
　Device Actions
　　**バイブレーション**
　　　短い振動
　Volume
　　**音量を変更**
　　　アラーム
　　　　0%
　　　メディア/音楽
　　　　0%
　　　通知
　　　　0%
　　　着信音量
　　　　0%
　　　システムサウンド
　　　　50%
　　　通話音量
　　　　0%
　　　Bluetoothの音声
　　　　0%
　Location
　　**位置情報を強制的に更新**
　MacroDroid Specific
　　**次のアクションを実行する前に待機**
　　　待機時間
　　　　1秒
　Location
　　**位置情報を共有**
　　　変数
　　　　Googleマップのリンク
　　　　　gps
　MacroDroid Specific
　　**次のアクションを実行する前に待機**
　　　待機時間
　　　　10秒
　アプリケーション
　　**Webサイトを開く／HTTPを取得**
　　　https\://maker.ifttt.com/trigger/child_emergency/with/key/aaaaaaaaaaaaaaaaaaaaaa?value1=[year]/[month_digit]/[dayofmonth] [hour]:[minute]:[second]&value2=太郎：助けて&value3=[v=gps]
　　　URL encode parameters
　　　　チェック
　　　HTTP GET (Webブラウザ不使用)
　　　　チェック

**条件**
　（なし）


利用シーン２
---
*車*に乗せられたら、**自動**でその時間や現在位置をLINEで通知する。

MacroDroidでマクロが実行される（名前: 車に乗った）

<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/3f7a9619-67b7-d581-710f-e4ce74b5bc63.png" width="200">|<img src="https://qiita-image-store.s3.amazonaws.com/0/63318/f415fc8c-04a8-0843-0b1f-e19a76f5fcae.png" width="200">|
|:-:|:-:|

**トリガー**
　センサー
　　**行動認識**
　　　車中
　　　　50%
　　　　　　
**アクション**
　Location
　　**位置情報を強制的に更新**
　MacroDroid Specific
　　**次のアクションを実行する前に待機**
　　　待機時間
　　　　1秒
　Location
　　**位置情報を共有**
　　　変数
　　　　Googleマップのリンク
　　　　　gps
　MacroDroid Specific
　　**次のアクションを実行する前に待機**
　　　待機時間
　　　　10秒
　アプリケーション
　　**Webサイトを開く／HTTPを取得**
　　　https\://maker.ifttt.com/trigger/child_emergency/with/key/aaaaaaaaaaaaaaaaaaaaaa?value1=[year]/[month_digit]/[dayofmonth] [hour]:[minute]:[second]&value2=太郎：車に乗った&value3=[v=gps]
　　　URL encode parameters
　　　　チェック
　　　HTTP GET (Webブラウザ不使用)
　　　　チェック

**条件**
　（なし）


応用例
---

MacroDroidは機能豊富なので、組み合わせ次第でいろいろなことができます。

(1). リモコンのボタンを押すと、大きな音で「誰か助けて」と再生し、その時間や現在位置をLINEで通知した上で、GPS追跡アプリを起動する。（利用シーン１の応用例）
(2). スマホの画面ロック解除が失敗したら、フロントカメラとリアカメラで写真撮影し、それをメール送信する。
(3). スマホのバッテリが25%を切ったら、LINEで通知する。
(4). **車**に乗せられたら、その時間や現在位置をLINEで通知し、その後**徒歩**や**静止**に切り替わる度に、同様にLINEで通知する。スマホの画面ロックが解除されたら、それらすべてをリセットする。（利用シーン２の応用例）
(5). 電源ボタンを連続3回押したら、特定の人に電話する。(音声SIMを利用する場合)
(6). 他にもいろいろ。

おわりに
---
音声認識でいろいろできたら、もっと便利ですね。
「ねぇ◯◯、△△△△」とかで。

スペシャルサンクス
---
[いらすとや](https://www.irasutoya.com/)さん、いつも素敵な素材を使わせて頂きありがとうございます。