本記事の概要
0→1フェーズでスタンドアロンの先行リリースを完走し、次なるフェーズとして無線通信とWeb監視の統合に着手した際、組み込み・IoT開発で非常に難しい問題にぶつかりました。それが「現場の電波は想像以上に不安定であり、通信モジュールはバッテリーを多く消費する」ということです。
クラウド側のWeb開発と同じ感覚で「通信が切れたら再送すればいい」「REST/JSONでわかりやすくデータを送ろう」と設計すると、電池駆動型デバイスの寿命は数ヶ月で尽き、状態確認や電池交換といった対応に追われ、運用は完全に崩壊します。
現場で本当に動くIoTシステムに求められるのは、完璧な通信環境を作ることではありません。「通信は切れるもの」と割り切り、システムのコアをどう守り抜くかというアーキテクチャのトレードオフです。本記事では、私が実際に開発をした電池駆動型IoTシステムの経験をベースに、電池寿命を最大化するために判断した観点を下記項目に分けて記載します。
- IoTデバイスの特性を考える
- バイナリパッキングによるペイロード極小化
- 通信断に対する考え方
本記事の事例は、私が主導する「HWとSWが密結合するIoTシステム」の開発に基づいています。センサーの生データをバックエンドで加工し、WebUI上に可視化・制御する構造を持つシステムにおいて、1人目のSWエンジニア兼PMとして、初期設計から段階的リリース完走までの全体プロセスを統括した実践知を体系化しています。
携わっているシステムの特性と現場の制約を知る
本システムの設計論を語る上で欠かせないのが、対象機器が置かれている特殊な環境制約とデータ特性です。
- データの性質と「何を見るか」の割り切り:
本機で取得しているデータは、急激に値が変化する性質のものではありません。「必ずリアルタイムで取得し続けなければならないのか」「1回送信をスキップしても、その次に復旧すれば運用上問題ないのではないか」という観点から、必要以上にデータの網羅性を追って運用性を損なう過剰品質を徹底的に排除しました。 - 設置環境とバッテリー最優先の要件:
機器の設置環境の都合上、頻繁に電池を交換することは極めて困難です。そのため、開発におけるトレードオフ(データ量・測定頻度 vs 消費電力)においては、何よりも「連続稼働時間の最大化」が最優先課題でした。
デバイスのデータが何に使われるのか、どう使われるの、現場ではどのように運用されるのか、これらをしっかり理解することが適切な使用を定めることに重要です。
バイナリパッキングと分割送信
IoTデバイスにおける電力消費の大部分は、無線モジュールの起動・送信(TX)時間に比例します。通信時間をミリ秒単位で削ることが、そのまま電池寿命の延伸に直結します。
- バイナリパッキングによる極小化:
可読性の高いJSONや文字列フォーマットは採用せず、状態フラグ・各種コード・数値をバイナリで表現して結合(パッキング)し、極限まで圧縮した通信データとして扱っています。これにより、モジュールの駆動時間を最小化します。 - あふれたデータの分割送信:
どうしても1パケットの上限に格納しきれないデータが発生する場合は、無理に詰め込まず分割して送信する構造を採用し、本体制御に余計な負荷を与えない設計としました。
長くWebシステムに携わっていた私にとって、上記領域の考え方は最初こそ難しかったですが今となっては非常に重要な知見の一つと言えます。
全件再送を捨て「SDカード担保+最新値優先」を選ぶ
電波の谷間に入った際、教科書通りの「未送信データの全件バッチ再送」を実装すると、復旧した瞬間に大量の通信が発生してバッテリーが急激に枯渇します。
- SDカードを絶対の最低防衛ラインとする:
バッテリー消費を抑えるため、過去の非連携データを通信で再送することは一切行いません。計測データはエッジ側のSDカードに確実に記録・保持し、何か異常や不具合が検出されて過去データが必要になった場合は「現地でSDカードを回収する」運用方針としました。 - 復旧後は最新値優先のポリシー:
通信復旧後は、過去データの再送処理を挟まず「最新データ」から送信を開始します。これにより、バッテリーの浪費を防ぎつつ、現在の稼働状態を最速で監視側へ届けることができます。
すべての状況で通用する考え方ではなく、私の携わった機器ではこれが最適解でした。
振り返り
成果
現場の制約を見据え、バイナリパッキングで通信時間を削り、SDカード保存を盾にして「全件再送を捨てる」――このエッジ側の割り切りによって、長期間の電池駆動という絶対条件をクリアすることができました。
しかし、通信を割り切った分、今度は「クラウド側・運用側でどうやって異常を検知し、現場を迷わせずに動かすか」という新たな課題が生まれます。
次回(第14回・後編)では、このエッジ側の設計を受け止め、誤検知を防ぐリトライ監視、二重操作を防ぐ動的UI、そして非IT層の作業員を迷わせない運用手順書との連携について詳しく解説します。
振り返り
- どのような状況でどのように使用されるのか、ハードウェアもソフトウェアも現場理解が重要
- バイナリパッキングによるデータ圧縮は様々なデータ処理に通じる
- 限られた電力の中で必要な機能を実装する、Webシステムでは経験できないことに触れることができた