Cytron Technologies

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

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

Hotline 0362917357 

Giám sát Biến tần Năng lượng Mặt trời thời gian thực qua RS485 với IRIV IOC MQTT Gateway

Trong hệ thống điện mặt trời, việc theo dõi công suất PV, lưới, tải (và pin nếu có) theo thời gian thực rất quan trọng. Hầu hết ứng dụng từ nhà sản xuất biến tần (ví dụ DeyeCloud) cập nhật dữ liệu khoảng 5 phút/lần, vì phải phục vụ hàng triệu người dùng cùng lúc. Ngoài ra, app còn phụ thuộc mạng Internet để đẩy dữ liệu lên máy chủ, một khi rớt mạng là không thể xem các số liệu.

Bài viết này hướng dẫn cách đọc biến tần trực tiếp qua cổng RS485 (Modbus RTU), dùng IRIV IOC MQTT Gateway đóng gói thành MQTT JSON trên mạng nội bộ (LAN), rồi xem dữ liệu thời gian thực trên trình duyệt (và tùy chọn trên điện thoại / Home Assistant). Bạn cũng có thể phát triển thêm để mở truy cập từ xa, ví dụ như cấu hình Tailscale hoặc Cloudflared để truy cập từ bất cứ nơi đâu.

Trong bài viết này, mình thử nghiệm với biến tần Deye SUN-6K-SG06LP1 (hybrid 6KW thuộc series SG05/SG06) và cung cấp sẵn file cấu hình poll job. Phần khác biệt giữa các loại máy / hãng chủ yếu nằm ở bảng thanh ghi (register map), baud rate, slave ID và cách nối chân A/B. Dựa vào cấu trúc này, bạn có thể phát triển để theo dõi biến tần năng lượng mặt trời của mình, dù cho nó là Hybrid, off-grid hay grid-tie (hòa lưới), chỉ cần có cổng RS485 và tài liệu Modbus. Nhiều hãng sản xuất biến tần chất lượng như Deye, LuxPower, Sumry, PowMr, Growatt, Sofar, v.v đều có sẵn các tham số RS485 nên việc tích hợp chắc hẳn không phải là vấn đề.

Dự án mã nguồn mở kèm file cấu hình sẵn cho Deye SG06: deye-sg06-inverter-rs485-monitor
Bài cùng series (Acrel ADL200): Giám sát điện năng tiêu thụ thời gian thực với IRIV IOC MQTT Gateway

1. Tổng quan kiến trúc và luồng dữ liệu

Mọi kết nối vận hành trong mạng nội bộ (LAN) để đảm bảo tốc độ phản hồi cao và bảo mật:

Biến tần RS485 (Modbus slave)
  ví dụ: Deye / LuxPower / Sumry / PowMr / …
        │
        │  RS485 (baud & ID theo từng hãng)
        ▼
IRIV IOC MQTT Gateway (Modbus master)
        │
        │  MQTT TCP :1883
        ▼
   Mosquitto Broker
        │
        ├─► Dashboard web (MQTT WebSocket :9001)
        ├─► MQTTX / MQTT Explorer
        └─► Home Assistant (tùy chọn)

Với Deye SG06 trong bài này: baud 9600 8N1, slave ID 1. Hãng khác có thể khác (thường gặp 9600 hoặc 115200) — luôn lấy theo manual Modbus của máy bạn.

Lưu ý quan trọng: Trên mỗi bus RS485 chỉ nên có một Modbus master. Nếu bạn đang chạy ESPHome / ESP32 làm master trên cùng cặp dây A/B, hãy tắt hoặc rút thiết bị đó trước khi bật IRIV IOC MQTT Gateway.

2. Phần cứng cần có

Thành phầnGhi chú
Biến tần có cổng RS485 (Modbus RTU)Hybrid / off-grid / grid-tie đều được. Trong bài viết sử dụng Deye SUN-6K-SG06LP1 (hybrid). Cùng cách làm với LuxPower, Sumry, PowMr, … nếu có RS485 + tài liệu register
IRIV IOC MQTT GatewayController công nghiệp RS485 → MQTT của Cytron, cấu hình trực quan qua giao diện Web.
Cáp / dây tín hiệu RS485Đối với biến tần Deye: cắt một đầu cáp Ethernet, nối RJ45 → terminal A / B / G trên IRIV. Hãng khác có thể là terminal vít, RJ45 khác pinout, hoặc cổng COM — xem manual
Máy tính hoặc SBC chạy DockerĐể chạy Mosquitto (có thể là PC Windows/Linux, Raspberry Pi, hoặc IRIV Pi Control)
USB-CDùng lần đầu để truy cập web IRIV tại http://10.0.0.1
(Khuyến nghị) PDF / bảng Modbus của biến tầnBắt buộc nếu không dùng file JSON mẫu Deye SG06 trong repo

3. Nối dây RS485 giữa biến tần và IRIV

Nguyên tắc chung cho mọi hãng: nối A ↔ A, B ↔ B, và GND (nếu có) vào terminal A / B / G trên IRIV IOC MQTT Gateway. Nếu bus im lặng, thử đảo A và B một lần — nhiều tài liệu và cáp lab đánh dấu ngược chiều.

Phần còn lại của mục này mô tả cụ thể lab Deye SUN-6K-SG06LP1. LuxPower / Sumry / PowMr thường khác pinout và đôi khi khác cả baud — đừng copy nguyên bảng chân Deye sang máy khác.

Với Deye: dùng cổng RS485 datalogger / meter dạng RJ45 — không dùng cổng RJ45 CAN dành cho BMS.

Thứ tự chân RJ45 phía Deye: ngàm (latch) xoay xuống dưới, đánh số chân 1 → 8 từ trái sang phải.

Chân RJ45 (Deye)Tín hiệuTerminal IRIV
1Modbus-485_BB
2Modbus-485_AA
3GND_485G

Thông số bus đã kiểm chứng trên SG06:

Tham sốGiá trị
Baud rate9600
Data bits / Parity / Stop8N1
Slave ID1
Function code đọc03 (Holding Register)

Nếu bus im lặng (không có dữ liệu MQTT), hãy đảo A và B một lần, rồi kiểm tra lại baud 9600 và slave 1.

4. Chạy Mosquitto MQTT Broker bằng Docker

Trên máy sẽ đóng vai trò MQTT broker (ví dụ PC, Raspberry Pi hoặc IRIV Pi Control), clone repo và chạy Mosquitto:

git clone https://github.com/vantechcorner/deye-sg06-inverter-rs485-monitor.git
cd deye-sg06-inverter-rs485-monitor/iriv-ioc-mqtt-gateway
docker compose up -d
CổngDùng cho
1883MQTT TCP — IRIV IOC MQTT Gateway (và Home Assistant)
9001MQTT qua WebSockets — dashboard web trên trình duyệt

Xem log broker:

docker compose logs -f mosquitto

Ghi nhớ địa chỉ IP LAN của máy đang chạy Docker (ví dụ 192.168.3.249) — bạn sẽ điền địa chỉ này vào phần MQTT Settings trên IRIV.

Bảo mật: Không mở cổng 1883/9001 ra Internet công cộng nếu chưa có TLS và xác thực. Chỉ dùng trong mạng nội bộ (hoặc VPN như Tailscale / WireGuard).

5. Cập nhật firmware và restore cấu hình trên IRIV IOC MQTT Gateway

5.1. Cập nhật firmware trước

Trước khi import bộ poll job cho biến tần Deye, hãy flash firmware mới nhất từ trang sản phẩm IRIV IO Controller MQTT.

Nên dùng firmware ≥ V1.2.6. Bản cũ hơn có thể gặp lỗi khi bật job poll thứ 27 (gateway reboot và xóa hết job). Nếu tạm thời chưa nâng cấp được, dùng file cấu hình 26 job (iriv-ioc-config-26.json) trong repo.

5.2. Truy cập web admin lần đầu qua USB

  1. Nối USB-C từ IRIV IOC MQTT Gateway vào máy tính.
  2. Đợi máy nhận cổng USB Ethernet / RNDIS (Windows có thể cần cài driver).
  3. Mở trình duyệt tới http://10.0.0.1.
  4. Đăng nhập (thường là admin / admin lúc xuất xưởng, hoặc admin / 12345678 nếu đã import template từ repo).

5.3. Restore file cấu hình sẵn

Trong web admin, vào System (hoặc tương đương):

  1. Bật Allow config over Ethernet nếu sau này bạn muốn restore qua IP LAN.
  2. Dùng Restore để import:

File JSON này đã khai báo sẵn các thanh ghi Modbus của Deye SG06 kèm scale đã kiểm chứng thực tế (ví dụ dòng PV ×0.1 A, dòng lưới ×0.01 A, nhiệt độ offset −100, …). Bạn không cần tự mò từng register từ PDF protocol nếu dùng đúng biến tần dòng SG05/SG06.

Nếu bạn sử dụng biến tần hãng khác? Đừng restore nguyên iriv-ioc-config.json của Deye lên LuxPower / Sumry / PowMr vì địa chỉ thanh ghi sẽ sai. Hãy xem mục Áp dụng với LuxPower, Sumry, PowMr và biến tần RS485 khác bên dưới, rồi tự tạo Poll Jobs (hoặc JSON riêng) theo tài liệu / hướng dẫn sử dụng của máy bạn.

5.4. Cấu hình MQTT Broker trên IRIV

Vào MQTT Settings (hoặc Broker) và điền tương tự:

Thông sốGiá trị gợi ýGhi chú
Enable MQTTEnabledBật đẩy dữ liệu
Broker HostIP máy chạy DockerVí dụ 192.168.3.249
Port1883MQTT TCP
Base Topiciriv/ivtTiền tố topic cho biến tần 1
AuthTắtTrừ khi broker của bạn bắt buộc username/password

5.5. Kiểm tra danh sách Poll Jobs

Sau khi restore thành công, mở danh sách Modbus Poll Jobs và xác nhận các job đã bật đủ (27 job trên V1.2.6+, hoặc 26 job với JSON cũ).

Chu kỳ poll trong template:

Nhóm dữ liệuChu kỳ
Điện áp / Dòng / Công suất1 giây
Nhiệt độ / SOC / tần số / trạng thái10 giây
Năng lượng trong ngày (*_today)30 giây

Định dạng gói tin JSON đẩy về broker:

{"name":"Battery SOC","value":72.5,"unit":"%","status":"success"}

Topic ví dụ:

  • iriv/ivt/battery/soc
  • iriv/ivt/pv1/power
  • iriv/ivt/pv2/power
  • iriv/ivt/grid/power_ct
  • iriv/ivt/load/power
  • iriv/ivt/inverter/temp

6. Kiểm tra dữ liệu thời gian thực

Đảm bảo: biến tần đã cấp nguồn, dây RS485 đã nối đúng, Mosquitto đang chạy, IRIV đã restore config và trỏ đúng Broker Host.

6.1. Xem raw MQTT bằng dòng lệnh

Trên máy có mosquitto_sub (hoặc trong container Mosquitto):

mosquitto_sub -h <IP-broker> -t "iriv/ivt/#" -v

Bạn sẽ thấy các topic nhảy liên tục theo chu kỳ poll — đây chính là dữ liệu thời gian thực trên LAN, không còn chờ chu kỳ 5 phút của app đám mây.

6.2. Dashboard web có sẵn trong repo

Repo đi kèm trang dashboard tĩnh (web/), subscribe iriv/ivt/# qua MQTT WebSocket (cổng 9001, không dùng TCP 1883 trên trình duyệt).

cd deye-sg06-inverter-rs485-monitor/web
python -m http.server 8080

Mở http://127.0.0.1:8080 (hoặc http://<IP-máy>:8080 từ thiết bị khác trong LAN). Nhấn biểu tượng bánh răng, đặt WebSocket broker thành:

ws://<IP-broker>:9001

rồi Connect.

Trên giao diện bạn có thể xem SOC pin, công suất PV1/PV2, lưới, tải, năng lượng trong ngày, … cập nhật gần như ngay khi gateway poll xong.

Mẹo đọc số: Pin âm = đang sạc, dương = đang xả. Grid CT theo kiểu DeyeCloud / Home Assistant: dương = Import (mua lưới), âm = Export (bán lưới).

6.3. MQTTX Web / MQTT Explorer (tùy chọn)

Nếu bạn quen MQTTX như bài Acrel ADL200, hãy tạo kết nối:

  • Host: ws://<IP-broker>
  • Port: 9001
  • Subscribe: iriv/ivt/#

Cách này tiện để debug từng topic JSON trước khi dựng dashboard đẹp hơn.

7. (Bonus) Đưa dữ liệu vào Home Assistant

Nếu nhà bạn đã có Home Assistant cùng mạng với Mosquitto:

  1. Cài / kiểm tra tích hợp MQTT, trỏ tới broker cổng 1883.
  2. Copy file iriv_deye_mqtt.yaml vào config/packages/.
  3. Bật packages trong configuration.yaml:
homeassistant:
  packages: !include_dir_named packages
  1. Khởi động lại Home Assistant. Entity sẽ xuất hiện dưới thiết bị kiểu Deye SG06 (IRIV).

Chi tiết thêm nằm trong thư mục iriv-ioc-mqtt-gateway của repo.

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

Hiện tượngViệc nên kiểm tra
Không có topic MQTT nàoBroker Host / cổng 1883; IRIV đã Enable MQTT; Mosquitto docker compose ps
Có MQTT nhưng toàn lỗi / không đổi sốĐảo A↔B; baud & slave ID theo manual; đúng cổng RS485 (với Deye: datalogger, không phải CAN BMS)
Restore xong mất hết jobFirmware cũ — nâng cấp ≥ V1.2.6 hoặc dùng iriv-ioc-config-26.json
Dashboard web không ConnectDùng ws:// cổng 9001, không dùng 1883; máy xem dashboard phải vào được IP broker
Hai thiết bị “cướp” busChỉ một Modbus master trên cùng cặp A/B
Số liệu “có nhưng sai scale”Sai multiplier / data type / byte order — đối chiếu lại PDF Modbus của đúng model

9. Áp dụng với LuxPower, Sumry, PowMr và biến tần RS485 khác

Luồng Biến tần → RS485 → IRIV IOC MQTT Gateway → Mosquitto → web / HA / Grafana là dùng chung. IRIV không “biết” bạn đang gắn Deye hay LuxPower — nó chỉ poll đúng các thanh ghi bạn khai báo.

PhầnDùng chung mọi hãngRiêng từng model
Phần cứng IRIV + Mosquitto + dashboard MQTTCó—
Nối A / B / G (và đảo A↔B khi cần)CóPinout RJ45 / terminal khác nhau
Baud, parity, slave ID—Theo manual (Deye lab: 9600 8N1, ID 1)
Địa chỉ register, scale, kiểu dữ liệu (u16 / s16 / f32…)—Theo PDF Modbus của hãng
File iriv-ioc-config.json trong repo—Chỉ cho Deye SG05/SG06

Cách làm với máy không phải Deye SG06:

  1. Xác nhận biến tần (hoặc logger kèm máy) có RS485 Modbus RTU — không phụ thuộc máy là hybrid, off-grid hay grid-tie. Tránh nhầm với CAN, Wi‑Fi dongle chỉ cloud, hoặc cổng meter khác protocol.
  2. Lấy Modbus register map từ nhà sản xuất / đại lý (LuxPower, Sumry, PowMr, … thường có bảng Holding Register cho V / A / W / SOC / kWh).
  3. Trên IRIV, cấu hình Link Layer (baud, parity, stop bits) khớp manual.
  4. Tạo Poll Jobs (Add Job) từng thông số cần giám sát — giống cách làm trong bài Acrel ADL200: Slave ID, Function Code, Address, Data Type, Scale, Unit, Target Topic.
  5. Giữ Base Topic thống nhất (ví dụ iriv/ivt hoặc iriv/luxpower) để dashboard / Telegraf / Home Assistant dễ subscribe.
  6. Kiểm tra bằng mosquitto_sub hoặc MQTTX trước khi dựng giao diện đẹp.

Ví dụ topic tự đặt cho máy khác:

iriv/luxpower/battery/soc
iriv/sumry/pv/power
iriv/powmr/load/power

Payload vẫn theo chuẩn IRIV, dạng JSON có trường value — tầng MQTT phía sau gần như không đổi.

Mẹo: bắt đầu với 3–5 job quan trọng nhất (điện áp pin, SOC, công suất PV, công suất tải). Chạy ổn rồi mới thêm nhiệt độ, năng lượng ngày, … — dễ debug hơn là import cả chục register sai scale cùng lúc.

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

Đến đây, bạn đã hoàn thành tầng giám sát realtime cho biến tần năng lượng mặt trời:

  • Đọc thẳng Modbus RTU qua RS485 — không phụ thuộc app đám mây 5 phút/lần.
  • Lab minh họa bằng Deye SUN-6K-SG06LP1; cùng kiến trúc áp dụng được cho LuxPower, Sumry, PowMr và các biến tần RS485 khác (đổi register map / baud / nối dây cho đúng máy).
  • IRIV IOC MQTT Gateway chuẩn hóa dữ liệu thành JSON MQTT trên LAN.
  • Mosquitto phân phối dữ liệu; dashboard web / MQTTX / Home Assistant đều có thể subscribe cùng một luồng.

Bài tiếp theo trong series: dùng IRIV Pi Control cài stack Telegraf + InfluxDB + Grafana để lưu và phân tích dữ liệu dài hạn (ngày / tuần / tháng / năm). Stack Grafana consume MQTT theo contract topic — nên cũng dùng được khi bạn đổi hãng biến tần, miễn là vẫn publish MQTT đúng cấu trúc. Xem dự án grafana-dashboard-inverter-mqtt.

Chúc bạn thành công! Xin chào và hẹn gặp lại ở bài Grafana.

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