1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

低コストなデスク環境の消費電力をスマートプラグで計測・分析する

1
Last updated at Posted at 2026-10-25

デスク周りの電気代は、PC本体だけでなく、ディスプレイ、USBハブ、スピーカー、照明、充電器などの合計で決まります。個別の機器をスペック表だけで見積もると、待機電力や実際の使用時間を反映できません。

そこで私は、電力計測に対応したスマートプラグをデスクの電源タップ手前に設置し、Home Assistant経由で電力を記録してみました。結論として、数千円程度の機器でも「使っていない時間の消費」「作業中のピーク」「機器ごとの使い方による違い」を把握できます。重要なのは、瞬間的なワット数だけでなく、時間あたりの積算電力量を見ることです。

用意したもの

今回の構成は次のとおりです。

  • 電力計測に対応したスマートプラグ
  • Home Assistantを動かすRaspberry Piなどの常時稼働端末
  • デスク用の電源タップ
  • Wi-Fiネットワーク
  • 電力を記録するPython環境

スマートプラグは、オン・オフ操作だけでなく、現在の電力(W)または積算電力量(kWh)を取得できるモデルを選びます。購入前に、Home Assistantの連携に対応しているかも確認しました。

電源の接続は次のようにしています。

壁コンセント
  └─ スマートプラグ
       └─ 電源タップ
            ├─ PC
            ├─ ディスプレイ
            ├─ USBハブ
            └─ デスクライト

スマートプラグの定格を超えないことが前提です。電気ストーブやヒーター、ケトルなど大電力機器を、デスク用と同じ感覚で接続するのは避けます。プラグや電源タップが熱を持つ場合は、すぐに使用を中止します。

Home Assistantで電力センサーを確認する

Home Assistantにスマートプラグを追加した後、開発者ツールの「状態」からセンサーのエンティティIDを確認します。私の環境では、次のようなセンサーが作成されました。

sensor.desk_power_power

このセンサーの状態値が現在の消費電力で、単位はWです。機器によっては、属性に電圧や電流、積算電力量が含まれています。

Home AssistantのREST APIを使うと、現在値をコマンドラインから確認できます。長期アクセストークンを発行し、環境変数に設定して実行します。

export HA_URL="http://homeassistant.local:8123"
export HA_TOKEN="ここに長期アクセストークン"
export ENTITY_ID="sensor.desk_power_power"

curl -s \
  -H "Authorization: Bearer ${HA_TOKEN}" \
  -H "Content-Type: application/json" \
  "${HA_URL}/api/states/${ENTITY_ID}"

レスポンスは、概ね次のようなJSONです。

{
  "entity_id": "sensor.desk_power_power",
  "state": "42.7",
  "attributes": {
    "unit_of_measurement": "W",
    "friendly_name": "Desk Power"
  }
}

ここで注意したのは、同じ「power」という名前でも、現在電力と積算電力量が別センサーになっている場合があることです。unit_of_measurement が W なら瞬間値、kWh なら積算値として扱います。

Pythonで定期記録する

まずは現在電力を1分間隔でCSVに保存しました。電力の変化を確認するだけなら、この程度のスクリプトで十分です。

import csv
import os
import time
from datetime import datetime, timezone

import requests

HA_URL = os.environ["HA_URL"].rstrip("/")
HA_TOKEN = os.environ["HA_TOKEN"]
ENTITY_ID = os.environ.get(
    "ENTITY_ID",
    "sensor.desk_power_power",
)
CSV_PATH = "desk_power.csv"

headers = {
    "Authorization": f"Bearer {HA_TOKEN}",
    "Content-Type": "application/json",
}

def read_power():
    url = f"{HA_URL}/api/states/{ENTITY_ID}"
    response = requests.get(url, headers=headers, timeout=10)
    response.raise_for_status()

    data = response.json()
    return float(data["state"]), data["attributes"].get(
        "unit_of_measurement", ""
    )

with open(CSV_PATH, "a", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)

    if file.tell() == 0:
        writer.writerow(["timestamp", "power", "unit"])

    while True:
        try:
            power, unit = read_power()
            timestamp = datetime.now(timezone.utc).isoformat()
            writer.writerow([timestamp, power, unit])
            file.flush()
            print(timestamp, power, unit)
        except Exception as error:
            print(f"read error: {error}")

        time.sleep(60)

実行前に、必要な環境変数を設定します。

python -m pip install requests

export HA_URL="http://homeassistant.local:8123"
export HA_TOKEN="ここに長期アクセストークン"
export ENTITY_ID="sensor.desk_power_power"

python record_power.py

この方法では、スクリプトが停止すると記録も止まります。常時記録する場合は、systemdやDockerなどで自動起動する構成にします。ただし、最初から複雑にせず、まず数時間だけ手動で動かして、センサー値が正しく取得できることを確認しました。

Wから電力量を計算する

電力の取得から電力量・電気代の確認までの流れを図にすると次の通りです。

CSVに保存した瞬間電力から、消費電力量を概算できます。1分間隔で同じ電力が続いたと仮定すると、次の式になります。

消費電力量(Wh) = 電力(W) × 経過時間(分) ÷ 60

CSVを読み込み、隣り合う測定値の平均を使って台形積分するコードを用意しました。電力が急に変化するデスク環境では、単純な「現在値×時間」より少し扱いやすい方法です。

import csv
from datetime import datetime

CSV_PATH = "desk_power.csv"

rows = []

with open(CSV_PATH, encoding="utf-8") as file:
    for row in csv.DictReader(file):
        if row["unit"] != "W":
            continue

        timestamp = datetime.fromisoformat(row["timestamp"])
        power = float(row["power"])
        rows.append((timestamp, power))

energy_wh = 0.0

for (time_a, power_a), (time_b, power_b) in zip(rows, rows[1:]):
    seconds = (time_b - time_a).total_seconds()

    # 長時間の欠測がある区間は計算から除外
    if seconds <= 0 or seconds > 180:
        continue

    average_power = (power_a + power_b) / 2
    energy_wh += average_power * seconds / 3600

print(f"測定点数: {len(rows)}")
print(f"推定消費電力量: {energy_wh:.2f} Wh")
print(f"推定消費電力量: {energy_wh / 1000:.4f} kWh")

記録間隔が大きくずれていると結果もずれるため、スリープ復帰やネットワーク切断があった時間帯は別扱いにしました。可能なら、スマートプラグ側やHome Assistantの履歴にある積算電力量センサーを使う方が安定します。

測定して分かったこと

私が最初に確認したのは、PCをシャットダウンした後のデスク全体の電力です。画面やUSB機器を接続したままにすると、作業中ほどではないものの、ゼロにはなりませんでした。特にディスプレイ、USBハブ、スピーカーの電源状態で値が変わります。

次に、作業パターンごとにCSVを分けて比較しました。

  • PCで文章を書く
  • ブラウザのタブを多く開く
  • 外部ディスプレイを使う
  • PCをスリープさせる
  • デスクライトだけを使う

ここで便利だったのは、平均値だけでなく最大値と時間帯を見ることです。平均電力が同じでも、短時間のピークがある場合があります。また、PCの処理内容によって消費電力が変わるため、「PCは常に同じワット数」と仮定しない方が実態に近い分析になります。

電気代に換算する場合は、契約している単価を使います。たとえば単価を 31円/kWh として、測定結果が 0.8kWh なら次の計算です。

0.8kWh × 31円/kWh = 24.8円

単価は契約や地域、料金プランによって変わるため、記事やサンプルコードに固定値として埋め込まず、自分の明細に合わせて変更します。

計測時の注意点

スマートプラグの値は、精密な電力計の代替ではありません。小さな待機電力や力率の影響で、実際の消費量と差が出ることがあります。今回は「どの使い方が多いか」「電源を切った後も消費しているか」を把握する目的で使いました。

また、測定対象を増やしすぎると原因が分からなくなります。最初はデスク全体を測り、次に電源タップの接続機器を一つずつ確認する方法が分かりやすいです。

APIトークンは、スクリプトに直接書かず環境変数で管理します。CSVにも時刻と電力しか保存しませんが、共有する場合は自宅の環境やホスト名が含まれていないか確認します。

まとめ

低コストなデスク環境でも、電力計測対応のスマートプラグとHome Assistantを組み合わせると、実際の消費傾向を継続的に確認できます。

今回のポイントは次の3つです。

  • まずデスク全体を測り、次に機器ごとの影響を切り分ける
  • Wの瞬間値だけでなく、WhやkWhで時間を含めて見る
  • 安全性と定格を確認し、大電力機器には安易に使わない

スペック上の消費電力を眺めるだけでなく、自分の作業ログと電力ログを重ねると、照明やディスプレイの使い方を見直すきっかけになります。計測そのものを目的にせず、快適さを保ちながら不要な待機電力を減らすための材料として活用するのが、スマートプラグのちょうどよい使い方だと感じました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?