Witam
Miałem wmbus na ttgo-lora32-v21 już od jakiegoś czasu. Jednak zobaczyłem że od kilku dni nie mam stanu odczytu z nakładek APATOR u siebie w Home Assistant. Urządzenie wmbus na ttgo działa ale odczyty mają stan nieznany. Nie wiem co mogło się zadziać. Mam ESPHome 2026.2.1
Tak wygląda mów config:
substitutions:
name: "ttgo-lora32-v21-b09428"
friendly_name: 'wM-Bus'
serial_prefix: 'esp' #Don't change it.
esphome:
name: '${name}'
friendly_name: '${friendly_name}'
#name_add_mac_suffix: true
comment: Bramka urządzeń wMBus
on_boot:
priority: -100
then:
# - output.turn_off: vext_output #załączanie zasilania OLED
- delay: 100ms
# - globals.set:
# id: izar_from_memory
# value: 'true'
- globals.set:
id: apator_from_memory1
value: 'true'
- globals.set:
id: apator_from_memory2
value: 'true'
# - globals.set:
# id: unismart_from_memory
# value: 'true'
esp32:
board: ttgo-lora32-v21
framework:
type: esp-idf
version: recommended
external_components:
- source: github://SzczepanLeon/esphome-components@main
refresh: 0d
components:
- socket_transmitter
- wmbus_common
- wmbus_radio
- wmbus_meter
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
min_auth_mode: WPA2
use_address: xxx.xxx.xxx.xxx
fast_connect: true
# Hotspot when can't connect to Local WiFi
ap:
ssid: "wmbus AP"
password: "xxxxxxxxxXXXXXXXXX"
logger:
level: DEBUG
# Enable Home Assistant API
api:
encryption:
key: !secret encryption_key
# Enable over-the-air updates
ota:
platform: esphome
password: !secret ota_password
# Serwer with a statistic data and OTA board update
web_server:
port: 80
version: 3
auth:
username: xxxx
password: !secret web_server_password
captive_portal:
# Sets time from Homeassistant
time:
- platform: homeassistant
timezone: Europe/Warsaw
id: homeassistant_time
output:
# - platform: gpio
# id: vext_output
# pin: GPIO21
- platform: gpio
id: status_led
pin: GPIO25
globals:
- id: active_index
type: int
restore_value: no
initial_value: '0'
##############Tutaj ustawiamy zmienne do zapisu ostatniego stanu licznika do pamięci urządzenia
# # Izar
# - id: saved_izar_value
# type: float
# restore_value: yes
# initial_value: '0.0'
# - id: izar_from_memory
# type: bool
# restore_value: yes
# initial_value: 'true'
# Apator 1
- id: saved_apator_value1
type: float
restore_value: yes
initial_value: '0.0'
- id: apator_from_memory1
type: bool
restore_value: yes
initial_value: 'true'
# Apator 2
- id: saved_apator_value2
type: float
restore_value: yes
initial_value: '0.0'
- id: apator_from_memory2
type: bool
restore_value: yes
initial_value: 'true'
# # Unismart
# - id: saved_unismart_value
# type: float
# restore_value: yes
# initial_value: '0.0'
# - id: unismart_from_memory
# type: bool
# restore_value: yes
# initial_value: 'true'
####################### Czas automatycznego przełączanie ekranu #########################
interval:
- interval: 5s
then:
- lambda: |-
id(active_index)++;
if (id(active_index) >= 2) { // liczba ekranów/wodomierzy
id(active_index) = 0;
}
binary_sensor:
# - platform: gpio
# pin: GPIO0
# name: "Button Next Meter"
# on_press:
# then:
# - lambda: |-
# id(active_index) += 1;
# if (id(active_index) >= 2) id(active_index) = 0; //Tutaj ustawiamy ile jest liczników - w tym przypadku 3
- platform: status
name: Status
font:
- file: 'fonts/Calibri-Regular.ttf'
id: font1
size: 16
i2c: # I2C for OLED
sda: 21
scl: 22
scan: true
button:
- platform: restart
name: "Restart"
id: reboot
# Sensors for ESP version and WIFI information
text_sensor:
- platform: wifi_info
ip_address:
name: "IP"
icon: mdi:ip-network
ssid:
name: "SSID"
icon: mdi:wifi-star
spi:
clk_pin:
number: GPIO5
ignore_strapping_warning: true
mosi_pin: GPIO27
miso_pin: GPIO19
wmbus_radio:
radio_type: SX1276
cs_pin: GPIO18
reset_pin: GPIO23
irq_pin: GPIO33
on_frame:
- then:
- repeat:
count: 1
then:
- output.turn_on: status_led
- delay: 100ms
- output.turn_off: status_led
- delay: 100ms
wmbus_meter:
- id: cold_water_meter
meter_id: 0xCCCCC
type: apator162
key: "00000000000000000000000000000000"
- id: warm_water_meter
meter_id: 0xDDDDDD
type: apator162
key: "00000000000000000000000000000000"
sensor:
- platform: wmbus_meter
parent_id: cold_water_meter
field: total_m3
device_class: water
name: Woda-cała
accuracy_decimals: 3
state_class: total_increasing
unit_of_measurement: "m³"
icon: "mdi:water"
filters:
offset: +1.222
on_value:
then:
- lambda: |-
if (abs(x - id(saved_apator_value1)) > 0.01f) {
id(saved_apator_value1) = x;
}
id(apator_from_memory1) = false; // ustaw na false za każdym razem, gdy jest nowa wartość
- platform: wmbus_meter
parent_id: cold_water_meter
id: RSSI_licznik_woda_cala
field: rssi_dbm
name: RSSI licznika wody całej
unit_of_measurement: "dBm"
- platform: wmbus_meter
parent_id: warm_water_meter
field: total_m3
device_class: water
name: Woda ciepła
accuracy_decimals: 3
state_class: total_increasing
unit_of_measurement: "m³"
icon: "mdi:water"
filters:
offset: +0.137
on_value:
then:
- lambda: |-
if (abs(x - id(saved_apator_value2)) > 0.01f) {
id(saved_apator_value2) = x;
}
id(apator_from_memory2) = false; // ustaw na false za każdym razem, gdy jest nowa wartość
- platform: wmbus_meter
parent_id: warm_water_meter
id: RSSI_licznik_woda_ciepla
field: rssi_dbm
name: RSSI licznika wody ciepłej
unit_of_measurement: "dBm"
- platform: wifi_signal
name: 'WiFi Signal'
update_interval: 60s
accuracy_decimals: 0
- platform: uptime
name: 'Uptime'
unit_of_measurement: d
update_interval: 300s
accuracy_decimals: 1
filters:
- multiply: 0.000011574
####################################WYŚWIETLACZ###################################################
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
# reset_pin: GPIO16
# rotation: 180
address: 0x3C
lambda: |-
struct MeterInfo {
const char* name;
const char* id_str;
Sensor* rssi;
float* value;
bool* from_mem;
};
/////////// definiowanie liczników - tutaj dodajemy kolejne linie, jeśli chcemy dodać licznik
MeterInfo meters[] = {
{"Meter: Apator", "0xCCCCCC", id(RSSI_licznik_woda_cala), &id(saved_apator_value1), &id(apator_from_memory1)},
{"Meter: Apator", "0xDDDDDD", id(RSSI_licznik_woda_ciepla), &id(saved_apator_value2), &id(apator_from_memory2)},
};
/////////// opisy
auto draw_counter = [&](const char* name, const char* id_str, float rssi, float stan, bool from_mem) {
it.printf(0, 0, id(font1), "Dev: %d/2", id(active_index) + 1);
it.printf(0, 16, id(font1), name);
it.printf(0, 28, id(font1), "ID: %s", id_str);
if (isnan(rssi))
it.printf(0, 40, id(font1), "RSSI: --");
else
it.printf(0, 40, id(font1), "RSSI: %.0f dBm", rssi);
if (from_mem)
it.printf(0, 52, id(font1), "State*: %.3f m3", stan);
else
it.printf(0, 52, id(font1), "State: %.3f m3", stan);
};
// pobierz dane aktywnego licznika
MeterInfo meter = meters[id(active_index)];
draw_counter(meter.name, meter.id_str, meter.rssi->state, *(meter.value), *(meter.from_mem));
W logach z otwartą konsolą po jakmś czasie mam takie odczyty:
[12:07:08.808][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:07:39.389][D][packet:097]: Have data from radio (8 bytes)
[12:07:39.404][D][wmbusmeters:351]: raw packet "7D2E249835301751"
[12:08:08.862][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:08:46.118][D][packet:097]: Have data from radio (8 bytes)
[12:08:46.132][D][wmbusmeters:351]: raw packet "BD2A7E1C919E41C3"
[12:09:08.937][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:09:09.926][D][sensor:118]: 'Uptime' >> 0.0 d
[12:09:46.977][D][packet:097]: Have data from radio (8 bytes)
[12:09:47.000][D][wmbusmeters:351]: raw packet "DD261F70FCDE4FEE"
[12:10:08.992][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:10:56.154][D][packet:097]: Have data from radio (8 bytes)
[12:10:56.183][D][wmbusmeters:351]: raw packet "3065E96074680714"
[12:11:09.042][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:12:05.314][D][packet:097]: Have data from radio (8 bytes)
[12:12:05.338][D][wmbusmeters:351]: raw packet "C04E727282413643"
[12:12:09.107][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:13:05.422][D][packet:097]: Have data from radio (191 bytes)
[12:13:05.447][D][wmbusmeters:351]: raw packet "6B271C58D59A5932CD4CE596599593xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxCEEC373699C536A9C3A78D4C66323669169B8F2E596A644D13985F1442CCAAE7462261CEF61FFAAF245DFA28AE528E4E800CF38B7AAEC7340945E194A18B9F3D8F1C79053F"
[12:13:05.455][D][wmbusmeters:351]: (wmbus) trimming frame A "6B271C58D59A5932CD4CE5965995937344F14E66AC596696B19B1C353356A719A94EC5B45A5596734A4EA5CC4DD343725A9C7494D64ECB170E2E967xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx23669169B8F2E596A644D13985F1442CCAAE7462261CEF61FFAAF245DFA28AE528E4E800CF38B7AAEC7340945E194A18B9F3D8F1C79053F"
[12:13:05.479][W][component:579]: wmbus_radio took a long time for an operation (59 ms)
[12:13:05.493][W][component:582]: Components should block for at most 30 ms
[12:13:09.184][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:14:09.231][D][sensor:118]: 'WiFi Signal' >> -56 dBm
[12:14:09.934][D][sensor:118]: 'Uptime' >> 0.0 d
[12:14:14.241][D][packet:097]: Have data from radio (8 bytes)
[12:14:14.251][D][wmbusmeters:351]: raw packet "5B6CC790C48BA124"