Cytron Technologies

Giờ làm việc: 8:00 - 17:00

Thứ 2 - Thứ 6 (trừ ngày lễ)

Hotline 0362917357 

Theo dõi dữ liệu Biến tần Dài hạn với Grafana và InfluxDB trên IRIV Pi Control

Ở bài trước, chúng ta đã đọc biến tần qua RS485 bằng IRIV IOC MQTT Gateway, đẩy MQTT JSON lên mạng nội bộ và xem số liệu thời gian thực trên trình duyệt.

Trong khi dữ liệu thời gian thực cho chúng ta biết giá trị tức thời của biến tần, muốn kiểm tra xem tháng này sản xuất bao nhiêu kWh, pin đang làm đúng vai trò chưa, hay so sánh tuần này với tuần trước cần có dữ liệu được lưu trữ dài hạn và dashboard để phân tích.

Bài viết này hướng dẫn dựng stack Telegraf → InfluxDB → Grafana trên IRIV Pi Control (hoặc bất kỳ máy nào chạy Docker), khai thác luồng MQTT iriv/ivt/# kèm dashboard để sẵn sàng theo dõi và phân tích dữ liệu từ Biến tần năng lượng mặt trời trong thời gian dài.

Dự án mã nguồn mở: grafana-dashboard-inverter-mqtt
Bài 1 (RS485 → MQTT): Giám sát biến tần thời gian thực qua RS485

Trong bài viết này, mình chạy stack trên IRIV Pi Control cùng biến tần Deye SUN-6K-SG06LP1. Repo không giao tiếp RS485 với biến tần trực tiếp mà chỉ subscribe MQTT. Vì vậy, biến tần hybrid / off-grid / grid-tie và các hãng LuxPower, Sumry, PowMr, … đều dùng được, miễn dữ liệu đã publish MQTT theo contract topic bên dưới.

1. Tổng quan kiến trúc

Biến tần RS485
    └─► IRIV IOC MQTT Gateway          (bài 1)
            └─► Mosquitto :1883
                    topics: iriv/ivt/#     (biến tần 1)
                            iriv/ivt-2/#   (biến tần 2, tùy chọn)
                    │
                    ▼
              Telegraf  →  InfluxDB 2.7  →  Grafana :3000
                               │
                               ├─ solar_raw   (60 ngày, độ phân giải cao)
                               ├─ solar_1h    (~2 năm)
                               └─ solar_1d    (vĩnh viễn — năng lượng theo ngày)
Thành phầnVai trò
MosquittoBroker MQTT đã có từ bài 1 (hoặc broker sẵn có trên LAN)
TelegrafSubscribe MQTT → ghi Influx; tính thêm house load / house energy
InfluxDBLưu time-series + task downsample
GrafanaDashboard Flux (Overview, Electrical, Energy, …)

Lưu ý: Service Mosquitto trong docker-compose.yml của repo Grafana đang comment mặc định, để tránh xung đột cổng 1883 với broker bạn đã chạy ở bài 1. Chỉ bỏ comment nếu máy chưa có broker nào.

2. Phần cứng / điều kiện trước khi bắt đầu

Thành phầnGhi chú
Đã hoàn thành bài 1 (hoặc tương đương)IRIV IOC đang publish MQTT, có thể mosquitto_sub -t "iriv/ivt/#" thấy số nhảy
IRIV Pi Control (khuyến nghị)SBC chuẩn công nghiệp chạy trên Compute Module 4/5, chạy Docker 24/7
Hoặc PC / Raspberry Pi / SBC khácCần Git, Docker Engine, plugin Compose
Ổ chứa dữ liệuNên có đủ dung lượng (SSD khuyến nghị) cho Influx dài hạn

3. Clone repo và tạo file secrets

Trên IRIV Pi Control (hoặc host Docker của bạn):

cd ~
git clone https://github.com/vantechcorner/grafana-dashboard-inverter-mqtt.git
cd ~/grafana-dashboard-inverter-mqtt

cp .env.example .env
nano .env

Điền các biến chính (đừng để mật khẩu mặc định change-me khi mở ra ngoài LAN):

BiếnÝ nghĩa
INFLUX_USERNAME / INFLUX_PASSWORDTài khoản InfluxDB lần đầu init
INFLUX_ORGTổ chức Influx (mặc định iriv_org)
INFLUX_TOKENToken admin — Telegraf và Grafana đều dùng
GRAFANA_ADMIN_USER / GRAFANA_ADMIN_PASSWORDĐăng nhập Grafana :3000

Bảo mật: File .env đã nằm trong .gitignore — không commit mật khẩu / token lên GitHub.

4. Trỏ Telegraf tới MQTT broker của bạn

Mở telegraf/telegraf.conf, tìm khối [[inputs.mqtt_consumer]] và sửa địa chỉ broker cho khớp máy đang chạy Mosquitto:

servers = ["tcp://192.168.3.249:1883"]
topics = ["iriv/ivt/#"]

Thay 192.168.3.249 bằng IP LAN thật của broker (có thể chính là IRIV Pi Control nếu Mosquitto chạy trên đó).

  • Topic iriv/ivt/# khớp Base Topic bài 1.
  • Tag device = "sg06" → Grafana hiển thị nhãn Deye SG06. Nếu bạn đổi Base Topic / hãng khác, chỉnh topic parsing và tag device cho khớp (xem mục 9).

Sau đó khởi động stack:

chmod +x scripts/*.sh influxdb/scripts/setup-buckets.sh
docker compose up -d

Kiểm tra container:

docker compose ps
docker compose logs -f telegraf

Telegraf không báo lỗi kết nối MQTT / Influx là ổn.

5. Tạo bucket và task downsample

Lần đầu (hoặc sau khi pull bản cập nhật có script mới):

./influxdb/scripts/setup-buckets.sh

Script tạo / đảm bảo:

BucketRetentionDùng cho
solar_raw~60 ngàyChuỗi realtime độ phân giải cao
solar_1h~2 nămTrung bình / last theo giờ
solar_1dVĩnh viễnNăng lượng theo ngày (dashboard Energy)

Grafana đọc realtime từ solar_raw; các ngày đã qua ưu tiên solar_1d.

Không sum() thô mọi mẫu *_today trong cả tháng — sẽ nhân đôi bộ đếm. Dashboard sẵn trong repo đã xử lý đúng: ngày hoàn tất lấy solar_1d, hôm nay lấy solar_raw.

Nếu bạn đang migrate từ layout Influx cũ, dùng ./scripts/migrate-cleanup.sh (xem note.md trong repo).

6. Mở Grafana và xem dashboard

Trên trình duyệt (máy cùng LAN):

  • Grafana: http://<IP-Pi>:3000
  • InfluxDB UI: http://<IP-Pi>:8086

Đăng nhập Grafana bằng GRAFANA_ADMIN_* trong .env. Folder Solar đã được provision sẵn:

DashboardNội dung
Solar OverviewGauge / công suất / năng lượng hôm nay
Solar ElectricalV, A, Hz, nhiệt độ
Solar Live V/A/PChuỗi live chi tiết
Solar EnergykWh theo time picker; PV ngày/tuần/tháng/năm; ước tính chi phí & tiết kiệm
Solar DeyeCloudLayout kiểu DeyeCloud (consumption / production / history)

Trên Solar Energy, chỉ cần chọn khoảng thời gian bằng time picker của Grafana — độ phân giải cột (giờ / ngày / tháng) tự chỉnh theo cửa sổ bạn chọn. Có thể đặt giá điện ₫/kWh để xem ước tính chi phí mua lưới và tiết kiệm.

7. Luồng dữ liệu bên trong (hiểu nhanh)

  1. IRIV poll biến tần → publish JSON {"value": …} lên iriv/ivt/....
  2. Telegraf mqtt_consumer tách topic thành tag device / component / metric, ghi field value vào measurement solar.
  3. Starlark (house_derived.star) tính House load (W) và House energy today (kWh) — công thức phù hợp hệ hybrid (không lấy nhầm inverter/power làm tải nhà).
  4. Task Influx downsample: solar_raw → solar_1h / solar_1d.
  5. Grafana vẽ bằng Flux.

Ví dụ mapping:

iriv/ivt/battery/power  →  device=sg06, component=battery, metric=power
iriv/ivt/pv/energy_today →  device=sg06, component=pv, metric=energy_today

Contract MQTT không đổi so với bài 1 — Home Assistant và dashboard web vẫn subscribe cùng topic.

8. (Bonus) Bù lịch sử từ DeyeCloud / Excel

Nếu bạn bật Grafana sau khi hệ đã chạy vài tuần / vài tháng, MQTT chỉ có dữ liệu từ lúc Telegraf lên. Lịch sử kWh ngày cũ vẫn nằm trên cloud nhà sản xuất (ví dụ DeyeCloud). Export Excel rồi import vào solar_1d để timeline Energy liền mạch.

Cách làm:

  1. Trên DeyeCloud (hoặc tương đương), export báo cáo năng lượng theo ngày (file tháng vẫn thường là mỗi dòng = 1 ngày: Production, Buy/Sell, Charge/Discharge, Consumption).
  2. Copy các file .xlsx vào thư mục deyecloud-data/ trên máy host (thư mục này đã gitignore).
  3. Trên Pi: backup Influx trước, dry-run, rồi import:
./scripts/backup-influxdb.sh ./backups/pre-import-$(date +%F)
python3 scripts/import-deyecloud-energy.py --dry-run
python3 scripts/import-deyecloud-energy.py --i-have-backup

Chỉ ghi kWh theo ngày vào solar_1d (lấp ngày thiếu; ngày đã có từ MQTT giữ nguyên). Không khôi phục được đường cong power / SOC từ Excel.

Chi tiết mapping cột Excel → tag Influx: xem note.md §11 trong repo.

9. Đổi hãng biến tần / thêm biến tần thứ hai

Stack Grafana chỉ quan tâm MQTT. Điều kiện:

Yêu cầuGhi chú
Topic dạng base/component/metricVí dụ vẫn iriv/ivt/battery/soc
Payload JSON có trường valueChuẩn IRIV IOC MQTT Gateway
Telegraf servers / topics / tag device khớpSửa telegraf.conf rồi docker compose restart telegraf

Biến tần 2: trên gateway thứ hai đặt Base Topic iriv/ivt-2, bỏ comment khối mqtt_consumer thứ hai trong telegraf.conf, restart Telegraf, rồi chọn inverter trên biến Grafana.

Hybrid / off-grid / grid-tie không ảnh hưởng tầng này — thiếu pin thì một số panel pin trống, các panel PV / lưới / tải vẫn dùng bình thường nếu topic tương ứng có dữ liệu.

10. Backup định kỳ (khuyến nghị)

Trước migrate / import / thay đổi phá hủy:

./scripts/backup-influxdb.sh /path/to/ssd/influx-backup/pre-$(date +%F)

Có thể thêm cron hàng ngày trên Pi, giữ vài bản gần nhất trên SSD. Repo Git (compose + dashboard + telegraf) chính là backup phần cấu hình.

11. Xử lý sự cố thường gặp

Hiện tượngViệc nên kiểm tra
Grafana trống / No dataTelegraf log; broker IP trong telegraf.conf; đã có MQTT iriv/ivt/#
Influx có data nhưng Grafana lỗi authINFLUX_TOKEN / INFLUX_ORG trong .env khớp datasource
Grafana restart loopQuyền thư mục data: sudo chown -R 472:472 ./grafana/data
Energy tháng bị “phình” sốĐừng tự sum() thô *_today trên raw — dùng dashboard sẵn / bucket solar_1d
Xung đột cổng 1883Giữ Mosquitto trong compose comment; dùng broker bài 1
Import DeyeCloud ghi đè nhầmScript mặc định --skip-existing; luôn backup trước

Tổng kết và bước tiếp theo

Đến đây bạn đã có đủ hai tầng giám sát solar local-first:

  1. Bài 1 — RS485 → IRIV IOC MQTT Gateway → MQTT realtime (không phụ thuộc app cloud 5 phút/lần).
  2. Bài này — MQTT → Telegraf → InfluxDB → Grafana trên IRIV Pi Control: lưu dài hạn, báo cáo kWh, ước tính chi phí, backfill Excel khi cần.

Toàn bộ chạy trên LAN; có thể mở remote an toàn hơn bằng Tailscale / WireGuard / Cloudflared thay vì port-forward thô cổng Grafana / MQTT.

Chúc bạn thành công! Xin chào và hẹn gặp lại ở các bài mở rộng (alert Grafana, biến tần thứ hai, hoặc dashboard LCD ESP32).

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận