ESP8266 Ferraris Stromzähler Auswertung
17. Juli, 2017 in: 3D Drucker, ElektronikUm einmal einen Überblick über den Energieverbrauch des Hauses zu bekommen wollte ich meinen Stromzähler digital auswerten. Leider ist dieser noch ein alter Ferraris-Zähler ohne S0-Schnittstelle und kann somit nicht einfach ausgewertet werden. Nach kurzer Recherche im Internet stellte sich heraus, dass dieses Problem schon sehr viele findige Bastler über Reflex-Lichtschranken gelöst haben. Ein gesamtes fertiges Projekt für den ESP8266 konnte ich direkt nicht finden, daher musste ich mir doch die Mühe selbst machen 🙂
Da ich derzeit zeitlich etwas eingeschränkt bin, wollte ich nicht zu viel Zeit mit Versuchen und Layouterstellung verbraten und habe stattdessen auf fertige Module gesetzt. Für die Lichtschranke kommt ein TCRT5000 Module zum Einsatz in Kombination mit einem WeMos D1 Mini. Für das Lichtschranken Module habe ich schnell ein Modell erstellt und mit dem 3D Drucker ausgedruckt, glücklicherweise passte direkt das erste Modell ziemlich gut, sodass ich kein weiteres drucken musste. Das Module wird in das Plastikteil mit einer kleinen M3er Schraube fixiert und mit Klebeband am Zähler selbst angebracht.
Das TCRT5000 Modul kann mit 3-5V versorgt werden und hat je einen digitalen und einen analogen Ausgang. Der digitale Ausgang entspricht dem Ausgang eines Komparators, der direkt mit dem Analogsignal gespeist wird. Die Vergleichsspannung ist komfortabel per Potentiometer einstellbar. Um die richtige Vergleichsspannung einzustellen, kann es hilfreich sein mit dem Oszilloskop den Signalverlauf des Analogsignals aufzuzeichnen. Nachfolgend das Ergebnis nach dem Einstellen der gewünschen Spannung am Potentiometer.
Kanal 1 (gelb) entspricht dem Analogsignal während des Umlaufs, erscheint die rote Markierung steigt die Spannung leicht an und lässt dadurch den Komparator umschalten, das Signal an Kanal 2 (blau) verändert sich. Das digitale Signal kann sehr einfach für die anschließende Auswertung in der Software genutzt werden. Da das Signal in meiner Oszi Aufzeichnung ganz leicht geprellt hat, habe ich eine einfache Entprellung in Software integriert. Die Abtastung des Signals erfolgt ohne „feste“ Zeitbasis, es hat direkt so funktioniert, daher habe ich bisher aus Bequemlichkeit darauf verzichtet die Software nochmal zu überarbeiten.
Auf dem Zähler ist angegeben, dass pro 96 Umläufe der Scheibe 1kWh verbraucht wurde. Diese Angabe wird in der Software genutzt um die Leistung im letzten Durchlauf auszurechnen. Dazu wird die Zeit in Millisekunden eines jeden Umlaufs gemessen und in eine Leistung umgerechnet, das Ergebnis wird an ein PHP Skript auf meinem Webspace übergeben, welches die Daten in die Datenbank schiebt. Anschließend wird das ganze wieder durch ein PHP Skript aus der Datenbank ausgelesen und aufbereitet in einem Diagramm dargestellt.
Im oberen Diagramm sieht man schön das Peak bei 08:45 Uhr, das ist die Kaffeepadmaschine 😎
Nachtrag 08.09.2021:
Der (Arduino)Quellcode für den ESP8266/WeMos D1 Mini:
Nachtrag 20.09.2022
Für alle die einen moderneren Zähler mit Impuls LED Ausgang besitzen, könnte evtl. auch diese Implementierung für Home Assistant interessant sein. Theoretisch könnte natürlich auch „meine“ Lösung an Home Assistant angepasst werden, jedoch habe ich aus persönlichen Gründen (erneuter Nachwuchs) leider aktuell keine Zeit dafür 🙂
Hallo, sehr interessanter Beitrag. Kann das Sensor-Modul direkt an den ESP8266 angeschlossen werden? Hast du eine fertige Bibliothek dazu verwendet oder eventuell den Quelltext freigegeben?
Das erste Skript schreibt vermutlich einfach nur einen Timestamp mit einem inkrementierten Zähler in die Datenbank? Was machst du bei 404 Fehlern z.B. wegen Reconnect, oder sind die Fehler zu vernachlässigen?
Hallo Dirk,
ja das Modul ist quasi direkt an den ESP8266 angeschlossen, es handelt sich um einen 5V TTL Pegel, der einfach mit einem Spannungsteiler aus zwei Widerständen an einem GPIO vom ESP8266 hängt.
Der ESP8266 berechnet direkt lokal aus der gemessenen Zeit pro Umlauf die aktuelle Leistung und übergibt diese an das Skript. Der Zeitstempel kommt von der Datenbank selbst dann. Die Datenbank und der Webserver laufen lokal auf meinem NAS (Synology) und sind dadurch quasi „immer“ zu erreichen. Allerdings hatte ich auch vorher als beides noch auf externem Webspace lag keinerlei Probleme bezüglich dem täglichen Reconnect. Dieser wird meistens ja Nachts vollzogen und zu dieser Uhrzeit ist die Leistungsaufnahme geringer, was längere Pausen zwischen den Pulsen zur Folge hat, was das Problem evtl. etwas weiter abschwächt.
Den Quellcode habe ich nicht veröffentlicht und auch neben den Arduino Standardbibliotheken/ESP8266 nichts verwendet. Ich könnte dir den Code bei Bedarf zur Verfügung stellen, allerdings ist dieser vermutlich nicht sehr hübsch und noch weniger mit Kommentaren dokumentiert ????
Hallo,
finde dein Projekt toll! Könntest Du mir kurz den Sourcecode zu senden `?
Hallo,
ich würde mich auch über den Code als Basis für mich freuen.
Vielen Dank 🙂
Hallo Philipp,
hab gerade deine Webseite gefunden. Habe schon länger so ähnlich wie du meinen Stromzähler in Homassistant integriert. Bin begeistert von deinem gedruckten Halter für den Sensor . Bei mir verrutscht der immer wieder mal und verhunzt so die Messungen. Das hast du mit deiner Version super umgangen .
Würdest du mit deine 3D Vorlage für den Halter zukommen lassen. Und vielleicht auch deinen Code. Würde mich sehr interessieren wie du das Programmtechnisch gelöst hast.
Vielen Dank
Hi Stefan,
leider kann ich die STL Datei für den Halter nicht mehr finden. Den Quellcode für den ESP habe ich oben im Text beigefügt.
Gruß
Philipp
Hallo.
wäre super wenn mir einer Mal die yaml Datei für aus der POWERSensor Datei schicken könnte.
Hallo.
wäre super wenn mir einer Mal die yaml Datei für ESP Home aus der POWERSensor Datei schicken könnte.
Hi Carsten, soetwas habe ich leider nicht, weil meine Auswertung nicht auf ESPHome basiert hatte.
Dieser Beitrag hier könnte dir helfen: https://be-jo.net/2022/05/home-assistant-digitalen-stromzaehler-mit-esphome-auslesen/
Viele Grüße
Philipp