メカトラックスエバンジェリストのしかじろうです、こんにちは。今回はLTEモジュール4GPiと電源監視モジュールslee-Piで色々遊んでみました。@MechaTracks「しかさん、RaspberryPiはSMSで起動できるんだよ」と聞いてワクワクが止まらないので先人の知恵を借りながら試してみました。
概要
RaspberryPiに4GPiとslee-Pi3を繋いでSORACOM経由でSMSを送って起動する
参考
先人の記事を参考にしました。
3GPi Ver.2とslee-Pi2を使用して、SMS着信でラズパイ遠隔起動~シャットダウン - Qiita
必要機材の紹介
RaspberryPi3
Buy a Raspberry Pi 3 Model B – Raspberry Pi
みんな大好きRaspberryPi。最新は4ですが、今回は知見が多い3を使いました。OSは安心と信頼の4GPi用のRaspbianを採用しました。
4GPi
ラズベリーパイ用4G(LTE)通信モジュール「4GPi」 | 製品の紹介
4GPiはRaspberryPi用のLTE通信モジュールです。ドッキングするだけで使えます。例えばビニールハウスや倉庫の中など、wifi回線がない場所でもネットに繋げることができます。後述するSoracom Napterを使えばSSHでログインできるので開発が捗ります。
slee-Pi3
ラズベリーパイ用電源管理/死活監視モジュール「slee-Pi」 | 製品の紹介
slee-PiはRaspberryPi用の電源管理・死活監視モジュールです。起動・停止をスケジューリングさせたり、起動サービスが止まったら再起動などができます。使わないときは電気を使わないので省エネにもなるし、システムの死活監視⇒再起動も可能です。4GPiと組み合わせることで、SMS着信で起動もできます。
SORACOM IoT SIM
SORACOM IoT SIM (カード型 SIM) - IoTデバイス通販 - SORACOM(ソラコム)IoTストア
SORACOMはIoT向けの通信プラットフォームです。SMSを使う場合はSMS可のSIMを購入する必要があります。(1敗)
SORACOM Napterを使うとRaspberryPiにSSHできるので、RaspberryPiを設置した後も開発・保守ができます。
ハードウェアの準備
4GPiジャンパピン
電源
JP1の供給ピンを両方とも抜きます。電源の供給はslee-Piに任せるためです。
SMS
JP2にジャンパピンを刺します。他と同様にGPIO16を使うので左側と中央をつなげます。これでSMSを着信するようになります。
slee-Piジャンパピン
SMS
JP1に2mmピッチジャンパピンを刺します。4GPiと合わせてGPIO16を使うので左側・中央を繋ぐようにします。
ジャンパピンには2.54mmピッチと2mmピッチがあるので、間違えないように購入します(1敗)
電源
今回は以下の2系統で構成しました。
- Slee-Pi -> RaspberryPi
- 4GPi
Slee-Piと4GPi両方に電源を繋ぐ必要があります。RaspberryPiへの給電はSlee-Piが行います。
ソフトウェアの準備
OSは4GPiが提供している4gpi-buster-lite-20200902.zip を採用しました。(この記事書いてたら4gpi-buster-lite-20210204が出ました)
piユーザーのパスワードが raspberry から変更されているので、初期ログイン情報カードを見てログインしてください。
ジャンパピンの設定
ジャンパピンを変更したので、設定ファイルを書き換えます。
sudo nano /etc/default/4gpi
#
# 4GPi settings
#
...
# Power off 4GPi at shutdown
# AUTO_OFF=0: disable auto power off
# AUTO_OFF=1: enable auto power off
AUTO_OFF=0
# Enable the modem to wake up on ring during standby
# WAKE_ON_RING=0: disable Wake-on-Ring
# WAKE_ON_RING=1: enable Wake-on-Ring (AUTO_OFF=0 is required)
WAKE_ON_RING=1
# Store SMS at Wake-on-Ring (WAKE_ON_RING=1 is required)
# STORE_SMS_ON_RING=0: do not store the sms
# STORE_SMS_ON_RING=1: store the sms
STORE_SMS_ON_RING=0
設定後は再起動を忘れずに。
slee-Pi 関連ライブラリ
4GPi関連ライブラリはインストールされていますが、slee-Pi関連ライブラリは同梱されてないので追加でインストールします。
sudo apt-get update
sudo apt-get install sleepi3-firmware sleepi3-utils sleepi3-monitor
SORACOM 接続
SORACOMに接続する設定を追加します。
sudo nmcli con add type gsm ifname "*" con-name soracom apn soracom.io user sora password sora
セキュリティ
ファイアーウォールにufwが同梱されています。デフォルトで wwan0とppp0が受信拒否になっています。これだと、SSH接続ができません。検証ということで一旦disableにします。(1敗)
sudo ufw disable
disableは再起動するともとに戻るので注意。(1敗)
ルーティング
RaspberryPiをwifiに繋いでいる場合はルーティングをきちんと設定しないと4GPiがうまく動きません。設定は結構大変なので、とりあえず動かす場合はwifiをoffにするのがおすすめです。
開発環境を整える
ここまでで、RaspberryPi, 4GPi, slee-Piが起動してSORACOMにも疎通ができています。SORACOMコンソールを確認するとオンラインになっています。
SORACOM Napterを使うとLTE通信経由でRaspberryPiにSSH接続できます。RaspberryPiを目的の場所に設置した後も開発できます。SORACOMマジ便利。
Napter
SORACOM Napter を使うとSIMに対してSSHできるようになります。昔はこれができなくて修正のたびに現地に赴いたり、開発がとても大変でした。理想環境にRaspberryPiを設置して、自宅から開発ができるので、これは本当に便利です。
接続したいSIMを選んでオンデマンドリモートアクセスを選択します。
アクセス可能時間を選択します。無期限に開きっぱなしにはできないので、接続するたびに時間を決めてアクセスします。セキュリティ的に安心ですね。
ポート変更したり、アクセス元IPレンジ変えたりもできます。とりあえず繋ぐ分には無視でOKです。
TLSを有効にすれば、httpsサーバーを公開することもできるみたいです。
SSHで接続できるようになりました。SORACOM側のportの値は都度変わります。サンプルが表示されますが、user
では接続できないので、pi
に変更します。
ssh -p 36792 pi@1-2-3-4.napter.soracom.io
うまくいくとこんなメッセージがでてきます。🎉
SMS起動
ここまでで、RaspberryPiの遠隔開発ができるようになりました。しかし、電源が切れていたらどうしようもありません。SMSを送ってRaspberryPiを起動してみます。
ただし、スマホのSMSのように誰からでもSMSを遅れるわけではないです。公式サイトにあるように、同じオペレーター配下のSIM同士じゃないと送受信はでき内容です。
IoT SIM(plan01s)の SMS 機能を使用する | Getting Started | SORACOM Users
IoT SIM は同じオペレーター配下の SIM 同士で SMS の送信ができます。他のオペレーター配下の SIM や SORACOM 以外の SIM、plan-D などの特定地域向け IoT SIM とは SMS の送受信はできません。
slee-Piを使って電源のon/offをやってみます。とりあえずsudo poweroff
で電源を落としておきます。
SORACOMの画面で該当SIMを選んでSMSを送信します。
本文によって受け取ったRaspberryPi側で処理を分岐できますが、今回は適当に入れました。
slee-piの赤いLEDが点いてRaspberryPiが起動します🎉
起動要因の確認
mechatrax/sleepi3-utils を使うと起動要因などを確認できます。
poweron : 電源接続が起動要因です。
watchdog : ウォッチドッグタイマのタイムアウトによる再起動が起動要因です。
alarm : リアルタイムクロックのアラーム発生が起動要因です。
switch : プッシュスイッチの押下が起動要因です。
extin : 外部入力の検出が起動要因です。
ri : RI 信号の検出が起動要因です。
restore : 電源復旧の検知が起動要因です。
$ sleepi3ctl -g wakeup-flag
ri
SMSの場合はriになるので、うまく動いています!
API経由でSMS呼び出し
上にも書きましたが、SMSは同じオペレーター配下のSIM同士でしか送受信できないので、利用が限られます。SORACOMではAPIによる呼び出しでSMSを利用することができます。
IoT SIM(plan01s)の SMS 機能を使用する | Getting Started | SORACOM Users
soracomのログインIDとパスワードでtokenを取得できます。
$ curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d "{\"email\": \"<ログインID>\",\"password\": \"<パスワード>\"}" "https://g.api.soracom.io/v1/auth"
取得したapi-key,token SORACOMコンソールで確認できるIMSIを指定して、SMSを送信できます。
$ curl -X POST -H "content-type:application/json" -H "X-Soracom-API-Key: <apiKey>" -H "X-Soracom-Token: <token>" -d "{\"body\":\"<メッセージ>\"}" https://g.api.soracom.io/v1/subscribers/<imsi>/send_sms
こんな感じでmessageIdが返ってくれば成功です。
API化することで、プログラムの中にRaspberryPiの起動を組み込むことが可能になります。
まとめ
RaspberryPiに4GPi,SORACOM,slee-Piを連携させることで、場所・電源・省エネなどの環境の幅が広がりました。次回はこれらを組み合わせて実用的なアプリケーションを作ってみたいと思います。