Im Artikel Gasverbrauch mit ESP8266 messen habe ich gezeigt, wie man den Gasverbrauch an einem Balgengaszähler mittels ESP8266 (NodeMCU) und Reed-Kontakt einfach ermitteln kann. In der Konfiguration der Software für den Mikrocontroller habe ich vorgesehen, die Daten an eine eigene API übergeben zu können. Die „Daten übergeben“ ist hier etwas übertrieben, da eigentlich nichts übergeben wird. Die eigene Schnittstelle wird bei jedem erfassten Impuls aufgerufen, ohne das irgendwelche Werte mitgegeben werden (anders bei der Zisterne). Es werden also hier nur die Impulse gezählt.
Das Zählen der Impulse habe ich bei mir mit einer kleinen PHP-Seite umgesetzt, die bei jedem Aufruf einen neuen Eintrag in eine Datenbank schreibt. Der Mikrocontroller ruft bei mir dazu die Seite „GasMeterImpuls.php“ auf, die auf einem Webserver liegt. Das PHP-Script macht dabei nicht anderes, als bei jedem Aufruf eine neue Zeile mit Zeitstempel und einer „1“ für den Impuls in eine Tabelle einer MariaDB zu speichern.
<?php //******************************************** //Impuls vom Gaszaehler in Datenbank schreiben //******************************************** $servername = ""; $username = ""; $password = ""; $dbname = ""; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql="INSERT INTO gaszaehler (timestamp,zaehlerstand) VALUES (CURRENT_TIMESTAMP,1)"; if ($conn->query($sql) === TRUE) { //echo "Neuer Eintrag erzeugt"; } else { echo "Fehler: " . $sql . "<br>" . $conn->error; } $conn->close(); ?>
Die Tabelle in der MariaDB ist sehr einfach und besteht nur aus zwei Spalten. Einmal eine Spalte mit einem Zeitstempel und eine weitere Spalte für den Impuls. Der Spaltenname „zaehlerstand“ ist evtl. etwas irreführend. Hier werden nur die einzelnen Impulse und kein Gesamtzählerstand gespeichert!
Hier das Create-Table für die Tabelle:
CREATE TABLE `gaszaehler` ( `timestamp` datetime NOT NULL, `zaehlerstand` int(11) NOT NULL ) ENGINE=InnoDB
Heute würde ich anstelle der MariaDB eher eine auf Zeitreihen spezialisierte InfluxDB nehmen. InfluxDB arbeitet auch besser mit Grafana zusammen. Die Nutzung der MariaDB ist bei mir aber „historisch“ bedingt ;-).
Die Daten aus der MariaDB stelle ich dann mit Grafana graphisch dar. Diagramm-Typ ist hier ein „Bar Chart“.
Im Grafana verwende ich dazu für die Bar-Charts die drei folgenden SQL-Statements, die über Summen-Funktionen aus den einzelnen Impulsen die entsprechenden Tages-, Monats- und Jahreswerte berechnen:
SELECT timestamp as "time", sum(zaehlerstand)/100 as 'jährlicher Gasverbrauch' FROM gaszaehler GROUP BY year(timestamp) ORDER BY year(timestamp) ASC;
SELECT timestamp as "time", sum(zaehlerstand)/100 as 'monatlicher Gasverbrauch' FROM gaszaehler WHERE year(timestamp) >= YEAR(CURRENT_DATE - INTERVAL 7 MONTH) GROUP BY month(timestamp), year(timestamp) ORDER BY month(timestamp)
SELECT timestamp as "time", sum(zaehlerstand)/100 as 'täglicher Gasverbrauch' FROM gaszaehler WHERE timestamp >= DATE_SUB(NOW(),INTERVAL 7 DAY) GROUP BY day(timestamp),month(timestamp), year(timestamp) ORDER BY year(timestamp),month(timestamp),day(timestamp) asc
Die Beschriftung der X-Achse erfolgt über einen „Override“ im Grafana, da die Beschriftung der X-Achse sonst eher unschön wird. Hier im Bild ist ein solcher Override z.B: für den täglichen Verbrauch dargestellt.
Anzeigen lasse ich mir die Diagramme von Grafana dann in der TabletUI von FHEM mittels iframe. Ja, ich nutze immer noch FHEM obwohl das sooo Old School ist und ich im Home Assistant doch alles per klicki klacki machen kann. Will ich aber nicht…
Mit TabletUI von FHEM schaut dann die Oberfläche mit den eingebundenen Diagrammen aus Grafana auch ganz nett aus.
Viel Spaß mit den Auswertungen.
Gruß Chris