Nachdem ich neulich erfolgreich den smarten Stromzähler mit meinem Home Assistant verbunden habe wollte ich mal sehen, was man mit den anderen Verbrauchszählern im Haus machen kann. Wir haben ja eine Gasheizung und in der Leitung hängt ein Zähler, der die Kubikmeter mechanisch zählt. Also nix für die moderen Elektronik? Doch.
Die Volkszähler-Webseite und auch ander Quellen sagen, dass viele der Zähler die Möglichkeit haben, einen Reed-Kontakt zu schalten. Also gucken wir uns den Zähler doch mal genauer an:
Hier sehen wir am Zählrad der letzten Stelle einen kleinen Magneten und sinnigerweise hat der Gaszähler unterhlab der Kommastellen eine Aussparung. Also hieß es für mich erst mal „Proof of Concept“. Dazu habe ich aus meinem Arduino-Sensor-Sortiment die Baugruppe mit dem Reedkontakt rausgesucht und bin mit einem Durchgangspiepser direkt auf die beiden Enden des Reed-Kontaktes gegangen und habe den dann in die Aussparung gehalten. Wenn dann die Heizung läuft und das letzte Rad sich dreht macht es bei jeder Umdrehung einmal „Piep“.
Also, damit kann man doch was machen. Also mal ein wenig auf YouTube gesucht und dann dieses Video gefunden, was ziemlich gut erklärt wie man sich einen preiswerten Stromzähler bastelt. Also dann mal flugs ein paar Redkontakte und D1-Microcontroller bestellt, damit der Bastelei nix mehr im Wege steht.
Bei Printables gibt es dann auch ein passendes Gehäuse für die Elektronik. Das ist auch relativ schnell gedruckt, ich habe die Variante mit LED genommen, aber nur eine einfarbige LED um Aufwand zu sparen.
Das ganze ist dann mit 3 Drähten auch schnell zusammengelötet, Schrumpfschläuche isolieren und die Masseverbindung liegt offen (blaue Leitung), das grüne Kabel (mit dem gelben Schrumpfschlauch, hatte keinen in grün) geht zur Anode der LED und das rote Kabel zum Reed-Kontakt, der dann auf Masse schaltet.
Das ganze ist dann auch ganz einfach in ESPHome konfiguriert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
globals: - id: total_pulses type: int restore_value: false initial_value: '0' # vom Gaszaehler der Faktor pro Impuls; bei mir 1 imp = 0,01m³ - id: imp_ratio type: float restore_value: false initial_value: '0.01' output: - platform: gpio pin: GPIO4 id: pulse_led binary_sensor: - platform: gpio id: internal_pulse_counter pin: number: GPIO5 inverted: true mode: INPUT_PULLUP name: "Live-Impuls" filters: - delayed_on: 50ms on_press: then: - lambda: id(total_pulses) += 1; - output.turn_on: pulse_led on_release: then: - output.turn_off: pulse_led sensor: - platform: template name: "GasverbrauchPuls" device_class: gas unit_of_measurement: "m³" state_class: "total_increasing" icon: "mdi:fire" accuracy_decimals: 2 lambda: |- ESP_LOGV("Gaszähler analog TAG", "Pulse bisher: %d", id(total_pulses)); return id(total_pulses) * id(imp_ratio); |
Damit ist schon sozusagen alles implementiert. Wenn der Reed-Kontakt schließt addiert der Microcontroller 1 auf die Variable „total_pulses“ und 100 solcher Pulse entsprechen einem Kubikmeter. Außerdem geht dann die LED an, geht der Kontakt wieder auf, dann geht auch die LED wieder aus.
Die Position des Reed-Kontaktes im Gehäuse muss durch Versuche ermittelt werden, evtl muss man den Kontakt auch etwas drehen damit er schaltet.
Am Gaszähler montiert sieht das dann so aus:
Damit sollte dann der Gasverbrauch ermittelbar sein.
Update 29.08.2024: Anfangs wollte der Sensor keine Impulse schicken, ich musste tatsächlich den Reed-Kontakt etwas justieren. Und das Problem ist natürlich auch, dass gerade die Heizung nur sehr sporadisch läuft, man also erst mal warten muss bis die Heizung heizt (oder man geht in den Kaminkehrermodus). Heute habe ich es dann geschafft, einen „Impuls“ zu sehen:
Innerhalb von Home-Assistant ist der Sensor ein ständig steigender Wert, der dann so aussieht:
Innerhalb des Energie-Dashboards wird der Gasverbrauch aber wie gehabt in Intervallen ermittelt, das sieht dann so aus:
Der Peakl um 6 Uhr kommt wohl daher, dass ich da gerade unter der Dusche stand und somit Warmwasser nachbereitet werden musste.