Hallo,
ich bin in der ESP Thematik noch relativ neu, und habe 4 Wasserzähler in der Wohnung (2 für oben von der Firma Lorenz, 2 für unten von der Firma Qundis). Dank dieses super Threads habe ich es (mit leichten Anpassungen aufgrund der aktuellen ESP home Version) hinbekommen, die Qundis Zähler auszulesen:
An den Lorenz Zählern scheitere ich bisher, es werden keine Werte übermittelt. Ich habe mit dem Ableseservice gesprochen, alle Zähler senden im C1 Modus und sind nicht verschlüsselt.
Die Zähler sehen folgendermaßen aus:
Ich vermute, dass die Zähler ID jeweils die 8 Ziffern hinter dem DWZ00 sind, probiert habe ich es bereits jeweils mit und ohne 0x vor den Ziffern. Ebenfalls fraglich ist, ob “type: qwater” hier funktioniert, ich habe es (auch nach Konsulation von ChatGPT, was oftmals sehr hilfreich war) bereits mit “type: izar” probiert, dies hatte jedoch ebenfalls keinen Erfolg.
Ich füge hier mal meinen kompletten Code ein:
---
## ---------------------------------------------------------------------------
## WMBUS METER az-delivery-devkit-v4 + CC1101 for Diehl IZAR RC 868 I R4 PL
## Hardware: ESP32 240MHz, 520KB RAM, 4MB Flash
##
## This version shows all watermeters. Use this for the first test
##
## 1. uses the latest wmbusmeter component from GitHub
## 2. Optional uses syslog component
##
## SYSLOG: tail -f /var/log/syslog | grep "water-meter"
##
## ---------------------------------------------------------------------------
substitutions:
## Device settings
device_name_short: "esphome-wasserverbrauch"
device_description: "Wasserzähler QWater"
projectname: "QWater.Watermeter"
appversion: "2.0.7"
## WMIDs for the water meters
wmid_kaltwasser_unten: "0x14219340"
wmid_warmwasser_unten: "0x14149456"
wmid_kaltwasser_oben: "0x22315191"
wmid_warmwasser_oben: "0x22337055"
## Logger settings
log_level: "DEBUG"
log_wmbus: "DEBUG"
log_baudrate: "0"
## ----------------------------------------------------------------
## APPLICATION ESPHOME
## ----------------------------------------------------------------
esphome:
name: ${device_name_short}
comment: ${device_description}
name_add_mac_suffix: false
project:
name: ${projectname}
version: ${appversion}
build_path: ./build/${device_name_short}
on_boot:
priority: 200
then:
- globals.set:
id: boot_counter
value: !lambda "return id(boot_counter) += 1;"
- logger.log:
level: INFO
tag: "system"
format: "BOOTMESSAGE:${device_name_short} API is connected, Device ready!"
- component.update: bootcounter
on_shutdown:
priority: 700
then:
- logger.log:
level: ERROR
tag: "system"
format: "BOOTMESSAGE:${device_name_short} is down!"
## ----------------------------------------------------------------
## HARDWARE az-delivery-devkit-v4
## ESP32 240MHz, 520KB RAM, 4MB Flash
## ----------------------------------------------------------------
esp32:
board: az-delivery-devkit-v4
framework:
type: arduino
## ----------------------------------------------------------------
## EXTERNAL COMPONENTS
## ----------------------------------------------------------------
external_components:
- source: github://SzczepanLeon/esphome-components@main
components: [wmbus]
## ----------------------------------------------------------------
## Global variables
## ----------------------------------------------------------------
globals:
- id: boot_counter
type: int
restore_value: yes
initial_value: "0"
- id: last_value
type: float
restore_value: yes
initial_value: "0.00"
- id: alarm_error_text
type: std::vector<std::string>
restore_value: no
initial_value: '{"no error", "general_alarm", "leakage", "meter_blocked", "back_flow", "underflow", "overflow", "submarine", "sensor_fraud", "mechanical_fraud"}'
## ---------------------------------------------------
## WIFI Settings
## ---------------------------------------------------
wifi:
ssid: ""
password: ""
domain: ".local"
## ---------------------------------------------------
## mDNS Component
## ---------------------------------------------------
mdns:
disabled: false
## ---------------------------------------------------
## Captive Portal Component
## ---------------------------------------------------
captive_portal:
## ---------------------------------------------------
## LOGGER COMPONENT
## ---------------------------------------------------
logger:
id: appslogger
level: ${log_level}
baud_rate: ${log_baudrate}
logs:
wmbus: ${log_wmbus}
wMBus-lib: ${log_wmbus}
## ---------------------------------------------------
## OTA COMPONENT
## ---------------------------------------------------
ota:
- platform: esphome
password: ""
on_begin:
then:
- logger.log:
format: "OTA Start"
tag: "OTA"
level: WARN
on_progress:
then:
- logger.log:
level: WARN
tag: "OTA"
format: "OTA progress %0.1f%%"
args: ["x"]
on_end:
then:
- logger.log:
format: "OTA End"
tag: "OTA"
level: WARN
on_error:
then:
- logger.log:
format: "OTA update error %d"
tag: "OTA"
level: ERROR
args: ["x"]
## ---------------------------------------------------
## Web Server Component
## ---------------------------------------------------
web_server:
port: 80
version: 3
## ---------------------------------------------------
## Home Assistant API COMPONENT
## ---------------------------------------------------
api:
id: espapi_wmbus_esp32
port: 6053
reboot_timeout: 0s
## ---------------------------------------------------
## SNTP COMPONENT
## ---------------------------------------------------
time:
- platform: sntp
id: time_sntp
timezone: Europe/Berlin
servers:
- 0.at.pool.ntp.org
- 0.pool.ntp.org
- 1.pool.ntp.org
on_time_sync:
then:
- logger.log:
tag: "system"
level: INFO
format: "Synchronized sntp clock"
## ---------------------------------------------------
## WMBUS COMPONENT
## ---------------------------------------------------
wmbus:
mosi_pin: GPIO23
miso_pin: GPIO19
clk_pin: GPIO18
cs_pin: GPIO05
gdo0_pin: GPIO16
gdo2_pin: GPIO17
log_unknown: false
sync_mode: true
## ---------------------------------------------------
## SWITCHES
## ---------------------------------------------------
switch:
- platform: template
name: Device Boot Counter reset
turn_on_action:
then:
- lambda: |-
id(boot_counter) = 0;
id(bootcounter).publish_state(id(boot_counter));
- logger.log:
level: WARN
tag: "system"
format: "${device_name_short} reset boot counter o.k!"
- component.update: bootcounter
- platform: safe_mode
name: "Device Restart (Safe Mode)"
- platform: restart
name: "Restart"
id: restart_switch
- platform: factory_reset
name: Device Restart Factory
## ---------------------------------------------------
## SENSORS
## ---------------------------------------------------
sensor:
# Kaltwasserzähler unten
- platform: wmbus
meter_id: "0x14219340"
type: qwater
add_prefix: true
mode: C1
lqi:
id: wmbus_cc1101_lqi_kaltwasser_unten
name: "Kaltwasser CC1101 LQI Unten"
unit_of_measurement: "lqi"
entity_category: "diagnostic"
rssi:
id: wmbus_cc1101_rssi_kaltwasser_unten
name: "Kaltwasser CC1101 RSSI Unten"
unit_of_measurement: "%"
entity_category: "diagnostic"
total_water_m3:
id: "waterdisplay_kaltwasser_unten"
name: "Kaltwasseruhr Unten"
unit_of_measurement: "m³"
state_class: total_increasing
device_class: "water"
accuracy_decimals: 3
on_value:
then:
- lambda: |-
ESP_LOGI("wmbus", "Kaltwasser Unten Display value: %.3f, last value: %.3f", id(waterdisplay_kaltwasser_unten).state, id(last_value));
id(last_value)=id(waterdisplay_kaltwasser_unten).state;
- logger.log:
level: INFO
format: "Received value for Kaltwasser Unten: %.3f"
args: [id(waterdisplay_kaltwasser_unten).state]
# Warmwasserzähler unten
- platform: wmbus
meter_id: "0x14149456"
type: qwater
add_prefix: true
mode: C1
lqi:
id: wmbus_cc1101_lqi_warmwasser_unten
name: "Warmwasser CC1101 LQI Unten"
unit_of_measurement: "lqi"
entity_category: "diagnostic"
rssi:
id: wmbus_cc1101_rssi_warmwasser_unten
name: "Warmwasser CC1101 RSSI Unten"
unit_of_measurement: "%"
entity_category: "diagnostic"
total_water_m3:
id: "waterdisplay_warmwasser_unten"
name: "Warmwasseruhr Unten"
unit_of_measurement: "m³"
state_class: total_increasing
device_class: "water"
accuracy_decimals: 3
on_value:
then:
- lambda: |-
ESP_LOGI("wmbus", "Warmwasser Unten Display value: %.3f, last value: %.3f", id(waterdisplay_warmwasser_unten).state, id(last_value));
id(last_value)=id(waterdisplay_warmwasser_unten).state;
- logger.log:
level: INFO
format: "Received value for Warmwasser Unten: %.3f"
args: [id(waterdisplay_warmwasser_unten).state]
# Kaltwasserzähler oben
- platform: wmbus
meter_id: "0x22315191"
type: izar
add_prefix: true
mode: C1
lqi:
id: wmbus_cc1101_lqi_kaltwasser_oben
name: "Kaltwasser CC1101 LQI Oben"
unit_of_measurement: "lqi"
entity_category: "diagnostic"
rssi:
id: wmbus_cc1101_rssi_kaltwasser_oben
name: "Kaltwasser CC1101 RSSI Oben"
unit_of_measurement: "%"
entity_category: "diagnostic"
total_water_m3:
id: "waterdisplay_kaltwasser_oben"
name: "Kaltwasseruhr Oben"
unit_of_measurement: "m³"
state_class: total_increasing
device_class: "water"
accuracy_decimals: 3
on_value:
then:
- lambda: |-
ESP_LOGI("wmbus", "Kaltwasser Oben Display value: %.3f, last value: %.3f", id(waterdisplay_kaltwasser_oben).state, id(last_value));
id(last_value)=id(waterdisplay_kaltwasser_oben).state;
- logger.log:
level: INFO
format: "Received value for Kaltwasser Oben: %.3f"
args: [id(waterdisplay_kaltwasser_oben).state]
# Warmwasserzähler oben
- platform: wmbus
meter_id: "0x22337055"
type: izar
add_prefix: true
mode: C1
lqi:
id: wmbus_cc1101_lqi_warmwasser_oben
name: "Warmwasser CC1101 LQI Oben"
unit_of_measurement: "lqi"
entity_category: "diagnostic"
rssi:
id: wmbus_cc1101_rssi_warmwasser_oben
name: "Warmwasser CC1101 RSSI Oben"
unit_of_measurement: "%"
entity_category: "diagnostic"
total_water_m3:
id: "waterdisplay_warmwasser_oben"
name: "Warmwasseruhr Oben"
unit_of_measurement: "m³"
state_class: total_increasing
device_class: "water"
accuracy_decimals: 3
on_value:
then:
- lambda: |-
ESP_LOGI("wmbus", "Warmwasser Oben Display value: %.3f, last value: %.3f", id(waterdisplay_warmwasser_oben).state, id(last_value));
id(last_value)=id(waterdisplay_warmwasser_oben).state;
- logger.log:
level: INFO
format: "Received value for Warmwasser Oben: %.3f"
args: [id(waterdisplay_warmwasser_oben).state]
- platform: wifi_signal
id: wifi_signal_db
update_interval: 60s
internal: true
disabled_by_default: true
- platform: copy
source_id: wifi_signal_db
name: "Device WLAN Signal"
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "%"
entity_category: "diagnostic"
- platform: template
name: Device Boot counter
id: bootcounter
icon: mdi:counter
accuracy_decimals: 0
state_class: "measurement"
entity_category: "diagnostic"
lambda: return (id(boot_counter));
Von der Firma Lorenz selbst habe ich auf Anfrage zumindest ein Funkprotokoll bekommen, ich muss jedoch gestehen, dass dies zum aktuellen Zeitpunkt mein Verständnis übersteigt: Datenblatt_DigitalerFluegelradZaehler-2024-04-09-1.pdf - Google Drive
Eventuell gibt es hier ja schon jemanden, der Erfahrung mit dieser Art von Zählern hat oder zumindest Ideen, die mich der Lösung ein Stück näher bringen.
Vielen Dank schon einmal!