saruter / smarthome

Docs of my little SmartHome with Home Assistant
https://smarthome.ms1.de
14 stars 4 forks source link

Fehlendes Schaltbild bei Gasverbrauchsmessung #6

Open felix-wa opened 3 years ago

felix-wa commented 3 years ago

Hallo @saruter, ich überlege gerade mir auch diesen Sensor zu bauen. Kannst du deinem Artikel noch ein Schaltbild hinzufügen, so dass man sieht wie der Reed Sensor an das Board angeschlossen werden muss? Viele Grüße

Xrlwyzz commented 2 years ago

Hi, die Ergänzung zum Schaltbild wäre Klasse. Würde das auch gerne realisieren. VG

Johnnyyr commented 2 years ago

Eine Seite vom Reed an D1 die andern an G(ground).

ha-es13 commented 2 years ago

Ich habe es nachgebaut mit einem Wemos D1 mini auf GPIO D1 mit einem externen 10k Pullup Widerstand, aber es werden mehr Impulse gezählt, wie der Gaszähler wirklich ausgibt. Bisher habe ich keine Lösung. Wo ist der Fehler? Entprellen, wie?

dj-at-work commented 2 years ago

Habe es mit den hier beschriebenen Teilen (ESP8266 NodeMCU + Reed-Sensor MK-471B) nachgebaut. Es führt zum gleichen Fehlerbild wie bei den anderen: es werden zu viele Impulse gezählt. Wo der reale Verbrauch bei 0,21 m³ lag, meldet der Sensor satte 0,54 m³.

Wo liegt die Ursache? Ist der Sensor zu empfindlich, bräuchte man einen Pull-Down-Widerstand o.ä. oder müsste man im Controller die Signale irgendwie bereinigen (z.B. könne man nur ein Impuls innerhalb eines Zeitraums von bspw. 5 Sekunden berücksichtigen).

Ich habe nur keine Ahnung wo und wie man das anstellen könnte.

Falls ich was herausfinde werde ich es hier schreiben, wäre aber aktuell auch über jeden Tipp dankbar.

GG-Style commented 2 years ago

Weitere Infos wären echt Top. Wollte da jetzt auch mal dran. Habe aber 0 Plan vom ESP Programmieren. Bin mal gespannt ob ich das irgendwie hinkriege. Wer Infos zum Programmieren hat gerne her damit. Reicht das Bruchstücke der Programmierung von der Website? Brauche ich noch einen Wiederstand?

dj-at-work commented 2 years ago

Ich habe recherchiert und mit einem Freund gesprochen, der beruflich etwas von dem Thema versteht. Es ist wie @ha-es13 bereits gesagt hat. Man benötigt einen Pullup Widerstand (er empfahl ebenfalls 10k). Die Bestellung trifft heute ein, sobald es läuft (die Hoffnung stirbt zuletzt) teile ich die Details.

GG-Style commented 2 years ago

Ich habe recherchiert und mit einem Freund gesprochen, der beruflich etwas von dem Thema versteht. Es ist wie @ha-es13 bereits gesagt hat. Man benötigt einen Pullup Widerstand (er empfahl ebenfalls 10k). Die Bestellung trifft heute ein, sobald es läuft (die Hoffnung stirbt zuletzt) teile ich die Details.

Top. Wiederstand habe ich da. Dann würde ich mich freuen wenn du deine Infos teilst

andre68723 commented 2 years ago

ich hatte das damals ebenfalls, über einen Zeitraum von 24h wurde das doppelte gezählt. Daher einfach total_value += x * 0.5 * 0.01;

Johnnyyr commented 2 years ago

Meiner zählt nicht genau doppelt sonder quasi wild :-) ich teste das auch mal mit widerstand. danke

ha-es13 commented 2 years ago

Ich habe die Lösung: Benutzt das Modul KY-025 und den internen Pull-Up Widerstand von D4.

binary_sensor:

sensor:

dj-at-work commented 2 years ago

@ha-es13 vielen Dank! Werde das mal mit meinem Reed-Sensor ausprobieren. Wie hast du dein Modul am Gaszähler angebracht? Hast du dir etwas per 3D-Drucker erstellt oder es einfach mit Klebeband befestigt?

ha-es13 commented 2 years ago

Ich habe mir beim örtlichen Energieversorger den original Reedkontakt für meinen Gaszähler besorgt.

GG-Style commented 2 years ago

Meins läuft auch. Mit dem Reed Kontakt aus der Beschreibung. Bin mir nur noch nicht sicher ob die Werte passen (edit= mit den Werten von andre68723 sieht es sehr gut aus) Wie habt ihr die Daten in HA integriert? Ausserdem muss es ja noch in kwh umgerechnet werden um den Preis auch passend einzutragen, da man ja beim Gasnbieter in Kwh zahlt. Hat da jemand ein paar Infos?

tunnulik commented 2 years ago

Ich habe mir auch noch mal die ESPHome Dokumentation gelesen und dort ein paar interessante Stellen gefunden. Dadurch war es möglich ausschließlich durch Anpassen der Konfiguriation und ohne die Verwendung eines externen Widerstands den Gaszähler zum korrekten Zählen zu bewegen.

Meine Konfiguration des Gaszählers in ESPHome:

sensor:
  - platform: pulse_counter
    name: "Gasverbrauch"
    update_interval: 60s
    unit_of_measurement: "m³"
    accuracy_decimals: 2 
    icon: 'mdi:fire'
    pin: 
      number: GPIO5
      mode:
        input: true
        pullup: true
    count_mode: 
      rising_edge: DISABLE
      falling_edge: INCREMENT
    internal_filter: 50ms
    filters:
      - multiply: 0.01  # (1/100 pulses per kWh)

Anmerkungen zur Konfiguration:

Die Lösung findet sich in der Doku zum "Pulse Count Sensor" (siehe https://esphome.io/components/sensor/pulse_counter.html)

internal_filter

Mit dem Parameter internal_filter ist es möglich den Filter für die Länge das Signals zu beeinflussen. Standardwert sind hier 13 Mikrosekunden. Mit einem Wert von 50 ms fahre ich aktuell sehr gut.

 internal_filter: 50ms

count_mode

Um den internal_filter verwenden zu können, muss der count_mode definiert werden. In der Doku wird empfohlen falling_edge zu verwenden. Mit der folgenden Einstellung zählt der Sensor den Impuls nur bei Signalende, der wg. der Einstellung bei internal_filter mindestes 50ms dauern muss.

    count_mode: 
      rising_edge: DISABLE
      falling_edge: INCREMENT

filters -> multiply

Die Verwendung einer anonyme Funktion (lambda) ist für diesen Zweck möglich, aber nicht nötig. Es reicht völlig die Anzahl der gezählten Impulse/Umdrehungen per Multiplikation mit 0.01 auf die gewünschte Nachkommastelle zu verschieben (1 Umdrehung entspricht 0.01 kWh), dafür gibt es den multiply-Filter:

    filters:
      - multiply: 0.01 

mode

Die Schreibweise mode: INPUT_PULLUP ist eine alternative Kurzform für

      mode:
        input: true
        pullup: true

(siehe https://esphome.io/guides/configuration-types.html?highlight=input_pullup)

tunnulik commented 2 years ago

Meins läuft auch. Mit dem Reed Kontakt aus der Beschreibung. Bin mir nur noch nicht sicher ob die Werte passen (edit= mit den Werten von andre68723 sieht es sehr gut aus) Wie habt ihr die Daten in HA integriert? Ausserdem muss es ja noch in kwh umgerechnet werden um den Preis auch passend einzutragen, da man ja beim Gasnbieter in Kwh zahlt. Hat da jemand ein paar Infos?

@GG-Style Ich bin wie folgt vorgegangen, vielleicht hilft dir das ja auch.

1. Umrechnungsfaktor bestimmen

Der Umrechnungsfaktor setzt sich aus Brennwert und Zustandszahl zusammen: Der Brennwert gibt an wieviel Energie das Gas abgibt und die Zustandszahl berücksichtigt Temperaturunterschiede zwischen Norm- und Betriebszustand.

Die Werte für Brennwert und Zustandzahl habe ich in der Abrechnung meines Gasversorgers gefunden.

Brennwert: 11,292
Zustandszahl: 0,9674

# Brennwert * Zustandzahl = Umrechnungsfaktor
11,292 * 0,9674 = 10,9238808

2. m³ in kWh umrechnen

# m³ * Umrechnungsfaktor = kWh
5 * 10,9238808 = 54,619404

3. Preis in EUR/m³ berechnen

1 kWh: 12,30 Cent # (Stand: 23.01.2022)

# m³ * Umrechnungsfaktor * EUR/kWh
1 * 10,9238808 kWh * 0,123 EUR = 1,3436373384 EUR/m³

Preis pro m³: 1,3436373384 EUR

Integration in HA

Für die Messung unter Energie habe ich in der configuration.yaml den folgenden Eintrag hinzugefügt:

homeassistant:
  customize:
    sensor.gasverbrauch:
      device_class: gas
      state_class: total_increasing

Um mir separat verschiedene Werte anzeigen zu lassen, ist in der configuration.yaml noch der folgende Eintrag hinzugekommen:

# The utility meter integration provides functionality to track consumptions
# of various utilities (e.g., energy, gas, water, heating)
utility_meter:
  gasverbrauch_daily:
    source: sensor.gasverbrauch
    cycle: daily
  gasverbrauch_weekly:
    source: sensor.gasverbrauch
    cycle: weekly
  gasverbrauch_monthly:
    source: sensor.gasverbrauch
    cycle: monthly
  gasverbrauch_yearly:
    source: sensor.gasverbrauch
    cycle: yearly
ThreeSixty123 commented 2 years ago

Hallo zusammen,

mein D1 Mini NodeMcu mit ESP8266-12F zählt immer 12 Pules/min ...

[13:53:20][D][pulse_counter:162]: 'Gasverbrauch': Retrieved counter: 0.00 pulses/min [13:53:20][D][sensor:124]: 'Gasverbrauch': Sending state 0.90012 m³ with 2 decimals of accuracy

egal welche Möglichkeit ich neme .... aktuell die von @ha-es13 ....

sensor:

  • platform: pulse_counter name: "Gasverbrauch" update_interval: 60s unit_of_measurement: "m³" accuracy_decimals: 2 icon: 'mdi:fire' pin: number: GPIO5 mode: input: true pullup: true count_mode: rising_edge: DISABLE falling_edge: INCREMENT internal_filter: 50ms filters:
    • multiply: 0.01 # (1/100 pulses per kWh)

auch wenn ich Pin 1-4 testweise auf Ground kurzschließe bekomme ich immer 12 Pulse/min oder halt eine Abwandlung dessen (1,2 - 12,0 - 0,12 - 0,012 )

Einmal Magnetkontakt berühren ergibt halt die Zahl auf der Basis von 12.... Zweimal Magnetkontakt berühren ergibt halt die Zahl 24 Dreimal Magnetkontakt berühren ergibt halt die Zahl 36

So langsam habe ich keinen Rat mehr . Könnt ihr mir da helfen?