du hast am Foto ein ESP32 Board, in der Konfig aber ein ESP8266 (d1 mini) ausgewählt.
Oh, no Stimmt. Das habe ich jetzt geändert- Danke Dir…So langsam wird es. Lässt sich auch ohne Fehler flashen und ist in ESP Home Online. Nur nicht in der Geräteübersicht ESP32. Das Gerät wird nicht automatisch erkannt bzw. kann auch nicht hinzugefügt werden. Fehlermeldung:
Keine Verbindung zum ESP möglich. Achte darauf, dass deine YAML-Datei eine Zeile „api:“ enthält.
Bei klick auf VISIT in ESP Home (water-meter) wird eine leere Seite angezeigt.
Habe ich da ggf. noch einen Fehler bei den Einträgen:
domain: !secret domain
(Die Zeile hatte ich auskommentiert)
und
js_url: !secret webserver_jsurl
(Der Eintrag in secret.yaml ist: webserver_jsurl: “http://192.168.xxx.xx:8123/www.js”
siehst du jetzt etwas in der Konsole?
Ja ich sehe folgendes im Log:
�>�j����Oha�[ 6][D][esp32-hal-cpu.c:244] setCpuFrequencyMhz(): PLL: 480 / 2 = 240 Mhz, APB: 80000000 Hz
[ 33][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 0 - WIFI_READY
[ 123][V][WiFiGeneric.cpp:338] _arduino_event_cb(): STA Started
[ 124][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 2 - STA_START
[ 5845][V][WiFiGeneric.cpp:381] _arduino_event_cb(): SCAN Done: ID: 128, Status: 0, Results: 3
[ 5845][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 1 - SCAN_DONE
[ 7311][V][WiFiGeneric.cpp:353] _arduino_event_cb(): STA Connected: SSID: xxxxxxx, BSSID: MACID, Channel: 1, Auth: WPA2_PSK
[ 7313][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 4 - STA_CONNECTED
[ 7338][V][WiFiGeneric.cpp:367] _arduino_event_cb(): STA Got New IP:192.168.177.87
[ 7339][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 7 - STA_GOT_IP
[ 7342][D][WiFiGeneric.cpp:991] _eventCallback(): STA IP: 192.168.177.87, MASK: 255.255.255.0, GW: 192.168.177.1
ok, das ist soweit alles? Ich sehe nichts vom mbus Modul, das ist etwas eigenartig.
Verstehe ich auch nicht, alles korrekt verlötet.
Hier ist nochmal das komplette Script:
## ------------------------------------------------------------------
## TESTCASE FOR WMBUS METER + CC1101 for WATERMETES
##
## This version has no sensors and shows only
## the logs for checking wM-Bus and CC1101.
##
## DO NOT USE THIS CONFIGURATION FOR PRODUCTION
##
## ------------------------------------------------------------------
substitutions:
# device and application settings
device_name_short: "water-meter"
device_description: "Watermeter CC1101 wmbus Test"
projectname: "CC1101 wmbus Test.Watermeter"
appversion: "2.0.7"
# logger settings
log_level: "VERBOSE" # not that logging need memory, so in production mode use "WARN"
log_wmbus: "VERBOSE" # Loglevel for wmbus meters component
log_baudrate: "0" # 0 disable uart logger messages
BOARD: az-delivery-devkit-v4
CC1101_3: GPIO23 # M0SI
CC1101_4: GPIO18 # CLK
CC1101_5: GPIO19 # MISO
CC1101_6: GPIO17 # GD02
CC1101_7: GPIO16 # GDO0
CC1101_8: GPIO05 # CSN
## ----------------------------------------------------------------
## HARDWARE az-delivery-devkit-v4
## ESP32 240MHz, 520KB RAM, 4MB Flash
## ----------------------------------------------------------------
esp32:
board: ${BOARD}
framework:
type: arduino
## ------------------------------------------------------------------
##
##
## GDO0 MOSI
## 7 MISO 3
## o GD02 CLK 5 o CSN
## | 6 4 o | 8 ╭-------o 2 (GND)
## | o o | | o | ╭----o 1 (3.3V)
## | | | | | | | |
## ╭――x――o――o――x――x――x――o――o――o――o――x――x――x――o――o―╮
## | D1 D2 D5 D6 D7 D8 |
## | |
## - | ANT NODEMCU V3 | -- USB
## | |
## | |
## ╰――x――x――x――x――x――x――x――x――x――x――x――x――x――x――x―╯
##
##
##
## ------------------------------------------------------------------
## ----------------------------------------------------------------
## ESPHOME APPLICATION
## ----------------------------------------------------------------
esphome:
name: ${device_name_short}
comment: ${device_description}
# Automatically add the mac address to the name
# so you can use a single firmware for all devices
name_add_mac_suffix: false
project:
name: ${projectname}
version: ${appversion}
build_path: ./build/${device_name_short}
on_boot:
priority: -100.00
then:
- logger.log:
level: INFO
tag: "system"
format: "BOOTMESSAGE:${device_name_short} API is connected, Device ready!"
on_shutdown:
priority: 700
then:
- logger.log:
level: ERROR
tag: "system"
format: "BOOTMESSAGE:${device_name_short} is down!"
## ----------------------------------------------------------------
## External components
## ----------------------------------------------------------------
external_components:
# uses the latest version from SzczepanLeon
- source: github://SzczepanLeon/esphome-components@main
refresh: 0s
components: [wmbus]
## ---------------------------------------------------
## WIFI Settings
## ---------------------------------------------------
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
##domain: !secret domain
## ---------------------------------------------------
## mDNS Component
## ---------------------------------------------------
mdns:
# if mDNS is disabled, they will no longer be able to automatically find your devices.
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 Updates
## ---------------------------------------------------
ota:
password: "xxxxxxxxxxxxxxxxxxxxxxx"
safe_mode: false
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"]
## ---------------------------------------------------
## COMPONENT WEBSERVER
## ---------------------------------------------------
web_server:
port: 80
version: 2
js_url: !secret webserver_jsurl
## ---------------------------------------------------
## SNTP Time server
## ---------------------------------------------------
time:
- platform: sntp
id: time_sntp
timezone: Europe/Berlin
servers:
- 0.at.pool.ntp.org
- 0.pool.ntp.org
# - 1.pool.ntp.org
## ---------------------------------------------------
## CC11001 WMBUS TO DEVICE (selected board)
## ---------------------------------------------------
wmbus:
mosi_pin: ${CC1101_3} # MOSI Attached to Hardware SPI controller MOSI SPI Interface
miso_pin: ${CC1101_5} # MISO Attached to Hardware SPI controller MISO SPI Interface
clk_pin: ${CC1101_4} # SCK Attached to Hardware SPI controller CLK
cs_pin: ${CC1101_8} # CSN Attached to Hardware SPI controller
gdo0_pin: ${CC1101_7} # GDO0 Clock output. High Impedance !
gdo2_pin: ${CC1101_6} # GDO2 status signals. High Impedance !
# Shows telegrams from all watermeters in log.
log_unknown: True
## Nothing follow here, output only on log console
bau mal noch folgende Zeile ein:
wmid: “0”
Hab ich. Ändert sich aber erkennbar nichts
Ich habe ebenfalls versucht den Qwater 5.5 mithilfe des Projektes auszulesen. (zibous/ha-watermeter)
Ich erhalte auch die entsprechenden Telegram Daten bzw. Frames, welche vermutlich aber verschlüsselt sind. Zumindest begründet es ChatGPT damit, dass die wohl an bestimmten Teilen des Strings erkennbar ist. Ohne den “Decryption Key” kommt man da wohl nicht weiter.
Hier ein Frame von meinem Wasserzähler als Beispiel mit Treiber von qwater: WMBusmeters Analyze Telegram
Vlt hat aber jemand noch Ideen oder bleibt dann wirklich nur noch die irDA-Schnittstelle (Infarot)?
Das hier ist mein Wasserzähler: https://qundis.de/fileadmin/user_upload/01_Produkte/03_Qwater_Wasserzähler/02_PDF/01_DE/QUNDIS_Datenblatt_Qwater_5.5_elektronische_Wasserzähler_Verschraubung_2017_dt.pdf
Hi @sippeeey. Die Wasseruhr habe ich, wie oben beschrieben auch. Inzwischen läuft das Script und im Protokoll wird meine Wasseruhr und die von meiner Nachbarin angezeigt. Leider kommen keine Sensordaten an (Wasserverbrauch usw).Hinter der ID von der Wasseruhr wird noch ein sehr langer Alphanumerischer String angezeigt. Das könnte der Schlüssel sein, aber wo binde ich den ein?
der Schlüssel wird nicht per Funk übertragen, das ist der payload. Du brauchst den Schlüssel von deinen Wasserwerken.
Habe vergessen zu erwähnen, dass es der Wasserzähler in der Wohnung ist.
Beim Hauptzähler kann ich mir das noch vorstellen, dass der Schlüssel von den Wasserwerken kommt (hier: WSE). Meinen Wasseruhr kommt aber vom Vermieter und da war auch in der Originalverpackung kein Code. Kann es sein, dass der Hersteller der Uhr diesen Code hat?
ok, hast du mal überprüft in welchen Mode er die Telegramme verschickt? S oder C?
sonst aktivier mal den C-mode und prüfe es nochmal.
Dank der absoluten Geduld von @meloneA (Besten Dank an dieser Stelle) habe ich den Qwater nunmehr in Homeassistant einbinden können. Bei der Verwendung der Qundis Wasseruhr ist dokumentiert, dass nur ein Sensor abgelesen werden kann. Das ist zwar schade, aber es reicht ja der aktuelle Zählerstand. Alles andere lässt sich mit Statistiken regeln.
So sieht nun meine Hardware aus:
Gekaufte Komponenten:
AZDelivery ESP32 NodeMCU Module WLAN WiFi Dev Kit C Development Board mit CP2102
diymore ESP32 Breakout Board für 38PIN ESP32 Entwicklungs Board
Das Script für den ESP32:
---
## ---------------------------------------------------------------------------
## 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-kaltwasser"
device_description: "Wasserzähler QWater"
projectname: "QWater.Watermeter"
appversion: "2.0.7"
## all watermeters wmid: "0"
## your watermeter: wmid: !secret watermeterId
wmid: !secret watermeterId
## logger settings
log_level: "DEBUG" # not that logging need memory, so in production mode use "WARN"
log_wmbus: "DEBUG" # Loglevel for wmbus meters component
log_baudrate: "0" # 0 disable uart logger messages
## ----------------------------------------------------------------
## APPLICATION ESPHOME
## ----------------------------------------------------------------
esphome:
name: ${device_name_short}
comment: ${device_description}
# Automatically add the mac address to the name
# so you can use a single firmware for all devices
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 3 wifis
## ---------------------------------------------------
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
domain: !secret domain
## ---------------------------------------------------
## mDNS Component
## ---------------------------------------------------
mdns:
# if mDNS is disabled, they will no longer be able to automatically find your devices.
disabled: false
## ---------------------------------------------------
## The captive portal component in ESPHome is a
## fallback mechanism for when connecting to the
## configured WiFi fails.
## ---------------------------------------------------
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:
password: !secret waterota
safe_mode: false
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"]
## ---------------------------------------------------
## COMPONENT WEBSERVER
## ---------------------------------------------------
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:
mosi_pin: GPIO23 ## SI: braun
miso_pin: GPIO19 ## SO: grün
clk_pin: GPIO18 ## SCLK: violett
cs_pin: GPIO05 ## CSN: orange
gdo0_pin: GPIO16 ## GD00: gelb (rx)
gdo2_pin: GPIO17 ## GD02: weiss (tx)
# log_unknown (Optional): Show telegrams from not configured meters in log.
# Defaults to False
log_unknown: false
sync_mode: true
## ---------------------------------------------------
## SWITCHES
## ---------------------------------------------------
switch:
# reset boot counter value
- 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:
- platform: wmbus
# Meter ID (usually from sticker). Can be specified as decimal or hex.
# only hex is working for my watermeter !
# see: https://github.com/SzczepanLeon/esphome-components/issues/6
# edit watermeterid in the secrets file
meter_id: ${wmid}
type: qwater
add_prefix: true
mode: C1
# The LQI value reported by the CC1101 is a 7 bit unsigned number with a range from 0 to 127.
# Note that a lower value indicates a better link.
# The LQI of a received packet will be bad (higher number) when there is lot of interference.
lqi:
id: wmbus_cc1101_lqi
name: "Watermeter CC1101 LQI"
unit_of_measurement: "lqi"
entity_category: "diagnostic"
# The RSSI value reported by the CC1101 is a 8 bit signed number with an effective
# range from -138 dBm to -10.5 dBm when the CC1101 is operating around 868 MHz.
# RSSI stands for received signal strength (power) indication (in dBm).
# A higher value indicates higher power.
rssi:
id: wmbus_cc1101_rssi
name: "Watermeter CC1101 RSSI"
unit_of_measurement: "%"
entity_category: "diagnostic"
# reports the watermeter display value
total_water_m3:
id: "waterdisplay"
name: "Wasseruhr"
unit_of_measurement: "m³"
state_class: total_increasing
device_class: "water"
accuracy_decimals: 3
# update and calulatet all watermeter data values
on_value:
then:
- lambda: |-
ESP_LOGI("wmbus", "Water Display value: %.3f, last value: %.3f", id(waterdisplay).state, id(last_value));
id(last_value)=id(waterdisplay).state;
# Wifi quality RSSI, internal used to calculate the Wifi quality RSSI in percentage
- platform: wifi_signal
id: wifi_signal_db
update_interval: 60s
internal: true
disabled_by_default: true
# Wifi quality RSSI in percentage
# Received Signal Strength (RSSI) is a measure of incoherent
## (raw) RF power in a channel.
- platform: copy # Reports the WiFi signal strength in %
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"
# device boot counter
- 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));
Die Einträge in der Secrets entsprechend anpassen und aufpassen, dass die ID der Wasseruhr ein 0x vorangestellt wird. Hatte mehrere Variationen ausprobiert. Diese hier funktioniert.
watermeterId: "0x12345678"
watermetersecret: ""
waterota: "hier ein OTA Kennwort vergeben"
domain: ".local"
Viel Erfolg beim ausprobieren
Hallo @andifidi
was hast du jetzt geändert, dass es auf einmal geht bei dir?
Wie bekommst du nun den korrekten m³ Verbrauch übermittelt?
Sein Zähler ist nicht verschlüsselt. Poste mal deine Konfig, bzw hast du mal ein komplettes Protokoll?
Hallo @meloneA
ok das ist nämlich auch meine Annahme, allerdings scheint es, als wäre in dem Frame, welches gesendet wird, ein herstellerspezifischer Inhalt, der nicht gelesen werden kann, wodurch die Werte nicht korrekt sind.
Siehe hier: WMBusmeters Analyze Telegram
Welchen mode verwendest du aktuell?
Qundis hat sein eigenes Protokoll, die Zähler können aber beide gleichzeitig nutzen. Du brauchst mMn einen Key von deinem Wasserwerk.
Der Zähler läuft im C-Modus. Meinst du mit Key den Decription Key, obwohl es an sich nicht “verschlüsselt” ist?
Hi @sippeeey, habe den Modus T1 auf C1 geändert und dann hat es funktioniert.
Ich bekomme die aktuelle Anzeige (Gesamt m3) ausgelesen und kann mit Helfern den Tages bzw. Monatsverbrauch ermitteln. Die Werte stimmen absolut. Auf der Energiekarte scheint es aber nicht korrekt mit der Auswertung zu funktionieren. Das ist aber egal, da die Helfer bis jetzt ganz gut laufen.