Digitaler Gaszähler niedriger als physische Gasuhr

justus

New member
Moin zusammen!

Wie der Titel sagt habe ich das Problem dass zwischen dem digitalen Gaszähler den ich mittels eines ESP32 an dem Reed-Kontakt der Gasuhr angebracht habe und der Gasuhr selber eine Differenz entsteht, der digitale Zähler verpasst manche Signale und nach einer Woche besteht eine Abweichung von etwa 5-9%, der Wert der Gasuhr ist dabei immer höher.

Ich habe bereits das Forum durchstöbert aber konnte nur Beiträge zum Problem in die andere Richtung finden, das der digitale Zähler manche Impulse aufgrund von Prellen doppelt zu zählt. Bei mir ist es genau andersherum; einige Impulse scheinen quasi verschluckt zu werden. Hat da jemand mit Erfahrung?

In HA kann man sehen dass der Impuls meistens 10-20 Sekunden auf "Ein" bleibt, mit einem Abstand zwischen den Impulsen von etwa 5-10 Minuten. Ab und zu bleibt er aber auch sehr lange, für 5-10 Minuten eingeschaltet bevor er sich wieder ausschaltet. Das kann natürlich daran liegen dass das Rädchen mit dem Magneten für den Reed-Kontakt genau an der Position stehen geblieben ist wo das Signal auf "Ein" stehen bleibt, oder aber es liegt daran dass das "Aus" Signal irgendwie verschluckt wird und der Schalter nicht sauber wieder zurück schaltet und dies erst beim nächsten Impuls geschieht. Das würde zumindest erklären warum die Gasuhr immer einen höheren Wert anzeigt und mit der Häufigkeit der langen Impulse könnte es grob hinkommen das dies die Impulse sind die "verschluckt" werden.

Die Frage ist nun was kann ich dagegen tun? Kann man sich da mittels Code weiterhelfen oder bedarf es einer physischen Lösung?
Der Verbaute Gaszähler ist ein „Encoder S1D RABO G65 DN50 PN16“ mit einem eingebauten Impulsgeber „IN-S11“ (1 Runde/Impuls = 0.1 m3).
Als Microcontroller ist ein ESP32-S3 ETH von Waveshare angeschlossen, auf GPIO15 und GRND. Dieser sendet dann alle 60s an HAOS, welches auf einer VM auf einem Server läuft.

Hier der YAML Code der aktuell auf dem ESP32 läuft:


YAML:
esphome:
  name: esp32-s3-gaszaehler
  friendly_name: ESP32-S3 Gaszaehler

esp32:
  board: esp32-s3-devkitc-1
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: ""

ota:
  - platform: esphome
    password: ""

#wifi:              #habe ich rausgenommen, entweder wifi oder LAN aber nicht beides
#  ssid: !secret wifi_ssid
#  password: !secret wifi_password
#
#  # Enable fallback hotspot (captive portal) in case wifi connection fails
#  ap:
#    ssid: ""
#    password: ""
#
#captive_portal:

##Konfig für LAN
# SPI-Bus Definition laut Boardbelegung
ethernet:
  type: W5500
  mosi_pin: GPIO11
  miso_pin: GPIO12
  clk_pin: GPIO13
  cs_pin: GPIO14
  reset_pin: GPIO9
  interrupt_pin: GPIO10

# Zeitsynchronisation mit Home Assistant
time:
  - platform: homeassistant

# Gaszähler Impulserfassung über GPIO
globals:
  - id: gas_counter_value
    type: float
    restore_value: true
    initial_value: '0.0'

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO15
      mode: INPUT_PULLUP
      inverted: True
    name: "Gaszähler Impuls"
    filters:
      - delayed_on: 150ms
      - delayed_off: 150ms
    on_press:
      then:
        - lambda: |-
            id(gas_counter_value) += 0.1;
            id(gas_counter_number).publish_state(id(gas_counter_value));
            id(gas_counter_display).publish_state(id(gas_counter_value));
            id(gas_counter_kwh).publish_state(id(gas_counter_value) * 10.4);

number:
  - platform: template
    name: "Gaszähler Verbrauch"
    id: gas_counter_number
    restore_value: false
    optimistic: true
    min_value: 0
    max_value: 999999
    step: 0.1
    unit_of_measurement: "m³"
    set_action:
      - lambda: |-
          id(gas_counter_value) = x;
          id(gas_counter_number).publish_state(x);
          id(gas_counter_display).publish_state(x);
          id(gas_counter_kwh).publish_state(x * 10.4);

sensor:
  - platform: template
    name: "Gaszähler Verbrauch (nur Anzeige)"
    id: gas_counter_display
    unit_of_measurement: "m³"
    accuracy_decimals: 1
    lambda: |-
      return id(gas_counter_value);
    update_interval: 60s

  - platform: template
    name: "Gaszähler Verbrauch in kWh"
    id: gas_counter_kwh
    unit_of_measurement: "kWh"
    accuracy_decimals: 1
    lambda: |-
      return id(gas_counter_value) * 10.4; #10.4 ist hier der Brennwertfaktor, muss evtl noch angepasst werden
    update_interval: 60s
 

Letzte Anleitungen

Statistik des Forums

Themen
8.059
Beiträge
79.366
Mitglieder
8.775
Neuestes Mitglied
rg_Beginnger
Zurück
Oben