Die Make (Ausgabe 2/2026) enthielt einen Vorschlag für die Nutzung eines alten Wählscheibentelefons mit einem Raspberry Pi und einem LLM inklusive Sprachausgabe. Insgesamt ein witziges Projekt, aber irgendwie war es mir ein bisschen zu viel „KI“.
Ich hatte jedoch noch so ein altes Schätzchen: Einen Fernsprechtischapparat FeTAp 611 in Grün. Es ist das Telefon meiner Schwiegereltern (und ja, die hatten damals tatsächlich eine dreistellige Telefonnummer!). Ich selbst habe es während meines Studiums in der Studentenbude genutzt. Da ich mich nur schwer von solchen Dingen trennen kann, fristete es seitdem sein Dasein irgendwo im Keller.
Der Make-Artikel inspirierte mich schließlich dazu, dem alten Teil wieder Leben einzuhauchen. Fast alle Geräte in unserem Haus werden mittlerweile über Home Assistant gesteuert – meist vollautomatisch über Sensoren oder Zeitpläne. Gelegentlich nutze ich aber auch das Tablet im Flur, auf dem noch eine alte FTUI von FHEM läuft (weil ich das Dashboard mit HA einfach nicht so schick hinbekomme), oder eben die Home Assistant App auf dem Handy.
Die Umsetzung
Mittels eines ESP32 WROOM wurde die notwendige Technik eingepflanzt. Das Schöne dabei: Das Innenleben blieb weitestgehend original, ich habe nichts ausgebaut.
Hörergabel: Den Schalter habe ich direkt auf der Rückseite der Platine angelötet.
Wählscheibe: Die Impulse werden einfach am ursprünglichen Stecker abgegriffen (Pin 1 & 2).
Audio: Für die Tonausgabe sorgt ein MAX98357. Lediglich für den Anschluss des alten Lautsprechers habe ich zwei Kabel durchgeschnitten und per Lüsterklemme verbunden (ja, es musste am Ende schnell gehen).
Anschluss Schalter HörergabelESP32 und MAX98357Anschluss LautsprecherAnschluss der Wählscheibe
Das Telefon kann nun
Sich ins WLAN einbinden
Verbindung zu meinem MQTT-Server aufbauen
WLAN und/oder MQTT-Status per LED anzeigen
Den klassischen 425-Hz-Wählton ausgeben, sobald der Hörer abgehoben wird.
Die gewählte Nummer an den MQTT-Server übermitteln
Die Messung unseres Gasverbrauches per Reedkontakt und NodeMCU mit seinem ESP8266 funktioniert schon seit langen sehr gut und zuverlässig. Eigentlich bestand keine Notwendigkeit daran etwas zu ändern.
Kleine Probleme
Einzig meine gewohnte Freiluftverdrahtung mit einem Gummi der den Reedkontakt am Zähler festhält (der die Klebeband-Halterung ablöste) wurde regelmäßig porös und der Reedkontakt fiel runter. Meistens merkte ich das erst Tage später. Da ich mir Ende letzten Jahres einen 3D-Drucker angeschafft habe, wollte ich bei diesem Projekt mein erstes ordentliches Gehäuse für meine Sensoren erstellen wo mal nichts irgendwo einfach nur herum baumelt.
Bei Makerworld, Printables & Co gibt es sehr viele fertige Modelle für entsprechende Halterungen. Danke an die kreativen Designer! Manche sind für den NodeMCU inklusive Reedkontakt, manche für einen Wemos D1 inklusive Reedkontakt und manche nur für verschiedene Reedkontakte alleine. Ich habe ein Gehäuse für beides gesucht. Nachdem ich ein passendes Model gefunden und ausgedruckt hatte, ging es an die Montage. Die meisten dieser fertig designten Gehäuse nutzen einen axialen Reedkontakt. Diese haben meistens nur einen simplen Glaskörper. Hier war schon mein erstes Problem das diese Glasreeds echt empfindlich sind wenn man mal an den Beinchen biegt. Ich bin wahrscheinlich zu grobmotorisch aber sie sind ja billig…
Das größere Problem war aber, dass diese Reedkontakte nicht oder unzuverlässig anziehen wenn der Magnet des Zählers vorbei kommt da dieser recht schwach ist (Stichwort Anzugsempfindlichkeit). Auch hundertmaliges Ausrichten in der Öffnung des Zählers, Ausrichten des Reedkontaktes parallel zum Magneten, testen verschiedene andere Reedkontakte (aus zylinderförmig eingegossene Exemplare) etc. war nicht zielführend und raubte mir den letzten Nerv weil alles ja schon mal gut funktionierte. Nur mein alter Meder MK471 funktionierte zuverlässig.
Meine Eltern haben eine PV-Anlage ohne Batteriespeicher. Durch Selbstaufbau mit Freunden auf einem Schuppendach war das eine sehr kostengünstige Anlage, die an sonnigen Tagen tagsüber den vom Haus benötigten Strom komplett liefert. Seit Inbetriebnahme wird Wäsche nur gewaschen, wenn auch die Sonne scheint 😉 Insgesamt wird aber im Sommer meistens zu viel Strom produziert und für 8 Cent eingespeist.
Auf der Suche nach einer Möglichkeit den Eigenverbrauch zu erhöhen, fiel ein Batteriespeicher aufgrund der hohen Anschaffungskosten raus. Was tun?
Vor einigen Jahren wurde der Kachelofen mit Wassertasche vom Schornsteinfeger wegen Umweltauflagen still gelegt (sehr schade drum). Dadurch ist aber noch der Warmwasserspeicher im Heizungsraum vorhanden. Diese hatte nach der Stilllegung des Kachelofen keine weitere Wärmequelle als die Ölheizung. Solarthermie ist leider nicht vorhanden und auch für eine Neu-Installation zu aufwändig.
Wir dachten dann über einen Heizstab nach. Der Wasserspeicher hat die Möglichkeit einen Heizstab von oben einzuschrauben. Leider ist es aber sehr schwierig, Heizstäbe mit entsprechend langer heiz-freier Zone zu bekommen, da das Wasser im Wasserspeicher ja nicht randvoll gefüllt ist. Bei anderen Herstellern von Warmwasserspeichern kann man den Heizstab seitlich einschrauben. Und der Heizstab vom Hersteller des Wasserspeichers ist leider raus, da er zu lang ist und wir den Warmwasserspeicher hätten kippen müssen. Es musste also eine andere Lösung her.
Früher hatten Smartphones Akkus, die man leicht austauschen konnte und erreichten ihr Lebensdauerende, weil es keine Updates mehr gab, oder die Leistung nicht mehr ausreichte. Die Hersteller haben reagiert und bieten teilweise lange Updates an. Bei den Leistungssteigerungen passieren keine Quantensprünge mehr. Einer langen Nutzungsdauer stehen jetzt Akkus im Weg, die sind schon lange nicht mehr austauschbar und irgendwann läßt deren Leistung nach, meist schlagartig. Man kann versuchen den Akku austauschen zu lassen, wenn es denn noch Anbieter gibt. Das kommt aber meist einem wirtschaftlichen Totalschaden gleich.
Die Alterung von Lithiumionen Akkus läßt sich ganz nicht verhindern, aber merklich beeinflussen. Schnelles Laden und Tiefentladen (unter 20%) tut dem Akku weh, aber besonderen Stress bereitet ihm Vollladen auf 100%, und dann u. U. noch langes Halten dieses Ladeniveaus am angeschlossenen Ladegerät. Den Akku nur auf 80 oder 85% aufzuladen statt auf 100% verlängert die Lebensdauer nach Stephan Klapzus‘ Akkurechner von 800 auf 3500 bzw. 2800 Zyklen, immerhin über 4 bzw. 3 mal soviel. Wenn Ihr also auch mit 80 oder 85% Ladezustand über den Tag kommt, dann zeige ich Euch einen Weg wie ihr das einfach automatisieren könnt.
Wir brauchen dazu eine WLAN Steckdose mit der Firmware Tasmota und eine App (nur bei Android Geräten, bei iOS reichen Bordmittel), die der WLAN Steckdose – in der das Ladegerät steckt – bei Erreichen eines bestimmten Akkustands den Befehl zum Abschalten gibt.
Mit der Version 1006 gibt es nun ein kleines Update für den ESP 8266 Gaszähler-Sensor. Was ich bis vor ein paar Tagen noch nicht wusste ist, dass die Gaszähler den Magneten nicht alle an der gleichen Nachkommastelle befestigt haben. Unser Zähler zählt die Impulse alle 0,01m³, Es gibt aber auch Geräte, die nur alle 0,1m³ einen Impuls zählen. Am Zähler sieht man das wie folgt im roten Kringel:
In den Einstellungen des Sensors gibt es daher nun die Möglichkeit das entsprechend zu konfigurieren zu können.
Zudem hatte ich noch in geistiger Umnachtung, den Namen/IP des Rechners, den Port und den Endpunkt zum Aufruf der eigenen API hart mit einer internen URL von mir verdrahtet. Immerhin hatte ich mir einen Kommentar im Quellcode geschrieben, dass das noch geändert werden muss. Hat nix geholfen, ist aber jetzt auch korrigiert.
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.
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.
Der Sommer ist vorbei und die Tage werden kürzer und ich sitze mal wieder öfter im Büro und habe Zeit und Lust zum Programmieren. Nachdem mein Odroid die Impulse des Reed am Gaszählers von heute auf morgen aus mir bisher unerfindlichen Gründen nicht mehr ausliest (Gaszähler am Odroid), habe ich den Sensor umgebaut auf einen ESP8266 (bei mir wieder in Form eines NodeMCU oder WEMOS D1 mini). Das Grundgerüst der Programmierung hatte ich durch den Zisternensensor ja schon und was den Zisternenfüllstand messen kann, kann auch den Gaszähler auslesen. Es ist ja auch aktuell eine gute Idee zumindest zu wissen was seine Gasheizung so treibt.
Ja, es gibt bereits allerhand Lösungen mit ESP Home, ESP Easy & Co. aber das gefällt mir alles nicht so besonders und bedingt immer eine zentrale Lösung wie FHEM, HA, Grafana etc. in der die Ergebnisse anzeigt und auswertet werden. Meine Lösung stellt die Daten aber, wie auch bei der Zisternenfüllstandsmessung, ohne zentrale Komponente direkt auf einer Webseite dar und bietet eine Anbindung an einen Heimautomatiserungs-Server. Dazu aber gleich mehr.
Ich bin endlich mal dazu gekommen und habe die ganzen Sourcen für die Zisternmessung mit dem ESP8266 mit einer ordentlichen readme auf github gestellt. Die Version 1030 ist dort auch als Release bereits für den NodeMCU und Wemos D1 vorkompiliert verfügbar.
Aber auch bei den Funktionen gibt es Neuigkeiten. Die Version 1030 unterstützt jetzt einen schaltbaren Ausgang an D4 mit dem z.B. eine Pumpe über eine Relais-Platine angesteuert werden kann. Gesteuert wird das über zwei prozentuale Werte die in der Konfigurationsseite zu finden sind.
Es ist leider mal wieder lange nix passiert hier im Blog. Das letzte Jahr war nicht so prickelnd und ich hab meine Arbeit an meinen Bastelprojekten quasi eingestellt.
Offensichtlich waren aber die dunklen Wintermonate bei einigen Leuten Ansporn, um ihre Heimautomatisierung und Sensorik zu überarbeiten. Es gab viele Einträge im Blog und ich bekam viele Anfragen per Mail bzgl. des Time Of Flight-Sensor VL53L0X als möglicher Ersatz des Ultraschallsensors HC-SR04. Ich hatte ja auch bei der Version 1028 nach fleißigen Testern und Rückmeldungen gefragt. Vielen Dank euch dafür! Das hat mich auch motiviert mal wieder was an dieser Front zu tun.
Auch wenn mein Ultraschallsensor für seine 2,50€ seit 3 Jahren tadellos seine Arbeit in der Zisterne verrichtet und ich bisher keine Notwendigkeit sehe diesen zu ersetzen, habe ich mir einen weiteren Sensor zu Testzwecken beschafft und in die Software implementiert. Ergebnis ist die Version 1029 der Software.
Neben dem ToF VL53L0X kann nun auch der VL53L1X angeschlossen und genutzt werden. Zu den Unterschieden der beiden Sensoren findet man einiges im Internet. Welcher Sensor nun im jeweiligen Anwendungsfall die bessere Wahl ist, muss jeder selber herausfinden bzw. freue ich mich auch wieder auf Rückmeldungen im Blog oder per Mail bzgl. eurer Erfahrungen.
Mit Version 1028 der Software zur Messung des Zisternenfüllstandes, kommt neben dem HC-SR04 Ultraschallsensor noch ein zweiter alternativer zu nutzender Sensor dazu. Diesmal ein Time Of Flight (ToF) Laser-Entfernungsmesser vom Typ VL53L0XV2. Die erste Version der Software ist allerdings noch Beta und ich würde mich auf Rückmeldungen zu dem neuen Sensor freuen!
In der Webseite der Software kann in den Einstellungen zwischen den beiden Sensoren gewählt werden. Neu ist zudem noch der frei wählbare Name für den Sensor welcher auf der Sensor-Webseite oben links angezeigt wird. Hiermit kann man nun beim Einsatz mehrerer Sensoren in verschiedenen Zisternen unterscheiden oder auch einen Öltank-Füllstandssensor korrekt benennen.
Der ToF-Sensor besitzt eine I2C-Schnittstelle und wird an die gleichen PINs wie der Ultraschallsensor angeschlossen. Es geht aber nicht mit beiden Sensoren parallel, sondern nur der eine oder der andere!