Gaszähler mittels Reedkontakt einlesen

Wer kann mir sagen, wofür der 10K Widerstand benötigt wird?
Ich habe mir folgendes ESP8266 bestellt.

In meinem aktuellen Setup mit diesem Reed-Kontakt welcher einen AT Wert von 15 - 25 hat.

Hier die technischen Daten zum Reed-Kontakt

Modell: MC 38; Kontaktkapazität: 0.5A (maximaler Schaltstrom)
Spannung: 100V; Nennleistung: 10W; Betätigungsabstand: 15-25mm, Größe (ca.): 2.8 x 1.5 x 1.3 x 1.6 x 0.6 cm (L * W * H)
Farbe: Weiß; Gehäuse Material
Kunststoff; Gewicht: 8g

Ich habe den Reed-Kontakt wie im nachfolgenden Bild zu sehen ist platziert. Leider bekomme ich keinen Schaltkontakt mit. Ich habe aber auch keinen Widerstand dazwischen sondern gehe direkt mit den Kabeln auf das ESP Board.

Hier meine ESP Konfiguration

esphome:
  name: gasverbrauch
  friendly_name: Gasverbrauch

esp8266:
  board: esp01_1m

# Enable logging
logger:

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

ota:
  password: "2ac53763454fd983725b0d7b2d5115bc"

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Gasverbrauch Fallback Hotspot"
    password: "aWDvsHCGaiBN"

captive_portal:

globals:
  - id: total_pulses
    type: int
    restore_value: false
    initial_value: '42953'  # hier kann der Gaszählerstand initialisiert werden - letze Stelle weglassen

binary_sensor:
  - platform: gpio
    id: internal_pulse_counter
    pin:
      number: GPIO5
      mode: INPUT_PULLUP
    name: "Live-Impuls"
    filters:
      - delayed_on: 10ms
    on_press:
      then:
        - lambda: id(total_pulses) += 1;
        - output.turn_off: led  # für die LED, zur Anzeige des Schaltvorgangs
    on_release:
      then:
        - output.turn_on: led  # für die LED, zur Anzeige des Schaltvorgangs

sensor:
  - platform: template
    name: "Gasverbrauch"
    device_class: gas
    unit_of_measurement: "m³"
    state_class: "total_increasing"
    icon: "mdi:fire"
    accuracy_decimals: 3
    lambda: |-
      return id(total_pulses) * 0.1;

# Diese LED blinkt, wenn ein Signal vom Reedkontakt erkannt wird
output:
  - platform: gpio # Die interne LED auf dem Board
    pin: GPIO2
    id: 'led'
    inverted: true

Jemand eine Idee?

Gruß
Patrick

Zu deiner Frage bezüglich des 10k Widerstands. Meiner Meinung nach benötigt man den nur, wenn man den internen Pull-Up-Widerstand des ESPs nicht aktiviert. In deiner Konfiguration sollte der jedoch über Anweisung “INPUT_PULLUP” aktiviert werden.

Bei anderen scheint die verwendete Konfiguration schon funktioniert zu haben. Insofern tippe ich eigentlich darauf, dass dein Sensor noch nicht optimal platziert ist. Teste doch mit einem Magneten, ob Du den Reed-Kontakt zum Schalten und den ESP zum Zählen bekommst.

Meine Konfiguration sieht etwas anders aus, denn ich nutze die “pulse_counter”-Platform. Anbei meine Sensor-Konfiguration für meinen Gaszähler:

  # Reports the counted pulse of the reed switch for gas consumption measurement
  - platform: pulse_counter
    id: pulse_counter_id
    pin:
      number: GPIO13
      inverted: true
      mode:
        input: true
        pullup: true
    count_mode:
      rising_edge: DISABLE
      falling_edge: INCREMENT
    internal_filter: 500ms
    update_interval: 5s
    total:
      name: "Consumption gas quantity"
      icon: mdi:meter-gas
      id: pulse_counter_id_total
      filters:
        - multiply: 0.1
      unit_of_measurement: "m³"
      accuracy_decimals: 1 
      device_class: gas
      state_class: total_increasing

Vielleicht hilft dies Dir ja weiter.

Hallo,

erstmal vielen Dank für die Erklärung mit dem Widerstand.

Grundsätzlich schaltet der Reed Kontakt wenn ich einen Magneten dran halte und in Home Assistent sehe ich das auch. Ich hab in anderen Beiträgen gelesen, dass der AT wert mit unter entscheidend ist. Mein aktueller Reed Kontakt hat einen AT von 15-25. Ich habe mir jetzt einen neuen Reed Kontakt bestellt mit einem AT wert von 10-15. der sollte heute ankommen, dann kann ich mehr sagen.

Wollte nur sichergehen das ich nicht grundsätzlich etwas falsch gemacht habe.

Gruß
Patrick

Dann wird das wohl an dem Reed-Kontakt liegen. Mein Reed-Kontakt hat auch ein AT von 10-15.

Ich habe bei meinen Experimenten auch etwas herumprobieren müssen, bis ich die richtige Position gefunden habe. In meinem früheren Beitrag findest Du auch eine technische Zeichnung, auf der man erkennen kann, dass der Reed-Kontakt am besten in der hinteren unteren Ecke platziert sein sollte.

Vielleicht macht es auch Sinn auszuprobieren, wo der bei dir im Gehäuse sitzt, um die beste Position zu finden.

Kannst du ggf. ein Foto posten auf dem zusehen wie du deinen Reed Kontakt platziert hast?

Ich habe einen einfachen Glaskolben-Reed-Kontakt genommen und den in einen Holzklotz so eingepasst, dass der Kontakt wirklich ganz hinten in der unteren Ecke des Schachtes fixiert ist. Von außen sieht das dann so aus:

Auf dem Bild sieht es so aus, als wäre dein Reed Kontakt zwischen der letzten und vorletzten Zahl, oder täuscht das Bild?

Ja, das war die Position bei mir, wo der Reed-Kontakt geschaltet hat. Wichtig zu wissen ist, dass der Magnet sich an der Rolle befindet, die eine 10er-Potenz kleiner als die angegebene Auflösung der Impulse ist.

Mein Zähler hat eine Auflösung von 0,1 m³ angegeben. D.h. der Magnet muss sich an der “0,01 m³”-Rolle befinden. Damit gibt es einen Impulse bei jeder Umdrehung dieser Rolle und damit 1 Impuls / 0,1 m³.

Bei mir scheint der Magnet nun rechts an dieser Rolle montiert zu sein. Man kann auch auf dem Bild erahnen, dass der Abstand zu der nächsten Rolle (0,001 m³) etwas größer ist, um dafür Platz zu haben.

Jetzt bin ich verwirrt, beim meinem Gaszähler ist es wie bei dir, der Impulse bei 0,1 und der Magnet ist zwischen der Zahl 6 und 7 an der letzten Stelle des zählerwerks zu sehen. Wo muss jetzt der Reed Kontakt gesetzt werden?

Kannst du bitte deine gesamte Konfig posten?

Ich habe gerade unsere beiden Gaszähler (in unseren geposteten Bildern) verglichen. Ich glaube, dass es sich um genau den gleichen Typ, nämlich “G4 RF1”, nur mit jeweils einem anderen Label versehen, handelt. Insofern sollte bei Dir der Magnet an der gleichen Stelle zu finden sein.

Hier noch wie gewünscht meine komplette Konfiguration. Ich musste sie jedoch noch etwas kürzen, da bei mir am gleichen ESP auch noch ein Sensor für den Stromzähler hängt.

esphome:
  name: consumption
  comment: "Consumption ESP8266 controller"
  
esp8266:
  board: d1_mini

# Enable logging
logger:
  baud_rate: 0

# Home Assistant API
api:
  # Set encryption key
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
  
  # Set pulse counter total from home assistant using this service call:
  services:
    - service: set_pulse_total
      variables:
        new_pulse_total: int
      then:
        - pulse_counter.set_total_pulses:
            id: pulse_counter_id
            value: !lambda 'return new_pulse_total;'

# OTA (Over The Air) updates
ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# WiFi settings and manual IP adress
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  manual_ip:
    static_ip: xxx.xxx.x.xxx
    gateway: xxx.xxx.x.x
    subnet: 255.255.255.0
    dns1: xxx.xxx.x.x
  power_save_mode: none
  reboot_timeout: 5min
  # Only use fast connect, if only one repeater is reachable (like in the basement)
  fast_connect: false 

# Status LED configuration
light:
  - platform: status_led
    name: "Switch state"
    pin: 
      number: GPIO2
      inverted: True

# Sensor definitions for this device
# Please prefix the signal names by the component e.g. "Consumption" to get unique sensor names
sensor:
  # Reports the WiFi signal strength/RSSI in dBm
  - platform: wifi_signal 
    name: "Consumption WiFi signal strength"
    icon: "mdi:wifi"
    id: consumption_wifi_signal_db
    update_interval: 5s
    unit_of_measurement: "dBm"
    device_class: "signal_strength"
    entity_category: "diagnostic"

  # Reports the WiFi signal strength in %
  - platform: copy 
    name: "Consumption WiFi signal quality"
    icon: "mdi:wifi"
    source_id: consumption_wifi_signal_db
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "%"
    device_class: ""
    entity_category: "diagnostic"

  # Reports the counted pulse of the reed switch for gas consumption measurement
  - platform: pulse_counter
    id: pulse_counter_id
    pin:
      number: GPIO13
      inverted: true
      mode:
        input: true
        pullup: true
    count_mode:
      rising_edge: DISABLE
      falling_edge: INCREMENT
    internal_filter: 500ms
    update_interval: 5s
    total:
      name: "Consumption gas quantity"
      icon: mdi:meter-gas
      id: pulse_counter_id_total
      filters:
        - multiply: 0.1
      unit_of_measurement: "m³"
      accuracy_decimals: 1 
      device_class: gas
      state_class: total_increasing

Also, ich gebe es auf mein einem “Günstigen” Reed Kontakt. Egal wie ich den positioniere, bekomme ich einfach keinen Impuls mit. Ich habe mir jetzt für knack 50€ den originalen Implusegeber bestellt, mal schauen ob ich den zum laufen bekomme.

Ich hätte trotzdem vorweg mal eine Frage. In meiner Konfiguration gebe ich ja einen Initialen Werte mit, da ich nicht nur sehen will wieviele Gas ich am Tag verbraucht habe, sondern auch den Zählerstand via HA im Blick habe möchte. Leider komme ich mit der Angabe und der Anzahl der Zahlen im “initial_value” noch nicht klar bzw. ich habe das Prinzip noch nicht verstanden. Mein aktueller Werte ist wie folgt (laut Zähler): 04313,966. Die führende “0” kann ich so in der Konfiguration aber nicht anwenden, da ich beim Installieren eine Fehlermeldung (#1) bekomme. Wenn ich die “0” weglasse und stattdessen den Werte wie in #2 angebe, dann ist das Komma an der falschen Stelle und der Wert stimmt nicht (# 3).

Kann mir hier jemand weiterhelfen?

#1

#2

initial_value: '431396'

#3

Gruß
Patrick

Wie schon weiter oben erwähnt bekommst Du von Deinem Gaszähler pro 0,1 m³ einen Impuls. D.h. 10 Impulse entsprechen 1 m³. Da der ESP die Impulse zählt, wird über die Lambda-Formel

lambda: |-
return id(total_pulses) * 0.1;

Die Anzahl der Impulse durch 10 geteilt.

Damit HA dir nun 4313,9 m³ anzeigt, muss der Zähler im ESP auf 43139 initialisiert werden.

Vielen Dank, jetzt funktioniert alles. Hab den originalen Impulsezähler jetzt installiert und er misst zuverlässig die Impluse. Hatte eine Denkfehler, dachte das alle drei Nachkomma stellen angezeigt werden müssen. Es wir aber nur die erste Nachkommastelle korrekt angezeigt. Nicht wundern im nachfolgenden Beispiel ist es aktuell …,000 im laufe es Tages wir sich der Wert änder …,100 …,200 usw.


In dem Zusammenhang würde ich gerne die Einheit vom m3 auf kWh ändern damit ich auch meine Kosten hinterlegen kann. Wer kann mir sagen ob das im Energy Dashboard überhaupt geht und wie ich das in HA ändere bzw. wie ich einen weiteren Sensor habe der mir den Wert in kWh anzeigt. Ich habe auf meiner Abrechung gesehen das die Formel wie folgt lautet:

Verbrauch in m3 x Z-Zahl (0,9674) x Brennwert (11,554) = Verbrauch in kWh

Vielen Dank für eure Hilfe

Gruß
Patrick

Moin,
das kannst du jetzt für das Energie Dashboard nicht mehr anpassen.
Einen neuen Sensor kannst du dir natürlich mit deiner Formel bauen und ihn dir auf deinem Dashboard ausgeben.
VG

Ich habe das genau andersherum gelöst und mir den Preis/m³ berechnet und entsprechend im Energiedashboard eingetragen. Folgende Formel habe ich genutzt:

Preis/m³ = Preis/kWh x Brennwert x Zustandszahl

Das mit der Umrechnung des Preises funktioniert jetzt @Stardust Danke.

Jetzt beobachte ich noch ein anderes Problem, bei dem ich nicht weiter komme. Wenn ich die die Firmware des ESP aus ESPHome heraus Update, bekomme ich anschließend eine meiner Meinung nach zuverlässigen negativen Wert. Das hat zur Folge das der Zählerstand anschließend nicht mehr passt. Kennt jemand das Problem und wie habt Ihr das gelöst?

Gruß
Patrick

Ich kenne das Problem nicht.

Natürlich wird mein Zähler bei einem Neustart des ESP immer wieder auf 0 gesetzt, aber das ist für das Energie-Dashboard irrelevant, da nur der momentane Verbrauch (also die Änderung des Gaszählers) berechnet und verwendet wird. Wichtig ist jedoch, dass die “state_class” des Sensors auf “total_increasing” steht. Damit werden negative Änderungen (wenn der Sensor wie in diesem Fall auf 0 gesetzt wird) ignoriert.

Wie sieht denn deine aktuell verwendete ESPHome-Konfiguration aus?

1 „Gefällt mir“

Das ist das Problem mit dem Update, das ich auch habe.
Die Lösung: Keine Updates.
Der Startwert im Programm wird jedes mal nach einem Update wieder als Startwert genutzt.

Vielleicht gibt es einen Weg, nur den Impuls an Home Assistant zu melden und HA selbst inkrementiert den Wert um +1 und zeigt ihn an.
Aber das geht über meine Fähigkeiten hinaus.

Hallo, danke für deine Erklärung. Ich bin komplett neu in der ESP Welt und bekomme leider immer folgende Fehlermeldung bei Installieren des veränderten Codes.

INFO Successfully compiled program.
INFO Resolving IP address of esphome-web-cc6a84.local
ERROR Error resolving IP address of esphome-web-cc6a84.local. Is it connected to WiFi?
ERROR (If this error persists, please set a static IP address: WiFi Component — ESPHome)
ERROR Error resolving IP address: Error resolving address with mDNS: Did not respond. Maybe the device is offline., [Errno -5] No address associated with hostname

Danke im Voraus.

Hallo erst mal, ich bin hier das erste mal im Forum. Sehr interessante Beiträge zum Thema Gaszähler. Ich habe folgendes Problem: Der Reedkontakt erkennt den Impuls aber der Verbrauch erhöht sich erst nach ca 40 Sekunden. Woran kann das liegen, hat jemand eine Idee?
PitHBS