Anbindung Solarlog 1000

Hi Leute

ich habe ein kleines Problem:
Ich möchte die Daten von meinem Solarlog in IPS verarbeiten. Leider finde ich keine Möglichkeit an die Daten ranzukommen. Der Solarlog 1000 ( Logger für Solaranlagen) besitzt zwar eine eigene Webseite aber wenn ich mir den Queltext ansehe finde ich nicht das was ich suche. Die einzelnen Werte die ich bräuchte werden per Javascript vom Browser errechnet. So vermute ich zumindestens. Würde ich die Daten im Queltext findne hätte ich die Variante WWWReder -> Textparser angewendet.
Hat jemand das Problem schon gelöst oder einen Ansatz??

Besten Dank im voraus.

Gruß Ingo

Hallo Ingo,

da nicht alle hier solch ein Gerät rumstehen haben … könntest eine solche Seite hier mal posten… Am besten im Browser Strg+U drücken, dann bekommst Du den Quelltext angezeigt und per Copy+Paste hier rein und bitte das HTML-Tag nicht vergessen :wink:

Grüße

Andreas

Hallo

OH. Fehler! Queltext zu lang.

Hallo

sehr gerne ist aber einiges. Ich musste den Queltext als TXT-Datei anhängen. Sie ist einfach zu lang um Sie in diesem Fenster hochzuladen. Also anbei der Queltext und dazu ein Foto wie die Seite aussieht. Ich interesiere mich für die Zahlen unter der Grafik.

Gruß Ingo

Tagesansicht-Solarlog.txt (99.9 KB)

Hallo Ingo…

kann dir leider nicht genau sagen, wie das bei dem Solarlog 1000 ist, da ich selbst nur einen Solarlog 400 habe, aber auf der Homepage von meinem Solarlog werden csv-Dateien abgelegt.

Bei mir sind es die Dateien days, daysall, min…, months und years. In diesen Dateien werden die relevanten Daten abgelegt.

Wird allerdings ein stück Arbeit werden, so viele Wechselrichter wie bei dir auszuwerten! :wink:

Gruß

Ralf

Hallo Ralf, liest du die Daten deines Solarlog 400 aus?? wo werden die Dateien gespeichert bzw. wo kann ich sie lesen??
Habe auch einen S 400 und würde das gern integrieren

Hallo Dieter,

ich werte meine Solarlog-Daten bis jetzt noch nicht weiter aus. Habe nur die Solarlog-Home-Homepage auf meine Haus-Homepage verlinkt, da mir diese Visualisierung eigentlich ganz gut gefällt und mir der Aufwand bis jetzt zu groß war, selbst etwas zu erstellen.

An die Daten kommt man eigentlich ganz einfach. Zur Anmeldung des Solarlog hat man Zugangsdaten für die Solarlog-Home-Homepage bekommen, die man in das Solarlog eintragen musste. Mit diesen Zugangsdaten müsste man sich per FTP einloggen können um die entsprechenden Dateien herunterzuladen.

Ist bei mir schon einige Monate her, wo ich mal einen eigenen Visualisierungsversuch gestartet habe, deswegen kann ich das nur noch so in etwa wiedergeben!

Gruß

Ralf

Hallo.
Ich weiß das Thema ist schon alt, aber mein Solar Log ist heute angekommen, und ich hab ihn so angebungen.

<?
$ipvomsolarlog="192.168.186.72";

	$fp1 = fopen("http://".$ipvomsolarlog."/min_day.js",'r');

  	ob_start();
	fpassthru($fp1);
	fclose($fp1);
	$file = ob_get_contents();
	ob_end_clean();
//echo $file;
$eintraege = explode("|", $file);

$werte = explode(";", $eintraege[1]);
//echo $werte[0];
SetValue(13197  /*[Strom\Solar\Aktuell]*/, $werte[0]/1000);
?>

Falls Fragen sind immer her damit

Hey, danke für den Code.
Habe Ihn jetzt für meinen SolarLog 1000 im Einsatz.

Problem is nur, ich habe 34 Wechselrichter… Jetzt muss ich massig Variablen anlegen, oder kann man das Irgendwie Copy-Paste mäßig mit IPS machen?

Bin da noch nicht so fit in Sachen IPS und PHP.

Danke für die Hilfe

Nur wenn du von jedem wechselrichter einzeln die Werte haben möchtest.
Der Wert der in dem Script gespeichert wird ist der Gesamtwert der Anlage.

Aber wenn du jeden wechselrichter Einzeln speichern möchtest würde ich ne funktion schreiben und dann mit 34 mal aufrufen mit ner for each Schleife oder änlichem.

Benutzt du einen Solarlog 1000 oder einen 400er,
bei mir kommt bei dem Script eine Fehlermeldung,

welche ich nicht wegbekomme

Warning: fopen(http://192.168.2.19/min_day.js): failed to open stream: HTTP request failed! HTTP/1.0 404 File not found
in C:\IP-Symcon\scripts\12563.ips.php on line 4

Notice: Undefined offset: 1 in C:\IP-Symcon\scripts\12563.ips.php on line 14

Ich hab den 500.
Aber die Übergabe sollte gleich sein…
Solarlog | Sonnenertrag Wiki

Bei mir ist es der 1000er.
Vielleicht hast du n anderes Netzwerkproblem? Kannst du mit der IP problemlos auf den solarlog zugreifen?

–> genau das is ja das Ding.
Ne Schleife is gut und schön aber ich brauch doch dann in IPS für jeden Wert, den die Schleife produziert, eine Variable, welche ich fülle… oder nicht?
Und die kann ich bei IPS nicht dublizieren… ich habe z.B. eine Variable für die aktuelle Temperatur von Wechselrichter1 (WR1)

Wenn ich jetzt WR2-34 auslese, dann muss ich doch für jeden WR eine Variable haben… und da weis ich nicht, wie ich die Variable von WR1 in IPS 33mal kopieren kann :slight_smile:
Geht das überhaupt mit IPS?

LG

Mach was draus. :wink:

<?
$katID = IPS_GetCategoryIDByName("Variablen ZBV", 0); // Kategorie
$a = 10; // Anzahl der zu erstellenden Variablen

for($i=0; $i<$a; $i++)
{
   $var = IPS_CreateVariable(3); // Typ: 0 bool, 1 int, 2 float, 3 string
   IPS_SetName($var, "Test ".$i);
   IPS_SetParent($var, $katID);
}


?>

Ich bin zwar n totaler newbee was php angeht, aber das wort „IPS_CreateVariable“ verstehe ich LOL …

Vielen vielen Dank, werde mich gleich mal mit meiner copy-paste-programmiertechnik ans werk begeben.

Könnt ihr mir erklären wie ich das genau machen muss?
Welche Instanzen ich erstellen muss usw? Bin da echt Ahnungslos.
IP Adresse von Solarlog habe ich. Welche Objetkt ID (SetValue(11756) ist ins Skrips einzutragen??.. :frowning:

Danke für euere Hilfe.

Hey wolf, ich habe jetzt die gleiche Meldung bekommen ;-(
Scheint nicht so einfach zu sein.
Ich habe die Vermutung, dass der Solarlog es nicht erlaubt, in zu engen Abständen Daten abzurufen. --> einmal reboot des Loggers hat bei mir dazu geführt, dass es diese Nacht wieder ging. Aber jetzt gegen 8uhr is es wieder ausgefallen. grrrr…

Weis jemand, wie oft man diese Datei aus dem Logger abrufen darf? Bei mir hatte ich alle 10min eingestellt.
Vielleicht ist der Logger auch einfach Hardwaremäßig überfordert und hängt sich dann auf… das http webinterface ist bei mir bei der aktion auch gestorben.
Ping geht noch.

Hi,
Weche Instanzen und Variablen du erstellst ist dir überlassen.
Ich habe z.b. ein Dummy Modul für jeden Wechselrichter und darunter die Variablen die ich aus der Datei auslese (Volt Temp usw.) … Wie gesagt, ist dir überlassen.

Der code ist so zu lesen (zumindest hab ich es so verstanden):

  1. $eintraege = explode("|", $file);
    Dies sagt, dass in der Datei (die mit dem Code darüber gezogen wurde) bei jedem | ein neuer Eintrag beginnt

  2. $werte = explode(";", $eintraege[1]);
    Dies bedeutet, dass innerhalb des Eintrags die Werte mit ; getrennt sind.
    Außerdem wird hier der Eintrag 1 gezogen „[1]“ … ggf musst du das dann anpassen, wenn du andere werte willst.

  3. Zu guter Letzt: "SetValue(13197 /[Strom\Solar\Aktuell]/, $werte[0]/1000); " bedeutet, dass du den 0-ten Wert aus dem oben angegeben Eintrag ziehst und ihn in die Variable „13197“ schreibst … hier musst du deine Variable angeben.

Ich habe den code nun für meine Zwecke so erweitert, dass ich wert 0-6 auslese. Und das für jeden WR ($einträge)

Grüße

Hallo Leute
Ich hab da mal eine selbstbeuende Instanz gebaut.
Also eine Instanz Anlegen z.B Solar und dann das Script rein.
Es muss nur die IP des Solarlog angepasst werden, und die Instanz.
Bitte testen. Ist quick and Dirty. Die Variabeln legen sich dann nach der Anzahl der WR an.

<?
$ParentID = GetParentID(16181  /*[Dummy\Dummy Module]*/); //Hier die Instanz wo das alles rein soll
$ipvomsolarlog="192.168.186.72"; // IP vom Solarlog

$fp1 = fopen("http://".$ipvomsolarlog."/pc.js?min&0",'r');
	
  	ob_start();
	fpassthru($fp1);
	fclose($fp1);
	$daten = ob_get_contents();
	ob_end_clean();
$lastdaten="";
$zeilen = explode("\r", $daten);
$anzahlwr = 1;
foreach($zeilen AS $zeile)
   {
 		$spalten = explode("=", $zeile);
		if(trim($spalten[0])=="var AnzahlWR")
   	{
			$anzahlwr = trim($spalten[1]);
   	}
   }


$i=1;
$gefunden=0;
foreach($zeilen AS $zeile)
   {
 		$spalten = explode("=", $zeile);
   	if(trim($spalten[0])=="m[mi++]")
   	{
		if($gefunden==0){
			$lastdaten=$spalten[1];
			$gefunden=1;
			}
   	}
   }
// echo $lastdaten;
$eintraege = explode("|", $lastdaten);

while ($i<=$anzahlwr)
{
	$werte = explode(";", $eintraege[$i]);
	//print_r($werte);
	$VariIDTemp = IPS_GetVariableIDByName("WR".$i." Temp", $ParentID);
	if ($VariIDTemp == false)
	{
		$VariIDTemp = IPS_CreateVariable (2);
		IPS_SetVariableCustomProfile($VariIDTemp, "~Temperature");
		IPS_SetName($VariIDTemp,"WR".$i." Temp");
		IPS_SetParent($VariIDTemp,$ParentID);
	}
	if($lastdaten!="")
		{
			$g=count($werte);
			$g--;
			SetValue($VariIDTemp, str_replace('"','',$werte[$g]));
		}
	

	$VariIDPower = IPS_GetVariableIDByName("WR".$i." Leistung Aktuell", $ParentID);
	if ($VariIDPower == false)
	{
		$VariIDPower = IPS_CreateVariable (2);
		IPS_SetVariableCustomProfile($VariIDPower, "~Power");
		IPS_SetName($VariIDPower,"WR".$i." Leistung Aktuell");
		IPS_SetParent($VariIDPower,$ParentID);
	}

	if($lastdaten!="")
	{
		SetValue($VariIDPower,($werte[0]/1000));
	}
	$i++;
}


function GetParentID($ID){
  $obj = IPS_GetObject($ID);
  return $obj['ParentID'];
}
?>