Daten aus IPS in Portal PV-Log.com übertragen

Hallo Community,

ich nutze seit ich meine PV-Anlage habe das Portal PV-Log.com. Hier kann ich meine Ertragsdaten (als Tageswerte) mit anderen Anlagen vergleichen. Ich finde eine recht runde Sache.

Hier nun ein Script wie ihr die in IPS gespeicherten Ertragsdaten zyklisch an PV-Log übertragen könnt. Ich stoße diese Script alle 6 Stunden an …

<?

	// Daten von PV-Log
	// Einstellungen in Eigener Bereich/Ertragsdaten/Automatischer Datenimport
	// Hier ist einzustellen:
	// Verwendest Du einen Datenlogger?: 	Ja
	// Datenlogger Hersteller: 				anderer Hersteller / Eigenbau
	// Datenlogger Modell:                 Datenformat Solarlog days_hist.js
	// Übertragunsart:                     FTP
	// Danach werden die Daten des FTP-Servers, User und Passwort angezeigt.
	// Diese Werte in die folgenden Variablen übernehmen
	
   $ftp_Server ="ftp.pv-log.com";
   $ftp_User ="xxxx";
   $ftp_Pwd ="xxxx";
   
	// Das ist die variable in welcher meine PV-Erträge gespeichert werden.
	// Daten werden als Float / Zähler zyklisch in kW gespeichert
	$varId = 33441 /*[Devices\SpecialDevices\WebLogPro\Akt-Werte\Aktuelle Werte\E_TOTAL]*/;

	// Es werden immer die letzten x Tage an PV-Log gesendet (inkl. aktueller Tag)
	$writeLastDays = 30;

	writeDaysHistToPvLog($ftp_Server, $ftp_User, $ftp_Pwd, $varId, $writeLastDays);

return;
	function writeDaysHistToPvLog($ftp_Server, $ftp_User, $ftp_Pwd, $varId, $writeLastDays){

		// connect to ftp server and login
	   $conn_id = ftp_connect($ftp_Server);
		if (!Login($conn_id, $ftp_User, $ftp_Pwd))
		   die("Login fehlgeschlagen");

	   $file = IPS_GetKernelDir() .'days_hist.js';
		$remote_file = 'days_hist.js';

		WriteDataToLocalFile($varId, $writeLastDays, $file);

	   if (ftp_put($conn_id, $remote_file, $file, FTP_ASCII))
			 echo "$file erfolgreich hochgeladen
";
		else
		   die("FTP Upload fehlgeschlagen");

	   // Verbindung schließen
		ftp_close($conn_id);

	}

   // ------------------------------------------------------------------------
	// Login
	//    Login auf FTP Server
	//    IN: $conn_id
	//    IN: $ftp_user_name
	//    IN: $ftp_user_pass
	//    OUT: true = OK, false = ERROR
	// ------------------------------------------------------------------------
	function Login($conn_id, $ftp_user_name, $ftp_user_pass)	{
		// Login mit Benutzername und Passwort
		$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

		// Verbindung überprüfen
		if ((!$conn_id) || (!$login_result))
		    return false;
		else
			return true;
	}

   // ------------------------------------------------------------------------
	// WriteDataToLocalFile
	//    Datenformat Solarlog days_hist.js
	// ------------------------------------------------------------------------
	function WriteDataToLocalFile($var, $daysInThePast, $file)
	{
		$Result = "";
		$handle = fopen ($file, "w");

		for($i=0; $i<=$daysInThePast; $i++){
			$datum = mktime(0,0,0, date("m", time()), date("d",time()) -$i, date("Y",time()));
			$val = GetValueFormArchive($var, $datum);

			$a = 'da[dx++]="' . date("d.m.y", $datum) . '|' .$val. ';0"' . "
" ;
			fwrite($handle, $a);
		}

		fclose ($handle);
		return $Result;
	}

	function GetValueFormArchive($var, $date){
		$id_AH = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}');
		$id_AH = $id_AH[0];

		return round(GetDayDiffByDate($id_AH, $var, $date) * 1000, 0);
	}
	
	function GetDayDiffByDate($Id_AH, $VariableId, $date)	{
		$t1 = mktime(0,0,0, date("m", $date), date("d",$date), date("Y",$date));
	   $LoggedData1 = AC_GetLoggedValuesCompatibility($Id_AH, $VariableId, $t1, $t1, 0);

	   $t1 = mktime(23,59,59, date("m", $date), date("d",$date), date("Y",$date));
	   $LoggedData2 = AC_GetLoggedValuesCompatibility($Id_AH, $VariableId, $t1, $t1, 0);

		$v1 = @$LoggedData1[0]["Value"];
		$v2 = @$LoggedData2[0]["Value"];

		$Diff = $v2-$v1;
		return $Diff;
	}

	//Hilfsfunktion, die die Funktionsweise von IP-Symcon 2.x nachbildet
	function AC_GetLoggedValuesCompatibility($instanceID, $variableID, $startTime, $endTime, $limit) {
	    $values = AC_GetLoggedValues($instanceID, $variableID, $startTime, $endTime, $limit );
	    if((sizeof($values) == 0) || (end($values)['TimeStamp'] > $startTime)) {
	        $previousRow = AC_GetLoggedValues($instanceID, $variableID, 0, $startTime - 1, 1 );
	        $values = array_merge($values, $previousRow);
	    }
	    return $values;
	}

?>

Viel Spaß.
Heinz