
消費電力量低減のため、複数回の計測データを一括送信する3:SORACOM Harvest Dataの一括書き込み機能の活用
電池駆動型IoTデバイスにおいて、消費電力量の低減は最重要課題の一つです。消費電力量を下げる手段の一つとして、IoTデバイスに接続されたセンサーで現場データを取得後、毎回クラウドに送信するのではなく、IoTデバイスに一時保存し、一括で送信することが考えられます。
現場データをリアルタイムで知る必要がある場合は、この手段を適用できませんが、リアルタイム性を求めない場合は、本方法が有効だと考えられます。
本記事では、消費電力量を因数分解し、送信回数低減の意義を整理した後、複数回の計測データを一括送信する方法について考えます。
なお、「消費電力量低減のため、複数回の計測データをSORACOMに一括送信する」その1、その2では、別の手段でこの課題を解決することを考えていましたが、2025年4月3日に、SORACOMから、SORACOM Harvest Dataへの一括書き込み機能が追加されたため、本機能を用いた課題解決を考えます。また、その1,2から日数がたったため、改めて全体像を整理します。
■ 消費電力量を因数分解する
消費電力量[mWh]を因数分解すると、どのような要素から構成されるでしょうか。まずは、下記の消費電力量の模式図をご覧ください。

グラフの横軸が時間、縦軸が消費電力であり、紺色の線がIoTデバイスの消費電力の時間変化の模式図です。①が計測時の消費電力量、②が送信時の消費電力量、③が待機時の消費電力量です。消費電力量[mWh]は電力[mW]x時間[h]であり、グラフの面積が消費電力量[mWh]に相当します。
1サイクルの消費電力量は①+②+③で表されます。経験的には、①の計測時間は1秒以下、②の送信時間は概ね10秒弱です。この送信時間10秒弱のうち、その大部分が通信モジュールの初期化や通信確立等の時間であり、実際に送信に要する時間はmsオーダーです。また、仮に①+②の時間が10秒とし、計測頻度が1時間=3600秒とすると、③の時間は3590秒となります。
■ 消費電力量低減の5つの方針
このような背景から、IoTデバイスの消費電力量[mWh]を下げる方針として、以下が考えられます。
方針1. ①の計測時の消費電力量を下げる。例えば、低消費電力のマイコンを採用する
方針2. ②の送信時の消費電力量を下げる。例えば、低消費電力のマイコン/通信方式を採用する
方針3. ③の待機時の消費電力量を下げる。仮に、計測時間10秒、計測頻度3600秒の場合、待機時間は計測時間の359倍であり、待機時の消費電力を下げる効果は絶大!
方針4. 計測頻度を下げる。必要な計測頻度を見極め、必要最低限の計測頻度とする
方針5. 送信頻度を下げる。計測後毎回送信するのではなく、複数回の計測データを一括送信する
本記事では、「方針5」の送信頻度を下げるための具体的な方法について考えます。
例えば、1時間ごとに計測し、24時間分のデータを1日1回クラウドに一括送信する事例の場合、23回分の計測時間が約1秒になり、24回目の一括送信が約10秒になると想定すると、数分の1オーダーで消費電力量を下げることができるのではないかと予想しています。実現できれば、相当な消費電力量低減効果です!
■ 一括送信の課題と解決指針
計測毎に送信するのではなく、複数回の計測データを一括送信する場合の課題として、次のようなことが考えられます。
課題A. いかに複数回分の計測データをIoTデバイス内に一時保存するか?
課題B. 送信エラー時の処理をどうするか?
課題C. 計測時刻と送信時刻が異なるため、いかに計測時刻を記録するか?
課題D. 複数回分の計測データを、どのようなデータフォーマットで送信するか?
課題E. 計測時刻と送信時刻が異なるため、クラウド側でどのようにグラフ化するか?
これら5つの課題に対し、以下の通り解決方針を考えました。
課題A. いかに複数回分の計測データをIoTデバイス内に一時保存するか?
→マイコンのEEPROMやFeRAMに一時的に保存する課題B. 送信エラー時の処理をどうするか?
→次の送信タイミングで再度送信課題C. 計測時刻と送信時刻が異なるため、いかに計測時刻を記録するか?
→NTP(Network Time Protocol)を用いて定期的に現在時刻を取得・補正し、通信を行わない間は最後に取得したNTPの時刻からsleep時間を加算することで時刻を管理する課題D. 複数回分の計測データを、どのようなデータフォーマットで送信するか?
→SORACOM Harvest Dataへの一括書き込み機能を用いる課題E. 計測時刻と送信時刻が異なるため、クラウド側でどのようにグラフ化するか?
→「送信データに含めた時刻」をタイムスタンプとして利用する
課題Dの解決方法として、2025年4月3日に発表されたSORACOM Harvest Dataへの一括書き込み機能が有効です。
また、課題Eの解決方法として、2024年9月3日に発表された、SORACOM Harvest Data で JSON データに含まれる日時データをタイムスタンプとして利用できる機能が有効です。
以前は、一括送信やタイムスタンプを付与するためにSORACOM Funk→AWS Lambda→SORACOM Inventory→SORACOM Harvestというような遠回りをしていましたが、SORACOMのアップデートによって、よりシンプルに課題解決できるようになってきていることを感じました。
■ SORACOM Harvest Dataへの一括書き込み機能
ここでは概要だけ記載します。詳細は、公式ページを参照ください。
公式ページでは、下記のサンプルコードが記載されていました。
curl http://uni.soracom.io \
-H 'content-type: application/json' \
-d '{
"data": [
{"time": "2025-03-17T09:00:00+09:00", "temperature": 10.5},
{"time": "2025-03-18T09:00:00+09:00", "temperature": 9.4}
]
}'timeの形式は、ISO 8601 形式、UNIX 時間 (秒)、UNIX 時間 (ミリ秒)のいずれかを選択できるようです。普段はUNIX時間(秒)を使っているので、今回は、これを試してみました。1743822000は、2025年4月5日12時0分0秒、1743825600は、13時0分0秒のUNIX時間(秒)です。
curl http://uni.soracom.io \
-H 'content-type: application/json' \
-d '{
"data": [
{"time": "1743822000", "temperature": 10.5},
{"time": "1743825600", "temperature": 9.4}
]
}'timeをUNIX時間(秒)で定義したため、下記の通り、送信データの値の形式をUNIX時間(秒)に設定しました。

上記設定の上、SORACOM Arcを用い、PCからSORACOM Harvest Dataにデータを一括で送ってみました。すると、下記の通り2つのデータが書き込まれており、時刻もUNIX時間で指定した時刻であることを確認できました。


■ まとめ
本記事では、消費電力量を因数分解し、送信頻度低減の意義を整理しました。また、計測データを一括送信する際の課題と課題解決案を考えました。
また、SORACOM Arcを用いてSORACOM Harvest Dataへの一括書き込みが確認できました。
計測データの一括送信を実装するためには、デバイス側にデータを一時的に保存できる領域が必要です。この要件を満たすデバイスの一つが、2024年末から注目しているWio BG770Aです。Wio BG770Aは64KiBのFeRAMが搭載されており、FeRAMに計測データを一時保存することができます。
次は、Wio BG770Aを用いた計測データ一括送信を考えたいと思います。
《参考》
・Wio BG770Aの研究シリーズの各記事を、下記マガジンにまとめています。
・自作IoTシステムの構築 基礎編の各記事を、下記マガジンにまとめています。
・消費電力量低減のため、複数回の計測データをSORACOMに一括送信する1
・消費電力量低減のため、複数回の計測データをSORACOMに一括送信する2
・1 回のデータ送信で複数のデータを書き込む
・送信データに含めた時刻」をタイムスタンプとして利用する