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:
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