Wersje czego? EspHome?
Nic sie nie dzieje zlego. To są dane przyrostowe wiec te restarty jakos przezyje. Poczekam na poprawki ![]()
To zrezygnuj na ten moment z odczytu licznika energii i zostaw tylko licznik wody. To chyba najlepsze rozwiązanie.
Przejrzałem kod i doszedłem do kluczowego wniosku że w starszych wersjach ESPHome i prostszych architekturach, stos (Stack) był na tyle luźny, że małe ramki przechodziły bez echa. Jednak liczniki Amiplus generują ramki, które mogą mieć grubo ponad 150-200 bajtów. Przy głębokim zagnieżdżeniu funkcji w ESP-IDF, alokacja uint8_t buffer[length] na stosie, gdzie length pochodzi z zewnątrz, to prosty przepis na Stack Overflow. Moja poprawka przenosi te bufory na stertę (Heap), która na ESP32 ma znacznie więcej miejsca niż stos zadania.
To będzie mała zmiana w kodzie a jeśli ktoś potrzebuje udostępniłem forka tego repozytorium i mogę go zostawić dopóki @_Szczepan nie zaktualizuje swojego repozytorium. Niestety mój fork nie jest jeszcze przetestowany więc prosiłbym o testy.
@kniazio tu masz dla gotowy config korzystający z poprawki:
esphome:
name: lora
friendly_name: Lora
platformio_options:
upload_speed: 921600
external_components:
- source:
type: git
url: https://github.com/AllonGit/esphome-components
ref: main
components: [wmbus_common, wmbus_radio, wmbus_meter]
refresh: 0s
esp32:
board: esp32dev
flash_size: 8MB
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP_MAIN_TASK_STACK_SIZE: "8192"
CONFIG_ESP_TASK_WDT_TIMEOUT_S: "60"
CONFIG_LOG_DEFAULT_LEVEL_INFO: "y"
logger:
level: INFO
baud_rate: 0
logs:
wmbus: ERROR
component: ERROR
api:
encryption:
key: "HQgeLhbuFOvN73DM0CYaT3qVabF0Euciq2C1aqJ0hLU="
reboot_timeout: 0s
ota:
platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
power_save_mode: NONE
ap:
ssid: "Lora Fallback Hotspot"
password: "EyK1CEVSi4yt"
web_server:
version: 3
local: true
time:
- platform: sntp
id: sntp_time
spi:
clk_pin: GPIO5
mosi_pin: GPIO27
miso_pin: GPIO19
wmbus_radio:
radio_type: SX1276
cs_pin: GPIO18
reset_pin: GPIO14
irq_pin: GPIO35
wmbus_meter:
- id: water_meter
meter_id: 0x12345678 # <<< WPISZ SWOJE ID
type: apator162
key: "00000000000000000000000000000000" # <<< WPISZ SWÓJ KLUCZ
- id: electricity_meter
meter_id: 0x87654321 # <<< WPISZ SWOJE ID
type: amiplus
key: "00000000000000000000000000000000" # <<< WPISZ SWÓJ KLUCZ
sensor:
- platform: wmbus_meter
parent_id: water_meter
field: total_m3
name: "Zużycie wody"
device_class: water
state_class: total_increasing
unit_of_measurement: "m³"
accuracy_decimals: 3
- platform: wmbus_meter
parent_id: electricity_meter
field: total_energy_consumption_kwh
name: "Suma konsumpcji"
device_class: energy
state_class: total_increasing
- platform: wmbus_meter
parent_id: electricity_meter
field: current_power_consumption_kw
name: "Aktualny pobór"
device_class: power
state_class: measurement
- platform: wmbus_meter
parent_id: electricity_meter
field: total_energy_production_kwh
name: "Suma produkcji"
device_class: energy
state_class: total_increasing
- platform: wmbus_meter
parent_id: electricity_meter
field: current_power_production_kw
name: "Aktualna produkcja"
device_class: power
state_class: measurement
- platform: wmbus_meter
parent_id: electricity_meter
field: voltage_at_phase_1_v
name: "Faza V1"
device_class: voltage
state_class: measurement
unit_of_measurement: "V"
- platform: wmbus_meter
parent_id: electricity_meter
field: voltage_at_phase_2_v
name: "Faza V2"
device_class: voltage
state_class: measurement
unit_of_measurement: "V"
- platform: wmbus_meter
parent_id: electricity_meter
field: voltage_at_phase_3_v
name: "Faza V3"
device_class: voltage
state_class: measurement
unit_of_measurement: "V"
- platform: wmbus_meter
parent_id: electricity_meter
field: rssi_dbm
name: "Licznik RSSI"
Zalecam wykonanie “Clean Build” w menu ESPHome przed kliknięciem “Install”. To zagwarantuje, że stare, błędne biblioteki zostaną całkowicie usunięte i zastąpione Twoją nową wersją.
Super. Juz testujemy ![]()
board: esp32dev
Musze to zmieniac?
Nie moge zostawic swojej wersji?
EDIT:
Liczniki odczytało. Czekamy czy będą restarty.
Nie zmienialem wersji modułu ale nie mam odczytow na wyswietlaczu. NAN
Teoretycznie nie musi być na board: esp32dev ale też przez to nie ma danych na wyświetlaczu. Proponuję abyś przetestował przez jakąś godzinę czy dwie i jeśli nie będzie restartów ani błędów to możesz zmienić na ten kod który miałeś na początku tylko nie zapomnij zmienić
external_components:
- source:
type: git
url: https://github.com/AllonGit/esphome-components
ref: main
components: [wmbus_common, wmbus_radio, wmbus_meter]
refresh: 0s
Przepraszam. Sa dane na wyswietlaczu tylko jakos dlugo sie nie pojawialy. I zauwazylem ze web jakos tak ciezko odswieza
Po dwudziestu minutach restart
Bledy:
[20:05:40.711][E][component:415]: http_request set Error flag: unspecified
[20:05:40.717][E][http_request.idf:127]: HTTP Request failed: ESP_ERR_HTTP_CONNECT
[20:05:41.717][E][component:432]: http_request cleared Error flag
[20:06:41.850][E][component:415]: http_request set Error flag: unspecified
[20:06:41.856][E][http_request.idf:127]: HTTP Request failed: ESP_ERR_HTTP_CONNECT
[20:06:42.862][E][component:432]: http_request cleared Error flag
INFO Processing unexpected disconnect from ESPHome API for wmbus-lora @ 192.168.1.105
WARNING Disconnected from API
INFO Successfully resolved wmbus-lora @ 192.168.1.105 in 0.000s
INFO Successfully connected to wmbus-lora @ 192.168.1.105 in 0.004s
INFO Successful handshake with wmbus-lora @ 192.168.1.105 in 0.064s
INFO Processing unexpected disconnect from ESPHome API for wmbus-lora @ 192.168.1.105
WARNING Disconnected from API
INFO Successfully resolved wmbus-lora @ 192.168.1.105 in 0.000s
INFO Successfully connected to wmbus-lora @ 192.168.1.105 in 0.003s
INFO Successful handshake with wmbus-lora @ 192.168.1.105 in 0.067s
EDIT:
Kolejny restart po półtorej minuty
A już myłśałem, ale na szczęście to nie błędy Stack Overflow.
Skoro błędy HTTP sypały się co minutę (widzę 20:05:39, potem 20:06:40), ESPHome prawdopodobnie aktywował tzw. reboot_timeout. Jeśli moduł nie może nawiązać jakiegoś połączenia przez dłuższy czas, restartuje się “zapobiegawczo”.
Sprawdź, co wysyła żądania HTTP W kodzie, nie było sekcji http_request:. Czy masz taką sekcje w configu np. wysyłanie danych do jakiejś bazy danych.
A najlepiej to wyłączyć całkowicie restet z powodu błędów sieciowych.
Dodaj do sekcji api i wifi taką linie reboot_timeout: 0s
To że Web Server ciężko się odświeża to jest normalne ponieważ esp-idf nadaje priorytet zadaniom w tle a Web Server v3 jest rozbudowany i zasobożerny. Jeśli Ci to bardzo przeszkadaza usuń linię version: 3 w sekcji web_server.
Ok. Przetestuje to na drugim module. W tym module mam wysylanie danych do ThingSpeak. Ale kolejny restart byl juz chyba bez bledow http
Ale webserver odswiezal sie super przedtem
Ok. Usuwam ThinhSpeak i testuje
Szkoda ze tylko ja to testuje. Nie jest to obiektywne. Czyzbym ja tylko mial problem ![]()
Kurcze nie wiem o co chodzi juz teraz. Usunalem sekcje z ThingSpeak. Kompilacja przeszla bezproblemowo i teraz nie czyta mi licznikow wogole.
Jesli chodzi o http request to jest fragment w kodzie
http_request:
verify_ssl: false
timeout: 10s
useragent: esphome/wmbus
i on chyba nie dotycy thingspeak-a
Teraz to by się pewnie przydało jeszcze raz zrobić Clean Build ponieważ mogło zstać coś po thingspeak polecam jeszcze zakomentować lub usunąć sekcje http_request:. Spójrz jeszcze w logi przy uruchomieniu czy pisze wmbus_radio: SX1276 found.
Ale mi nie pokazuje tych logow na starcie przy tych twoich ustawieniach
O nawet już zapomniałem że wyłączyliśmy logger musisz zmienic to w sekcji logger
logger:
level: VERY_VERBOSE
baud_rate: 115200
logs:
wmbus: DEBUG
component: DEBUG
Teraz powinniśmy dostać szczegółowe dane.
Tak tylko ze ja zrobilem clean build i zaladowalem swoj poprzedni config i nadal nic nie czyta. Pewnie modul (radio) szlag trafil
Niezle kuzwa
To juz po testach ![]()
Raczej jest mało prawdpodobne że radio walło to musimy do tego “strategicznie” podejść najpierw uprościmy kod do minimum:
esphome:
name: lora
friendly_name: Lora
esp32:
board: heltec_wifi_lora_32_V2
framework:
type: arduino # Wracamy na chwilę do stabilnego Arduino
# PRZYWRACAMY LOGI NA USB - to powie nam czy radio żyje
logger:
level: DEBUG
baud_rate: 115200
external_components:
- source:
type: git
url: https://github.com/AllonGit/esphome-components
ref: main
components: [wmbus_common, wmbus_radio, wmbus_meter]
refresh: 0s
spi:
clk_pin: GPIO5
mosi_pin: GPIO27
miso_pin: GPIO19
wmbus_radio:
radio_type: SX1276
cs_pin: GPIO18
reset_pin: GPIO14
irq_pin: GPIO35
# TYLKO JEDEN LICZNIK DO TESTÓW
wmbus_meter:
- id: water_test
meter_id: 0x12345678
type: apator162
Akurat bardziej topornej konfiguracji dawno nie widziałem.
Teraz kuzwa jaki matrix leci caly cas w logach
21:00:43
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:43
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:43
[V]
[i2c.idf:155]
0x3C TX 40:00:8F:80:80:80:80:00:00:0F:09:09:05:0F:00:00:0C
21:00:43
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:43
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:43
[V]
[i2c.idf:155]
0x3C TX 40:0B:09:08:08:00:0F:09:09:05:0F:00:00:00:80:8F:80
21:00:43
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:43
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:43
[V]
[i2c.idf:155]
0x3C TX 40:00:00:00:08:00:00:00:00:00:0F:00:00:00:0F:00:00
21:00:43
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:43
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:43
[V]
[i2c.idf:155]
0x3C TX 40:0F:09:09:05:0F:00:00:0F:00:00:00:0F:00:00:00:00
21:00:43
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:43
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:43
[V]
[i2c.idf:155]
0x3C TX 40:80:80:03:0E:0F:01:80:00:00:00:00:00:00:00:00:00
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:00:FF:08:08:08:08:00:00:F4:92:92:56:FC:00:00:C2
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:B2:9A:86:80:00:F4:92:92:56:FC:00:00:C3:E0:90:88
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:87:00:00:84:00:00:00:00:00:FE:02:02:02:FC:00:00
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:F4:92:92:56:FC:00:00:FE:02:02:02:FC:00:00:00:00
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:00:07:3C:E0:F0:1E:03:00:00:00:00:00:00:00:00:00
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
21:00:44
[V]
[i2c.idf:187]
Sending 4 jobs
21:00:44
[V]
[i2c.idf:142]
Writing 17 bytes, reading 0 bytes
21:00:44
[V]
[i2c.idf:155]
0x3C TX 40:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
21:00:44
[V]
[i2c.idf:187]
To co by moglo sie stac ze teraz nie czyta nawet na poprzednich cofigach na ktorych czytal
może troche mnie poniosło z tymi logami spróbuj zmienić w sekcji logger na:
logger:
level: DEBUG
baud_rate: 115200
I spróbuj wyszukać fragmentu SX1276 found
Zresztą przygotowałem to comusisz zrobić aby mam nadzieję zaczeło działać:
anim wgrasz kod, musimy “odwiesić” radio, które mogło zgłupieć od ciągłych zmian softu.
- Odłącz moduł od komputera/zasilania.
- Poczekaj pełną minutę.
- Podłącz go z powrotem.
W ESPHome Dashboard:
- Kliknij 3 kropki przy swoim urządzeniu (lub strzałkę przy Install).
- Wybierz Clean Build.
- Poczekaj, aż wyczyści stare pliki. Nie wgrywaj jeszcze.
Skopiuj całość. Jedyne co musisz zmienić, to wpisać swoje ID i KLUCZE w sekcji wmbus_meter oraz hasło do WiFi. Reszty nie dotykaj.
esphome:
name: lora
friendly_name: Lora
platformio_options:
upload_speed: 921600
external_components:
- source:
type: git
url: https://github.com/AllonGit/esphome-components
ref: main
components: [wmbus_common, wmbus_radio, wmbus_meter]
refresh: 0s
esp32:
board: heltec_wifi_lora_32_V2
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP_MAIN_TASK_STACK_SIZE: "16384"
CONFIG_ESP_TASK_WDT_TIMEOUT_S: "120"
CONFIG_LOG_DEFAULT_LEVEL_INFO: "y"
CONFIG_LWIP_MAX_SOCKETS: "16"
# Czytelne logi bez śmieci
logger:
level: DEBUG
baud_rate: 115200
logs:
wmbus: DEBUG
component: ERROR
i2c: ERROR
sensor: ERROR
ssd1306: ERROR
api:
encryption:
key: "HQgeLhbuFOvN73DM0CYaT3qVabF0Euciq2C1aqJ0hLU="
reboot_timeout: 0s
ota:
platform: esphome
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
power_save_mode: NONE
reboot_timeout: 0s
ap:
ssid: "Lora Fallback Hotspot"
password: "EyK1CEVSi4yt"
web_server:
version: 3
local: true
time:
- platform: sntp
id: sntp_time
# 3. Konfiguracja Ekranu
i2c:
sda: GPIO4
scl: GPIO15
scan: true
frequency: 400kHz
font:
- file: "gfonts://Roboto"
id: font_small
size: 14
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
reset_pin: GPIO16
lambda: |-
it.print(0, 0, id(font_small), "wM-Bus Monitor");
// Woda
if (id(woda_total).has_state()) {
it.printf(0, 25, id(font_small), "Woda: %.3f", id(woda_total).state);
} else {
it.print(0, 25, id(font_small), "Woda: Szukam...");
}
// Prąd
if (id(energia_total).has_state()) {
it.printf(0, 45, id(font_small), "Prad: %.1f", id(energia_total).state);
} else {
it.print(0, 45, id(font_small), "Prad: Szukam...");
}
# 4. Konfiguracja Radia
spi:
clk_pin: GPIO5
mosi_pin: GPIO27
miso_pin: GPIO19
wmbus_radio:
radio_type: SX1276
cs_pin: GPIO18
reset_pin: GPIO14
irq_pin: GPIO35
# 5. Liczniki (UZUPEŁNIJ SWOJE DANE!)
wmbus_meter:
- id: water_meter
meter_id: 0x12345678 # <<< TU WPISZ ID WODY
type: apator162
key: "00000000000000000000000000000000" # <<< TU WPISZ KLUCZ WODY
- id: electricity_meter
meter_id: 0x87654321 # <<< TU WPISZ ID AMIPLUS
type: amiplus
key: "00000000000000000000000000000000" # <<< TU WPISZ KLUCZ AMIPLUS
sensor:
- platform: wmbus_meter
parent_id: water_meter
id: woda_total
field: total_m3
name: "Zużycie wody"
device_class: water
state_class: total_increasing
unit_of_measurement: "m³"
accuracy_decimals: 3
- platform: wmbus_meter
parent_id: electricity_meter
id: energia_total
field: total_energy_consumption_kwh
name: "Suma konsumpcji"
device_class: energy
state_class: total_increasing
- platform: wmbus_meter
parent_id: electricity_meter
field: current_power_consumption_kw
name: "Aktualny pobór"
device_class: power
state_class: measurement
- platform: wmbus_meter
parent_id: electricity_meter
field: rssi_dbm
name: "Licznik RSSI"
Gdy wgrasz ten kod, otwórz logi.
- Ekran: Powinien wyświetlać “wM-Bus Monitor” oraz napisy “Szukam…”.
- Radio: W logach (na zielono/biało) MUSI pojawić się linia:
[wmbus_radio:063]: SX1276 found
Mam nadzieję że to pomoże bo na tą chwilę nie mam więcej pomysłów.
Juz czyta. Ale wrocilem do wczorajszego configu.
Zauwazylem ze w zaleznosci jak ustawimy logi to raz liczniki sa czytane a w innym przypadku nie
Najszybciej odczyty pojawiaja sie przy takim configu:
esp32:
board: heltec_wifi_lora_32_V2
flash_size: 8MB
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP_MAIN_TASK_STACK_SIZE: "8192"
CONFIG_ESP_TASK_WDT_TIMEOUT_S: "60"
CONFIG_LOG_DEFAULT_LEVEL_NONE: "y"
# Enable logging
logger:
level: INFO
baud_rate: 0
logs:
wmbus: ERROR
component: ERROR