消費電力の監視を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より多い。実際に計測するまで見落としがちな部分だ。

