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 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
szopen
February 19, 2026, 1:06pm
169
YAMLa do ESPHome bezwzględnie musisz zamieszczać jako pytający kompletnego (jak mamy analizować urywki…), tylko odpowiadający mogą zamieszczać wybrane bloki.
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:
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.
Błędy projektowe modułu, które zostały zauważone przy szeregu realizacji.
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
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
artpc
(artur)
February 19, 2026, 5:48pm
171
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.
szopen
February 19, 2026, 8:02pm
172
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.
szopen
August 5, 2026, 8:43pm
175
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)
Whenever possible, ESPHome will use the hardware UART unit on the ESP8266 for fast and accurate communication. When the hardware UARTs are all occupied, ESPHome will fall back to a software implementation that may not be accurate at higher baud...
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
szopen
August 5, 2026, 9:02pm
177
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?
szopen
August 5, 2026, 9:06pm
179
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
Lomax1983:
esp32:
variant: esp32
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
szopen
August 5, 2026, 9:12pm
181
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.
szopen
August 5, 2026, 9:20pm
183
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
szopen
August 5, 2026, 9:47pm
185
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