SmartHome
SERIES
🌐 SONG NGỮ[OpenHAB] Công tơ điện tử với PZEM004T và ESPHome trên ESP32-C3.
![[OpenHAB] Công tơ điện tử với PZEM004T và ESPHome trên ESP32-C3.](/images/smarthome/products_hu_d349eb7d65cc0c06.webp)
MỤC LỤC BÀI VIẾT (Nhấn để xem)
Thông tin và yêu cầu
- OpenHAB version: 4.3.3
- Đã cài đặt MQTT binding
- PZEM004T v1 (bản xuất khẩu) or V3 nội địa - tham khảo giá trên shopee
- ESP32, ESP32-C3 SuperMini … nếu là ESP32-C3 SuperMini thì nên mua bản có anten (tham khảo ở shopee)

Tham khảo thêm phần cứng
Nếu mẫu PZEM004T đang dùng không phù hợp hoặc cần so sánh phiên bản khác, có thể tham khảo thêm một mẫu PZEM004T khác trên Shopee. Trước khi đấu nối, mình vẫn cần kiểm tra đúng phiên bản, sơ đồ chân và điện áp của module.
Hướng dẫn build sử dụng ESPHome
- Tham khảo dự án ESPHome ở đây
- Cài đặt ESPHome vào PC theo hướng dẫn ở đây
- Dưới đây là code mình đang sử dụng để gửi MQTT đến server (MQTT Broker) mỗi 2s
| |
- Dòng 17-18 cấu hình chân RX-TX trên ESP32-C3
- Dòng 24-26 cấu hình MQTT Broker
- Dòng 31-32 cấu hình WIFI
- Dòng 36 cấu hình mật khẩu khi update OTA
- Dòng 58 tần suất cập nhật số liệu lên MQTT Broker
Kiểm tra MQTT Broker xem đã nhận số liệu chưa
Cấu hình Things trên OpenHAB
UID: mqtt:topic:17653025f5:3574a13d85
label: PZEM004T Power Monitor
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:17653025f5
location: House
channels:
- id: PZEM004T_House_Voltage
channelTypeUID: mqtt:number
label: PZEM004T House Voltage
description: ""
configuration:
stateTopic: pzem004t-mqtt-be5d84/sensor/pzem-004t_voltage/state
- id: PZEM004T_House_Power
channelTypeUID: mqtt:number
label: PZEM004T House Power
description: ""
configuration:
stateTopic: pzem004t-mqtt-be5d84/sensor/pzem-004t_power/state
- id: PZEM004T_House_Current
channelTypeUID: mqtt:number
label: PZEM004T House Current
description: ""
configuration:
stateTopic: pzem004t-mqtt-be5d84/sensor/pzem-004t_current/state
- id: PZEM004T_House_Energy
channelTypeUID: mqtt:number
label: PZEM004T House Energy
description: ""
configuration:
stateTopic: pzem004t-mqtt-be5d84/sensor/pzem-004t_energy/state
- id: PZEM004T_House_Freq
channelTypeUID: mqtt:number
label: PZEM004T House Frequency
description: ""
configuration:
stateTopic: pzem004t-mqtt-be5d84/sensor/pzem-004t_frequency/state
- id: PZEM004T_House_PowerFactor
channelTypeUID: mqtt:number
label: PZEM004T House PowerFactor
description: ""
configuration:
stateTopic: pzem004t-mqtt-be5d84/sensor/pzem-004t_power_factor/state
- id: PZEM004T_House_Sensor_Status
channelTypeUID: mqtt:string
label: PZEM004T House Sensor Status
description: ""
configuration:
stateTopic: pzem004t-mqtt/status
- id: PZEM004T_House_Wifi_Sginal_Level_dB
channelTypeUID: mqtt:number
label: PZEM004T House Wifi Sginal Level dB
description: ""
configuration:
stateTopic: pzem004t-mqtt-be5d84/sensor/wifi_signal_db/state
- id: PZEM004T_House_Wifi_Sginal_Level_Percent
channelTypeUID: mqtt:number
label: PZEM004T House Wifi Sginal Level Percent
description: ""
configuration:
stateTopic: pzem004t-mqtt-be5d84/sensor/wifi_signal_percent/state
- BONUS DSL Script tính số điện sử dụng trong ngày,tháng, khoảng thời gian
- Dữ liệu sẽ update vào 3 item là:
Energy_Consumption_Day,Energy_Consumption_Month,Energy_Consumption_Period.
- Dữ liệu sẽ update vào 3 item là:
logInfo("EnergyConsumption", "Current Energy: " + PZEM004T_House_Energy.state.toString + " - " + now.toString)
val startOfDay = now.with(LocalTime.MIDNIGHT)
val startOfMonth = now.withDayOfMonth(1).with(LocalTime.MIDNIGHT)
val startOfPeriod = now.withMonth(4).withDayOfMonth(1).with(LocalTime.MIDNIGHT) // Bắt đầu vào 1 tháng 4
val dayAgoValue = PZEM004T_House_Energy.persistedState(startOfDay)
val monthAgoValue = PZEM004T_House_Energy.persistedState(startOfMonth)
val periodAgoValue = PZEM004T_House_Energy.persistedState(startOfPeriod)
val currentEnergy = PZEM004T_House_Energy.state as QuantityType<Number>
val dayEnergy = dayAgoValue.state as QuantityType<Number>
val monthEnergy = monthAgoValue.state as QuantityType<Number>
val periodEnergy = periodAgoValue.state as QuantityType<Number>
val dailyConsumption = (currentEnergy.subtract(dayEnergy)).doubleValue
val monthlyConsumption = (currentEnergy.subtract(monthEnergy)).doubleValue
val periodConsumption = (currentEnergy.subtract(periodEnergy)).doubleValue
// Update Items with calculated values
Energy_Consumption_Day.postUpdate(dailyConsumption)
Energy_Consumption_Month.postUpdate(monthlyConsumption)
Energy_Consumption_Period.postUpdate(periodConsumption)
TAGS:
#openhab
Chuyên đề
•
4 TậpSmartHome
- [OpenHAB] Cảm biến nhiệt độ, độ ẩm Xiaomi LYWSD03MMC với ESPHome trên ESP32-C3.
- [OpenHAB] Share script Âm lịch Việt Nam cho OpenHAB
- [OpenHAB] Công tơ điện tử với PZEM004T và ESPHome trên ESP32-C3. Đang đọc
- [OpenHAB] Share Widget điều khiển từ xa LG WebOS TV.
Bình luận & Thảo luận 0
Chia sẻ thắc mắc, phản hồi hoặc kinh nghiệm thực chiến của bạn