NEWS
Ferraris Zähler mit TCRT5000 und esp8266
-
@Eisbaeeer
Das wäre meine nächste Frage gewesen...
Z.Zt zähle ich die Gasimpulse mit einem Tasmota geflashten D1 mini. Damit alles im Haus an einer Stelle ankommt bin ich gerade am umverkabeln... Ziel wäre Strom, Gas und 2 Wasserzähler (fehlen auch noch) mit deiner Lösung zu erfassen.
Wenn mein TSCT5000 (endlich) kommt, werde ich das mit testen... -
@FredF Prima. Ich habe selbst kein Gas und auch noch keinen Intelligenten Zähler, mit dem ich das testen könnte. Mein Wasserzähler hat auch noch keinen Impulsausgang. Falls das funktioniert, könnte man die Firmware noch soweit anpassen, dass man auswählen kann, was man am Eingang messen will (Gas, Strom, Wasser, etc) und dementsprechend auch andere MQTT Daten senden.
Bisher laufen meine zwei Zähler ohne Ausfälle. Die Zählerstände an den Rollenzählwerken stimmen auch mit dem im ESP überein. Scheint also ganz gut zu laufen.
Grüße Eisbaeeer -
Kurzer Zwischenbericht, es läuft.
-
@Eisbaeeer super. Meine sensoren sind da, hatte aber noch keine Zeit damit was zu machen.
Musstest du deine Sensoren modifizieren? -
@Jey-Cee nein, die waren ohne Modifizierung super zum einstellen. Ich musste aber die IR Dioden von einem Sensor nachlöten. Die waren so krumm bestückt, dass sie sonst wo hingeleuchtet haben, nur nicht gerade aus auf die Zählerscheibe. Aber was will man von Chinaware erwarten. Wenigstens war die Beschaltung korrekt.
Gruß Eisbaeeer -
@Eisbaeeer sagte in Ferraris Zähler mit TCRT5000 und esp8266:
Was mir noch so in den Kopf kommt. Die Firmware sollte sich auch für S0 und die Impulsausgaben von digitalen Zählern, Wasserzählern, Gaszählern, etc. nutzen lassen. Lediglich die Eingangsbeschaltung müsste man ändern. Aber ein Impuls bleibt ein Impuls. Hat das schon jemand getestet oder umgesetzt?
Das geht schon mit den üblichen Verdächtigen wie ESPEasy sehr gut. Dazu braucht es keine Eigenentwicklung.
Man muß sich dann noch lediglich um die Totalisierung kümmern, da ESPEasy zwar auch die Summe übertragen kann, die aber bei Reset wieder nullt. Hier kann ioBroker mit einem Skript aushelfen, welches den "Rückwärtssprung" des ESP Summierers erkennt und berücksichtigt. So überlebt die Gesamtsumme sowohl ein Update von ioBroker als auch einen Neustart des ESP.Die TCRT5000 Module kann man auch einfach zu einem Lesekopf für die optische Info-Schnitstelle der "modernen Meßeinrichtung", welche für Verbraucher bis 6000kWh/a den Ferraris Zähler ersetzen wird, umbauen.
-
@klassisch Ja das stimmt sicher, dass man das mit ESPEASY und Scripten in iobroker erschlagen kann. Ich denke da immer an die "User", welche nicht so viel Erfahrung mit Javascript oder Blockly haben und möchte einen leichten Einstieg in iobroker ermöglichen. Die ganzen Funktionen erschlagen den "Erstbenutzer" meist. Da ist es doch schön, wenn man eine "fertige" Lösung hat.
Meine Philosophie von Adaptern (bzw. Anwendungen, wie dieses Projekt) ist, möglichst alle Funktionen die benötigt werden, direkt zur Verfügung zu stellen. Was passiert z.B. mit dem Zählerstand, wenn ich iobroker warten muss, oder ich eine downtime des Servers habe? Dann stimmt der Zählerstand auch nicht mehr.
Glaub mir, ich habe schon Erfahrung mit iobroker und vorher ccu.io. Es ist und bleibt open-source. Da ist man nach einem Update nicht davor geschützt, dass etwas nicht läuft. Es wurde schon mega viel getan, damit nichts passiert, aber in der Vergangenheit gab es immer wieder mal Probleme. Deshalb habe ich meine Wärmepumpensteuerung, ehemals Raspi, auf ein MEGA2560 umgestellt und die Firmware selbst geschrieben. Ein Microcontroller ist für Steuerungen gebaut und iobroker ist eben kein Echtzeitbetriebssystem.
Kurzum, ich finde schon, dass man es den Usern einfacher machen kann und genau deshalb hab ich dieses Projekt gestartet. Ich kann mir gut vorstellen, dass dies die Basis für ein "all-in-one" Zählersystem werden kann. Und Dein Hinweis, dass man den TCRT5000 auch für die Datenkommunikation per IR-Auge verwenden kann, bringt noch eine neue Idee.
Warum nicht das Projekt auch für smarte Stromzähler verwenden und die Werte 1.8.0 - 1.8.2 und 2.8.0 - 2.8.2 mit auslesen?
Also meine Idee wäre ein universelles Image für den ESP mit folgenden Möglichkeiten:- Strom (Ferraris, smart mit IR-Auge, S0)
- Gas (Reed-Kontakt, S0) (gibt es den auch schon smart?)
- Wasser per Impuls (S0)
- Modbus
Somit hätte man ein günstiges System, mit dem man alle Energiearten erfassen bzw. auslesen kann.
Leider (oder zum Glück ) habe ich bisher nur einen Ferraris, Gas werde ich nie brauchen, da ich eine Wärmepumpe habe. Solar habe ich auch nicht, also kommt eine Rückspeisung erstmal auch nicht vor. Das ganze soll auch nur ein Denkanstoß sein, falls jemand diese ganzen Medien hat und braucht und eventuell auch Arduino IDE oder C beherrscht, kann er hier gerne weiter machen oder mich ansprechen. Mich freut es auf jeden Fall immer wieder (siehe auch Onkyo Adapter), wenn andere auch davon einen Nutzen haben.
Danke auch an Dich für deine Unterstützung von iobroker. Du hilfst ja auch an jeder Ecke!
Gruß Eisbaeeer -
@Eisbaeeer sagte in Ferraris Zähler mit TCRT5000 und esp8266:
@klassisch Ja das stimmt sicher, dass man das mit ESPEASY und Scripten in iobroker erschlagen kann. Ich denke da immer an die "User", welche nicht so viel Erfahrung mit Javascript oder Blockly haben und möchte einen leichten Einstieg in iobroker ermöglichen. Die ganzen Funktionen erschlagen den "Erstbenutzer" meist. Da ist es doch schön, wenn man eine "fertige" Lösung hat.
Genau deswegen wo immer möglich "Fertigsysteme" einsetzen, die von einer möglichst großen Community gepflegt werden. Das ist über längere Zeit stabil. Ich habe auch einiges mit dem ESP8266 gemacht und bei mir funktioniert das auch alles sehr stabil. Aber zum Weitergeben reicht die Codequalität leider nicht. Nicht richtig sauber und zeitgemäß programmiert, alles zusammengestückelt. Damit kann keiner was richtig anfangen.
So eine Standardsache wie Impulse zählen kann ESPEasy gut und dank der guten Doku ist das schnell eingerichtet. Und wenn wieder eine neue Sicherheitslücke im WLAN Bereich des Espressiv-Codes endeckt wird, dann kümmert sich jemand von der Commuinity drum, der was davon versteht. Ähnliches gilt für Tasmota, ESPHome.Meine Philosophie von Adaptern (bzw. Anwendungen, wie dieses Projekt) ist, möglichst alle Funktionen die benötigt werden, direkt zur Verfügung zu stellen. Was passiert z.B. mit dem Zählerstand, wenn ich iobroker warten muss, oder ich eine downtime des Servers habe? Dann stimmt der Zählerstand auch nicht mehr.
Genau dieses Problem habe ich bei meinem Konzept gelöst. Normalerweise nehme ich die Gesamtsumme der Ticks, welche der ESP8266 zählt und berechne daraus den Zählerwert. Das mache ich mit einem JavaScript in ioBroker. Dazu brauche ich die Steigung (Ticks per kWh) und einen Offset, z.B. den Zählerwert bei Inbetriebnahme des Konglomerats.
Wenn ioBroker gewartet wird, zählt der ESP8266 weiter. Wenn ioBroker wieder an Bord ist, bekommt er die Summe vom ESP, setzt sie in die Formel ein und die kWh Anzeige stimmt perfekt. Das Einzige was fehlt ist der zeitliche Verlauf in der History während der Downtime des ioBroker.
Andererseits kann auch mal der ESP einen Reset bekommen. ESPEasy ist sehr stabil, also abgestürzt ist da bei mir noch nichts. Aber eine Stromabschaltung an dieser Meßstelle hatte ich schon. Während dieser Abschaltung gab es natürlich keinen Verbrauch an der Meßstelle. Und der ESP hängt bewußt am selben Stromkreis und hatte beim Wiederkehren des Stroms einen Neustart. Also startet der Summenzähler wieder bei Null. Bei der nächsten Übertragung bemerkt das der ioBroker und justiert den Offsetwert neu. Und kein Tick wird vergessen.
Also robust gebaut.
JavaScript ist nicht meine Lieblingssprache, aber die Community ist groß, es gibt Literatur und an vielen Stellen Hilfe.Glaub mir, ich habe schon Erfahrung mit iobroker und vorher ccu.io.
Ja, ich komme auch von ccu.io her.
Es ist und bleibt open-source. Da ist man nach einem Update nicht davor geschützt, dass etwas nicht läuft. Es wurde schon mega viel getan, damit nichts passiert, aber in der Vergangenheit gab es immer wieder mal Probleme.
Ja, das wird sich nicht vermeiden lassen. Auch bei kommerziellen Produkten.
Es sei denn man macht keine Updates mehr. Aber darunter leidet die Security und irgendwann sind die Randbedingungen komplett weg.Deshalb habe ich meine Wärmepumpensteuerung, ehemals Raspi, auf ein MEGA2560 umgestellt und die Firmware selbst geschrieben. Ein Microcontroller ist für Steuerungen gebaut und iobroker ist eben kein Echtzeitbetriebssystem.
Genau! Weder echtzeittauglich noch geeignet für sicherheitsrelevante Dinge. Deshalb macht ioBroker für mich die Datenaufzeichnung und Komfortdinge. Und dazu zähle ich auch Aufzeichnen der Stromzähler etc.
Wasser zähle ich ja auch mit ESP8266. Hochaufeglöst, sehr stabil, uptime 756 Tage seit dem letzten Stromausfall. 2 Stück ESP8266. Einer der nur zählt und ein zweiter der die Daten aufarbeitet und überträgt. Aber eben ein zusammengestückelter, Code, abgeleitet aus einem Multisensorprojekt. Nichts zum Weitergeben, damit kann keiner wirklich was anfangen. Und ich kann das auch nicht richtig supporten. War interessant für mich zu programmieren. Habe viel gelernt, aber andere wie z.B. die ESPEasy Community machen einfach den besseren Code und warten den auch besser. Face Reality.
-
@klassisch sagte in Ferraris Zähler mit TCRT5000 und esp8266:
Genau deswegen wo immer möglich "Fertigsysteme" einsetzen, die von einer möglichst großen Community gepflegt werden. Das ist über längere Zeit stabil.
Ja aber nur, wenn sie auch für den normalen Benutzer tauglich sind. Und die von Dir beschriebene Lösung ist es nicht. Genau das wird iobroker oft vorgeworfen. Zu kompliziert für Einsteiger.
Zu den Sicherheitslücken möchte ich noch bemerken, dass easyesp die selben libraries verwendet. Also das ist kein Argument. Source easyesp: https://github.com/letscontrolit/ESPEasy/blob/mega/src/ESPEasyWifi.hEs muss eben jeder für sich entscheiden, welchen Weg er geht.
Grüße Eisbaeeer -
@Eisbaeeer Gibt es eine einfachere oder bessere Lösung für das Totalisierungsproblem? Also die Erhaltung der Gesamtsumme auch über Restarts hinweg?
Man könnte das Flash des ESP nutzen, aber dann muß man sich auch ums wear levelling kümmern.
Bei meinem selbstgebauten Wasserzähler habe ich ein I2C EEPROM genutzt. Aber das ist für den Anfänger wahrscheinlich keine Option, obwohl es da mittlerweile fertige Breakout-Boards gibt.Edit: Vor dem Einsatz des EEPROMs hatte ich bei Start des Wemos den letzten übertragenen Zählestand von der Zentrale geholt. Damals noch CCU, was schwieriger ist. Aber mit smpleAPI Adapter könnte man das mit ioBroker machen. Vielleicht die Benutzerfreundlichste Lösung. Da müßte der User nur den simpleAPI Adapter installieren, einen Datenpunkt anlegen und dem ESP sagen, wie der Datenpunkt heißt. ESPEasy etc kann das nicht. Aber wenn Du selbst programmierst, könntest Du das so tun.
-
@klassisch sagte in Ferraris Zähler mit TCRT5000 und esp8266:
Gibt es eine einfachere oder bessere Lösung für das Totalisierungsproblem? Also die Erhaltung der Gesamtsumme auch über Restarts hinweg?
Man könnte das Flash des ESP nutzen, aber dann muß man sich auch ums wear levelling kümmern.Ja die gibt es. Bei der Firmware werden alle Werte und Einstellungen im json Format auf den ESP Flash gespeichert und bei einem Neustart oder Stromausfall daraus geladen. Der Zählerstand wird bei jeder KWh erneut gespeichert. Neulich war eh schon der Wunsch, die Daten herunterladen zu können. Uch werde das noch einbauen, dass man die Daten herunterladen und falls man einen ESP Wechsel macht die Einstellungen auch wieder hochladen kann. Der writecycle des Flash Speichers sollte mich überleben. Zumindest die Lebenszeit des Zählers. Und im schlimmsten Fall habe ich die Werte noch zusätzlich im iobroker und auf dem Zählwerk.
Lies mal die README.md auf github, dort stehen alle derzeitigen Features drin.
Grüße Eisbaeeer -
@Eisbaeeer sagte in Ferraris Zähler mit TCRT5000 und esp8266:
@klassisch sagte in Ferraris Zähler mit TCRT5000 und esp8266:
Ja die gibt es. Bei der Firmware werden alle Werte und Einstellungen im json Format auf den ESP Flash gespeichert und bei einem Neustart oder Stromausfall daraus geladen.Also, so in etwa, wie ich das bei meinem Wasserzähler mache. Allerdings speichere ich in ein externes EEPROM, weil ich dem eine höhere Durability zugetraut habe. Mittlerweile gibt es aber diesen netten Artikel , welcher die durability des ESP Referenzdesigns bei min. 100.000 sieht.
Der Zählerstand wird bei jeder KWh erneut gespeichert.
Wenn Du aber nur nach 1kWh abspeicherst, kostet Dich ein Restart Genauigkeit. Über die Praxisrelevanz kann man natürlich diskutieren, denn das kommt selten vor.
Bei 4000kWh sollte das Ding also min. 25 Jahre halten.
Ich speichere bei meinem Wasserzähler etwas häufiger ab. Er sagt mir gerade:Abspeichern Zaehler auf ext EEPROM bei Durchfluss >0 jedoch nicht haufiger als 180 sec es sei denn, die Wassermenge wird groesser als 50 Liter (= maximale Abweichung) Anzahl Schreibzyklen extEEPORM seit Prozessorstart: 37631 Schreibzyklen Anzahl Schreibzyklen extEEPORM 182 Zyklen/Tag => 15 Jahre Lebenserwartung
Das externe EEPROM ist mit typ. 1Mio angegeben bei 25°C.
Verlustloses Abspeichern bei jedem Tick (90ticks/Liter) würde halt ein echtes wear levelling voraussetzen, was mir die Sache nicht wert war.
Wenn Du die Daten zum ioBroker überträgst und dort speicherst, kannst Du sie nach dem Neustart des ESP dort wieder holen und verlierst nichts oder zumindest fast nichts. Braucht halt auch irgendwas auf dem ioBroker und macht es dann halt wieder etwas komplizierter.
Also entweder einfach für den Anwender und das geringe Risiko der Datenabweichung in Kauf nehmen oder von Anfang an etwas mehr in ioBroker Konfiguration investieren und das Risiko ausschalten.Um Dein Gerät für möglichst viele attraktiv zu machen, könntes Du ja beides integrieren? Die Flash-Methode als Default. Und die Fortgeschrittenen können den Datenkanal für die Summe im ioBroker anlegen (falls nicht schon ohnehin erforderlich) und dann Deinen ESP umkonfigurieren, daß er beim Neustart den Wert vom ioBroker holt.
-
@Eisbaeeer
So der TRCT5000 ist heute gekommen. Ich hatte so meine Schwierigkeiten und schreibe mal gerade so runter was mir aufgefallen ist:- die ino Datei in Arduino IDE zu "bekommen" war für mich nicht einfach, da fehl(t)en mir die Grundlagen
- Den Hinweis mit Wifimanager habe ich nicht geschnallt und habe in der ino gesucht um SSID und Passwort einzugeben. Dabei wird ja wenn der ESP geflasht ist ein AP aufgemacht, um über 192.168.4.1 die Einstellungen vorzunehmen.
- Für MQTT nutze ich wg. Sonoff Adapter einen anderen Port, also erst mal diese Einstellung in der ino Datei finden und abändern. Vielleicht eine Idee den Port im Browser mit einstellen zu können?
- Sonderzeichen im Passwort mag der MQTT Adapter anscheinend nicht.
- Was für Einstellungen im MQTT Adapter sollen vorgenommen werden?
- Wenn der ESP vom Strom genommen wird, verliert er die MQTT Einstellungen...
Werte kommen aber in ioBroker nun an, muss den Sensor aber noch am Zähler montieren.
-
@FredF Hi.
Also die Wifi Zugangsdaten trägt man auf der Website ein nachdem man sich auf die 192.168.4.1 verbunden hat. Dann funktioniert auch die Speicherung. Gruß Eisbaeeer -
Hallo zusammen
Neue Version ist online. Anpassung der Entprellzeit und die Firmware kann nun über die Webseite zusätzlich hochgeladen werden. Dazu bitte ab Version 0.3 die URL eures ESP aufrufen mit /update. Mehr Infos findet ihr in der README.md
https://github.com/Eisbaeeer/Ferraris_MQTT_Energy_Counter_Meter_TCRT5000P.S.: Ich habe schon viele neue Ideen. Wenn ich die Zeit finde, werde ich das implementieren.
Grüße Eisbaeeer -
Hallo,
mit dieser Version zählt er bei hoher Last wesentlich besser, d.H. wenn Waschmaschine und Trockner gleichzeitig lief hatte ich mit der alten Version nur ca. 0,4 KW Verbrauch. Wahrscheinlich weil der Zähler ziemlich schnell dreht (375 U/KW). Beim kurzen Test mit Fön und Wasserkocher waren die Werte jetzt reeller.
-
@Ritter Ja das hatte ich auch festgestellt. Ich hatte über längere Zeit eine Abweichung zwischen Rollenzählwerk und dem Zählerstand auf dem ESP. Das ganze ist aber noch nicht optimal, da das Übermitteln der MQTT Nachricht doch eine Zeit braucht. Ich bin am überlegen, die Impulse per Interrupt abzufangen, damit kein Impuls verloren geht. Ich denke da auch schon an die Smarten Zähler. Habe beim Schwager gesehen, dass der 10Tsd Impulse pro KWh ausgibt. Das schafft das derzeitige Programm nicht. Da muss ich den Programmablauf noch ändern, damit nicht nach jedem Impuls eine MQTT Nachricht gesendet wird bzw. dass man auswählen kann, wann eine MQTT Nachricht versendet wird. Denn bei meinen 75 U/KWh macht das durchaus Sinn.
Gruß Eisbaeeer -
@FredF Das mit dem einstellbaren MQTT Port nehme ich mit in die ToDo auf. Das ist ein guter Hinweis. Ab der Version 0.3 kannst du die Firmware per Browser hochladen. Damit entfällt dann die Installation von der IDE.
Gruß Eisbaeeer -
Hallo zusammen
Ab sofort könnt ihr die Version 0.4 testen. Es gibt ein paar Änderungen. Hier mal der Changelog:## Changelog ### Version 0.4 (Eisbaeeer 20200905) - Bugfix Zähler 3 und 4 (Zählerstand) - Neu: MQTT Server Port konfigurierbar - Neu: MQTT publish Zeit einstellbar (1-9999 Sekunden) - Blinken der internen LED aus kompatibilitätsgründen von anderen Boards entfernt (manche Boards nutzen D4 für die interne LED) (ACHTUNG: mit dieser Version gehen die Zählerdaten verloren! bitte über Browser neu eintragen!) - Neu: Port D4 auf D5 umgezogen! (D4 ist bei manchen Boards die interne LED - Neu: Alle Zählerdaten werden im EEPROM abgespeichert.
Die größte Änderung ist das Speichern der Daten. Die werden nun im EEProm gespeichert. Der Flash mit derzeit 100.000 Zyklen steht dem EEProm mit 1Mio. Zyklen doch sehr nach. Deshalb werden die Zählerdaten jetzt im EEProm abgespreichert. Das bedeutet, dass ihr nach dem Update die Zählerstände neu eingeben müsst (auf der Weboberfläche). Die bisherigen Wifi Daten bleiben erhalten. Somit könnt ihr auch ohne Probleme ein binary update machen (also ab Version 0.3 per Browser das bin File einspielen).
Ihr könnt das bin-File unter "http://<EURE-IP>/update" einspielen. Ihr müsst folgende Werte neu eingeben:-
MQTT Server *
-
MQTT Port * (default 1833)
-
MQTT Publish Time * (Zyklus, bei dem der ESP die Daten an den MQTT sendet)
-
MQTT User (Optional)
-
MQTT Password (Optional)
-
Meßplatz *
-
Zählerstände und die Umdrehungen neu eingeben und abspeichern.
(Alle mit * gekennzeichneten Werte sind Pflichtwerte !)
Ihr findet die neue Version unter: https://github.com/Eisbaeeer/Ferraris_MQTT_Energy_Counter_Meter_TCRT5000
Grüße Eisbaeeer
-
-
hab das ganze seit heute nachmittag auch im Betrieb.
Erstmal klasse deine Arbeit, Respekt!Momentan kommen mir die Werte sehr spanisch vor (momentan 0,01kw verbrauch)....aber ich werde das erstmal nen Tag beobachten und mich hier dann nochmal melden.