Eigenbau: Datenlogger/Live-Monitoring von Photovoltaikanlagen


Ähnlicher Artikel: RS-485 Variante

Seit einiger Zeit habe ich mit dem Gedanken gespielt ein Ertragsüberwachungssystem für unsere Photovoltaikanlage zu entwickeln. Der Datenlogger soll dabei helfen, mögliche Fehler bei der Stromerzeugung offenzulegen und dabei die folgenden Anforderungen erfüllen:

  • Kontinuierliche Überwachung von 4 Kaco Wechselrichtern (WR) per RS232
  • Live Status abrufbar im Internet, inkl. Tages, Monats und Jahresertrag
  • Kosten: < 100 €

Damit man das ganze nachbasteln kann, benötigt man wenigstens Grundkenntnisse unter Linux.

Außerdem beachtet, dass ich keine Kosten für Schäden an eurer Hardware übernehme! Ein Nachbau geschieht auf eigene Gefahr!

Grundsätzliche Funktionsweise

Die Wechselrichter geben auf der RS-232 Schnittstelle alle 10 Sekunden aktuelle Statusinformationen aus. Man erhält einen String in folgendem Format:

04.02.2011 15:12:50   5 119.6  0.41    57 228.8  0.35    53  13

Darin enthalten sind neben dem aktuellen Datum und der Uhrzeit u.a. die aktuelle Betriebstemperatur und ins Netz eingespeiste Leistung des Wechselrichters. Ein Linux Router ist über ein usb/seriell Adapterkabel mit dem Wechselrichter verbunden und liest jede Informationszeile aus. Diese wird anschließend über einen simplen URL Aufruf an einen Webserver übertragen. Es werden also keine Informationen lokal gespeichert oder über den im Router eingebauten Webserver visualisiert. Das erledigt ein entfernter Webserver und unterscheidet das System von anderen Datenloggern. Der Router liest lediglich den aktuellen Status aus und leitet die Information weiter.

Der Webserver hat dann die Aufgabe die eingehenden Informationen in einer Datenbank abzulegen und auszuwerten. Die erzeugten Kilowattstunden werden über Durchschnittsbildung genähert berechnet und auch in der Datenbank abgelegt. Seine zweite Hauptaufgabe ist natürlich die Darstellung der Daten in Form von Diagrammen und Tabellen.

So… genug zum Konzept; Nun zur Umsetzung!

Die Hardware

Es existieren bereits viele unterschiedliche Datenlogger auf dem Markt und die meisten Wechselrichterhersteller haben einen eigenen, zum WR passenden Datenlogger im Angebot. Meistens bekommt man damit auch den Zugang zu einem Portal zur Fernüberwachung im Internet und hat bis auf die Installation keinen Arbeitsaufwand.

Da mir die auf dem Markt erhältlichen Datenlogger zu teuer waren (> 500 €), habe ich mir überlegt, welche Alternativen es gäbe. Folgende Geräte könnte man verwenden:

Ich habe mich für den TP-Link WR1043ND entschieden, aufgrund folgender Vorteile:

  • W-Lan integriert
  • Kein zusätzliches Speichermedium notwendig, aber möglich
  • Niedriger Stromverbrauch
  • Preis i.O. + Steuervorteil
  • Guter Router/AP wenn das ganze nicht klappen sollte.

Zusätzliche benötigt man noch folgendes:

  • USB 4 Port Hub, mit eigener Stromversorgung. Passiv konnte ich maximal 2 WR anschließen
  • 4 Seriell/USB Converter z.B. von Pollin (Prolific PL2302 Chip)
  • USB Verlängerungskabel
  • Digitale Zeitschaltuhr
  • Mehrfachsteckerleiste etc.

Wahl der Firmware

Mein WR1043ND V1.7 kam im Auslieferungszustand mit folgender Firmware Version:

Firmware Version: 3.11.5 Build 100427 Rel.61427n

Hardware Version: WR1043N v1 00000000

Grundsätzlich hat man die Wahl zwischen OpenWrt und dd-wrt. Bei mir läuft der WR1043ND zwar mit dd-wrt, den nächsten würde ich jedoch mit OpenWrt aufsetzen, da die Firmware nach Forenmeinung stabiler läuft und das Paketmanagement opkg ohne Umwege integriert ist. Wer dennoch auf dd-wrt setzen will, dem empfehle ich die Firmware Version 04-16-10-r14289. Damit läuft der Router bei mir im Client Bridge Modus stabil. Probleme hatte ich dagegen mit neueren Versionen. Der Router lief instabil und war häufig nach kurzer Zeit im Netzwerk nicht mehr erreichbar.

Die folgenden Schritte beziehen sich demnach auf dd-wrt, dürften sich aber für OpenWrt nicht wesentlich unterscheiden.

dd-wrt: dd-wrt Installationsanleitung TP-Link TL-WR1043ND

OpenWrt: TL-WR1043ND OpenWrt Knowledgebase

image image imageimage

Nach der Firmware Installation muss der Router so konfiguriert werden, dass er Internetzugriff besitzt, was mit ping und wget getestet werden kann. Man sollte beim Testen beachten, dass dd-wrt und OpenWrt auf BusyBox zurückgreifen. Viele Programme der BusyBox unterstützen nur einen Teil der sonst möglichen Parameter und die wenigsten davon geben Fehlermeldungen aus.

Einrichtung des USB auf Seriell Adapters

Als nächstes müssen die Treiber für den seriellen Schnittstellenadapter installiert werden. Hierzu aktiviert man zunächst den Jffs Bereich, da nur dort Daten persistent gespeichert werden. Anschließend kopiert man die Treiber (Download) per sftp in /jffs und installiert sie erst mal testweise mit:

insmod usbserial.ko
insmod pl2303.ko

lsmod sollte nun folgende Ausgabe liefern:

image

Anschließend die USB/Seriell Adapter anschließen und per dmesg überprüfen:

image

Danach kann man einen Adapter testweise an einen Wechselrichter anschließen und per cat /dev/usb/tts/0 überprüfen, ob die Daten vom Wechselrichter empfangen werden. Falls nicht ist evtl. noch eine Konfiguration der seriellen Schnittstelle per stty erforderlich.

image

Dies testet man am besten mit allen angeschlossenen Wechselrichtern, auch gleichzeitig und über einen längeren Zeitraum. Mit billigen USB/Seriell Adaptern von Ebay hatte ich schon das Problem, dass bei 4 angeschlossenen WR immer einer angefangen hat zu streiken und es wurden keine Messwerte mehr übertragen.

Das Loggingscript

Wenn die Tests soweit erfolgreich sind, kann man damit beginnen ein kleines Shellskript zu schreiben, welches die Messwerte ins Web überträgt oder lokal z.B. auf einem USB Stick speichert. Ich habe mich dazu entschieden, die Messwerte direkt an einen Internetserver zu senden, damit man von überall Zugriff darauf besitzt.

Bei mir sieht ein solches Skript für einen WR in etwa so aus:

#! /bin/sh
while true
  do
        echo "Warte auf Daten"
        read Line </dev/usb/tts/0
        echo Line:${Line}
        werte=`echo $Line|tr -s "\ " |tr -s "\ " ";"`
        echo formatiert:${werte}

        count=`echo -n $werte|wc -c`
        if [ "$count" -gt 40 ]
        then
                echo "Messwerte OK"
                wget -s http://solar.riedme.de/AddLog.aspx?data=${werte}\&pw=Key\&inverter=1\&type=kaco1\&system=1
                echo "Daten zum Server gesendet"
        else
                echo "Messwerte fehlerhaft"
        fi
  done

Der wget Parameter “-s” dient dazu, dass nur auf Existenz überprüft wird.

Eventuell muss man die Zeile 5 “read Line… “ auch durch ein Line=`head -n 2 </dev/usb/tts/0` ersetzen und noch etwas mit der Zeilenanzahl experimentieren. Das kommt auf die übertragenen Daten des Wechselrichters an. In Zeile 10 – 11 wird der String noch auf eine Mindestlänge von 40 Zeichen geprüft. Falls er kürzer ist, wird er verworfen.

Für jeden angeschlossenen Wechselrichter erstellt man ein solches Skript und legt es in /jffs. Zu guter Letzt benötigen wir dann noch ein Startup Skript, welches die Treiber bei jedem Systemstart installiert und alle Log Skripte startet. Unter dd-wrt kann man das Startup Skript einfach über das Webinterface verwalten (Administration –> Commands).

image

Das “&” hinter jedem Skript bewirkt, dass es im Hintergrund gestartet wird.

Die Überwachungsseite im Netz

An dieser Stelle steht es einem nun offen, eine eigene Seite zu erstellen, die die Daten empfängt, in einer Datenbank ablegt und optisch aufbereitet ausgibt. Man könnte auch das Portal Sonnenertrag.eu nutzen und die Messwerte so bereitstellen, dass diese abgegriffen werden, siehe deren Support Bereich.

Ich habe mich ohne große Überlegung, für ersteres entschieden und spaßiges Brainstorming betrieben, wie man im folgenden sieht.

image

Dank der Google Visualization API und Flot ist dann folgende Online-Monitoring Seite dabei herausgekommen:

(Update 20.02.12) http://solar.riedme.de/ mypvlog.de

Interesse?

Wer den Router/Linux Client bis zum URL Aufruf selbst einrichten kann, kann die Online-Monitoring Seite gerne mitbenutzen. Alles getrennt natürlich auf einer eigenen Unterseite und kostenlos (sagen wir mal bis 20kwp). Kontaktiert mich einfach per Mail bei Interesse, da es vorerst keine öffentliche Registrierung auf der Seite geben wird.

Ich freue mich über Kommentare, Korrekturen und Verbesserungsvorschläge und wünsche wie immer viel Spaß beim Basteln! 🙂

, , , ,

  1. #1 von Heiko am Juli 16, 2011 - 8:25 pm

    Hallo,
    ich habe den Data Logger nach der Anleitung oben gebaut und benutze auch den Webserver mit.
    SUPER!
    Ich verwende den TP Link TR-1043nd mit OpenWrt Backfire 10.03rc5-testing. Mit rc4 hatte ich Probleme mit dem WLAN.
    Als RS232-USB Adapter verwende ich den DIGITUS DA-70156 mit FTDI Chipset. Gibt es bei Reichelt. Mit den Prolific von Pollin hatte ich kein Glück.
    Das shell script habe ich etwas angepasst:
    Das command read </dev/ttyUSB0 lieferte bei mir fehlerhafte Daten. Es fehlten immer die ersten 10-15 Zeichen einer Zeile.
    Mit cat /dev/ttyUSB0 sind sie aber OK.
    Daher habe ich jetzt die Umleitung für die ganze Schleife gemacht also hinter das done gehängt. Das sieht dann so aus:
    #! /bin/sh
    while true
    do
    echo "Warte auf Daten"
    read Line
    echo Line:${Line}
    werte=`echo $Line|tr -s "\ " |tr -s "\ " ";"`
    echo formatiert:${werte}

    count=`echo -n $werte|wc -c`
    if [ "$count" -gt 40 ]
    then
    echo "Messwerte OK"
    wget -s http://solar.riedme.de/AddLog.aspx?data=${werte}\&pw=Key\&inverter=1\&type=kaco1\&system=1
    echo "Daten zum Server gesendet"
    else
    echo "Messwerte fehlerhaft"
    fi
    done </dev/usb/tts/0

    Ich habe zwei keine Idee warum, aber damit tut es.

  2. #2 von Roland Dahm am April 10, 2012 - 11:00 am

    Moin,
    möchte von meiner 2,64 kWp-Eigenbau-PV-Anlage über Eigenbaulogger (Arduino Pro Mini 328 u.“Netzwerkkarte“ ENC28J60 Ethernet Module) die Daten bequem und kostengünstig nicht vom Wechselrichter, sondern vom s0-Ausgang des digitalen Stromzählers über den Router B1000 von Vodafone, Model B390-s2 Huawei, zu „Euch“ nach oben senden.-
    Ist meine Vorstellung realisierbar?
    Sonnige Grüsse von der Küste
    Roland Dahm

  3. #3 von Patrick am April 10, 2012 - 12:31 pm

    Ja, sofern Du es hinbekommst mit dem Arduino regelmäßig eine Url aufzurufen mit einer Watt Zahl darin. Support für dein Arduino Projekt kann ich aber keinen liefern 😉

  4. #4 von Joch am Juli 2, 2012 - 4:31 pm

    Hallo Kann mir jemand Mailen wie der USB auf Seriell Adapter verkabelt wird, das heisst brücken oder Wiederstand oder sowas:

    Gruss und dank

  5. #5 von Patrick am Juli 2, 2012 - 5:11 pm

    Den USB-Adapter solltest du eigtl. direkt am Wechselrichter und dem Router anschließen können oder wie meinst du das??

  6. #6 von Lars am August 30, 2012 - 12:15 am

    Hallo,
    nettes Projekt, werde ich in Zukunft in Angriff nehmen, Router 1043ND, Kaco, etc vorhanden.
    Zur Zeit nutze ich eigentlich Solarview, da ich aber auf einen Mac umgestiegen bin und die FB rausschmeissen werde, suche ich Alternativen.
    Ich habe einen RS232->LAN Konverter. Kann man die Daten hier auch abgreifen?

    Danke im Voraus und weiterhin Viel Erfolg
    Lars

  7. #7 von Patrick am August 30, 2012 - 10:18 am

    Danke für den Kommentar, klingt nach einer guten Ausgangssituation. Läuft auf auf dem 1043 schon ein Linux und kannst du von diesem aus die Daten des RS232->Lan Wandlers / Wechselrichters auslesen?

  8. #8 von Christoph am November 6, 2012 - 12:55 am

    Interessantes Projekt, werde ich evtl. demnächst mal in Angriff nehmen (für die kalten Winterabende^^).
    Als Hosthardware sollte sich hier auch ein Raspberry Pi optimal eignen, günstig in der Anschaffung, sparsam im Stromverbrauch und ein komplettes Debianlinux als Betriebssystem.

    Ich werde das mit dem RasPi mal austesten und Feedback geben 😉

  9. #9 von Christoph am November 30, 2012 - 11:04 pm

    Also, mit nem Raspberry Pi funktioniert das alles nicht so wie geplant, insbesondere USB/Serial-Adapter mit FTDI-Chipsatz verursachen nach einigen Stunden einen Ausfall der Netzwerkkarte, nur ein Reset bringt diese wieder zum Laufen.

    Habe nun einen HP t5530 Thinclient für 20€ gebraucht bei ebay erstanden und TinyCore Linux drauf installiert.
    Einrichtung ist erst etwas tricky, aber dann läuft das System super.
    Ist noch nicht im Produktiveinsatz, sondern noch bei mir im „Lab“ um zu checken ob es über Nacht einen Ausfall gibt, aber ich bin zuversichtlich dass das funktioniert ;D

  10. #10 von Patrick am Dezember 1, 2012 - 8:32 am

    Hehe, ja die Usb-Seriell Adapter können einem schon auf den Geist gehen. Viel Erfolg mit dem Thin Client!

    Bei der RS-485 Variante ging mir vor kurzem der Adapter kaputt. Neuen bestellt, angeschlossen, Script lief nicht mehr reibungslos.
    Dann so umgeschrieben, dass erst in eine Datei geschrieben wird, die dann alle x Sekunden gelesen und geleert wird. Dann lief wieder alles 🙂

  11. #11 von Uller am November 7, 2014 - 9:06 pm

    Hallo Patrick,

    super Anleitung, nach deiner Anleitung und etwas herum probieren mit dem Script hat alles funktioniert.

    Ich nutze den TP-Link TL-WR1043ND.

    Leider kommt immer mal wieder vor, dass der Router sich nach längerer Zeit aufhängt.
    Mein Lösungsansatz war automatischer Neustadt jede nacht und auch per Zeitschaltuhr neustarren. Funktioniert besser aber leider nicht immer.

    Jetzt habe ich mir einem embedded Board mit Linux und integrierter serieller Schnittstelle besorgt (Wandboard) und versuche alles zum Laufen zu bringen. Ich hoffe das Board läuft stabiler.

    Leider habe ich zur Zeit nur Abends wenn die Sonne weg ist Zeit um alles zu machen. Naja, wird schon irgendwie klappen…

    Finde es auch echt klasse, dass du deinen Mypvlog-dienst auch uns nutzen lässt.

    Uli

  12. #12 von Patrick am Februar 1, 2015 - 11:34 am

    Danke für das positive Feedback und die Infos! Bin auch froh, dass ich die Seite zur Studentenzeit entwickelt habe. Aktuell bleibt leider auch keine Zeit die Seite weiterzuentwickeln oder größer Support zu leisten…

(wird nicht veröffentlicht)