Cytron Technologies
Giờ làm việc: 8:00 - 17:00
Thứ 2 - Thứ 6 (trừ ngày lễ)
Hotline 0362917357

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
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.
| Thành phần | Ghi 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 Gateway | Controller 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-C | Dù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ần | Bắt buộc nếu không dùng file JSON mẫu Deye SG06 trong repo |

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ệu | Terminal IRIV |
|---|---|---|
| 1 | Modbus-485_B | B |
| 2 | Modbus-485_A | A |
| 3 | GND_485 | G |

Thông số bus đã kiểm chứng trên SG06:
| Tham số | Giá trị |
|---|---|
| Baud rate | 9600 |
| Data bits / Parity / Stop | 8N1 |
| Slave ID | 1 |
| Function code đọc | 03 (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.
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ổng | Dùng cho |
|---|---|
| 1883 | MQTT TCP — IRIV IOC MQTT Gateway (và Home Assistant) |
| 9001 | MQTT qua WebSockets — dashboard web trên trình duyệt |
Xem log broker:
docker compose logs -f mosquittoGhi 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).
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.
http://10.0.0.1.admin / admin lúc xuất xưởng, hoặc admin / 12345678 nếu đã import template từ repo).Trong web admin, vào System (hoặc tương đương):
iriv-ioc-config.json
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.jsoncủ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.
Vào MQTT Settings (hoặc Broker) và điền tương tự:
| Thông số | Giá trị gợi ý | Ghi chú |
|---|---|---|
| Enable MQTT | Enabled | Bật đẩy dữ liệu |
| Broker Host | IP máy chạy Docker | Ví dụ 192.168.3.249 |
| Port | 1883 | MQTT TCP |
| Base Topic | iriv/ivt | Tiền tố topic cho biến tần 1 |
| Auth | Tắt | Trừ khi broker của bạn bắt buộc username/password |

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ệu | Chu kỳ |
|---|---|
| Điện áp / Dòng / Công suất | 1 giây |
| Nhiệt độ / SOC / tần số / trạng thái | 10 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/sociriv/ivt/pv1/poweririv/ivt/pv2/poweririv/ivt/grid/power_ctiriv/ivt/load/poweririv/ivt/inverter/tempĐả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.
Trên máy có mosquitto_sub (hoặc trong container Mosquitto):
mosquitto_sub -h <IP-broker> -t "iriv/ivt/#" -vBạ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.
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 8080Mở 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>:9001rồ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).
Nếu bạn quen MQTTX như bài Acrel ADL200, hãy tạo kết nối:
ws://<IP-broker>9001iriv/ivt/#Cách này tiện để debug từng topic JSON trước khi dựng dashboard đẹp hơn.
Nếu nhà bạn đã có Home Assistant cùng mạng với Mosquitto:
iriv_deye_mqtt.yaml vào config/packages/.configuration.yaml:homeassistant:
packages: !include_dir_named packagesChi tiết thêm nằm trong thư mục iriv-ioc-mqtt-gateway của repo.
| Hiện tượng | Việc nên kiểm tra |
|---|---|
| Không có topic MQTT nào | Broker 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 job | Firmware cũ — nâng cấp ≥ V1.2.6 hoặc dùng iriv-ioc-config-26.json |
| Dashboard web không Connect | Dù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” bus | Chỉ 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 |
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ần | Dùng chung mọi hãng | Riêng từng model |
|---|---|---|
| Phần cứng IRIV + Mosquitto + dashboard MQTT | Có | — |
| 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:
iriv/ivt hoặc iriv/luxpower) để dashboard / Telegraf / Home Assistant dễ subscribe.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/powerPayload 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.
Đế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:
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.