Home Assistant・Tasmota・InfluxDBでHomeLabの消費電力を監視:電気代の把握とサーバー最適化

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

消費電力の監視をHomeLab次のプロジェクトにすべき理由

HomeLabを運用するのは楽しいものだ――電気代の請求書が届くまでは。私が現実を突きつけられたのは、NAS、小規模なProxmoxクラスター、常時稼働の Raspberry Pi を3台追加した後、月々の電気代が35ユーロも跳ね上がったときだった。どのデバイスが原因なのか、まったく見当もつかなかった。そこで推測するのをやめて、実際に計測することにした。

リアルタイムで消費電力を把握できると、自分のセットアップに対する考え方が変わる。どのサーバーをスリープスケジュールで運用すべきか?あの古いデスクトップPCを24時間365日稼働させる価値は本当にあるのか?HomeLabにかかる月額コストはいくらなのか?数字がわかれば、ハードウェアに関するあらゆる判断が明確になり、電気代が謎のままであることはなくなる。

アプローチ比較:消費電力を監視する3つの方法

HomeLabの消費電力監視には、主に3つのアプローチがある。表面上は似ているが、実際に使い続けると動作の違いが大きく出てくる。

オプション1:クラウドアプリ付きの市販スマートプラグ

TP-Link KasaやMerossのようなプラグは、ベンダーのクラウドアプリ経由で電力データを報告する。セットアップは数分で済み、アプリも洗練されている。ただし落とし穴がある。データは他社のサーバーに保存され、そのエコシステムに縛られ、ローカルポーリングにはリバースエンジニアリングやサードパーティ連携が必要になる。セルフホスト環境を構築してきた人なら、このルートはすぐに見切りをつけることが多い。

オプション2:SNMPモニタリング付きUPS

APCやCyberPowerのUPSをすでに持っているなら、SNMPで回路全体の消費電力の合計を取得できる。NUT(Network UPS Tools)のようなツールはHome AssistantやGrafanaとシームレスに連携する。欠点は粒度の粗さだ。ラック全体の消費量が1つの数値でしかわからない。NASなのか、古いゲーミングPCなのか、ネットワークスイッチなのか、どれが電力を食っているかは判別できない。

オプション3:Tasmotaスマートプラグ + ローカルMQTT + Home Assistant

私が採用したのはこのスタックだ。Tasmotaを書き込んだプラグ――Sonoff S31、BlitzWolf BW-SHP6、または最初からTasmotaが書き込まれた状態で届くAthomプラグ――は数秒ごとに電圧・電流・ワット数をローカルMQTT経由で報告する。クラウド不要、サブスクリプション不要。Home Assistantがデータを取り込み、InfluxDBが時系列の履歴を保存することで、Grafanaダッシュボードや長期的なコスト分析に活用できる。

Tasmota + Home Assistant + InfluxDBスタックのメリット・デメリット

メリット

  • 完全ローカル:データがネットワークの外に出ない。MQTTブローカーは自分のサーバーで動作する。
  • デバイス単位の粒度:デバイス1台につきプラグ1個なので、何がどれだけ消費しているかが正確にわかる。
  • コスト:Tasmota対応プラグは1個5〜15ドル程度。サブスクリプション料金は不要。
  • オートメーションとの連携:Home Assistantが電力イベントに反応できる――消費電力が急増したときにサーバーをシャットダウンしたり、デバイスが予期せずアイドルになったときにアラートを送ったりできる。
  • 長期履歴:InfluxDBは時系列データを効率よく扱う。日・週・月単位の消費量をクエリしてもパフォーマンスの問題は起きない。

デメリット

  • 初期セットアップの手間:Tasmotaの書き込み、MQTTの設定、InfluxDB連携の構築――初回は数時間かかる覚悟が必要だ。
  • プラグ1個あたり1台の制限:各プラグで扱えるのは1デバイスのみ。ラック全体を監視するには複数のプラグが必要になる。
  • 精度:コンシューマー向けプラグの精度は±1〜2%程度。コスト追跡には十分だが、ラボグレードの計測には向かない。
  • キャリブレーションが必要な場合がある:Tasmotaプラグの中には箱出しの状態で数パーセントずれるものがあり、基準メーターと照らし合わせた1回限りのキャリブレーションが必要になることがある。

推奨セットアップ

現在私のHomeLabで稼働しているスタックを紹介する:

  • スマートプラグ:Athom Tasmota Pre-Flashedプラグ(書き込み作業不要)またはSonoff S31(シリアルまたはOTA経由で書き込み)
  • MQTTブローカー:Mosquitto(DockerコンテナまたはHome Assistantアドオンとして動作)
  • Home Assistant:オートメーションハブ、ダッシュボード、連携の中核
  • InfluxDB 2.x:履歴データ保存用の時系列データベース
  • Grafana(オプション):HAの標準グラフ以上のリッチなダッシュボードが必要な場合に

すでにTIGスタック(Telegraf/InfluxDB/Grafana)を運用しているなら、HA連携を既存のInfluxDBインスタンスに向けるだけでインストール作業は不要だ。

実装ガイド

ステップ1:スマートプラグにTasmotaを設定する

プラグが最初からTasmotaで届かない場合は、シリアル経由で1回書き込みを行い、その後はWiFi経由で設定する。http://<plug-ip>/でTasmotaのWeb UIを開き、MQTTを設定する:

Configuration → Configure MQTT
  Host: <your-mosquitto-ip>
  Port: 1883
  Topic: tasmota_%06X   ← デバイスごとに固有のトピック
  Full Topic: homelab/%prefix%/%topic%/

テレメトリ送信間隔をデフォルトの300秒から短縮する。私はほぼリアルタイムのデータを得るために30秒に設定している:

# Tasmotaコンソールで:
Teleperiod 30

これでプラグは30秒ごとにhomelab/tele/<device>/SENSORへ送信するようになる。JSONペイロードは次のような形式だ:

{
  "Time": "2026-05-22T14:30:00",
  "ENERGY": {
    "Voltage": 230,
    "Current": 0.854,
    "Power": 196,
    "ApparentPower": 196,
    "ReactivePower": 0,
    "Factor": 1.00,
    "Today": 1.234,
    "Yesterday": 2.891,
    "Total": 45.123
  }
}

ステップ2:TasmotaデバイスをHome Assistantに追加する

HAのMQTT連携はディスカバリーを有効にするとTasmotaデバイスを自動検出する――旧バージョンのTasmotaビルドにはSetOption19 1を使い、新しいHAバージョンでは内蔵のTasmota連携を利用する。configuration.yamlでの手動設定でも動作し、より細かい制御が可能だ:

mqtt:
  sensor:
    - name: "Proxmox Node Power"
      state_topic: "homelab/tele/proxmox_plug/SENSOR"
      value_template: "{{ value_json.ENERGY.Power }}"
      unit_of_measurement: "W"
      device_class: power

    - name: "Proxmox Node Energy Today"
      state_topic: "homelab/tele/proxmox_plug/SENSOR"
      value_template: "{{ value_json.ENERGY.Today }}"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing

各プラグに対してこのブロックをコピーし、トピック名とセンサー名を更新する。YAML設定を再読み込みすると、センサーがすぐにHAに表示される。

ステップ3:InfluxDBに履歴を保存する

InfluxDB 2.xをDockerコンテナとして起動するか、Home Assistantアドオン経由でインストールする:

docker run -d \
  --name influxdb \
  -p 8086:8086 \
  -v influxdb-data:/var/lib/influxdb2 \
  influxdb:2

http://<server>:8086のInfluxDB UIでhomeassistantという名前のバケットを作成する。次にconfiguration.yamlでHA連携を設定する:

influxdb:
  api_version: 2
  ssl: false
  host: <influxdb-ip>
  port: 8086
  token: <your-influxdb-token>
  organization: <your-org>
  bucket: homeassistant
  include:
    entity_globs:
      - sensor.*_power
      - sensor.*_energy*

電力関連のセンサーに絞り込むことでストレージを抑えられる。私のインスタンスは8ヶ月間10GBのボリュームで上限に達することなく動作し続けている。

ステップ4:月間電気代を計算する

InfluxDBにエネルギーデータが蓄積されたら、Fluxを使って月間コストをクエリできる。0.15の部分を自分の地域のkWh単価に置き換えること:

from(bucket: "homeassistant")
  |> range(start: -30d)
  |> filter(fn: (r) => r["entity_id"] =~ /energy_today/)
  |> sum(column: "_value")
  |> map(fn: (r) => ({ r with cost_usd: r._value * 0.15 }))

これをGrafanaのパネル変数として使えば、すべてのダッシュボードに現在の月の費用が自動的に地元通貨で表示される。私のHomeLabの月間コストは約22ユーロで、その大部分をProxmoxクラスターが占めている。

ステップ5:消費電力アラートを設定する

ここからセットアップが実際に価値を発揮し始める。以下のオートメーションは、デバイスが5分以上高い電力を消費し続けたときに発火する――計算処理がループし続けているサーバーを検知するのに便利だ:

automation:
  - alias: "アラート: Proxmox 消費電力過多"
    trigger:
      - platform: numeric_state
        entity_id: sensor.proxmox_node_power
        above: 350
        for:
          minutes: 5
    action:
      - service: notify.mobile_app
        data:
          title: "HomeLab 電力アラート"
          message: >-
            Proxmoxが5分以上 {{ states('sensor.proxmox_node_power') }}W を消費しています。
            暴走したワークロードがないか確認してください。

もう1つのオートメーションは、合計負荷が閾値を超えたときにオフピーク時間帯に非重要VMをシャットダウンする。これだけで月の電気代が約8ユーロ削減できた。

ステップ6:プラグをキャリブレーションする

箱出し状態では5〜10%ずれて計測するTasmotaプラグもある。基準メーター――ホームセンターで15ドル程度のプラグイン式のもので十分――を用意し、Tasmotaコンソールからキャリブレーションを行う:

# 既知の純抵抗負荷(例:100W白熱電球)を接続した状態で:
PowerSet 100.0    # 実際のワット数をTasmotaに伝える
VoltageSet 230    # 実測電圧を設定する
CurrentSet 0.435  # 実測電流を設定する

キャリブレーション後、私のプラグは基準メーターと1%以内の誤差に収まっている。コスト追跡には十分な精度だ。

本番運用で得たノウハウ

  • Tasmotaでプラグにラベルをつける:FriendlyName1 Proxmox Nodeのように設定すると、HAの自動検出にも引き継がれ、8個のプラグが全部「Tasmota_XXXXXX」という名前になる混乱を防げる。
  • スタンバイ消費電力を監視する:多くのデバイスが何もしていない状態で5〜15Wを消費している。1ヶ月でデバイス1台あたり3〜11kWhになる。HAのエネルギーダッシュボードを使えば、こうした「電力吸血鬼」をすぐに発見できる。
  • InfluxDBの保持ポリシーを活用する:30秒単位の生データは7日間保持し、1年間は時間平均にダウンサンプリングする。これによりデータベースが際限なく肥大化するのを防げる。
  • HAのエネルギーダッシュボードでデバイスを論理的にグループ化する:(設定 → エネルギー)「サーバー」「ネットワーク機器」「ストレージ」に分けることで、電力予算がどこに使われているかが把握しやすくなる。
  • ネットワーク機器を忘れずに:スイッチやルーターは24時間365日稼働している。私の環境では合計45Wを消費しており、アイドル時のNASより多い。実際に計測するまで見落としがちな部分だ。
Share: