スイッチサイエンスの入江田です。郵便受けに至急の届け物があって数日後に発見したりする問題を解決すべく、郵便受けに投函されたらスマホに通知する仕組みが欲しくなり作ってみました。
ほしいもの
- 郵便受けに投函物があることを家族のスマホに一斉通知したい
- 家族のだれかが取り出したりすることで空になったことも検知したい
- 既設の郵便受けにポン付けできる形
- 電池駆動で別途電源の確保が不要とする
- 電池の交換時期も通知可能にする
コンセプト
古き良きフラッグ付き郵便受け。フラッグが寝かしておくと、投函するとフラッグが立つ仕掛け。(例外として送りたい郵便物があることを配達員に伝達するために使うという地域もある)
上記の郵便受けをもとに以下の様な構造を考えてみました。
フラップが倒れたら投函物ありで、投函物を回収したらフラップをたてておくという運用です。
できたもの
ソースコード: https://github.com/SWITCHSCIENCE/IoT-Mailbox
- Gateway/: RaspberryPi用のシリアルー>HomeKitゲートウェイサーバー(Go言語製)
- Receiver/: LoRa受信&シリアル出力ファームウェア(Arduino製)
- isp4520c-gw-r1/: 受信ボード用ブートローダービルドスクリプト
- Transmitter/: スイッチ操作でブート&LoRa送信ファームウェア(Arduino製)
- customboard/: 送信ボード用ブートローダービルドスクリプト
送信機
- 押しボタン
- ISP4520(LoRa,BLE内蔵マイコンモジュール)
- 電池(単4電池2本)<電池ボックスの商品ページ:単四電池2本 リード線付き電池ボックス>
基板について
これは内製の試作基板ですが、
ISP4520に直列電池2本を直結して、JTAG/SWDとUART(TX/RX)が引き出してあるだけです。(アンテナは内蔵アンテナに直結)
ファームウェア挙動
- ボタン押したらシステムブート(GPIO割り込みウェイクアップ)
- LoRaシングルチャネル送信セットアップ
- デバイスID読み出し
- バッテリー電圧計測
- LoRaキャリアセンス
- LoRaパケット送信
- LoRa送信完了後システムシャットダウン
備考:
- ARIB STD-T108準拠するためブートローダーには遅延が設けてあります
- シャットダウン時はLoRaモデムのSleepを行うことで待機電力を小さくしています
- 現状単4電池2本で3〜4ヶ月駆動くらいと見込んでいます
外観
自宅の郵便受けは縦型なのでそれに合う形状として以下の様に作りました。
スイッチがONになる状態。
中身
段ボールをカッティング
ストローと竹ヒゴで稼働部分を構成、各種パーツはホットメルトで固定。
受信機
- RaspberryPi 4 <商品ページ:Raspberry Pi 4 Model B / 2GB>
- USBドングル型ISP4520(LoRa,BLE内蔵マイコンモジュール+USBシリアル変換)
- Type-C電源アダプター
基板について
これはInsightSiPのISP4520JP評価キット付属の基板です。
ファームウェア挙動
- LoRaシングルチャネル受信セットアップ
- LoRaパケット受信したら
- シリアルポートにLTSV形式でレコード出力
- デバイスID、RSSI、SNR、バッテリー電圧、ボタンの論理
外観
中身
- Alpine-Linux(ディスクレスモード)
- Goで作ったLoRa受信->HomeKitゲートウェイサービス
ゲートウェイ挙動
- HomeKitの「接触センササービス」と「バッテリーサービス」をもつ「郵便ポストアクセサリ」を構成。
- シリアルポートを開いてLTSVレコードの受信を待ち受け
- 受け取ったレコードをパース
- 指定のデバイスIDレコードであれば送信機ボタン状態とバッテリー電圧から残量に換算した値に更新する
- HomeKitのアクセサリが登録された環境に状態が通知される
HomeKitへの登録
同じLAN内に受信機を接続しておき、以下のQRコードをiOS端末で読み取ることでHomeKitアプリに登録することができます。
HomeKitアクセサリの名前をつけたり設置場所を設定するとアクティベートされます。そのアクセサリをタップすると設定画面にバッテリー残量表示や通知設定が見れます。通知設定で「このiPhone上の通知」をONにするとこのアクセサリの状態が変わったら通知が来る様になります。
このQRコードのテキストは X-HM://XXXXXXXXXHOME
という様な文字列で、 これはmdns名:ポート
とPINコードからなるハッシュらしく、PINコードを手入力したときにも同様のハッシュになり照合されるっぽい。BonjourでディスカバリーされるHomeKitアクセサリーのなかから合致するデバイスに接続しようとします。
ノート:
初回接続時にアクティベートして鍵交換を行います。生成鍵はRaspberryPiのストレージに残そうとしますが、「ディスクレスモード」を使っていますので通電中は保持されますが、リブートで鍵を失います。この場合HomeKitへ再登録が必要です。この挙動は将来的には永続化ストレージにすることで改善を検討中ですが、1度アクティベートすると、異なるユーザーがアクティベートしようとしたり、mdns名、ポートなどの変更があると鍵の破棄をしないと動作しなくなります。そういうときに手動で鍵を破棄する機能が別途必要です。
HomeKitアクセサリは標準で同じLANにあるときだけ機能しますが、iPhoneを持ち出して外出中にも機能させる方法があります。HomeKitブリッジを置くことです。Apple標準の解決方法は家にiPadまたはAppleTVを置くことです。これらはHomeKitブリッジ機能が内包されています。
技適について
ISP4520JPモジュールはモジュールベンダーのInsightSiP社が技適の取得は完了していて、今後の出荷分はチップ上に技適マークが刻印される予定なのですが、現状手元に入手したものにはまだ刻印が入っていません。技適マークの表示が確認できない無線モジュールを使う場合、「技適未取得機器を用いた実験等の特例制度」にて届出をすることで180日以内の実験で試すことはできます。今回の事例を運用するのにも届出をしています。
無線IoTの技術選定について
将来的にタワーマンション系でも動作するものを目指していて、無線通信距離1Km以下だと、
一般に1Fの奥まったところにある郵便受けから高層階までの疎通が期待できないと思いました。なので検討候補はベスト時10Km以上のものを検討していました。
- SORACOM LTE-M Button Plus
- LoRaWAN
- TweLite-Red
LoRaWANはほとんどの場合クラウド側の準備が必要で、既成のクラウドサービスの利用または機器認証の仕組みをつくり込む必要があります。LTE-M Button Plusは高価ですがゲートウェイが不要というメリットがあります。しかし、その場合もクラウド側の準備が必要ということになります。今回はもう少し低レベルにとどめて宅内環境で完結する仕組みを採用しました。もう一つの候補としてはTweLite-Redは十分同じ様に作ることができると思いますが、こちらもハードコード認証になると予想され、一般運用する方向はLoRaからLoRaWANの方が有望かなと思いました。
投函を検出した!
1〜2週間運用していてほぼ毎日投函を検出し、スマホに通知が来ています。誤検知は今のところ1回(小さめのペラ紙の投函でフラップが倒れなかった)だけど、これは検出してくれなくていいチラシであることが多いのであまり困っていません。
まとめ
- この仕掛け自体は1ボタンIoT機器そのもので応用範囲は広いと思います
- 扉の開閉を通知すればホームセキュリティになるし
- 判定基準をHomeKitオートメーションにてスクリプト処理することもできます
- 段ボールで作ったために雨の雫に濡れた投函物により湿気を帯びてしまったので、3Dプリントなどで作る方が良さそう
- 送信機の認証を受信機側のデバイスIDハードコードで済ましてしまっているのはあまり良くなくて、ここをちゃんとしたいが、アクティベートが二度手間になるのも辛いですね。HomeKit側の認証機構をパスしたのち、自動でデバイスと受信機間とで認証する仕組みがいいな。