多くのMatterデバイスは電池駆動であり、再充電なしで数ヶ月から数年にわたって動作する必要があります。これを実現するには、可能な限りCPU、無線、周辺機器の使用を最小限に抑えなければなりません。MatterはThreadとWi-Fiの両方で動作しますが、低電力技術の大部分はMatter over Threadに適用されます。Threadの無線およびネットワークスタックは、極めて低いデューティサイクル動作向けに設計されているためです。
本トピックでは、Matterデバイスの消費電力削減の背後にある核心的な原則を紹介します。これは、これらの概念を完全なICD(Intermittently Connected Device:間欠接続デバイス)の動作へと拡張する次のトピックの基礎となります。
センサー、スイッチ、小型アクチュエータなどの電池駆動デバイスは、応答性、ネットワークの可用性、および電池寿命のバランスを取る必要があります。長期間の動作を可能にする鍵は、デバイスが起動している時間を短縮し、無線の送信または受信の頻度を最小限に抑えることです。
消費電力を最適化するために、デバイスは以下のことを行う必要があります。
Threadのスリーピーデバイス(Sleepy Device)ロールは、Matterデバイスが極めて低い無線デューティサイクルで動作することを可能にし、これを実現します。
Matterデバイスの消費電力は、無線の動作頻度、アプリケーションの動作、およびThreadによる通信管理方法に依存します。以下のセクションでは、これらの影響について詳しく説明します。
消費電力を削減する最も効果的な方法は、デバイスをスリープ状態に保つことです。スリープ中は、不可欠なリテンションメモリと最小限の回路のみに通電されます。デバイスは、次のようなイベントが発生したときに起動します。
起動の間隔を長くすることで、消費電力を劇的に削減できます。
レッスン2「Threadネットワーキング」で説明したように、Threadは複数のデバイスタイプを定義しており、そのうちの2つが低電力向けに最適化されています。
SEDはスリープ状態を維持し、データリクエストを使用して親ルーターを定期的にポーリングします。ポーリング間隔は無線使用量に直接影響します。間隔が短いと応答性は向上しますが、消費電流が増加します。
SSEDはCSL(Coordinated Sampled Listening)を使用し、親デバイスと同期されたスケジュール済みの受信ウィンドウの間だけ起動します。これにより、継続的なポーリングの必要がなくなり、アプリケーションによっては効率を向上させることができます。
どちらのデバイスタイプも、常に起動していなければならないThreadルーターと比較して、無線オン時間を大幅に短縮します。
スリーピーThreadデバイスは、親ルーターからの保留メッセージを確認するために、一定の間隔で起動します。このポーリングメカニズムは、低電力動作の中心となるものです。
ポーリング間隔とは、スリーピーエンドデバイスが親デバイスに対して行うポーリングの間の時間です。間隔を長くすると電力効率は向上しますが、レイテンシが増大します。
間隔を短くするとメッセージ配信は速くなりますが無線オン時間が長くなり、間隔を長くすると消費電力は抑えられますがレイテンシが増大します。
アプリケーションの設計が慎重になされていないと、驚くほどのエネルギーを消費する可能性があります。頻繁なセンサーサンプリング、高いレポート頻度、複数のタイマー、およびアトリビュートの書き込みをグループ化せずに1つずつ送信することなどは、すべて起動回数と無線活動を増加させます。
アプリケーションの動作を最適化することは、電池寿命に関して最も簡単な解決策の1つとなることがよくあります。
nRF Connect SDKには、Matterデバイスのエネルギー効率を維持するための機能が組み込まれています。
これらの機能により、NordicのMatterデバイスは長期間スリープし、必要なときだけ起動することが可能になります。
MatterはWi-Fiもサポートしていますが、Wi-Fi無線はThreadと比較してベースラインの消費電力が大幅に高くなります。より頻繁にアクティブ状態を維持する必要があるため、長期間の電池駆動デバイスには適していません。
Wi-Fiの低電力モード(DTIM間隔に基づく)によって消費電力をある程度削減できますが、Matter over Wi-Fiは一般的に主電源駆動のデバイスにのみ推奨されます。
アプリケーションの消費電力を削減する方法は数多くあります。採用したネットワーク技術に関連する方法、特定のモジュールを無効にする方法、または電力消費を最適化するための機能を設定する方法などがあります。
このセクションでは、消費電力を削減するために使用できる、一般的およびプロトコル固有のビルド時設定とAPIをまとめています。
スリーピーThreadデバイス(SEDおよびSSED)は、親ルーターに自分宛てのメッセージがあるかどうかを確認するために定期的に起動します。どちらもMTD(Minimal Thread Device)のバリエーションです。
SEDサポートを有効にするには、以下のKconfigオプションを有効にする必要があります。
CONFIG_OPENTHREAD_MTD=y
CONFIG_OPENTHREAD_NORDIC_LIBRARY_MTD=yKconfigCONFIG_OPENTHREAD_MTD:MTDタイプを選択します。CONFIG_OPENTHREAD_NORDIC_LIBRARY_MTD:MTDビルド用に最適化されたNordicの機能セットです。SSEDサポートを有効にするには、以下のKconfigオプションを有効にする必要があります。
CONFIG_OPENTHREAD_MTD=y
CONFIG_OPENTHREAD_NORDIC_LIBRARY_MTD=y
CONFIG_CHIP_THREAD_SSED=yKconfigCONFIG_CHIP_THREAD_SSED:MatterにおけるSSEDサポートを有効にします。スリーピーThreadデバイスは、メッセージを受信するために定義された間隔で起動します。SEDデバイスは固定間隔でのデータポーリングを使用し、SSEDデバイスは親デバイスと同期された短いスケジュール済みのCSLウィンドウでリッスンします。いずれの場合も、Threadのタイムアウト値によって、意図したよりも頻繁にデバイスが起動するように強制されてはなりません。
ポーリング周期は、SEDが親ルーターから保留中のメッセージを要求するために起動する頻度を定義します。
CONFIG_OPENTHREAD_POLL_PERIOD=<ms>KconfigCONFIG_OPENTHREAD_POLL_PERIOD:SEDデバイスのポーリング間隔(ミリ秒単位)を設定します。Threadスリーピーデバイスは、親デバイスにまだ接続されていることを定期的に確認する必要があります。これらのタイムアウト値がデバイスの意図した起動間隔(SEDの場合はポーリング周期、SSEDの場合はCSLベースのタイミング)よりも短く設定されている場合、デバイスはThreadの要件を満たすために予想よりも早く起動してしまいます。
余計な起動を避けるために、以下のタイムアウト値を、意図した起動間隔(または次のトピックで学習するICDスローポーリング間隔)以上に設定してください。
CONFIG_OPENTHREAD_MLE_CHILD_TIMEOUT=<s>
CONFIG_OPENTHREAD_CHILD_SUPERVISION_CHECK_TIMEOUT=<s>
CONFIG_OPENTHREAD_CHILD_SUPERVISION_INTERVAL=<s>KconfigCONFIG_OPENTHREAD_MLE_CHILD_TIMEOUT:親デバイスが子デバイスからの通信がない場合に、切断されたと見なすまでの最大時間(秒単位)。これをデバイスの起動間隔以上に設定します。CONFIG_OPENTHREAD_CHILD_SUPERVISION_CHECK_TIMEOUT:子デバイス側で、親デバイスからの監視メッセージを期待する間隔(秒単位)。これを起動間隔以上に設定します。CONFIG_OPENTHREAD_CHILD_SUPERVISION_INTERVAL:他のトラフィックが発生しない場合に、親デバイス側で監視メッセージを送信する間隔(秒単位)。余計な起動を避けるために、これを起動間隔以上に設定します。Matterデバイスは、ファブリックに参加する前にBluetooth LEでアドバタイズを行います。アドバタイズの期間はエネルギー消費に直接影響します。
以下の項目を使用してBluetooth LEのアドバタイズ動作を制御します。
CONFIG_CHIP_BLE_EXT_ADVERTISING=n
CONFIG_CHIP_BLE_ADVERTISING_DURATION=<min>KconfigCONFIG_CHIP_BLE_EXT_ADVERTISING:拡張アドバタイズを無効にするにはnに設定します。無効にすると、デバイスは15分を超えてアドバタイズすることはできません。CONFIG_CHIP_BLE_ADVERTISING_DURATION:アドバタイズ期間(分単位)を設定します。Matter over Wi-Fiデバイスは、低電力機能が限定的であるため、一般的に主電源駆動となります。主なメカニズムはWi-Fiパワーセーブ(PS)であり、デバイスはDTIM(Delivery Traffic Indication Map)間隔の間にスリープします。DTIM間隔を長くすると起動回数は減りますが、レイテンシも増大し、依然としてThreadよりもはるかに高い電力を消費します。
Wi-Fiパワーセーブモードを有効にするには、以下を使用します。
CONFIG_NRF_WIFI_LOW_POWER=yKconfigCONFIG_NRF_WIFI_LOW_POWER:nRF Wi-Fiチップセットの低電力モードを有効にします。ThreadおよびMatter固有の設定に加えて、いくつかのプラットフォームレベルの技術によってデバイスのベースライン消費電力を削減できます。これらの手法は、ThreadかWi-Fiかに関わらずすべてのMatterデバイスに適用され、電池駆動製品を設計する際に考慮すべき事項です。
Zephyrのシステム電力管理サブシステムを使用すると、アイドル時にCPUと周辺機器を自動的にスリープさせることで消費電力を削減できます。これは以下のKconfigオプションで有効になります。
CONFIG_PM=yKconfig以下の最適化は、デバイスがアイドル状態またはスリープ状態のときの消費電流を最小限に抑えるのに役立ちます。
ロギングはUARTをアクティブに保つため、アイドル電流が大幅に増加します。
これを防ぐには、Kconfigでロギングモジュールを無効にし、デバイスツリーでUART周辺機器の状態をdisabledに設定します。
CONFIG_NRF_WIFI_LOW_POWER=yKconfig&uart1 {
status = "disabled";
};Devicetree使用していないハードウェアブロック(I2C/SPIコントローラー、GPIO、タイマー)が有効なままになっていないことを確認してください。これらは周辺機器の状態をdisabledに設定することで無効にできます。例:
&adc {
status = "disabled";
};DevicetreeLEDは、たまにしか点滅させない場合でも電流を消費します。Matterアプリケーションでは、以下を設定することでこれらを無効にできます。
CONFIG_NCS_SAMPLE_MATTER_LEDS=nKconfigボードに外部フラッシュが含まれている場合は、使用していないときにディープパワーダウンモードに移行するようにしてください。pm_device_action_run()でパワーダウンできます。
未使用のRAMブロックを無効にして、リーク電流を抑えることができます。この機能を有効にするには、以下を設定します。
CONFIG_RAM_POWER_DOWN_LIBRARY=yKconfigこれが有効な場合、初期化プロセス中にmatter_init.cppファイル内でpower_down_unused_ram()関数が自動的に呼び出されます。