SolarMax Datenlogger

  • Ich habe hier ein extrem simples C-Programm erstellt, welches ich benutze, um die Daten meines SolarMax Wechselrichters zu loggen. Der Mäxe ist per Ethernet an mein LAN angeschlossen, und das Programm läuft auf einer Linux-Maschine. Die Auswertung fehlt leider noch. Ich dachte mir, ich poste das mal, damit vielleicht der eine oder andere, der im Gegensatz zu mir wirklich C programmieren kann, einen Open-Source SolarMax Logger starten kann. Oder halt auch für den Eigengebrauch. Verbesserungsvorschläge sind herzlich willkommen.



    Falls es schon ein anderes Open-Source Programm mit dem gleichen Zweck geben sollte, wäre ich für einen Link darauf dankbar.

  • Ich hab das Programm noch ein wenig abgeändert, so dass es nur bei kritischen Fehlern beendet, und z.B. bei Verbindungsabbruch weiterläuft und versucht, die Verbindung wieder aufzubauen:


  • Hallo,


    da ich selber gerade versuche ein Progamm zu schreiben mit dem ich meine Wechselrichter abfrage
    und ich bei der suche nach hilfreichen Informationen auf diesen Beitrag gestoßen bin hab ich mal eine kurze frage.
    Was wird mit TNF, SYS und SAL abgefragt?
    Dazu finde ich nichts in der Protokoldokumentation.
    By the way, vieleicht kann mir ja auch wer sagen was folgende Keys abfragen:
    KLD, SE1, SE2, SPR, SCD (Gefunden bei SolarView)


    Danke und Gruß
    borsti87

  • TNF ist die Netzfrequenz, SYS ist vermutlich "system state" und ist bei mir entweder 4E24,0 oder 4E28,0, was MaxTalk als 20004,0 (Betrieb auf MPP) und 20008,0 (Netzbetrieb) anzeigt. KLD ist Energie gestern (kWh last day). SAL könnte die "Anlagennummer" des Verbundes sein, also 0 für die erste, 1 für die zweite, etc. Ist bei mir jedenfalls immer 0. Die anderen Werte kenne ich leider auch nicht.


    Dein Post hat mich übrigens noch hier rauf geführt: http://blog.dest-unreach.be/20…otocol-reverse-engineered


    Ich denke, mit dieser Information kann ich mein Programm noch einiges verbessern. Hätte auch Zeit sparen können, statt das ganze mit Wireshark selbst auszulesen.

  • Ich hab mal den Code noch etwas optimiert, so dass unter anderem nur noch eine Anfrage an den Mäxe mit allen interessanten Werten drin geschickt wird. Als nächsten Schritt werde ich versuchen statt einem Textfile als Log in eine MySQL DB zu schreiben, damit das Zeug dann per PHP + GD oder so ausgewertet werden kann.


    Übrigens, die Checksum, wie im Link in obigem Post beschrieben, ist keine übliche CRC-16 oder so was, sondern einfach alle Bytes aufsummiert und modulo 2^16 genommen. Musste ich mühsam aus seinem Perl Code herauslesen :). Beim Erstellen von eigenen Messages auch das Anpassen des Messagelänge-Feldes nicht vergessen, sonst antwortet der Mäxe nicht. Hat mich einige Zeit gekostet...


  • Moin!


    Zitat von zagibu

    Ich hab mal den Code noch etwas optimiert, so dass unter anderem nur noch eine Anfrage an den Mäxe mit allen interessanten Werten drin geschickt wird. Als nächsten Schritt werde ich versuchen statt einem Textfile als Log in eine MySQL DB zu schreiben, damit das Zeug dann per PHP + GD oder so ausgewertet werden kann.


    Hm, funktioniert hier auch gut, unsere Anlage ist seit heut in Betrieb.


    Bei den evtl. anfallenden Datenmengen ist es sicher sinnvoll eine Datenbank zu verwenden. Muss ich mich dann wohl auch mal mit auseinandersetzen :-(


    Eines ist mir an der Antwort des WR aufgefallen: Der HEX-Wert von P ac ist viel zu hoch, ca. das doppelte des auf dem Display angezeigten Wertes. Stellst Du das bei Dir auch fest? Muss da vllt. eine Konstante abgezogen werden?

  • Bei mir ist es genau doppelt so hoch wie es im MaxTalk angezeigt wird. Warum weiss ich nicht. Ich hab den Logger mit DB-Anbindung fertig, aber leider konnte ich ihn noch nicht vollständig testen, weil mittlerweile mein Max ausgeschaltet hat :). Hier ist er trotzdem mal:



    Zum Kompilieren braucht man die libmysqlclient und libmysqlclient-dev (heisst evtl. leicht anders je nach Distro) und muss den Schalter -lmysqlclient an den gcc Aufruf anhängen. Die DB-Verbindung ist halt noch hardcodiert. Bei mir sieht die DB so aus:



    Die Werte werden bereits im Logger zu Dezimalzahlen konvertiert. Evtl. muss man das noch anpassen, wenn man den Logger auf nem Mikrocontroller oder so laufen lassen will, bin nämlich nicht sicher ob das Regexp-Zeug dort auch so problemlos funktioniert. Vermutlich werde ich den Logger in einen Client und einen Server aufteilen, so dass der Client dann auf nem Mikro im LAN laufen kann, und nur die Daten vom Solarmax holt und an den Serverteil weiterschickt, welcher dann die Werte extrahiert, umwandelt und in der DB speichert. Aber das kommt wohl noch später als der Visualisierer, wenn überhaupt.

  • Hier ist eine getestete Version, die zusammen mit der oben geposteten DB funktioniert (braucht natürlich immer noch libmysqlclient, libmysqlclient-dev und den gcc-Schalter -lmysqlclient am Ende):


  • Moin!

    Zitat von zagibu

    Hier ist eine getestete Version, die zusammen mit der oben geposteten DB funktioniert (braucht natürlich immer noch libmysqlclient, libmysqlclient-dev und den gcc-Schalter -lmysqlclient am Ende)...


    So, ich denke ich bin raus. Bei mir wird der logger zwar kompiliert - mit warnings:


    - aber es scheint mir nicht so, dass in die Datenbank, die bei mir so aussieht:


    irgendetwas hineingeschrieben wird. Ich weiß nicht, wo ich nachschauen soll, logs gibt's auch keine. Im Feld "Default" steht bei Dir allerdings "Null", bei mir die Ziffer 0. Macht das einen Unterschied? Wenn ja, wie erstelle ich die Tabelle denn? Wenn ich beim erstellen der Tabelle "NULL" angebe, erhalte ich die Meldung, dass das ein falscher Default-Wert wäre, bei der Ziffer 0 läuft alles durch.
    Wenn der logger läuft gibt es allerdings auch keine Fehlermeldungen...


    Ich wäre um Hilfestellung dankbar, auch wenn es dann OT wird und Du mich vielleicht zu irgendeiner manpage oder zu einem Forum jagst ;-)

  • Zitat von zagibu

    Die Auswertung fehlt leider noch.


    Hi @all,


    falls ihr Euch bald auf ein Datenformat einigt und es mir bekannt gebt, könntet ihr (solange ihr noch nichts eigenes gebastelt habt :wink: ) mein Tool für die Visualisierung der Daten benutzen. Ich würde dann einen Importfilter für Eure Daten schreiben. Details gerne per PN.


    Viele Grüße,
    Stephan