Czujnik Prądu PZEM-004T V3

To ostatnia wersja, próbowałem wszystkich możliwych dodatków odnośnie sterowania parametrami magistrali - bezowocnie. Więc to co uznałem za zbędne - powycinałem.

esphome:
  name: licznik
  friendly_name: licznik

esp32:
  board: esp32dev
  framework:
    type: arduino


logger:
  level: VERY_VERBOSE

# Enable Home Assistant API
api:
  encryption:
    key: !secret api_password

ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ....
  .... itd..

uart:
  rx_pin: GPIO16
  tx_pin: GPIO17
  baud_rate: 9600
  stop_bits: 2
  data_bits: 8
  parity: NONE
  debug:
    direction: BOTH

  
modbus:

sensor:
  - platform: pzemac
    address: 1
    current:
      name: "Current"
      accuracy_decimals: 2
    voltage:
      name: "Voltage"
      accuracy_decimals: 2
    energy:
      name: "Energy"
      unit_of_measurement: Wh
      accuracy_decimals: 1
      id: p_energy
    power:
      name: "Power"
      unit_of_measurement: W
      accuracy_decimals: 2
      id: p_power
    frequency:
      name: "Frequency"
      unit_of_measurement: Hz
      accuracy_decimals: 2
    power_factor:
      name: "Power Factor"
      accuracy_decimals: 2
      id: p_power_factor
    update_interval: 5s

Próbowałem użyć diod impulsowych (tak, zmieniałem kierunek) - również bez powodzenia. Używałem BAT85 - tylko takie miałem. Przy użyciu rozwiązania z diodami jak i przy konwerterach I2C przestawał działać nawet ten sprawny.
Te konwertery: https://pl.aliexpress.com/item/1005007895387780.html?spm=a2g0o.order_list.order_list_main.33.67ed1c24uwA1aZ&gatewayAdapt=glo2pol i te diody: https://pl.aliexpress.com/item/1005006140707531.html?spm=a2g0o.order_list.order_list_main.123.67ed1c24uwA1aZ&gatewayAdapt=glo2pol.
Pomyślcie o tych pull-upach gdzie je wpiąć, ryzyko po mojej stronie. Nie będę miał żalu jak się sfajczy :slight_smile: Pomierzę napięcia na liniach elementów to wstawię tutaj.


Pomierzyłem napięcia w obwodzie Tx dla działającego (D) i niedziałającego (ND) w punktach:

  • Pin8 IC1 - ND - 5.1V, D - 5.0V
  • za R1 (na płytce R9) - ND - 4.6V, D - 5.0V
  • za D1 (Pin7 IC1, jak i Tx) - ND - 2.8V, D - 5.0V
    Przy pozycjach 5.0 pojawiały się różnice w setnych, więc pominąłem.
    Tak na marginesie - diody D1 też są inne.
Podsumowanie

Ten tekst zostanie ukryty

  1. YAMLa do ESPHome bezwzględnie musisz zamieszczać jako pytający kompletnego (jak mamy analizować urywki…), tylko odpowiadający mogą zamieszczać wybrane bloki.

  2. To w ogóle nie jest YAML, użyłeś cytowania (zamiast znacznika kodu), które zniszczyło YAMLa. Jak prawidłowo zamieszczać YAML, inny kod lub logi w postach na forum

oscyloskopem?

cały czas dążysz do tego by spalić MCU
aby nie ryzykować smażeniem albo między CON1 a MCU wstawiasz konwerter poziomów logicznych albo jako Vcc używasz 3.3V a nie 5V

dorysuj sobie co jest wewnątrz układu po lewej (transoptory) to zrozumiesz jak to działa

wniosek z twoich pomiarów jest taki, że na płytce D nie świeci LED, a na ND świeci

płytką ND nie spalisz MCU a D spalisz (to przy założeniu, że te napięcia się nie zmieniają), w obu wypadkach dla MCU jest to stan wysoki (wychodzący poziom z ND jest bezpieczny , a z D niebezpieczny).

Jeśli CON1 nie jest nigdzie podłączony nie powinno być takich różnic
to może sugerować usmażony tranzystor na wyjściu VOA w egzemplarzu ND lub upływność między TX złącza CON1 a masą (naprawdę nic tam nie jest podłączone?)
(a zatem jest dziwne, że on działa)

Czyli doszliśmy do ściany. Reasumując:

  1. Zliczanie energii za pośrednictwem PZEM-04 to bezsensowny sposób, zliczając koszty zakupu, nakłady pośrednie i czas własny na realizację. Spowodowane jakością wykonania modułów oraz zapewne - cwaniactwem chinoli którzy sprzedają niepełnowartościowe moduły za pośrednictwem aliexpress.
  2. Błędy projektowe modułu, które zostały zauważone przy szeregu realizacji.
  3. Lepiej na tym etapie zakończyć i odłożyć ad acta pomiar 3-fazowy na tym sprzęcie - pojawiły się atrakcyjne cenowo mierniki energii, jak chociażby DTS-1946
  4. ps co prawda odpuściłem sobie brnięcie w ślepy zaułek, ale gdyby ktoś doszedł do tego miejsca, podaję link do artykułu przystępnie wyjaśniającego pull-up (podciąganie sygnału) dla Tx https://blog.mbedded.ninja/electronics/communication-protocols/uart-communication-protocol/
1 Like

Jakbym miał coś zmienić w kwestii pomiaru energii zobaczył bym produkty, Monitor EMPORIA kiedyś dostępne tylko w USA obecnie widziałem na ale tanio. 8 (obsługa do 16) przekładników 50A w cenie 600zł to chyba nie wygórowana cena, współpracuje z HA. nie zagłębiałem się w lekturę urządzenia.

To jest zabawka dla hobbystów, a na domiar złego niemal wszyscy chcą to używać niezgodnie z zamiarami projektanta (Ty też…), bo się po prostu da zakombinować.
A rozwiązania hobbystyczne - no cóż niemal zawsze są droższe od fabrycznej masówki, ale zwykle masz wpływ na ich budowę (więc możesz teoretycznie mieć opcje, których nie ma w masówce).

Kupując za taką cenę strzelał bym z armaty do wróbla - zważywszy na moje potrzeby. Potrzebuję tylko monitorować zużycie energii przez pompę ciepła. Podliczmy na dzień dzisiejszy: PZEM-004T 32 zł/1 szt co daje 96 zł za komplet. Kompletny licznik Sinotimer DTS6619-045 MODBUS RS485 100A 380V - trafiłem na waidomym sinoportalu za niecałe 79 zł(z wysyłką). Uruchomienie i konfiguracja - bez kłopotów natury sprzętowej. Do niedawna atrakcyjne cenowo były PZEM-y, a kompaktowe liczniki trójfazowe były wielokroć droższe, stąd “kombinowanie” z PZEM-ami. Jak widć z powyższego - na dzień dzisiejszy zupełnie bezzasadne.

Poniżej zamieszczam dane pomocne do uruchomienia licznika w Home Assistant. Oprócz licznika potrzebny będzie jeszcze konwerter RS485<>TTL, ESP32 Type-C USB CH340C WiFi (tego użyłem), ponadto obudowa akrylowa na ESP32, kabelki JST XH2.54 male.

esphome:
  name: licznik
  friendly_name: licznik

esp32:
  board: esp32dev
  framework:
    type: esp-idf

logger:
#  level: VERY_VERBOSE

api:
  encryption:
    key: !secret api_password

ota:
  - platform: esphome
    password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: 192.168.1.207
    gateway: 192.168.1.254
    subnet: 255.255.255.0
  domain: .home.local

  ap:
    ssid: "Esp-Pezem Fallback Hotspot"
    password: "xxxxxxxxxxxxx"

captive_portal:

uart:
  rx_pin: GPIO16
  tx_pin: GPIO17
  baud_rate: 9600
  data_bits: 8
  parity: NONE
  stop_bits: 1

  
modbus:
  id: modbus1
  send_wait_time: 300ms

modbus_controller:
  - id: st
    address: 0x1
    modbus_id: modbus1
    setup_priority: -10
    update_interval: 10s

sensor:
  - platform: modbus_controller
    name: "A phase voltage"
    address: 0x0000
    unit_of_measurement: "V"
    state_class: measurement
    device_class: voltage
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.1

  - platform: modbus_controller
    name: "B phase voltage"
    address: 0x0001
    unit_of_measurement: "V"
    state_class: measurement
    device_class: voltage
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.1
  
  - platform: modbus_controller
    name: "C phase voltage"
    address: 0x0002
    unit_of_measurement: "V"
    state_class: measurement
    device_class: voltage
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.1

  - platform: modbus_controller
    name: "A line current"
    address: 0x0003
    unit_of_measurement: "A"
    state_class: measurement
    device_class: Current
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01
    
  - platform: modbus_controller
    name: "B line current"
    address: 0x0004
    unit_of_measurement: "A"
    state_class: measurement
    device_class: Current
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01

  - platform: modbus_controller
    name: "C line current"
    address: 0x0005
    unit_of_measurement: "A"
    state_class: measurement
    device_class: Current
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01

  - platform: modbus_controller
    name: "A phase active power"
    address: 0x0008
    unit_of_measurement: "W"
    state_class: measurement
    device_class: Power
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01

  - platform: modbus_controller
    name: "B phase active power"
    address: 0x0009
    unit_of_measurement: "W"
    state_class: measurement
    device_class: Power
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01

  - platform: modbus_controller
    name: "C phase active power"
    address: 0x000A
    unit_of_measurement: "W"
    state_class: measurement
    device_class: Power
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01

  - platform: modbus_controller
    name: "A phase reactive power"
    address: 0x000C
    unit_of_measurement: "var"
    state_class: measurement
    device_class: Reactive power
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01    
  
  - platform: modbus_controller
    name: "B phase reactive power"
    address: 0x000D
    unit_of_measurement: "var"
    state_class: measurement
    device_class: Reactive power
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01  

  - platform: modbus_controller
    name: "C phase reactive power"
    address: 0x000E
    unit_of_measurement: "var"
    state_class: measurement
    device_class: Reactive power
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01  

  - platform: modbus_controller
    name: "A phase power factor"
    address: 0x0014
    unit_of_measurement: "None"
    state_class: measurement
    device_class: Power Factor
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01  

  - platform: modbus_controller
    name: "B phase power factor"
    address: 0x0015
    unit_of_measurement: "None"
    state_class: measurement
    device_class: Power Factor
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01  

  - platform: modbus_controller
    name: "C phase power factor"
    address: 0x0016
    unit_of_measurement: "None"
    state_class: measurement
    device_class: Power Factor
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01  

  - platform: modbus_controller
    name: "Frequency"
    address: 0x001A
    unit_of_measurement: "Hz"
    register_type: read
    state_class: measurement
    device_class: frequency
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01    

  - platform: modbus_controller
    name: "Total active electricity power "
    address: 0x0028
    unit_of_measurement: "kWh"
    state_class: measurement
    device_class: Power
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01  
    
  - platform: modbus_controller
    name: "Total reactive electricity power"
    address: 0x003C
    unit_of_measurement: "kWh"
    state_class: measurement
    device_class: Power
    register_type: read
    register_count: 2
    value_type: U_WORD
    accuracy_decimals: 2
    filters:
     - multiply: 0.01 

W kodzie nie zostały zamieszczone wszystkie rejestry, można je odczytać z poniższej tabeli i wstawić te które są potrzebne:

W części “Current electric energy” jest błąd w adresacji rejestrów, do każdej pozycji trzeba dodać 1, czyli np. podany adres 0x001D to jest 0x001E.

Na koniec parę wskazówek. Przy uruchamianiu podłączenia licznika trzeba co najmniej podłączyć fazę “A” i zero do zacisków licznika. Sprawdzić na liczniku ustawienie parametrów transmisji - 9600 i 0-N.8.1. Płytkę ESP łączyć z konwerterm RS-485 Rx z Rx-em, Tx z Tx-em. Odpowiednio złącze A licznika ze złączem A konwetera itd..

ESP32 warto umieścić w obudowie akrylowej - koszt około 10 zł.

1 Like

Próbuje podłączyć PZEM-004T do płytki ESP 32S do pinów RX i TX i wgrać soft ESP Home. PZEM mam wersji do 10A.

esphome:
  name: esp32-nowy
  friendly_name: ESP32-nowy

esp32:
  variant: esp32
  framework:
    type: esp-idf

logger:

  
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  - platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: ESP32-nowy Fallback Hotspot
    password: "xxxxxxxxxxxxx"

captive_portal:

i2c:
  sda: GPIO16
  scl: GPIO17
  scan: true
  
one_wire:
  - platform: gpio
    pin: GPIO32
    id: one_wire_gpio_1

sensor:
  - platform: dallas_temp
    name: Temperatura1
    one_wire_id: one_wire_gpio_1
    id: sensor_dallas_temp_1
    update_interval: 5s

  - platform: bme280_i2c
    humidity:
      id: sensor_bme280_i2c_1_humidity
      name: Wilgotność
    temperature:
      id: sensor_bme280_i2c_1_temperature
      name: Temperatura
    id: sensor_bme280_i2c_1
    update_interval: 20s
    address: 0x76
    

  - platform: pzemac
    modbus_id: mbus_1
    voltage:
      name: "PZEM Napięcie"
    current:
      name: "PZEM Prąd"
    power:
      name: "PZEM Moc"
    energy:
      name: "PZEM Energia"
    frequency:
      name: "PZEM Częstotliwość"
    power_factor:
      name: "PZEM Współczynnik Mocy"
    update_interval: 10s
 
uart:
  id: uart_1
  baud_rate: 9600
  rx_pin: GPIO3
  tx_pin: GPIO1
  stop_bits: 1

modbus:
   id: mbus_1
   uart_id: uart_1


    
    
switch:
  - platform: gpio
    pin: GPIO22
    name: "Przekaźnik 1"
    id: relay_1
    restore_mode: ALWAYS_OFF

  - platform: gpio
    pin: GPIO21
    name: "Przekaźnik 2"
    id: relay_2
    restore_mode: ALWAYS_OFF

  - platform: gpio
    pin: GPIO19
    name: "Przekaźnik 3"
    id: relay_3
    restore_mode: ALWAYS_OFF

  - platform: gpio
    pin: GPIO18
    name: "Przekaźnik 4"
    id: relay_4
    restore_mode: ALWAYS_OFF

# Sekcja czujników binarnych
binary_sensor:
  # --- PRZYCISKI FIZYCZNE (UKRYTE W HA DZIĘKI 'internal: true') ---
  - platform: gpio
    pin:
      number: GPIO4
      mode: INPUT_PULLUP
      inverted: true
    name: "Przycisk 1"
    internal: true
    on_press:
      then:
        - switch.toggle: relay_1

  - platform: gpio
    pin:
      number: GPIO13
      mode: INPUT_PULLUP
      inverted: true
    name: "Przycisk 2"
    internal: true
    on_press:
      then:
        - switch.toggle: relay_2

  - platform: gpio
    pin:
      number: GPIO14
      mode: INPUT_PULLUP
      inverted: true
    name: "Przycisk 3"
    internal: true
    on_press:
      then:
        - switch.toggle: relay_3

  - platform: gpio
    pin:
      number: GPIO23
      mode: INPUT_PULLUP
      inverted: true
    name: "Przycisk 4"
    internal: true
    on_press:
      then:
        - switch.toggle: relay_4

  # --- KONTAKTRONY (SENSORY WIDOCZNE W HA) ---
  - platform: gpio
    pin:
      number: GPIO33
      mode: INPUT_PULLUP
      inverted: true
    name: "Kontaktron 1 (IO33)"
    device_class: door

  - platform: gpio
    pin:
      number: GPIO25
      mode: INPUT_PULLUP
      inverted: true
    name: "Kontaktron 2 (IO25)"
    device_class: door

  - platform: gpio
    pin:
      number: GPIO26
      mode: INPUT_PULLUP
      inverted: true
    name: "Kontaktron 3 (IO26)"
    device_class: door

  - platform: gpio
    pin:
      number: GPIO27
      mode: INPUT_PULLUP
      inverted: true
    name: "Kontaktron 4 (IO27)"
    device_class: door

Na PZEM miga tylko jedna dioda i HA mam “nieznany”

Screen

INFO ESPHome 2026.7.3
INFO Loaded validated config cache for esp32-nowy.yaml, skipping validation.
INFO Starting log output from 192.168.1.187 using esphome API
INFO Successfully resolved esp32-nowy @ 192.168.1.187 in 0.000s
INFO Successfully connected to esp32-nowy @ 192.168.1.187 in 0.005s
INFO Successful handshake with esp32-nowy @ 192.168.1.187 in 0.213s
[22:21:34.101][I][app:151]: ESPHome version 2026.7.3 compiled on 2026-08-05 21:35:32 +0200
[22:21:34.101][I][app:158]: ESP32 Chip: ESP32 rev3.1, 2 core(s)
[22:21:34.101][W][app:171]: Chip rev >= 3.0 detected. Set minimum_chip_revision: "3.1" under esp32 > framework > advanced to reduce binary size
[22:21:34.101][W][app:198]: Bootloader supports SRAM1 as IRAM (+40KB). Set sram1_as_iram: true under esp32 > framework > advanced
[22:21:34.105][C][logger:223]: Logger:
[22:21:34.105][C][logger:223]:   Max Level: DEBUG
[22:21:34.105][C][logger:223]:   Initial Level: DEBUG
[22:21:34.120][C][logger:230]:   Log Baud Rate: 115200
[22:21:34.120][C][logger:230]:   Hardware UART: UART0
[22:21:34.120][C][logger:239]:   Task Log Buffer Size: 768 bytes
[22:21:34.149][C][i2c.idf:092]: I2C Bus:
[22:21:34.151][C][i2c.idf:093]:   SDA Pin: GPIO16
[22:21:34.151][C][i2c.idf:093]:   SCL Pin: GPIO17
[22:21:34.151][C][i2c.idf:093]:   Frequency: 50000 Hz
[22:21:34.151][C][i2c.idf:103]:   Recovery: bus successfully recovered
[22:21:34.151][C][i2c.idf:113]: Results from bus scan:
[22:21:34.154][C][i2c.idf:119]: Found device at address 0x76
[22:21:34.174][C][gpio.one_wire:020]: GPIO 1-wire bus:
[22:21:34.174][C][gpio.one_wire:131]:   Pin: GPIO32
[22:21:34.174][C][gpio.one_wire:087]:   Found devices:
[22:21:34.174][C][gpio.one_wire:090]:     0xba3c01f096578028 (DS18B20)
[22:21:34.193][C][uart.idf:254]: UART Bus 1:
[22:21:34.196][C][uart.idf:131]:   TX Pin: GPIO1
[22:21:34.199][C][uart.idf:131]:   RX Pin: GPIO3
[22:21:34.199][C][uart.idf:259]:   RX Buffer Size: 256
[22:21:34.199][C][uart.idf:259]:   RX Full Threshold: 8
[22:21:34.199][C][uart.idf:259]:   RX Timeout: 2
[22:21:34.201][C][uart.idf:268]:   Baud Rate: 9600 baud
[22:21:34.201][C][uart.idf:268]:   Data Bits: 8
[22:21:34.201][C][uart.idf:268]:   Parity: NONE
[22:21:34.201][C][uart.idf:268]:   Stop bits: 1
[22:21:34.201][C][uart.idf:268]:   Wake on data RX: ENABLED
[22:21:34.237][C][modbus:517]: Modbus:
[22:21:34.237][C][modbus:517]:   Send Wait Time: 2000 ms
[22:21:34.237][C][modbus:517]:   Turnaround Time: 600 ms
[22:21:34.237][C][modbus:517]:   Frame Delay: 5 ms
[22:21:34.237][C][modbus:517]:   Long Rx Buffer Delay: 10 ms
[22:21:34.238][C][switch.gpio:088]: GPIO Switch 'Przekaźnik 1'
[22:21:34.238][C][switch.gpio:088]:   Restore Mode: always OFF
[22:21:34.240][C][switch.gpio:131]:   Pin: GPIO22
[22:21:34.255][C][switch.gpio:088]: GPIO Switch 'Przekaźnik 2'
[22:21:34.255][C][switch.gpio:088]:   Restore Mode: always OFF
[22:21:34.276][C][switch.gpio:131]:   Pin: GPIO21
[22:21:34.277][C][switch.gpio:088]: GPIO Switch 'Przekaźnik 3'
[22:21:34.277][C][switch.gpio:088]:   Restore Mode: always OFF
[22:21:34.277][C][switch.gpio:131]:   Pin: GPIO19
[22:21:34.296][C][switch.gpio:088]: GPIO Switch 'Przekaźnik 4'
[22:21:34.296][C][switch.gpio:088]:   Restore Mode: always OFF
[22:21:34.316][C][switch.gpio:131]:   Pin: GPIO18
[22:21:34.316][C][gpio.binary_sensor:016]: GPIO Binary Sensor 'Przycisk 1'
[22:21:34.317][C][gpio.binary_sensor:131]:   Pin: GPIO4
[22:21:34.327][C][gpio.binary_sensor:061]:   Mode: interrupt
[22:21:34.327][C][gpio.binary_sensor:063]:   Interrupt Type: ANY_EDGE
[22:21:34.340][C][gpio.binary_sensor:016]: GPIO Binary Sensor 'Przycisk 2'
[22:21:34.340][C][gpio.binary_sensor:131]:   Pin: GPIO13
[22:21:34.344][C][gpio.binary_sensor:061]:   Mode: interrupt
[22:21:34.344][C][gpio.binary_sensor:063]:   Interrupt Type: ANY_EDGE
[22:21:34.360][C][gpio.binary_sensor:016]: GPIO Binary Sensor 'Przycisk 3'
[22:21:34.361][C][gpio.binary_sensor:131]:   Pin: GPIO14
[22:21:34.364][C][gpio.binary_sensor:061]:   Mode: interrupt
[22:21:34.364][C][gpio.binary_sensor:063]:   Interrupt Type: ANY_EDGE
[22:21:34.388][C][gpio.binary_sensor:016]: GPIO Binary Sensor 'Przycisk 4'
[22:21:34.388][C][gpio.binary_sensor:131]:   Pin: GPIO23
[22:21:34.394][C][gpio.binary_sensor:061]:   Mode: interrupt
[22:21:34.394][C][gpio.binary_sensor:063]:   Interrupt Type: ANY_EDGE
[22:21:34.411][C][gpio.binary_sensor:016]: GPIO Binary Sensor 'Kontaktron 1 (IO33)'
[22:21:34.411][C][gpio.binary_sensor:225]:   Device Class: 'door'
[22:21:34.415][C][gpio.binary_sensor:131]:   Pin: GPIO33
[22:21:34.415][C][gpio.binary_sensor:061]:   Mode: interrupt
[22:21:34.415][C][gpio.binary_sensor:063]:   Interrupt Type: ANY_EDGE
[22:21:34.426][C][gpio.binary_sensor:016]: GPIO Binary Sensor 'Kontaktron 2 (IO25)'
[22:21:34.431][C][gpio.binary_sensor:225]:   Device Class: 'door'
[22:21:34.431][C][gpio.binary_sensor:131]:   Pin: GPIO25
[22:21:34.431][C][gpio.binary_sensor:061]:   Mode: interrupt
[22:21:34.433][C][gpio.binary_sensor:063]:   Interrupt Type: ANY_EDGE
[22:21:34.452][C][gpio.binary_sensor:016]: GPIO Binary Sensor 'Kontaktron 3 (IO26)'
[22:21:34.455][C][gpio.binary_sensor:225]:   Device Class: 'door'
[22:21:34.456][C][gpio.binary_sensor:131]:   Pin: GPIO26
[22:21:34.456][C][gpio.binary_sensor:061]:   Mode: interrupt
[22:21:34.461][C][gpio.binary_sensor:063]:   Interrupt Type: ANY_EDGE
[22:21:34.479][C][gpio.binary_sensor:016]: GPIO Binary Sensor 'Kontaktron 4 (IO27)'
[22:21:34.479][C][gpio.binary_sensor:225]:   Device Class: 'door'
[22:21:34.479][C][gpio.binary_sensor:131]:   Pin: GPIO27
[22:21:34.482][C][gpio.binary_sensor:061]:   Mode: interrupt
[22:21:34.482][C][gpio.binary_sensor:063]:   Interrupt Type: ANY_EDGE
[22:21:34.506][C][dallas.temp.sensor:028]: Dallas Temperature Sensor:
[22:21:34.506][C][dallas.temp.sensor:033]:   Address: 0xba3c01f096536028 (DS18B20)
[22:21:34.513][C][dallas.temp.sensor:034]:   Resolution: 12 bits
[22:21:34.514][C][dallas.temp.sensor:394]:   Update Interval: 5.0s
[22:21:34.533][C][bme280_i2c.sensor:024]:   Address: 0x76
[22:21:34.534][C][bme280.sensor:182]: BME280:
[22:21:34.537][C][bme280.sensor:194]:   IIR Filter: OFF
[22:21:34.538][C][bme280.sensor:394]:   Update Interval: 20.0s
[22:21:34.538][C][bme280.sensor:017]:   Temperature 'Temperatura'
[22:21:34.538][C][bme280.sensor:017]:     State Class: 'measurement'
[22:21:34.538][C][bme280.sensor:017]:     Unit of Measurement: '°C'
[22:21:34.538][C][bme280.sensor:017]:     Accuracy Decimals: 1
[22:21:34.548][C][bme280.sensor:225]:     Device Class: 'temperature'
[22:21:34.552][C][bme280.sensor:198]:     Oversampling: 16x
[22:21:34.552][C][bme280.sensor:200]:     Oversampling: 16x
[22:21:34.565][C][bme280.sensor:017]:   Humidity 'Wilgotność'
[22:21:34.565][C][bme280.sensor:017]:     State Class: 'measurement'
[22:21:34.565][C][bme280.sensor:017]:     Unit of Measurement: '%'
[22:21:34.565][C][bme280.sensor:017]:     Accuracy Decimals: 1
[22:21:34.566][C][bme280.sensor:225]:     Device Class: 'humidity'
[22:21:34.578][C][bme280.sensor:202]:     Oversampling: 16x
[22:21:34.599][C][pzemac:066]: PZEMAC:
[22:21:34.599][C][pzemac:066]:   Address: 0x01
[22:21:34.600][C][pzemac:017]: Voltage 'PZEM Napięcie'
[22:21:34.600][C][pzemac:017]:   State Class: 'measurement'
[22:21:34.600][C][pzemac:017]:   Unit of Measurement: 'V'
[22:21:34.600][C][pzemac:017]:   Accuracy Decimals: 1
[22:21:34.600][C][pzemac:225]:   Device Class: 'voltage'
[22:21:34.603][C][pzemac:017]: Current 'PZEM Prąd'
[22:21:34.603][C][pzemac:017]:   State Class: 'measurement'
[22:21:34.603][C][pzemac:017]:   Unit of Measurement: 'A'
[22:21:34.603][C][pzemac:017]:   Accuracy Decimals: 3
[22:21:34.621][C][pzemac:225]:   Device Class: 'current'
[22:21:34.622][C][pzemac:017]: Power 'PZEM Moc'
[22:21:34.622][C][pzemac:017]:   State Class: 'measurement'
[22:21:34.622][C][pzemac:017]:   Unit of Measurement: 'W'
[22:21:34.622][C][pzemac:017]:   Accuracy Decimals: 2
[22:21:34.622][C][pzemac:225]:   Device Class: 'power'
[22:21:34.630][C][pzemac:017]: Energy 'PZEM Energia'
[22:21:34.630][C][pzemac:017]:   State Class: 'total_increasing'
[22:21:34.630][C][pzemac:017]:   Unit of Measurement: 'Wh'
[22:21:34.630][C][pzemac:017]:   Accuracy Decimals: 0
[22:21:34.655][C][pzemac:225]:   Device Class: 'energy'
[22:21:34.655][C][pzemac:017]: Frequency 'PZEM Częstotliwość'
[22:21:34.655][C][pzemac:017]:   State Class: 'measurement'
[22:21:34.655][C][pzemac:017]:   Unit of Measurement: 'Hz'
[22:21:34.655][C][pzemac:017]:   Accuracy Decimals: 1
[22:21:34.655][C][pzemac:225]:   Device Class: 'frequency'
[22:21:34.660][C][pzemac:216]:   Icon: 'mdi:current-ac'
[22:21:34.705][C][pzemac:017]: Power Factor 'PZEM Współczynnik Mocy'
[22:21:34.705][C][pzemac:017]:   State Class: 'measurement'
[22:21:34.705][C][pzemac:017]:   Unit of Measurement: ''
[22:21:34.705][C][pzemac:017]:   Accuracy Decimals: 2
[22:21:34.706][C][pzemac:225]:   Device Class: 'power_factor'
[22:21:34.721][C][captive_portal:141]: Captive Portal:
[22:21:34.740][C][wifi:1556]: WiFi:
[22:21:34.740][C][wifi:1556]:   Local MAC: xxxxxxxxxxxxx
[22:21:34.740][C][wifi:1556]:   Connected: YES
[22:21:34.745][C][wifi:1259]:   IP Address: 192.168.1.187
[22:21:34.755][C][wifi:1270]:   SSID: 'xxxxxx'
[22:21:34.755][C][wifi:1270]:   BSSID: xxxxxxx
[22:21:34.755][C][wifi:1270]:   Hostname: 'esp32-nowy'
[22:21:34.755][C][wifi:1270]:   Signal strength: -54 dB ▂▄▆█
[22:21:34.755][C][wifi:1270]:   Channel: 12
[22:21:34.755][C][wifi:1270]:   Subnet: 255.255.255.0
[22:21:34.755][C][wifi:1270]:   Gateway: 192.168.1.1
[22:21:34.755][C][wifi:1270]:   DNS1: 192.168.1.1
[22:21:34.755][C][wifi:1270]:   DNS2: 0.0.0.0
[22:21:34.767][C][esphome.ota:098]: Over-The-Air updates:
[22:21:34.767][C][esphome.ota:098]:   Address: esp32-nowy.local:3232
[22:21:34.767][C][esphome.ota:098]:   Version: 2
[22:21:34.787][C][safe_mode:058]: Safe Mode:
[22:21:34.787][C][safe_mode:058]:   Successful after: 60s
[22:21:34.787][C][safe_mode:058]:   Invoke after: 10 attempts
[22:21:34.787][C][safe_mode:058]:   Duration: 300s
[22:21:34.792][C][safe_mode:079]:   Bootloader rollback: support unknown
[22:21:34.808][C][web_server.ota:256]: Web Server OTA
[22:21:34.828][C][api:269]: Server:
[22:21:34.828][C][api:269]:   Address: esp32-nowy.local:6053
[22:21:34.828][C][api:269]:   Listen backlog: 4
[22:21:34.828][C][api:269]:   Max connections: 5
[22:21:34.835][C][api:276]:   Noise encryption: YES
[22:21:34.848][C][mdns:259]: mDNS:
[22:21:34.848][C][mdns:259]:   Hostname: esp32-nowy
[22:21:35.958][W][modbus:057]: Stop waiting for response from 1 2023ms after last send
[22:21:36.729][S][sensor]: 'Temperatura' >> 28.5 °C
[22:21:36.729][S][sensor]: 'Wilgotność' >> 55.7 %
[22:21:38.202][D][dallas.temp.sensor:053]: 'Temperatura1': Got Temperature=27.687500°C
[22:21:38.303][S][sensor]: 'Temperatura1' >> 27.7 °C
[22:21:43.201][D][dallas.temp.sensor:053]: 'Temperatura1': Got Temperature=27.687500°C
[22:21:43.300][S][sensor]: 'Temperatura1' >> 27.7 °C
[22:21:45.959][W][modbus:057]: Stop waiting for response from 1 2016ms after last send
[22:21:48.201][D][dallas.temp.sensor:053]: 'Temperatura1': Got Temperature=27.750000°C
[22:21:48.300][S][sensor]: 'Temperatura1' >> 27.8 °C

Prośba o pomoc w czym rzecz.

to na moje oko jest konflikt sprzętowy (dziwię się że to się kompiluje)
jaką masz płytkę (konkretnie)? bo używasz UART0 (GPIO 1 i 3), który jest na większości modeli typowych płytek już użyty do połączenia z mostkiem UART-USB (czyli się nie nadaje, powinieneś użyć inny UART niż właśnie ten)

kiedyś tu była fajna tabelka z domyślnymi pinoutami pomagająca to łatwo skonfigurować na dowolnym MCU ESP (bo każdy model ma inny moduł sprzętowy magistral szeregowych)

Jeśli chcesz używać loggera na USB czyli na UART0, to zostaw go na domyślnych 1 i 3 (bo on nie jest “wędrujący”), a do komunikacji z PZEM użyj UART1 lub UART2 (i przypisz użyty UART inny niż zero do dowolnych “zdrowych” pinów, które użyjesz do komunikacji z PZEM).

Nie jestem biegły w ESPHome i kod pomagał mi generować AI. Bez PZEM poradził sobie rewelacyjnie. Z tym UARTem nie do końca kumam. Płytkę mam ESP 32S 38pin HW-573 v1.3.1

Próbujesz użyć jeden fizycznie UART równocześnie w 2 miejscach, mimo że zwykły MCU “zwykłe stare ESP32” (dwurdzeniowa Xtensa LX6) ma trzy sprzętowe porty szeregowe UART, podaj konkrety bo nawet nie wiem jaką masz płytkę.

Z tym spojlerem to przesadziłeś… zedytowałem posta, bo jak można ukrywać to co jest najbardziej istotne?!
Nie możesz wstawić prawdziwego zdjęcia, a nie jakąś szmatę z internetu?, ale tak to jest “zwykłe stare ESP32”, takie jakie mam na myśli.

Jak sprawdzić jaką mam dokładnie płytkę ESP?

Zrób jej zdjęcie, ale skoro firmware działa póki nie podłączasz czegoś z konfliktem sprzętowym, to już jest dowód, że to jest właśnie

bo w innych ESP32-xx są na tyle inne procesory i inne kluczowe podzespoły systemowe, że kod się nawet nie uruchomi prawidłowo.

Po tym zdjęciu z neta sądzę że to jest

lub jego klon

Tak zdjęcie to potwierdza, na tym modelu płytki UART0 czyli piny GPIO1 i GPIO3 są już użyte do połączenia z mostkiem do USB - może tam być logger, bo czemu nie (duża łatwość wykorzystania, bo dzięki mostkowi jest dostępny po USB), ale nie może być wpięte do tych pinów PZEM

tu masz mój ulubiony bryk

UWAGA piny GPIO6-GPIO11 są zarezerwowane do komunikacji z pamięcią flash!! (nie możesz ich użyć)
ale UART1 możesz delegować na dowolne “zdrowe” piny, lub użyć UART2 (domyślnie na GPIO 16 i 17, ale tu też nie jest mus, on też jest “wędrujący”)

do komunikacji z PZEM nie używaj UART0 (wrzuć to w AI to ci wymyśli coś bardziej sensownego niż jakieś bredzenie)

Mam sporo zajętych pinów, IO22, 21, 19, 18 mam przekaźniki, na IO 33, 25, 26, 27 mam kontaktrony, IO32 - 1-wire, IO4, 13, 14, 23 mam switch, IO16, 17 - I2C. Wolne mam IO36, 39, 34, 35, 12, 09, 10, 11.

Nie możesz używać “niezdrowych” pinów, kontaktrony sobie wrzuć na GPIO typu “input-only” (bo mogą być na takich pół-fukcjonalnych pinach, a porty szeregowe nie).
Albo weź następny ESP, bo jeśli chcesz iść ma maksa to trzeba to wziąć pod uwagę w projekcie od początku.

to jest cały zakres od 6 do 11, czyli właściwie nic nie zostało jeśli nie przerzucisz kontaktronów w inne miejsce.

ok, dzięki za pomoc, tak spróbuje.

EDIT:

A można na pinach “input only“ stosować optoizolatory?

Schemat

A dlaczego nie? to są normalne wejścia, a skoro masz własne sprzętowe pullupy to nawet lepiej.

BTW

skoro masz fizyczne pullup’y to powinieneś używać trybu input a nie pullup (czyli “po staremu” INPUT zamiast INPUT_PULLUP, jakkolwiek sugeruję przejście na nową składnię)

można też filtrować potencjalne drgania styków (to tylko przykład, zmodyfikuj do swoich potrzeb), szczególnie że używasz toggle

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO34
      mode: input
      inverted: true
    name: "Kontaktron 34"
    filters:
      - delayed_on: 50ms
      - delayed_off: 50ms
1 Like