Anbindung Solarlog 1000

Hier mal n screenshot, was dein skript „angerichtet“ hat hehe…
die variablen anlegen war schonmal cool. Die Reihenfolge aber noch nicht ganz. Besser die 1-9er mit 01-09 betiteln, dann passt die Reihenfolge oder?
Leider wurde aber nichts mit Daten gefüllt. Kann natürlich sein, weil der Logger noch offline ist (weil dunkel).

Wenn ich Wünsche äußern darf:
Ich hätte es am liebsten in der Struktur, dass ein „DummyModul“ pro WR erstellt wird und darunter alle Einzelwerte des WR stehen. Damit erhält man eine schöne Gruppierung in der GUI. Allerdings haben bei mir die WR’s 1-6 2Strings und die anderen 1String. d.h. das Skript müsste Variablen „dynamisch“ nach Typ des WR erstellen.

Leider habe ich zu schwache Programmierkenntnisse für sowas.

… OK, bei meinen 34 WR wird das vorgeschlagene noch unübersichtlich werden , aber ich stelle mir dies als eine Art Detail-Übersichtsseite vor (zu Analysezwecken alles DB-geloggt) .
Eine weitere Seite quasi die Startseite und die die man sich ansieht soll dann die Leistung von WR-Gruppen anzeigen (bei mir unterschiedliche Dächer und Dachseiten). und z.b. über ein Splitpane oben die aktuellen Werte anzeigen und unten den Tagesgraphen.
– das bekäme ich aber auch alleine hin denke ich :slight_smile:

Tja soweit so gut. Bleibt nur noch das nervige Problem, dass mit dem Abholen der .js Datei nach einiger Zeit mein Logger absäuft. Jetzt den dritten Tag hintereinander.
Habe 10min und 30m Abholrythmus bis jetzt getestet… beides führt nach einer Weile zum Absturz und ohne reboot geht nur noch anpingen, aber nicht HTTP Oberfläche.

Wie ist eure Erfahrung derweil?

Edit:
Anbei noch n Screenshot, wie ich das mit der „Gruppierung durch DummyModul“ meinte. Hier ist mein erster Test-WR mit allen Werten. (leider grad alles null, wegen Absturz von heute morgen)

Ach ja, den Wirkungsgrad habe ich noch manuell hinzugefügt, der wird aus den Daten der Datei berechnet:
„SetValue(37888 /[Solaranlage\WR1\Wirkungsgrad]/ , ($werte[0]/($werte[1]+$werte[2]))*100);“

Mir ist da grad ne Idee gekommen.
Wie wärs, wenn man statt des Abrufens die Daten per FTP Übertragung auf den IPS server schickt. Dann kann man die auslesen, ohne den Logger in die Knie zu zwingen.
Hat das einer von euch schon probiert?

Das mit den Strings wird etwas komplizierter. Dazu kommt:
Offtopic an
mir ist heute meine SSD mit Ipsymcon drauf abgeschmiert, und das letzte Backup ist 4 Monate her. Kennt jemand jemanden der Daten retten kann?
Offtopic aus.
Ich werde mich aber sobald Zeit ist, und meine „lebenswichtigen“ Funktionen wiederhergestellt sind mit dem Thema wieder auseinander setzen.

Die Daten exportiere ich schon nach „solarlog-web“, und dort mache ich auch die Detailauswertung. Ist bei meiner Anlage ja noch kostenlos.

das mit der SSD tut mir leid. Habe leider keine connection bezüglich datarecovery. … hab vor ein paar wochen ein ähniches problem gehabt und mein raid 5 hatte zwei plattenausfälle zugleich… gott sei dank war die photodatenbank noch auf ner backuphdd da.

wenn die Wunden dann irgendwann geleckt sind, wäre es möglich, wenn du mir dann bei der umstellung deines codes auf FTP behilflich bist?

Habe es mit Copy-Paste programmierung probiert und komme nur so weit:

<?

/*------------------Username und Passwort eintragen---------------------------*/
################################################################################
$ftp_server = 'xxx'; // Adresse FTP-Server
$ftp_user_name = "xxx"; // Username
$ftp_user_pass = "xxx"; // Passwort
################################################################################

$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];
$zaehlerID = @IPS_GetVariableIDByName("ftpFehlerzaehler", $parentID);
if(!IPS_VariableExists($zaehlerID))
{
   $zaehlerID = IPS_CreateVariable(1); // Variable Integer anlegen
    IPS_SetName($zaehlerID, "ftpFehlerzaehler"); // Der neu generierten ID einen Namen zuweisen
    IPS_SetParent($zaehlerID, $parentID); // nach Kategorie verschieben
}
$zaehler = GetValueInteger(IPS_GetVariableIDByName("ftpFehlerzaehler", $parentID));

// Verbindungsaufbau
if(!($conn_id = ftp_connect($ftp_server)))
{
   IPS_SetScriptTimer($IPS_SELF, 60);
   return;
}
// Login mit Username und Passwort
if(!($login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass)))
{
   IPS_SetScriptTimer($IPS_SELF, 60);
   ftp_close($conn_id);
   return;
}
// Schalte passiven Modus ein
ftp_pasv($conn_id, true);

// Verbindung überprüfen
if ((!$conn_id) || (!$login_result))
{
    echo "FTP Verbindung ist fehlgeschlagen!
";
    echo "Verbindungsaufbau zu $ftp_server mit Username $ftp_user_name versucht.";
     $zaehler = $zaehler+1;
     if($zaehler == 10)
     {
        SetValue($zaehlerID, 0);
        IPS_SetScriptTimer($IPS_SELF, 0);
        return;
    }
     IPS_SetScriptTimer($IPS_SELF, 60);
     SetValue($zaehlerID, $zaehler);
    return;
}
else
{
    echo "Verbunden zu $ftp_server mit Username $ftp_user_name"."
";
    IPS_SetScriptTimer($IPS_SELF, 0);
    if($zaehler != 0) SetValue($zaehlerID, 0);
}

// Nach Verzeichnis .... wechseln
//if (ftp_chdir($conn_id, "daten/"))
//{
//    echo "Aktuelles Verzeichnis: " . ftp_pwd($conn_id) ."
";
//}
//else
//{
//    echo "Verzeichnis Wechsel ist fehlgeschlagen.
";
//}

//Auslesen der Daten
   $fp1 = ftp_fget($conn_id, $handleBerichte, $tage[$i].$time, FTP_ASCII))fopen("min_day.js",'r');

      ob_start();
    fpassthru($fp1);
    fclose($fp1);
    $file = ob_get_contents();
    ob_end_clean();

echo $file;
$eintraege = explode("|", $file); //bei einem | fängt ein neuer eintrag an
$werte = explode(";", $eintraege[1]); //bei einem ; fängt ein neuer wert in eintrag an
//echo $werte[0];

SetValue(49378 /*[Solaranlage\WR1\AC Leistung]*/ , $werte[0]/1000);
SetValue(55391 /*[Solaranlage\WR1\AC Tagesertrag]*/ , $werte[3]/1000);
SetValue(19940 /*[Solaranlage\WR1\DC Leistung String1]*/ , $werte[1]/1000);
SetValue(39068 /*[Solaranlage\WR1\DC Leistung String2]*/ , $werte[2]/1000);
SetValue(48936 /*[Solaranlage\WR1\DC Volt Sting1]*/ , $werte[4]);
SetValue(30318 /*[Solaranlage\WR1\DC Volt String2]*/ , $werte[5]);
SetValue(57743 /*[Solaranlage\WR1\Temperatur]*/ , $werte[6]);
SetValue(37888 /*[Solaranlage\WR1\Wirkungsgrad]*/ , ($werte[0]/($werte[1]+$werte[2]))*100);
?>




// FTP-Verbindung schliessen
ftp_close($conn_id);
?>

Dieses Konstrukt ermöglicht mir zumindest schonmal das einloggen auf FTPserver … aber ab „//Auslesen der Daten“ (wo ich deinen code hinengepackt habe) klappt es dann nicht mehr.

Hinweis:
Das szenario, welches ich mir damit baue ist: 10minütiges senden der Daten aus dem logger an den FTP und ich ziehe anschließend mit IPS den kram vom FTP in die software. … denke damit kann ich dann das ständige abstürzen umgehen, da der FTP export vom logger standardmäßig unterstützt wird. … pray

Du lädst also die Daten vom Solarlog auf einen FTP Server, und rufst sie dann von dem wieder ab?
Häng doch mal ein zip hier rein mit den daten die dann auf dem FTP liegen würden.

Also, habe einmal einen Screenshot von allen Dateien gemacht und einmal ne Zip angehangen mit den Dateien, die ich denke, die sinnvoll sein könnten.

(die month und year usw sind weitestgehend leer, weil der logger momentan nicht mehr daten drin hatte. Habe ich also nicht gelöscht.)

SolarloggerFiles.zip (105 KB)

Ich denke die Datei „base_vars.js“ und die „min_days“ sind die spannensten.
(ach ja, ich habe im Logger sowohl Solar-Log als auch CSV export ausgewählt)

Ein findiger Programmierer könnte da sicherlich was tolles draus machen.
Ich kann leider nur beisteuern, was ich toll fände.

Also, nach meiner Deutung ist es problemlos machbar, die „Arrays“ aus der „base“ (base_vars.js) zu nehmen um damit schonmal die einzelnen Dachflächen zu haben und die Sollwerte der WR’s usw. Errorcodes sind aus der „min_cur“ zu bekommen und in der base steht ihre Bedeutung. Als nächstes die „min“ (min_days.csv oder js) heranziehen und die einzelWRwerte ergänzen.

Aus diesen Kombinationen ließe sich doch ne tolle Grafik pro Dachfläche schrauben und eine sehr schöne Detailübersicht der WR’s pro Dachfläche incl Wirkungsgrad, Temp, Errorcode, Abweichung von anderen WRs (zwecks Modulausfalldiagnose) und so weiter.

Grafikbestandteile könnten z.B. sein:

  1. Hintergrund (ne Gefüllte Kurve) mit dem Gesamtdach „Pac“
  2. Vordergrund je WR eine Kurve, die alle übereinander liegen (wie auf der Solarlog HTTP selbst) … daraus lassen sich Abweichungen leicht erkennen.

Es könnte auch ne Grafik geben, die alle WR’s übereinander legt.

Ist am Ende denke ich die selbe Anforderung wie es der SolarLogger auf seiner eigenen Webseite auch darstellt. Nur in „schön“, Interoperabel und zu IPS - damit nicht mehr nur im geschlossenen system von solarlog und zugleich gesichert auf meinem Server statt im Logger selbst oder auf solarlog servern. Ach ja, und nicht zu vergessen: es wäre nicht mit Zusatzkosten verbunden.

wie ist denn der aktuelle Stand?
Ich habe ein ähnliches Problem mit dem auslesen, es klappt alles perfekt und irgendwann nach 10-24 Stunden verabschiedet sich der Solarlog. Kein Zugriff mehr möglich, erst wieder nach Neustart.
Wäre schon ne tolle Sache, wenn man ein paar Rechnungen-Auswertungen selbst basteln könnte und dann mit googlechart darstellen…
Die Oberfläche vom Solarlog selber ist doch recht statisch und relativ zeitaufwändig um Kontrollen zu machen.
Klappt es denn mit weniger WR? zuverlässig?
Ich habe aber auch „nur“ 12 WR dran mit ca. 150 kW. Aber die kW sollten ja völlig egal sein.
Ich muß aber die Aufhängzeit mal genauer beobachten, hatte den Eindruck es könnte zeitlich mit Fehermeldungen (mails) vom solarlog kollidieren.

Das mit dem Aufhängen hatte ich immer um 4:30 Uhr. Ich starte im Momente das script nur noch von 6-22 Uhr.
Ich werde vielleicht heute abend weiter machen.
Eine genaue Anforderdung was nun genau geloggt und angezeigt werden kann wäre noch gut. Ich habs im Moment so.

http://nasst.homeip.net:82/index.php?configuratorID=17065

Hab aber leider persönlich auch nur einen WR. Ich würde aber das Script so bauen das es auch für x WR geht.

Danke für den Tip mit der Uhrzeit, werde ich mal testen. Der Rest klappt problemlos. Mit den Rechenspielen und verschiedenen WR hab ich keine Probleme. Das muss eh jeder selber so basteln wie er es haben möchte.

Bei mir, mit 3 Wechselrichter (22 kW) läuft alles problemlos :slight_smile:

So Leute hier erstmal meine Finalen Scripte
Für Leistung Aktuell
Alle 5min abrufen in der Zeit von 6 - 22 Uhr

<?
//Hier die Instanz wo das alles rein soll
$ParentID = 24327 /*[Solar\Solar]*/;
// Archiv Handler damit das Logging eingeschaltet werden kann.
$arhid = 34960 /*[Archive Handler]*/ ;

 // IP vom Solarlog
$ipvomsolarlog="192.168.186.72";

$fp1 = fopen("http://".$ipvomsolarlog."/days_hist.js",'r');
ob_start();    fpassthru($fp1);    fclose($fp1);    $daten = ob_get_contents();    ob_end_clean();

$zeilen = explode("\r", $daten);

$eintraege = explode("|", $zeilen[0]);
$wrcount=count($eintraege);
$gesamt=0;
$i=1;
while ($wrcount>$i)
{
$werte = explode(";", $eintraege[$i]);
$VariIDTemp = IPS_GetVariableIDByName("WR".$i." Ertrag", $ParentID);
    if ($VariIDTemp == false)
    {
        $VariIDTemp = IPS_CreateVariable (2);
        IPS_SetVariableCustomProfile($VariIDTemp, "~Power");
        IPS_SetName($VariIDTemp,"WR".$i." Ertrag");
        IPS_SetParent($VariIDTemp,$ParentID);
    }
    SetValue($VariIDTemp, (GetValue($VariIDTemp)+$werte[0]/1000));
    $gesamt=$gesamt+($werte[0]/1000);

$VariIDTemp = IPS_GetVariableIDByName("WR".$i." Peak Vortag", $ParentID);
    if ($VariIDTemp == false)
    {
        $VariIDTemp = IPS_CreateVariable (2);
        IPS_SetVariableCustomProfile($VariIDTemp, "~Watt.14490");
        IPS_SetName($VariIDTemp,"WR".$i." Peak Vortag");
        IPS_SetParent($VariIDTemp,$ParentID);
    }
    SetValue($VariIDTemp, str_replace('"','',$werte[1]));
    

$i++;
}
$VariIDTemp = IPS_GetVariableIDByName("Gesamt Ertrag", $ParentID);
    if ($VariIDTemp == false)
    {
        $VariIDTemp = IPS_CreateVariable (2);
        IPS_SetVariableCustomProfile($VariIDTemp, "~Power");
        IPS_SetName($VariIDTemp,"Gesamt Ertrag");
        IPS_SetParent($VariIDTemp,$ParentID);
    }
    SetValue($VariIDTemp, (GetValue($VariIDTemp)+$gesamt));

?>



Sortieren kann man das denke ich selber. bei 34 WR dauerts halt, aber man machts ja nur einmal.

Have Fun.
Stefan

schaut ordentlich aus, läuft auch auf Anhieb.
Im zweiten Script haste aber 2 Klammerfehler, Zeile 31 eine zu viel und Zeile 54 eine zu wenig.

Danke für die Info. War ungetestet weil ich den wert von Gestern nicht auch noch verlieren wollte.
Habs oben geändert.

Hier ist ja mittlerweile richtig viel los :slight_smile: Werde die scripte auch mal testen. Klappt es denn, wenn man nur von 6-22 uhr ausliest? Oder crasht der logger dann n Tag später oder so?

Mein Logger läuft seit dem ohne Probleme.

Bei mir läuft es auch ohne Probleme, seitdem ich nur noch tagsüber auslese.
Hatte die letzten Tage leider wenig Zeit, aber ich glaube du hast das Leistungsscipt nicht mehr online. Das Script zum Auslesen der Erträge sollte nur eimal täglich ausgeführt werden, da werden ja Summen gebildet.
Außerdem sollte dies erst am Folgetag ausgeführt werden, hier werden die Werte vom Vortrag ausgelesen. Oder kann man auch die aktuellen Tageserträge je Wechselrichter holen?
Für die Gesamtsumme ist das egal, aber wenn man solche Spielchen wie Ertrag je kWp einbaut, dann sollte man den genauen Tag schon kennen, sonst ist der Quervergleich mit anderen Anlagen schwierig. Ich starte das Ertragsscipt erst um 0.15 Uhr, dann werden bei mir die Ertragswerte vom Vortag korrekt geholt.

Die einzelnen Werte (Temp, Volt etc. sind anscheinend auch nicht einheitlich, bzw. an verschiedenen Positionen, bei mir Unterschied bei SMA Tripower zu 1Phasig.) Aber hierzu müsste man mehr Zeit investieren. Macht für mich auch wenig Sinn. Solche Details kann man bequem im Solarlog nachschauen.

Für mich bringt aber die direkte Berechnung der Erträge in kw je kWp einen Fortschritt. Das macht für mich jetz ips und vergleicht die einzelnen Wechselrichter miteinander, dies war bei der Solarlog Oberfläche immer etwas umständlich. Das seh ich jetzt auf einen Blick und mit googelchart hat man die Wechselrichter auch noch schön in einer Grafik, dies spart mir Arbeit in der täglichen Kontrolle :loveips:

Habt Ihr das Problem mit dem nächtlichen Aufhängen des Webservers adressieren können?

Hallo.
Wenn du mit adressieren meinst, es gemeldet zu haben bei „SolarLog“, ich für meinen Teil nicht, aber ich denke das es mit der nächtlichen Abschaltung zu tun hat. Das Display vom Solarlog ist bei mir irgendwann aus, und ich denke es geht erst wieder an wenn der WR Meldung gibt.