🌐 VI | EN

[OpenHAB] Công tơ điện tử với PZEM004T và ESPHome trên ESP32-C3.

Nghia Phan
Nghia Phan
🌐 English version Bài viết kỹ thuật Lượt 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
esphome:  name: pzem004t-mqtt  friendly_name: PZEM004T to MQTT  min_version: 2025.3.2  name_add_mac_suffix: true  platformio_options:    board_build.f_flash: 40000000L    board_build.flash_mode: dio    board_build.flash_size: 4MB    esp32:  board: esp32-c3-devkitm-1  framework:    type: esp-idf    uart:  rx_pin: 8  tx_pin: 9  baud_rate: 9600modbus:mqtt:  broker: "192.168.0.4"  username: "user"  password: "password"  discovery: false  discover_ip: falsewifi:  ssid: "WIFI SSID"  password: "********"ota:  - platform: esphome    password: "******"logger:  level: INFOsensor:  - platform: pzemac    current:      name: "PZEM-004T Current"    voltage:      name: "PZEM-004T Voltage"    energy:      # Nhân Energy với 0.001 để quy đổi đơn vị từ Wh sang kWh      name: "PZEM-004T Energy"      filters:        - multiply: 0.001    power:      name: "PZEM-004T Power"    frequency:      name: "PZEM-004T Frequency"    power_factor:      name: "PZEM-004T Power Factor"    update_interval: 2s      - platform: wifi_signal    name: "WiFi Signal dB"    id: wifi_signal_db    update_interval: 300s  - platform: copy    source_id: wifi_signal_db    name: "WiFi Signal Percent"    filters:      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);    unit_of_measurement: "Signal %"
  • 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:3574a13d85label: PZEM004T Power MonitorthingTypeUID: mqtt:topicconfiguration: {}bridgeUID: mqtt:broker:17653025f5location: Housechannels:  - 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.
    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)
Thẻ: #openhab

Bình Luận & Thảo Luận

Góp ý, hỏi đáp và chia sẻ suy nghĩ của bạn

Markdown & QQ Emoji
Đang tải khung bình luận...