Gaszähler smart machen / Feinabstimmung

Hallo,

erstmal Danke an alle die mir geholfen haben. Nachdem ich schon dachte das die Lösung Reedkontakt bei mir nicht funktioniert hatte ich jetzt doch Erfolg damit.
Ich war der Meinung die letzte Rolle am Zähler wo man auf der 6 einen silbernen Punkt sieht ist der Magnet.
Dem ist zumindest bei meinem Zähler nicht so.

Der Reed-Kontakt muss auf Höhe der 2 Rolle nach dem Komma platziert werden. Und siehe da sofort funktioniert es.

Die Bauteile sind die gleichen wie bei Member1
https://forum.heimnetz.de/threads/wie-findet-man-sich-in-diesem-ganzen-yaml-djungle-zurecht.1075/

Allerdings habe ich jetzt noch Probleme beim zählen.

Ich war der Meinung das immer nur der Impuls gezählt wird wenn die Rolle eine volle Umdrehung macht.
Und im Life-Impuls sieht es nach meinem Verständnis auch so aus das nur 1 Impuls gezählt wird.

Aber es wird dennoch nur unregelmäßig hochgezählt. Das führt natürlich dazu das der Verbrauch nicht mit dem vom Zähler übereinstimmt.

Ist das wie von euch beschrieben mit dem entprellen gemeint?

Momentan ist bei delayed_on: 100ms eingestellt. 🤷‍♂️

YAML:
globals:
  - id: total_pulses
    type: int
    restore_value: false
    initial_value: '835401'  # hier kann der Gaszählerstand initialisiert werden

binary_sensor:
  - platform: gpio
    id: internal_pulse_counter
    pin:
      number: GPIO5 # "D1"
      mode: INPUT_PULLUP
    name: "Live-Impuls"
    filters:
      - delayed_on: 100ms
    on_press:
      then:
        - lambda: id(total_pulses) += 1;

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


verbrauch1.jpg
 
Gezählt wird am Gaszähler letzte Rote Ziffer ganz rechts beim 0 Durchgang

Idealerweise schaltet man eine LED zur Kontrolle/Einstellen/Justieren dazwischen

Entprellen entweder per Software auf dem ESP,
auf dem ESP nennt sich das debounce kann man sicherlich auf 400ms setzen,
oder
Entprellen mittels Hardware mit einem Schmitt trigger (bessere Lösung, jedoch für die ersten Versuche nicht notwendig)
 
In ESP-Home hab ich das so eingestellt:

YAML:
sensor:
  - platform: pulse_counter
    pin:
      number: D1
      mode: INPUT_PULLUP
    name: "Gasverbrauch_pulse"
    id: gasmeter
    update_interval: 60s
    internal_filter: 100ms
    filters:
      - lambda: |-
          static float total_value = 0.0;
          total_value += x * 0.01;
          return total_value;
    unit_of_measurement: "m³"
    device_class: gas
    state_class: "total_increasing"
    accuracy_decimals: 2
    icon: 'mdi:fire'
    total:
      name: 'gas-pulse-counter'
internal_filter: 100ms ist für das Software Entprellen.

Gruß
Michael
 
Danke für die Antworten.
Ich werde es testen. :)(y)

Gezählt wird am Gaszähler letzte Rote Ziffer ganz rechts beim 0 Durchgang
Ja das weiß ich schon. Zumindest denke ich es zu wissen. :unsure::)
verbrauch2.jpg

Dachte nur wenn beim Life-Impuls ON/Off nur einmal auftaucht wird auch nur 1 Impuls erfasst und weiter gegeben.
Aber das scheint dann wohl nicht so zu sein.:unsure:
 
Auf dem Zähler ist übrigens beschrieben an welcher Stelle der Impuls kommt, wenn das Bild von deinem Zähle kommt kann der nur 0,01 m³ oder 10 Liter weiße Zählen, somit wäre der Reed an 2ten korrekt platziert
Screenshot_20221211_201539_Samsung Internet.jpg
 
Auf dem Zähler ist übrigens beschrieben an welcher Stelle der Impuls kommt, wenn das Bild von deinem Zähle kommt kann der nur 0,01 m³ oder 10 Liter weiße Zählen, somit wäre der Reed an 2ten korrekt platziert
Anhang anzeigen 2319
Ich glaube ich hatte dich nur falsch verstanden als Du meintest es wird auf der letzten Rolle gezählt.
Das der Zähler eine Auflösung von 0.01 hat habe ich schon gesehen.
Gibt auch welche mit 0.1 je nach Ausführung halt.
Mal schauen ob ich heute zum umschreiben und testen komme.
Ich sag bescheid. ;)
 
Auf dem D1 mini in die console wechseln und die hier eintragen

Damit wird 500 ms entprellt
Code:
CounterDebounce 500

Zudem solltest du schauen ob dein Script einen Merker setzt um ein falsches hochzählen zu verhindern

Code:
>D
tmp=0
>B
tmp=sw[0]
>E
; nur bei Statuswechsel zu Eins die Bedingung auslösen
if sw[0]!=tmp
and sw[0]==1
endif
tmp=sw[0]
 
Hallo,

so hab jetzt mal die Yaml von Mkonline übernommen. Danke dafür.
Geändert habe ich nur den internal_filter auf 500 ms.
Code:
sensor:
  - platform: pulse_counter
    pin:
      number: GPIO5 # "D1"
      mode: INPUT_PULLUP
    name: "Gasverbrauch_pulse"
    id: gasmeter
    update_interval: 60s
    internal_filter: 500ms
    filters:
      - lambda: |-
          static float total_value = 8382.50;
          total_value += x * 0.01;
          return total_value;
    unit_of_measurement: "m³"
    device_class: gas
    state_class: "total_increasing"
    accuracy_decimals: 2
    icon: 'mdi:fire'
    total:
      name: 'gas-pulse-counter'
Bei 100 ms hat er in 11 Stunden 120 Liter zu viel gezählt. Bei 500 ms sind es nach 24 Stunden 5 Liter zu wenig.
Jetzt nach 36 Stunden hat sich der Zählerstand 10 Liter zwischen Home Assistent und dem Gaszähler angepasst.

Was ich noch nicht verstehe ist die Differenz zwischen Impulsen und Zählerstand in Home Assistent.

In der Yaml ist ein Anfangszählerstand von 8382.50 hinterlegt.
Gezählt wurden ab da 788 Impulse. Wenn man die zum Anfangszählerstand dazu zählt würden
8390,38 qm3 raus kommen.
Angezeigt werden aber nur 8390,20 qm3

Ich war der Meinung die Impulse werden gezählt und dann mit 0,01 multipliziert und auf den Anfangszählerstand addiert.
Dann dürfte keine Differenz zwischen den beiden Werten geben. Oder hab ich da mal wieder einen Denk/Rechenfehler?pulse.jpg

Auf dem D1 mini in die console wechseln und die hier eintragen

Damit wird 500 ms entprellt
Code:
CounterDebounce 500

Zudem solltest du schauen ob dein Script einen Merker setzt um ein falsches hochzählen zu verhindern

Code:
>D
tmp=0
>B
tmp=sw[0]
>E
; nur bei Statuswechsel zu Eins die Bedingung auslösen
if sw[0]!=tmp
and sw[0]==1
endif
tmp=sw[0]

Eingerichtet hatte ich den D1 dank Deine Hilfe ja mit Tasmota.
Aber jetzt ist er doch mit ESPHome verbunden und doch auch eine Firmware von ESP drauf oder.
Wie kann ich dann noch die Konsole öffnen um da diese Einstellungen vorzunehmen?
Vor ESPHome konnte ich direkt über die IP des D1 die Tasmota Oberfläche öffnen.
Das geht aber jetzt nicht mehr. 🤷‍♂️

Und ist es möglich den Wert im Energie Dashboard auch in Kwh anzeigen zu lassen?
Man müsste den Wert mit dem Brennwert und der Zustandszahl noch multiplizieren und hätte dann gleich die Kwh so wie in der Abrechnung des Gasversorgers.
 
Zum umrechnen

Zwei Helper erstellt oder den Wert Fix eingeben

Mengengewicht
Screenshot_20221216_204626_Home Assistant.jpg


Normdichte
Screenshot_20221216_204635_Home Assistant.jpg


Ein tamplet erstellen, meine Formel umstellen da ich von kWh in m³ umrechne
unit of measurement auf kWh

EDIT: hab se mal umgestellt, Achtung ⚠️ kWh wird nicht offiziell in Gas akzeptiert

YAML:
template:
  - sensor:
      - name: "Gas Verbrauch"
        unique_id: "gas_verbrauch"
        device_class: "gas"
        state_class: "total_increasing"
        unit_of_measurement: "kWh"
        state: >
          {% set m3 = states('sensor.HIER_DEIN_SENSOR') | float %}
          {% set normdichte_value = states('input_number.gas_normdichte') | float %}
          {% set mengengewichtet_value = states('input_number.gas_mengengewichtet') | float %}
          {{ '%.4f' | format( m3 * (normdichte_value * mengengewichtet_value) ) | round(4) }}

Dies sind meine Werte vom Energieversorger

Screenshot_20221216_211110_Home Assistant.jpg
 
Zuletzt bearbeitet:
Zum umrechnen

Zwei Helper erstellt oder den Wert Fix eingeben

Mengengewicht
Anhang anzeigen 2389


Normdichte
Anhang anzeigen 2390


Ein tamplet erstellen, meine Formel umstellen da ich von kWh in m³ umrechne
unit of measurement auf kWh

EDIT: hab se mal umgestellt, Achtung ⚠️ kWh wird nicht offiziell in Gas akzeptiert

YAML:
template:
  - sensor:
      - name: "Gas Verbrauch"
        unique_id: "gas_verbrauch"
        device_class: "gas"
        state_class: "total_increasing"
        unit_of_measurement: "kWh"
        state: >
          {% set m3 = states('sensor.HIER_DEIN_SENSOR') | float %}
          {% set normdichte_value = states('input_number.gas_normdichte') | float %}
          {% set mengengewichtet_value = states('input_number.gas_mengengewichtet') | float %}
          {{ '%.4f' | format( m3 * (normdichte_value * mengengewichtet_value) ) | round(4) }}

Dies sind meine Werte vom Energieversorger

Anhang anzeigen 2391
Danke wie immer. (y)
Das werde ich mal versuchen.

Diese sachen kommen aber in die configuration.yaml oder?
 
Solltest du da hängen/klemmen hab mir auch schon welche bestellt, möchte von OCR Erkennung umstellen
Habe mal das 3 Pack zum testen bestellt. Würde den Reed Kontakt aber auslöten und dafür dann den jetzigen Reed Kontakt mit Kabel benutzen.
Habe mir eine Halterung im 3D-Programm erstellt so das wenn alles funktioniert es auch sauber ausschaut.
Hoffe jetzt nur noch das Frauchen das ok zum 3D-Drucker gibt und der Weihnachstsmann nachträglich was vorbei bringt. :D

Das einbinden in ESPHome müsste ja eigentlich genau so laufen.
Was ich noch nicht weiß ob man den analogen PIN A0 dann auch mit einbindet.:unsure:
 
Auf dem D1 mini in die console wechseln und die hier eintragen

Damit wird 500 ms entprellt
Code:
CounterDebounce 500

Zudem solltest du schauen ob dein Script einen Merker setzt um ein falsches hochzählen zu verhindern

Code:
>D
tmp=0
>B
tmp=sw[0]
>E
; nur bei Statuswechsel zu Eins die Bedingung auslösen
if sw[0]!=tmp
and sw[0]==1
endif
tmp=sw[0]
Hi, ich habe das Problem das immer wenn der Zähler mit dem Magneten über dem Reed Kontakt stehen bleibt, zwei Impulse gezählt werden. Mit dem merker sollte sich das doch verhindern lassen. Ich schaffe es allerdings nicht den Merker in mein Script zu integrieren.
Könntest du mir sagen wo und welche Bezeichnung ich bei meinem Script verwenden muß?
Code:
>D
p:m1=0
p:g1=0
p:g2=0
p:month1=0
p:month2=0
p:month3=0
p:gesamt=0
c1=0
s1=0
h1=0
hkw1=0
gkw1=0
gkw2=0
mkw1=0
mkw2=0
mkw3=0
mkwgs=0
skw1=0
hgp=0
g1gp=0
g2gp=0
m1gp=0
m2gp=0
m3gp=0
gsgp=0
hr=0
dy=0
zu=0.9571
br=11.296
gp=12.000
gasinit=61951.98
gastotal=0

>B
=>sensor53 l255


>S
h1=s1-m1
hkw1=h1*br*zu
hgp=(hkw1*gp)/100
gkw1=g1*br*zu
gkw2=g2*br*zu
mkw1=month1*br*zu
mkw2=month2*br*zu
mkw3=month3*br*zu
mkwgs=gesamt*br*zu
g1gp=(gkw1*gp)/100
g2gp=(gkw2*gp)/100
m1gp=(mkw1*gp)/100
m2gp=(mkw2*gp)/100
m3gp=(mkw3*gp)/100
gsgp=(mkwgs*gp)/100
skw1=s1*br*zu

hr=hours
dy=day
if chg[hr]>0
 and hr==0
  then
   m1=s1
   g2=g1
   g1=h1
   month1=month1+h1
   gesamt=gesamt+h1
   if chg[dy]<2
    and dy==1
     then
      month3=month2
      month2=month1
      month1=0
   endif
   svars
endif

Danke im voraus.
 

Zurzeit aktive Besucher

Keine Mitglieder online.

Letzte Anleitungen

Statistik des Forums

Themen
5.799
Beiträge
56.644
Mitglieder
5.716
Neuestes Mitglied
blinker
Zurück
Oben