Mein alter Datenlogger auf Basis eines Rasperry PI's und FHEM hat sich mit einem SD-Karten Crash verabschiedet. Natürlich gibt es von der aktuellen SD-Karte kein Backup und auch keine sonstigen Sicherungen. Damit waren alle Daten, Scripte und Einstellungen die ich mal vor Jahren gemacht habe verloren. Den Raspi noch einmal aufzusetzen hatte ich mit Blick auf einen ESP8266 nicht vor. Ursprünglich wollte ich den Datenlogger auf Basis des ESAEasy realisieren, habe aber dann schnell gemerkt, das dieses Thema zu Komplex ist um es auf einer ESPEasy Installation abzubilden. Herausgekommen ist eine komplett neue Software für den ESP8266 die ausschließlich meine kleine 480Wp Solaranlage loggt, die Daten für sonnenertrag.eu bereitstellt und diese auch an FHEM sendet. Die Software bietet auch eine responsive Weboberfläche für Informationen und Einstellungen sowie das Einspielen neuer Firmware via OTA Update.

Schaltungsaufbau:

Die Schaltung besteht, wie so oft aus einem Wemos D1 und ein paar Bauteilen aus der Grabbelkiste. Allerdings habe ich hier, mit Hinsicht auf einen bessere WLAN Empfindlichkeit, einen Wemos D1 pro verwendet. Dieser Besitzt auch einen externen Antennenanschluss. Damit sollte sich die WLAN Verbindungsqualität gegenüber der PCB Antenne deutlich verbessern lassen. Dabei ist zu beachten, dass der 0 Ohm SMD-Widerstand in der Nähe der Antenne bzw des Antennenanschlusses auf dem Wemos umgelötet werden muss.

Die Anschaltung eines S0 von einen Elektronischen Zähler an den Wemos ist sehr einfach. Die S0 Schnittstelle ist ein open Kollektor mit nachgeschaltetem Optokoppler. Einen weiteren Optokoppler auf der Datenlogger-Seite vorzusehen ist demnach nicht notwendig. Die Spannung am S0 sollte je nach der Definition zwischen 5 und 15/27V liegen. Der maximale Strom wird mit 15 mA bzw. 27 mA angegeben.

Damit der S0 direkt an den ESP8266 angeschlossen werden kann muss noch der interne PullUp eingeschaltet werden. Dieser wird mir 30-50K angegeben und entspricht einem Strom von ca. 0,1mA. Damit liegt dieser im erlaubten Bereich für den S0  Weitere Filter sind für den Anschluss nicht vorgesehen. Man könnte das Signal via Software auf S0 Konformität prüfen. Das habe ich aber in der derzeitigen Softwareversion noch nicht vorgesehen. 

Eine zusätzliche LED (LED1) zeigt die erkannten und verarbeiteten Impulse des S0 an.

Schaltplan

Software:

Wie oben schon erwähnt, sollte die Software verschiedene Dienste übernehmen bzw. bereitstellen. 

  1. Bereitstellung der Daten für das Portal sonnenertrag.eu.

    Hier gibt es viele verschiedene Möglichkeiten die Daten bereit zu stellen und von sonnenertag.de abholen zu lassen. Ich haben mich für die Variante "JSON-Strings als Rückgabe eines Datenloggers" entschieden. Dieser benötigt nur einen einfachen JSON String zur Übergabe der Daten. Der JSON String kann z.B. so aussehen:

    {
    "un":"kWh",
    "tm":"2012-05-01T00:00:00",
    "dt":86400,
    "val":[
    " 19,800",
    " 15,600",
    ... ,
    " 32,500",
    " 39,500",
    " 20,000",
    null
    ]
    }
    Benötigt werden aber tatsächlich nur die reinen Daten in den Eckigen Klammern. Jeder von einem Komma getrennter Wert steht für den Ertrag des Tages. Es sind nicht einmal die Anführungszeichen nötig. So ein JSON-String vom aktuellen Monat ist schnell erzeugt. Natürlich hält der Datenlogger auch die Daten der restlichen Monate des aktuellen Jahres vor. Diese können bei Bedarf ebenfalls abgefragt werden. Weiterführende Informationen über den Datenimport via JSON-Sting findet man in der sonnenertrag.eu

  2. Senden der Daten an FHEM.
    Bei diesem Dienst war das Ziel die Daten über das bestehende ESPEasy Modul in FHEM zu integrieren. Dieses Modul erwartet auch hier einen JSON-String im definierten "ESPEasy" Format. Leider erwies sich diese Implementierung als etwas Schwierig, jedenfalls für einen ESP8266 Software Anfänger. Denn genau in dieser Routine hatte ich ein "memory leak" welches immer dazu führte das der ESP sich nach ungefähr einem Tag verabschiedete und neu startete. Jetzt habe ich die gesamte Routine neu geschrieben und sie funktioniert einwandfrei.
    Der durch die Funktion erzeugte JSON-String sieht in etwa so aus. Standard ESPEasy eben.
    {
    "module":"ESPEasy",
    "version":"1.02",
    "data":{
    "ESP":{
    "name":"EasyLog",
    "unit":0,
    "version":9,
    "build":147,
    "sleep":0,
    "ip":"192.168.3.202"
    },
    "SENSOR":{
    "0":{
    "deviceName":"",
    "valueName":"Einspeiseleistung",
    "type":6,
    "value":"24"
    }
    }
    }
    }

    Für jeden einzelnen Wert wird ein eigener JSON-String generiert und an den FHEM Host gesendet.

  3. Die Darstellung der Daten als Webseite
    Schlussendlich sollten die Daten auch auf einer von ESP ausgelieferten Webseite visualisiert werden. Es werden die aktuellen Daten sowie die täglichen Ertragsdaten als Grafik und des gesamten eines Jahres angezeigt. Die Grafik des Tagesertrages lasse ich durch Google Chart erzeugen. Das ist sehr simpel und belastet den ESP nicht weiter.

  4. Sonstige Funktionen des Webinterfaces
    Über das Webinterface können zudem auch die Generatorleistung zur Berechnung des Spezifischen Ertrages, Zählerkonstante zur Anzeige der korrekten erzeugten Leistung, die Vergütung sowie die TCP/IP Daten des FHEM Controllers angeben bzw. ändern. Darüber hinaus kann man die Ertragsdaten im SPIFF als cvs-Datei sichern.

  5. ToDo
    Noch offen ist die Eingabe der WLAN Verbindungsdaten, der initiale Access Point für die Startkonfiguration und die Sicherung der Konfiguration als JSON-File im SPIFFS.

Um die Daten vor Verlust durch einen Stromausfall oder einen Reboot des ESP zu schützen, speichert die Software die Ertragsdaten im Flash-Speicher des ESP. Das passiert alle fünf Minuten. Für jeden Tag des Jahres verwende ich dabei einen 2x8bit Sektor der dadurch an einem Tag maximal 288 mal beschrieben wird. Hat sich der gespeicherte Wert nicht geändert wird der Wert nicht erneut geschrieben. Das spart zusätzlich Schreibzyklen. So wiederholt sich das dann Jahr für Jahr. Durch diesen Speicherzyklus kann man im schlechtesten Fall davon ausgehen, dass der Flash-Speicher des ESP ca. 10.000/288 = 34,7 Jahre hält. Zusätzlich wird jeweils am 01.01. um 00:00 Uhr eine backup.csv erstellt die dann zur Sicherung extern gespeichert werden kann. Und darüber hinaus haben wir ja noch die Sicherung bei sonnenertrag.eu.

Aufbau:

Der gesamte Aufbau passt auf eine zurecht geschnittene Universalplatine in ein Hutschienengehäuse mit einer Breite von einer Teilungseinheit. Versorgt wird der Wemos, wie die anderen ESP's in diesem Schaltkasten, durch ein stabilisiertes 5V Hutschienen-Netzteil.

Quellcode:

http://majorshark.de/images/beitraege/easylog/esplog.zip

to be continued

Kommentare powered by CComment