Giám sát điện năng HomeLab với Home Assistant, Tasmota và InfluxDB: Theo dõi chi phí điện và tối ưu máy chủ

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

Tại sao giám sát điện năng nên là dự án HomeLab tiếp theo của bạn

Chạy một HomeLab rất thú vị — cho đến khi hóa đơn tiền điện đến tay. Cú sốc của tôi đến khi tiền điện hàng tháng tăng vọt €35 sau khi thêm một NAS, một cụm Proxmox nhỏ và ba chiếc Raspberry Pi chạy liên tục. Tôi không biết thiết bị nào là thủ phạm. Đó là lúc tôi ngừng đoán mò và bắt đầu đo đạc thực sự.

Biết mức tiêu thụ điện theo thời gian thực thay đổi hoàn toàn cách bạn nhìn nhận hệ thống của mình. Máy chủ nào nên đặt lịch ngủ? Cái máy tính bàn cũ đó có thực sự đáng để chạy 24/7 không? HomeLab của bạn tốn bao nhiêu tiền mỗi tháng? Khi đã có con số cụ thể, mọi quyết định về phần cứng đều trở nên sắc bén hơn — và hóa đơn điện không còn là ẩn số nữa.

So sánh các phương án: Ba cách giám sát điện năng

Có ba phương án chính để giám sát điện năng cho HomeLab. Nhìn qua thì có vẻ giống nhau, nhưng khi dùng thực tế lại khác nhau hoàn toàn.

Phương án 1: Ổ cắm thông minh thương mại kèm ứng dụng đám mây

Các ổ cắm như TP-Link Kasa hay Meross gửi dữ liệu điện năng qua ứng dụng đám mây của nhà sản xuất. Cài đặt chỉ mất vài phút và ứng dụng khá bóng bẩy. Nhưng nhược điểm là: dữ liệu của bạn nằm trên máy chủ của người khác, bạn bị khóa chặt vào hệ sinh thái của họ, và để truy vấn cục bộ thì phải reverse-engineering hoặc dùng tích hợp bên thứ ba. Ai đã từng xây dựng hệ thống self-hosted thường bỏ qua hướng này rất nhanh.

Phương án 2: UPS với giám sát SNMP

Đã có UPS của APC hay CyberPower rồi? SNMP cho bạn tổng mức tiêu thụ điện của toàn bộ thiết bị trên mạch. Các công cụ như NUT (Network UPS Tools) tích hợp gọn gàng với Home Assistant và Grafana. Nhược điểm là độ chi tiết — bạn chỉ có một con số cho toàn bộ rack. Dù là NAS, máy gaming cũ hay switch mạng đang ngốn điện, bạn cũng không phân biệt được.

Phương án 3: Ổ cắm Tasmota + MQTT nội bộ + Home Assistant

Đây là bộ công cụ tôi đang dùng. Các ổ cắm đã flash Tasmota — Sonoff S31, BlitzWolf BW-SHP6, hoặc ổ cắm Athom xuất xưởng đã flash sẵn — báo cáo điện áp, cường độ dòng điện và công suất mỗi vài giây qua MQTT nội bộ. Không có đám mây, không có phí thuê bao. Home Assistant tiếp nhận dữ liệu, và InfluxDB lưu trữ lịch sử chuỗi thời gian cho dashboard Grafana hoặc phân tích chi phí dài hạn.

Ưu và nhược điểm của bộ Tasmota + Home Assistant + InfluxDB

Ưu điểm

  • Hoàn toàn nội bộ: Không có dữ liệu nào rời khỏi mạng của bạn. MQTT broker chạy trên máy chủ của bạn.
  • Chi tiết từng thiết bị: Một ổ cắm cho một thiết bị, bạn biết chính xác cái gì đang tiêu thụ bao nhiêu.
  • Chi phí: Ổ cắm tương thích Tasmota chỉ $5–$15 mỗi cái. Không mất phí thuê bao.
  • Tích hợp tự động hóa: Home Assistant có thể phản ứng theo sự kiện điện năng — tắt máy chủ khi công suất tăng đột biến, gửi cảnh báo khi thiết bị bất ngờ chuyển sang trạng thái chờ.
  • Lịch sử dài hạn: InfluxDB xử lý dữ liệu chuỗi thời gian hiệu quả. Truy vấn mức tiêu thụ theo ngày, tuần hoặc tháng mà không gặp vấn đề hiệu năng.

Nhược điểm

  • Công sức cài đặt ban đầu: Flash Tasmota, cấu hình MQTT, kết nối tích hợp InfluxDB — lần đầu cần dành ra vài tiếng.
  • Giới hạn theo ổ cắm: Mỗi ổ cắm chỉ quản lý một thiết bị. Một rack đầy đủ cần nhiều ổ cắm.
  • Độ chính xác: Ổ cắm thông thường có sai số ±1–2%, đủ để theo dõi chi phí nhưng không đạt chuẩn đo lường phòng lab.
  • Đôi khi cần hiệu chỉnh: Một số ổ cắm Tasmota đọc sai vài phần trăm ngay khi mở hộp và cần hiệu chỉnh một lần với đồng hồ chuẩn.

Cấu hình khuyến nghị

Đây là bộ công cụ đang chạy trong HomeLab của tôi hiện tại:

  • Ổ cắm thông minh: Ổ cắm Athom Tasmota Pre-Flashed (bỏ qua bước flash) hoặc Sonoff S31 (flash qua cổng serial hoặc OTA)
  • MQTT Broker: Mosquitto, chạy dưới dạng Docker container hoặc add-on của Home Assistant
  • Home Assistant: Trung tâm tự động hóa, dashboard và điểm tích hợp
  • InfluxDB 2.x: Cơ sở dữ liệu chuỗi thời gian để lưu trữ dữ liệu lịch sử
  • Grafana (tùy chọn): Dashboard phong phú hơn nếu bạn muốn vượt ra ngoài biểu đồ tích hợp của HA

Đã chạy bộ TIG stack (Telegraf/InfluxDB/Grafana) rồi? Chỉ cần trỏ tích hợp HA vào instance InfluxDB hiện có và bỏ qua bước cài đặt.

Hướng dẫn triển khai

Bước 1: Cấu hình Tasmota trên ổ cắm thông minh

Nếu ổ cắm chưa được flash sẵn, hãy flash Tasmota một lần qua cổng serial, sau đó cấu hình qua WiFi. Mở giao diện web Tasmota tại http://<plug-ip>/ và thiết lập MQTT:

Configuration → Configure MQTT
  Host: <your-mosquitto-ip>
  Port: 1883
  Topic: tasmota_%06X   ← duy nhất cho mỗi thiết bị
  Full Topic: homelab/%prefix%/%topic%/

Giảm khoảng thời gian gửi telemetry từ mặc định 300 giây. Tôi dùng 30 giây để có dữ liệu gần như thời gian thực:

# Trong console Tasmota:
Teleperiod 30

Ổ cắm sẽ gửi dữ liệu tới homelab/tele/<device>/SENSOR mỗi 30 giây. Payload JSON trông như sau:

{
  "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
  }
}

Bước 2: Thêm thiết bị Tasmota vào Home Assistant

Tích hợp MQTT của HA tự động phát hiện thiết bị Tasmota nếu bạn bật tính năng discovery — dùng SetOption19 1 cho các bản Tasmota cũ, hoặc tích hợp Tasmota tích hợp sẵn trong các phiên bản HA mới hơn. Cấu hình thủ công trong configuration.yaml cũng hoạt động tốt và cho bạn kiểm soát nhiều hơn:

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

Sao chép khối này cho từng ổ cắm, cập nhật topic và tên tương ứng. Reload cấu hình YAML và các sensor sẽ xuất hiện ngay trong HA.

Bước 3: Lưu lịch sử vào InfluxDB

Khởi động InfluxDB 2.x dưới dạng Docker container hoặc cài qua add-on của Home Assistant:

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

Tạo một bucket tên homeassistant qua giao diện InfluxDB tại http://<server>:8086. Sau đó kết nối tích hợp HA trong configuration.yaml:

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*

Lọc chỉ các sensor liên quan đến điện năng giúp tiết kiệm dung lượng lưu trữ. Instance của tôi đã chạy 8 tháng trên ổ 10 GB mà chưa chạm giới hạn.

Bước 4: Tính chi phí điện hàng tháng

Với dữ liệu điện năng trong InfluxDB, truy vấn chi phí hàng tháng bằng Flux. Thay 0.15 bằng giá điện thực tế tại địa phương bạn (đơn vị 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 }))

Tôi dùng truy vấn này làm biến panel trong Grafana để mọi dashboard tự động hiển thị chi phí tháng hiện tại theo đơn vị tiền tệ địa phương. HomeLab của tôi tốn khoảng €22/tháng — cụm Proxmox chiếm phần lớn trong đó.

Bước 5: Thiết lập cảnh báo tiêu thụ điện

Đây là lúc hệ thống bắt đầu thực sự phát huy giá trị. Automation bên dưới kích hoạt khi một thiết bị tiêu thụ công suất cao quá 5 phút — rất hữu ích để phát hiện máy chủ bị kẹt trong vòng lặp tính toán:

automation:
  - alias: "Cảnh báo: Proxmox tiêu thụ điện cao"
    trigger:
      - platform: numeric_state
        entity_id: sensor.proxmox_node_power
        above: 350
        for:
          minutes: 5
    action:
      - service: notify.mobile_app
        data:
          title: "Cảnh báo điện HomeLab"
          message: >-
            Proxmox đang kéo {{ states('sensor.proxmox_node_power') }}W
            trong hơn 5 phút. Kiểm tra xem có tiến trình nào chạy bất thường không.

Một automation thứ hai tắt các VM không quan trọng trong giờ thấp điểm khi tổng tải vượt ngưỡng. Chỉ riêng cái này đã giúp tôi cắt giảm khoảng €8/tháng trên hóa đơn điện.

Bước 6: Hiệu chỉnh ổ cắm

Mới mở hộp ra, một số ổ cắm Tasmota đọc sai 5–10%. Lấy một đồng hồ đo chuẩn — loại cắm điện $15 ở bất kỳ cửa hàng điện nào cũng dùng được — và hiệu chỉnh qua console Tasmota:

# Với tải thuần trở đã biết (ví dụ: bóng đèn sợi đốt 100W):
PowerSet 100.0    # Cho Tasmota biết công suất thực tế
VoltageSet 230    # Đặt điện áp thực tế đã đo
CurrentSet 0.435  # Đặt cường độ dòng điện thực tế đã đo

Sau khi hiệu chỉnh, các ổ cắm của tôi đọc sai không quá 1% so với đồng hồ chuẩn. Đủ chính xác để theo dõi chi phí điện.

Những kinh nghiệm từ thực tế vận hành

  • Đặt tên ổ cắm trong Tasmota bằng lệnh FriendlyName1 Proxmox Node — tên này sẽ hiển thị qua tính năng auto-discovery của HA và tránh nhầm lẫn khi bạn có tám ổ cắm đều tên “Tasmota_XXXXXX”.
  • Theo dõi điện năng chế độ chờ: Rất nhiều thiết bị tiêu thụ 5–15W ngay cả khi không làm gì. Trong một tháng, đó là 3–11 kWh mỗi thiết bị. Dashboard năng lượng của HA giúp bạn nhận ra những “ma cà rồng điện” này rất nhanh.
  • Dùng retention policy của InfluxDB: Giữ dữ liệu thô 30 giây trong 7 ngày, hạ mẫu xuống trung bình theo giờ cho 1 năm. Cách này ngăn cơ sở dữ liệu phình to vô hạn.
  • Nhóm thiết bị theo logic trong Energy Dashboard của HA (Settings → Energy) — tách “máy chủ” khỏi “thiết bị mạng” và “lưu trữ” để thấy ngân sách điện thực sự đang đổ vào đâu.
  • Đừng quên thiết bị mạng: Switch và router chạy 24/7. Tổng cộng của tôi tiêu thụ 45W — nhiều hơn cả NAS ở chế độ chờ. Dễ bỏ qua cho đến khi bạn thực sự đo thử.
Share: