IoT で「ソロモン」を育てよう (3/3) ー IoT プラットフォーム編 –
2022年07月13日 水曜日
CONTENTS
いよいよソロモン育成計画の最終回、IoT プラットフォーム編です。
本稿は連載となっており「ソロモンって何?」って思われた方は、第 1 回のハードウェア編、第 2 回のソフトウェア編をご覧いただくことをお勧めします。
今回は、作ったシステムをより便利にするために、IoT プラットフォームである IIJ IoT サービスのいろんな機能を試してみます。
前回とは違い、IIJ IoT サービスは Web で設定するだけなので、難易度は低く手軽に使用できると思います。
では早速、設定して使ってみることにしましょう。
サービスの利用準備
まずは、IoT サービスで使うデバイスの設定をします。
今回は IoT サービスへの接続に LTE 網を使用したモバイルアクセスを使用することにします。ハードウェア編で登場していた SIM カードがモバイルアクセスのものですね。
モバイルアクセスを契約するとコントロールパネルで契約している SIM を確認できます。
使用する SIM を選択してデバイス設定を開き、使用する品目を有効化します。
今回は、以下の機能を有効化します。
- デバイスモニタリング
- センサーデータのグラフ化のため
- デバイスコントロール
- Web App へのアクセスするため (ビューア)
- REST API へのリクエストするため (リクエスト送信)
- メンテナンスのため (コマンド送信)
- データストレージ
- カメラ画像ファイルの保存のため
設定の有効化後は必ず「保存」をしてください。うっかり忘れがちなので注意です。
初めてデータストレージを使用する場合は、追加で設定が必要です。
まずは「データストレージ」の「データ保存設定」を開き、データ保存を ON にします。そして、データストレージの保存先バケットを選びます。ここで保存先バケットが存在しない場合は、この設定を行う前に管理コンソールから空のバケットを新規に作成してください。
設定変更後は、設定ボタンを押すのを忘れずにやっておきましょう。
以上でサービスの設定作業は完了です。
残り手元の作業は、SIM カードを LTE モデムに挿し、Raspberry Pi に接続・設定するだけです。
今回、LTE モデムは PIXELA 社の PIX-MT100 を使用します。PIX-MT100 は、Raspberry Pi に USB で接続すると USB-NIC として認識され、ルータとして機能します。
大雑把にネットワークは以下のような構成になります。
LTE モデムを使い始める前に、モデムの設定で APN 接続設定を追加する必要があります。正しく設定され接続できれば、PIX-MT100 の WAN 側 IP アドレスに、コントロールパネルで表示されていたプライベート IP アドレスが固定で割り当てられます。
この状態になれば Gateway API のデータ送信は既に利用可能です。この時点で curl コマンドなどでテストデータを転送し、動作確認することをお勧めします。送信されたデータは、コントロールパネル上の「デバイスモニタリング」や「データストレージ」で確認できます。
また、IoT サービスのデバイスコントロールの利用する場合、モデムに追加の設定が必要です。デバイスコントロールは「デバイスへ IoT サービスから直接接続できること」が使用する条件です。その条件を満たすために、WAN 側の接続を Raspberry Pi に転送するようにポートフォワードを設定します。
これですべての準備完了です。
IoT サービスにデータを送ろう ~Gateway API の利用~
IoT サービスでは、デバイスから継続的にデータを送ることで、蓄積されたデータのグラフ表示や参照ができます。
今回は、センサーデータやカメラ画像を転送して、生長記録として使ってみます。
データを送るタイミングや間隔に制限はありません。いつどのタイミングでも利用者が自由にデータを送ることができます。
データの送信間隔は短くすればするほど、グラフやデータなどをより詳細に記録・表示できます。しかし、送信間隔は短くしすぎると送信機の負荷が増えたりモバイル通信量が多くなるデメリットもあるため、用途に応じて調整する必要があります。今回は、センサーデータの送信を 1 分間隔、カメラで撮影した画像の送信を 1 時間間隔としました。
また、Raspberry Pi でデータを送るときは、Cron で定期的に送信用のスクリプトを実行するのが簡単です。今回の用途では、スクリプトに REST API サーバからセンサーデータを取得し、取得したデータを Gateway API に送信する処理を書いておけば OK です。
転送に使用できるプロトコルは、データは HTTP / TCP / UDP が、ファイルは HTTP/ FTP が利用できます。特に HTTP は curl を使ってデータとファイルが送れるので、Raspberry Pi のようなリッチな環境では HTTP を使うのがオススメです。送信処理がシェルスクリプトでシンプルに実装できます。
データが正しく定期的に送信されていれば、以下のようにデバイスモニタリングでグラフが表示されます。
もし表示されない場合は、データの送信が正しく行われていること、デバイス設定のデバイスモニタリングが有効化されているかを確認しましょう。
グラフを確認できれば、データ送信は OK です。
ちなみに今回は使用していませんが、データハブやクラウドアダプタを使えば、インターネットや GIO 上のサーバにデータを転送できます。また、データに位置情報を付与して送信すれば、デバイスモニタリングの地図機能を利用してデータをマッピングすることもできます。
IoT サービスで観察しよう ~デバイスコントロール ビューアの利用~
さて、準備では Web App で現在の状態が見える様に作りました。せっかくなので、外出先からでも今のソロモンを観察できるようにしようと思います。
外出先でも接続できるようにするには、IoT サービスのデバイスコントロール ビューア機能を利用します。
ビューア機能は、あらかじめ利用前に設定を作成する必要があります。以下の通りコントロールパネルの画面指示に従って準備します。
作成後、一覧に設定したビューアが表示されれば準備完了です。
観察するときは、実行ボタンをクリックします。すると、新しいウィンドウが開き、Web App が表示されます。インターネットに繋がる環境であれば、どこからでも開くことができます。
もし正しく接続できない場合は、Web App が起動しているか、ファイアウォールがブロックしていないか、ネットワーク経路が正しく設定されているかを確認しましょう。
なお、ビューア機能は、HTTPS の暗号化処理を IoT サービス設備側で行い、ビューア専用のホスト名で接続する仕組みを使用しています。この暗号化処理を設備側で行うことによって、デバイスが HTTP しか対応していない場合でも安全に通信ができるというメリットがあります。しかしその反面、ホスト名やプロトコルが変わることによって表示が崩れたり正しく動作しなくなるケースがあり得ます。問題が生じた場合は、Web App の設定を適切に変更してご利用ください。
IoT サービスで育成しよう ~デバイスコントロール リクエスト送信の利用~
デバイスコントロール リクエスト送信機能を使用すれば、IoT サービスからデバイスに HTTP のリクエストを送信できます。
Raspberry Pi には制御用の REST API が動いていますので、「水やり」コマンドを IoT サービスで送ってみます。
リクエスト送信もビューアと同じく、あらかじめ設定しておく必要があります。
リクエスト送信機能の注意として、リクエストヘッダの Content-Type は標準で指定されません。そのため POST を使用する場合は、ボディ形式に合わせて Content-Type: application/json などを設定する必要があります。
画面設定の途中にあるパラメータ置換は、主に Web API で送信する時に役立ちます。Web API では実行時にパラメータを指定でき、実行ごとにパラメータを変更できます。頻繁にパラメータを変更したい場合などで有用です。また、今回はボディのみに使用していますが、パスやヘッダにもパラメータを含めることができます。
作成後は、一覧に作成した設定が現れるので、実行をクリックして HTTP リクエストを送信できます。
画像では送信に失敗していますが、これは想定通りです。前回話していなかった隠し機能として、水やりの時間帯を API で制限していることが原因です。時間外で実行したので、REST API が失敗しています。
また、今回は使用していませんが、リクエスト送信は複数のデバイスへ同時に送信することも可能です。同時送信する場合は、リクエスト送信の設定にて複数のデバイスを選択するだけです。同種のデバイスを多数使用している環境で役に立ちます。
IoT サービスで運用しよう ~デバイスコントロール コマンド送信の利用~
デバイスを長時間起動させておくと、時には挙動が不安定になることもあると思います。そんなときは、IoT サービスのコマンド送信機能を使用してメンテナンスを実施しましょう。
コマンド送信機能は、SSH を使用して OS の任意のコマンドを実行する機能です。当然ですが、使用には SSH サーバがデバイスで稼働している必要があります。Raspberry Pi OS であれば標準で使用できるので特に気にする必要はありません。
例によって使用前に設定を作成しておく必要があります。
作成後は、実行ボタンをクリックしてコマンドを実行できます。
他には、コマンドはシェルで実行されるためワンライナーも書くことができますし、コマンド送信もリクエストと同様に複数のデバイスへの同時送信が可能です。また、再起動や容量確認以外にも、最新ログの確認、一時ファイルのクリーンナップなどで使用できると思います。
IoT サービスで監視しよう ~デバイスモニタリングの応用~
データ送信のところで少し見えたデバイスモニタリングのグラフ (チャート)、もう少し便利な使い方ができます。それは、カスタムチャート機能とダッシュボード機能です。
カスタムチャートでは、利用者が興味のあるデータ (メトリック) を複数組み合わせてオリジナルのグラフを作成できます。特定のメトリックを重ねて表示させたいときや、メトリック間で相関を調べたいときに使用できます。
また、カスタムチャートを作成するとチャート共有機能も使用可能になります。チャートの共有をすると共有用リンクや埋め込み HTML が発行され、インターネットにチャートを公開できるようになります。この共有されたチャートをホームページなどに組み込むことで、他の情報と合わせてチャートを見られるようになります。
作成したカスタムチャートや標準のチャートは、ダッシュボード機能を使ってタイル上に自由に配置して思い通りに表示することもできます。グラフだけで無く、最後に送信されたデータを数値として表示することも可能です。
こんな感じにダッシュボードを作ると一つの画面で今の状態を把握できるようになります。
ダッシュボードは能動的な監視ですが、状態変化が発生したときに通知してくれる監視機能もあります。
監視機能では、条件と状態を定義しておくと、条件に応じて状態が変化したときにメールや Slack などに通知することができます。
例えば、湿度に応じて状態を変えたいときは、以下のように設定します。
ちなみに、監視機能で設定した今の状態は、ダッシュボードで表示することもできます。
IoT サービスで過去を振り返ろう ~データストレージと動画ビューアの利用~
さて、これまで「今」を中心に取り扱ってきましたが、今度は過去を参照してみます。過去のデータは、データストレージ機能を有効にしていると保存されています。
データストレージは、オブジェクトファイルシステムとなっており HTTPS 経由でデータの読書きができます。最も簡単な確認方法は、コントロールパネルのデータストレージを選んで、管理コンソールを開くことです。管理コンソールは以下のように表示されます。
ディレクトリは、データが /data 以下に、ファイルが /files 以下に日付ごとに蓄積されるようになっています。必要なデータはファイルをクリックしてダウンロードできます。
また、動画像ファイルであればビデオビューアが使用でき、ファイルをダウンロードすることなくブラウザで直接表示できます。
ビデオビューアの使用にはデバイスグループを作成しておくと便利です。デバイスグループは、コントロールパネルからデバイスグループを作成できます。
おわりに
全 3 回にわたり IIJ IoT サービスを利用した家庭菜園 IoT にチャレンジしました。本稿をもってこのシリーズはおしまいです。
ハードウェア・ソフトウェア編では、家庭菜園で使えるシステムの作り方について解説しました。これは IIJ IoT サービスに限った話ではありませんので、家庭菜園以外の IoT 化、電子工作、ソフトウェア開発でも多少は使えると思いますので、幅広い分野で参考にしていただければ幸いです。
今回紹介した IIJ IoT サービス、今も便利な機能を備えてはいますが、我々開発チームは日々改善や機能拡張を続けております。こんな機能が欲しい、使いづらい所があるから直して欲しいなどの要望があれば、気兼ねなくお知らせください。
今後とも IIJ IoT サービスをよろしくお願い致します。
おまけ: ソロモンのその後
さて、「うちのソロモンちゃん、どうなったか」気になるところですけど、こうなりました。
「これは、ほうれん草??😲」
3/30 頃の写真ですが、つぼみができてトウ立ちしたようです。元々この前から、茎がひょろひょろと伸び徒長していたので、ほうれん草らしさというのは無かったですね。
こうなった原因は色々あると思います。
まずは、日照不足。徒長の主な原因。設置場所は日当たりが悪く、午前中の数時間しか日光が当たらず常に日陰です。
次に、播種時期が遅かった。10 月末に種を蒔いているので遅すぎました。寒くて十分に生長できず、越冬して春先でトウ立ちといった感じでしょうか。
他、水の上げすぎ。ずっと土が湿った状態で根が伸びず、茎が水ぶくれのようになり伸びてしまった。
ただ、はっきりとした原因が分からず、対策に悩みますね。植物育てるの難しいな。
タイムラプス動画も作ってみたので上げておきますね。最後の方で一気に生長しているのがわかります。
徒長してしまったほうれん草ですけど、見た目が変なだけで普通に食べられます。葉っぱが小さいので、サラダにしてみました。