ESPHOME - Reed Contact zählt doppelt

WKN59

New member
Hallo zusammen,

ich betreibe einen ESP32-basierten Gaszähler mit Reed-Kontakt (0.1 m³ pro Impuls) und ESPHome.
Die Hardware läuft grundsätzlich stabil, aber es scheint ein Problem mit Doppelimpulsen / Prellung zu geben.

🔧

  • Board: ESP32-DevKitC
  • GPIO: 27 (Reed-Kontakt, Pull-Up aktiviert)
  • Sensor: Standard-Reedkontakt (NO), direkt am mechanischen Gaszähler (Itron/Elster)
  • ESPHome-Version: aktuelle Release (Oktober 2025)
  • Home Assistant: VM auf Unraid (HAOS Image)
  • WLAN: stabil
  • Zählerlogik: klassischer GPIO-Binary-Sensor mit +0.1 m³ pro Impuls
  • Kalibrierung: physischer Zähler = 53330.790 m³, Rohwert = 2.8 → Offset = 53327.990 m³
Das System zählt grundsätzlich korrekt, aber gelegentlich springt der Zähler um 0.3 m³, obwohl der physische Gaszähler nur um 0.1 m³ weiterläuft.
Die LED am ESP zeigt dabei kurze Mehrfachblinks, was auf mehrere Impulse pro Magnetdurchgang hindeutet.

Ich vermute daher Kontaktprellen oder eine zu kurze Entprellzeit in ESPHome.


❓

  1. Gibt es bekannte Probleme mit GPIO 27 (Reed-Noise, Störungen, Flankenrauschen) beim ESP32?
  2. Welche Filterstrategien haben sich bewährt (delayed_on/off, debounce, on_press + millis())?
  3. Welcher Mindestabstand zwischen gültigen Impulsen ist für typische Haushaltsgaszähler realistisch?
  4. Hat jemand eine funktionierende Beispielkonfiguration für 0.1 m³-Impulse ohne Doppelzählungen?
Ich möchte das Problem ohne Änderung meiner bestehenden Entitäten lösen – ideal durch eine zusätzliche Filterlogik oder bewährte Kombination aus delayed_on/off und Zeitabstand.

Hier die Yaml Definitonen:
Code:
substitutions:
  device_name: gaszaehler
  friendly_name: "Gaszähler"

esphome:
  name: ${device_name}
  platform: ESP32
  board: esp32dev

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

binary_sensor:
  - platform: gpio
    name: "${friendly_name} Impuls"
    id: gas_reed
    pin:
      number: GPIO27
      mode: INPUT_PULLUP
    filters:
      - delayed_on: 10ms
      - delayed_off: 10ms
    on_press:
      then:
        - lambda: |-
            id(gas_total_m3).publish_state(id(gas_total_m3).state + 0.1);

sensor:
  - platform: template
    name: "${friendly_name} Gesamt m³"
    id: gas_total_m3
    unit_of_measurement: "m³"
    accuracy_decimals: 3
    update_interval: never

Der reed contact zählt auf einem Itron Gaszähler (s. Foto)
 

Anhänge

  • Bildschirmfoto 2025-10-10 um 13.06.52.png
    Bildschirmfoto 2025-10-10 um 13.06.52.png
    145,1 KB · Aufrufe: 2
Zuletzt bearbeitet:
Hallo @WKN59,
Kontaktprellen kannst Du wirksam durch ein RC Glied oder durch ein RS-Flip-Flop verhindern. Schaltungen dazu findest Du im Internet. (Suchbegriff "Kontakt entprellen" oder "Prellfreier Schalter".)
Meines wissens nach gibt es auch fertige (prellfreie) Reedkontakte zu kaufen.
 

Neueste Beiträge

Letzte Anleitungen

Statistik des Forums

Themen
7.214
Beiträge
70.205
Mitglieder
7.654
Neuestes Mitglied
Dawsony72
Zurück
Oben