Den Gasverbrauch zu reduzieren wäre nun auch aus aktuellen politischen Gründen sinnvoll. Allerdings müsste man dafür den Verbrauch verstehen und nicht nur einmal im Jahr ablesen…

Nachdem es mit etwas Computerkenntnissen möglich ist, einen Stromzähler mit einem Raspberry PI auszulesen, müsste die Methode auch beim Gaszähler funktionieren. Die “Gasuhr” funktioniert dabei so, dass zwei Balgen wechselseitig gefüllt werden und die Füllung einer Kammer über eine Kurbelmechanik ein Zählrad antreibt.
Auf dem vorletzten Zählrad des BK-G4 Zählers sitzt ein Magnet. Damit können im Prinzip über ein Reedschalter die Umdrehungen ausgelesen werden. Nach diversen Foreneinträgen funktioniert das allerdings nicht besonders zuverlässig. Magnetfeldchips sind universeller, da sie in allen Raumrichtungen das Feld messen. Ich habe daher einen zweiten Pi Zero WH besorgt (15€) an den ich über den I2C Bus (QWiic pHat 6€) ein Magnetometer MLX90393 (15€) angeschlossen habe . Die Idee stammt von kompf.de wobei ich allerdings Hard- und Software modifizieren musste, da es die dort benutzte Hardware nicht mehr gibt und ich auch die Round Robin Datenbank Lösung zu kompliziert fand.

Die Idee ist jedenfalls gleich, jede Sekunde das Magnetfeld zu bestimmen. Das IC2 Protokoll wird softwaremässig von Python unterstützt, während es mit PHP nur ansatzmässig funktioniert..
import time import math import csv from datetime import date import smbus bus = smbus.SMBus(1) out_file = open('/home/pi/www/mag.log', 'a+') tsv_writer = csv.writer(out_file, delimiter='\t') while True: config = [0x00, 0x5C, 0x00] bus.write_i2c_block_data(0x0C, 0x60, config) data = bus.read_byte(0x0C) config = [0x02, 0xB4, 0x08] bus.write_i2c_block_data(0x0C, 0x60, config) data = bus.read_byte(0x0C) bus.write_byte(0x0C, 0x3E) data = bus.read_byte(0x0C) time.sleep(1) data = bus.read_i2c_block_data(0x0C, 0x4E, 7) try: xMag = data[1] * 256 + data[2] if xMag>32767: xMag -= 65536 yMag = data[3] * 256 + data[4] if yMag>32767: yMag -= 65536 zMag = data[5] * 256 + data[6] if zMag>32767: zMag -= 65536 F = round(math.sqrt( xMag**2 + yMag**2 + zMag**2 ),1) dt = time.strftime('%Y-%m-%d %H:%M:%S') tsv_writer.writerow([dt,xMag,yMag,zMag,F]) except Exception as e: print(e) out_file.close()


Bei jedem Aufruf des eigentlichen Verbrauchs werden die sinusartigen Änderungen der Feldstärke nun als Impulse gezählt, in eine neue Datei geschrieben und die bisherigen Messdaten des Magnetfelds überschrieben.
$file = file("mag.log"); $i=0; $last=0; $upstart=0; $out=""; foreach($file as $line){ $l = preg_split("/\t+/", substr($line,0,-1)); $l[4] = number_format( floatval($l[4]), 3,".","" ); if ($l[4]>$last+100 & $upstart==0) { $i++; $upstart=$l[4]; $out .= $l[0].PHP_EOL; } if ($l[4]<$upstart) { $upstart=0; } $last=$l[4]; } file_put_contents("gas.log",$out,FILE_APPEND); unlink("mag.log");

Funktioniert perfekt, nur ein Problem hat sich dabei ziemlich schnell herausgestellt: Ich bekomme mit der Messung immer nur relative Werte, nicht absolute wie an am Wechselrichter oder am Stromzähler. Ein Stromausfall heisst dabei Datenverlust wobei auch immer der Ausgangswert korrigiert werden muss.
Was sagen uns aber nun die Daten? Den Gasverbrauch durch abgesenkte Raumtemperatur auf 18 Grad zu optimieren, ist nicht allzu schwer. Verblüffend war für mich der hohe Gasverbrauch um 150 l Wasser ständig heiss zu halten bzw regelmässig furch das Haus zu pumpen was ca 1/3 meines Verbrauchs ausmacht, Die Legionellen Story müsste man mal genauer ansehen ob sie wirklich auch für Ein- oder Zweifamilienhäuser so gültig ist…
Es sieht danach aus, dass der Boiler besser mit einer elektrischen Zusatzheizstab betrieben wird, der bei Stromüberschuss anschaltet, der Warmwasserkessel ist ansonsten gut gedämmt. Vielleicht ist auch ein Zirkulationsregler sinnvoll, der nach dem Speicher in die Warmwasserleitung eingebaut wird. Er reagiert auf das Öffnen eines Warmwasserhahnes, setzt kurzzeitig die Zirkulationspumpe in Betrieb, die nach 2 Minuten warmes Wasser liefert.