Đăng ký dữ liệu năng lượng thời gian thực qua MQTT Broker (Bản 2025)
1. Giới thiệu
IAMMETER-Cloud là một nền tảng chuyên nghiệp về giám sát năng lượng và quản lý điện mặt trời. Ngoài các chức năng trực quan hóa và báo cáo mạnh mẽ, IAMMETER-Cloud còn cung cấp các giao diện dữ liệu linh hoạt. Điều này cho phép những người dùng có yêu cầu tùy chỉnh sử dụng IAMMETER-Cloud như một middleware dữ liệu, truy xuất dữ liệu bằng lập trình thông qua code.
Có hai cách chính để lấy dữ liệu từ IAMMETER-Cloud bằng code:
- Đăng ký nhận dữ liệu qua MQTT Broker của IAMMETER (trọng tâm của bài viết này)
- Gọi API chính thức của IAMMETER-Cloud
Hướng dẫn này giải thích cách đăng ký các topic MQTT của IAMMETER, cách đọc hiểu cấu trúc dữ liệu (cho cả đồng hồ một pha và ba pha), và cách triển khai ví dụ hoạt động bằng Python và Node.js.
2. Tổng quan về IAMMETER MQTT Broker
Lưu ý: IAMMETER MQTT Broker ban đầu được thiết kế như một dịch vụ phát triển và thử nghiệm nhằm mang lại sự tiện lợi, và không thuộc gói dịch vụ IAMMETER-Cloud tiêu chuẩn (mặc dù dịch vụ này đã hoạt động ổn định hơn 5 năm). Đối với các triển khai production hoặc quy mô lớn, chúng tôi khuyến nghị bạn tự thiết lập MQTT broker riêng.
Cấu hình IAMMETER MQTT Broker
| Tham số | Mô tả |
|---|---|
| Địa chỉ broker | mqtt.iammeter.com |
| Cổng | 1883 (không SSL) |
| Tên đăng nhập / Mật khẩu | Phải được tạo trong IAMMETER Cloud → Settings → MQTT Settings![]() |
| Định dạng topic | device/{SN}/realtime |
| Định dạng payload | JSON |
⚠️ Quan trọng: Không sử dụng thông tin đăng nhập IAMMETER Cloud của bạn ở đây. Bạn cần tạo một tên đăng nhập và mật khẩu MQTT riêng trong bảng điều khiển IAMMETER Cloud.
Cấu hình đồng hồ IAMMETER sang chế độ MQTT
Đặt đồng hồ IAMMETER của bạn sang chế độ upload MQTT (xem hướng dẫn cấu hình firmware) và nhập các tham số của IAMMETER MQTT Broker.

3. Định dạng topic MQTT
Mỗi thiết bị IAMMETER công bố dữ liệu thời gian thực của mình dưới topic sau:
device/{SN}/realtime
Trong đó {SN} là số serial của đồng hồ.
Ví dụ, nếu SN thiết bị của bạn là DA2BED94, topic sẽ là:
device/DA2BED94/realtime
Bạn có thể đăng ký topic này để nhận dữ liệu đo liên tục theo thời gian thực.
4. Định dạng dữ liệu
4.1 Định dạng dữ liệu của đồng hồ một pha
Đồng hồ IAMMETER một pha công bố dữ liệu thời gian thực ở định dạng JSON như sau:
{
"method": "1-272",
"mac": "B0F8932A295C",
"version": "i.91.062T6",
"server": "em",
"SN": "DA2BED94",
"Data": [227.02, 1.81, 296.0, 21699.98, 0.00, 50.01, 0.72]
}
| Chỉ số | Trường | Mô tả | Đơn vị |
|---|---|---|---|
| 1 | Điện áp | Điện áp đường dây hiện tại | V |
| 2 | Dòng điện | Dòng điện đường dây hiện tại | A |
| 3 | Công suất | Công suất tác dụng | W |
| 4 | Điện năng thuận | Điện năng nhập (tiêu thụ) | kWh |
| 5 | Điện năng nghịch | Điện năng phát lên lưới (feed-in, điện mặt trời) | kWh |
| 6 | Tần số | Tần số lưới điện | Hz |
| 7 | Hệ số công suất | Hệ số công suất hiện tại | PF |
🟢 Ghi chú:
- Công suất dương → tiêu thụ điện năng
- Công suất âm → phát điện lên lưới (ví dụ: điện mặt trời feed-in)
4.2 Định dạng dữ liệu của đồng hồ ba pha (WEM3080T / WEM3046T / WEM3050T)
Đồng hồ IAMMETER ba pha công bố dữ liệu ở định dạng JSON tương tự, với ba mảng tương ứng với từng pha.
{
"method": "4-9",
"mac": "849DC2CEC625",
"version": "i.91.062T6",
"server": "em",
"SN": "CB0A0CFB",
"EA": {
"Reactive": [
[-111.0, 0.000, 176.750],
[-113.0, 0.000, 179.110],
[-114.0, 36.120, 144.410]
]
},
"Datas": [
[225.9, 1.260, 194.0, 305.110, 0.000, 49.99, 0.87],
[225.8, 1.260, 193.0, 302.690, 0.000, 49.99, 0.86],
[225.9, 1.260, 192.0, 300.890, 0.000, 49.99, 0.86]
]
}
Datas là một danh sách chứa ba mảng, mỗi mảng tương ứng với pha A, B và C.
Mỗi mảng con có cùng cấu trúc như mảng Data của đồng hồ một pha.
| Chỉ số | Trường | Mô tả | Đơn vị |
|---|---|---|---|
| 1 | Điện áp | Điện áp pha | V |
| 2 | Dòng điện | Dòng điện pha | A |
| 3 | Công suất | Công suất tác dụng | W |
| 4 | Điện năng thuận | Điện năng nhập | kWh |
| 5 | Điện năng nghịch | Điện năng phát lên lưới | kWh |
| 6 | Tần số | Tần số lưới điện | Hz |
| 7 | Hệ số công suất | Hệ số công suất pha | PF |
Ngoài dữ liệu công suất tác dụng, khi đo công suất phản kháng được bật, bạn cũng sẽ thấy phần EA như sau:
"EA": {
"Reactive": [
[-111.0, 0.000, 176.750],
[-113.0, 0.000, 179.110],
[-114.0, 36.120, 144.410]
]
}
Phần này hiển thị dữ liệu đo phản kháng, chỉ xuất hiện khi chức năng thử nghiệm phản kháng được bật (xem ảnh chụp màn hình bên dưới).

Mỗi mảng đại diện cho ba pha (A, B, C), hiển thị công suất phản kháng (Q tính bằng kVar) và điện năng phản kháng (kVARh).
Q (kVar): Công suất phản kháng — dương = cảm kháng, âm = dung kháng kVARh: Điện năng phản kháng — mỗi pha bao gồm hai giá trị kVARh: một cho tải cảm kháng và một cho tải dung kháng.
5. Ví dụ Python: Đăng ký nhận dữ liệu thời gian thực
Dưới đây là một script Python hoạt động được sử dụng thư viện paho-mqtt.
import paho.mqtt.client as mqtt
import json
# MQTT Broker configuration
MQTT_BROKER = "mqtt.iammeter.com"
MQTT_PORT = 1883
MQTT_USER = "your_mqtt_username" # Set in IAMMETER Cloud → MQTT Settings
MQTT_PASS = "your_mqtt_password"
TOPIC = "device/DA2BED94/realtime" # Replace with your own device SN
# Callback when connected to the broker
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("✅ Connected to IAMMETER MQTT Broker successfully")
client.subscribe(TOPIC)
print(f"📡 Subscribed to topic: {TOPIC}")
else:
print(f"❌ Connection failed with code {rc}")
# Callback when a message is received
def on_message(client, userdata, msg):
payload = json.loads(msg.payload.decode())
print("📊 Received real-time data:")
print(json.dumps(payload, indent=2, ensure_ascii=False))
# Initialize MQTT client
client = mqtt.Client()
client.username_pw_set(MQTT_USER, MQTT_PASS)
client.on_connect = on_connect
client.on_message = on_message
# Connect to the broker and start the loop
client.connect(MQTT_BROKER, MQTT_PORT, 60)
client.loop_forever()
6. Ví dụ Node.js
Chúng tôi khuyến nghị bạn thử dự án mã nguồn mở thú vị này: Dự án sử dụng Node.js để đăng ký nhận dữ liệu thời gian thực từ MQTT broker của IAMMETER và trực quan hóa dữ liệu đó trên một web UI, tạo ra một dashboard thời gian thực rất ấn tượng.
🔗 https://github.com/lewei50/iammeterJS
7. Các trường hợp sử dụng thực tế
- Tự động hóa nhà thông minh Tích hợp dữ liệu công suất thời gian thực vào Home Assistant hoặc Node-RED để kích hoạt các hành động tự động (ví dụ: bật máy sưởi khi sản lượng điện mặt trời cao).
- Trực quan hóa dữ liệu cục bộ Lưu dữ liệu MQTT nhận được vào InfluxDB và trực quan hóa bằng dashboard Grafana.
- Cloud riêng hoặc điện toán biên (Edge Computing) Truy xuất dữ liệu công suất thời gian thực trực tiếp qua MQTT cho các phân tích tùy chỉnh hoặc logic điều khiển mà không phụ thuộc vào IAMMETER Cloud.
8. Khắc phục sự cố
| Vấn đề | Nguyên nhân / Cách khắc phục có thể |
|---|---|
| Không kết nối được broker | Kiểm tra xem tên đăng nhập/mật khẩu MQTT của bạn đã được đặt đúng trong IAMMETER Cloud chưa. |
| Không nhận được dữ liệu | Xác minh định dạng topic của bạn (device/{SN}/realtime) và đảm bảo đồng hồ đang online. |
| Dữ liệu bị trễ | Kiểm tra độ ổn định của mạng hoặc cường độ tín hiệu Wi-Fi. |
| Nhiều đồng hồ | Bạn có thể đăng ký nhiều topic cùng lúc (mỗi SN một topic). |
9. Kết luận
Sử dụng IAMMETER MQTT Broker, bạn có thể dễ dàng truy cập các luồng dữ liệu năng lượng thời gian thực từ các thiết bị IAMMETER của mình. Đây là một phương pháp mạnh mẽ và linh hoạt để xây dựng dashboard cục bộ, tự động hóa thông minh, hoặc các hệ thống tối ưu năng lượng dựa trên AI.
📘 Tài liệu tham khảo
- Tính năng firmware và truyền thông của IAMMETER
- Tài liệu IAMMETER Cloud và MQTT API
- Tự phát triển dashboard giám sát năng lượng bằng NodeJS
Bạn có muốn tôi tạo một phiên bản bài blog định dạng Markdown (sẵn sàng để đăng trên blog chính thức của IAMMETER, với phần tô sáng cú pháp và các liên kết ảnh nhúng được giữ nguyên) không?
