Solarview über TCP in IP-Symcon

Hallo, ich nutze Solarview auf einem Raspberry um unsere zwei Wechselrichter auszuwerten.
Solarview bietet eine FHEM-Integration über den TCP-Port 15000 an.

Im Forum konnte ich nur eine Integration per FTP-Server finden, das möchte ich aber nicht. Der Raspberry soll (wenn es anders geht) keinen FTP-Server bekommen.
Ansonsten konnte ich leider nichts finden :-/

Hat jemand über diese Schnittstelle Solarview schon ausgewertet?

Danke!

Gruß
Markus

Ja ich hab das laufen, kann aber gerade nicht gucken.
Melde mich morgen

Gruß
Jens

Hallo,

ich hatte es so gelöst gehabt.(2015)
Ob es noch funktioniert kann ich leider nicht sagen. Habe Solarview nicht mehr im Einsatz.
Einen Teil hatte ich Irgendwo her kopiert, weiß aber nicht mehr woher.:confused:


<?php

$ping=sys_ping("192.168.100.84",5000);
$ping1=sys_ping("192.168.100.236",1000);

setvalue(35734 /*[Eigene Scripte\PV\Solarview\Ping WR]*/ ,$ping);

if(/*$ping == true and */$ping1 ==true )
{

# This is the difficult part, the Telnet header
$header1=chr(0xFF).chr(0xFB).chr(0x1F).chr(0xFF).chr(0xFB).
chr(0x20).chr(0xFF).chr(0xFB).chr(0x18).chr(0xFF).chr(0xFB).
chr(0x27).chr(0xFF).chr(0xFD).chr(0x01).chr(0xFF).chr(0xFB).
chr(0x03).chr(0xFF).chr(0xFD).chr(0x03).chr(0xFF).chr(0xFC).
chr(0x23).chr(0xFF).chr(0xFC).chr(0x24).chr(0xFF).chr(0xFA).
chr(0x1F).chr(0x00).chr(0x50).chr(0x00).chr(0x18).chr(0xFF).
chr(0xF0).chr(0xFF).chr(0xFA).chr(0x20).chr(0x00).chr(0x33).
chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0x2C).chr(0x33).
chr(0x38).chr(0x34).chr(0x30).chr(0x30).chr(0xFF).chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x27).chr(0x00).chr(0xFF).chr(0xF0).
chr(0xFF).chr(0xFA).chr(0x18).chr(0x00).chr(0x58).chr(0x54).
chr(0x45).chr(0x52).chr(0x4D).chr(0xFF).chr(0xF0);
$header2=chr(0xFF).chr(0xFC).chr(0x01).chr(0xFF).chr(0xFC).
chr(0x22).chr(0xFF).chr(0xFE).chr(0x05).chr(0xFF).chr(0xFC).chr(0x21);

# connecting
 $fp=fsockopen("192.168.100.236",15000  );


fputs($fp,"00*");

usleep(125000);

# show the output
do
 {
     $output=fread($fp, 15000);    // read line by line, or at least small chunks
     $stat=socket_get_status($fp);
 }
 while($stat["unread_bytes"]);

$output = str_replace("
", "<br>", $output);
//echo $output;
fclose($fp);

$array = explode(',', $output);

print_r($array);

//Ausgabe

$Tagesertrag= (float)$array[6];
SetValue(37374 /*[Eigene Scripte\PV\Solarview\Tagesertrag]*/ , $Tagesertrag);

SetValue(31847 /*[Eigene Scripte\PV\Solarview\Spezifischer Ertrag]*/ , ($array[6]/"5,46"));

SetValue(57739 /*[Eigene Scripte\PV\Solarview\Monatsertrag]*/ , ($array[7]/"2"));

SetValue(55378 /*[Eigene Scripte\PV\Solarview\Jahresertrag]*/ , $array[8]);

SetValue(23861 /*[Eigene Scripte\PV\Solarview\Gesamtertrag]*/ , $array[9]);

SetValue(29147 /*[Eigene Scripte\PV\Solarview\Leistung]*/ , $array[10]);

}
?>

Ich habe einen Socket auf den Port 15000 vom Solarview gesetzt und darunter ein Script zum aktivieren/deaktivieren der Schnittstelle bzw. zum pollen der Daten.

<?

$id = 19383 /*[Socket Solarview]*/;

IPS_SetProperty($id, "Open", true); //I/O Instanz soll aktiviert sein.
IPS_ApplyChanges($id); //Neue Konfiguration übernehmen
IPS_Sleep(500);
CSCK_SendText($id,"01*");
IPS_Sleep(2000);
IPS_SetProperty($id, "Open", false); //I/O Instanz soll aktiviert sein.
IPS_ApplyChanges($id); //Neue Konfiguration übernehmen
?>

Das Ergebnis landet über einen Cutter in einer Registervariable, die dann das Script triggert.

Cutter links: 7B (HEX)
Cutter rechts: 7D (HEX)

<?
// Auswertung der Daten von Solarview

if($_IPS['SENDER'] == "RegisterVariable") {

      //Datensatz = 00,16,09,2014,11,06,0000.7,00353,004703,00026559,02475,000,000.0,000,000.0,000,000.0,000,000.0,00
		//WR, Tag, Monat, Jahr, Stunde, Minute, KDY, KMT, KYR, KT0,PAC, UDC, IDC, UDCB, IDCB, UDCC, IDCC,UL1, IL1, TKK
		//*************************************************************************
		//Bedeutung der Werte:
		//KDY= Tagesertrag (kWh)
		//KMT= Monatsertrag (kWh)
		//KYR= Jahresertrag (kWh)
		//KT0= Gesamtertrag (kWh)
		//PAC= Generatorleistung in W
		//UDC, UDCB, UDCC = Generator-Spannungen in Volt pro MPP-Tracker IDC,
		//IDCB, IDCC = Generator-Ströme in Ampere pro MPP-Tracker
		//UL1, IL1 = Netzspannung, Netzstrom
		//TKK= Temperatur Wechselrichter
		//*************************************************************************
      $wr 			= explode(",", $_IPS['VALUE']);
		SetValueString(13178 /*[Energie\PV_Anlage\Abfragezeitpunkt]*/, $wr[1].".".$wr[2].".".$wr[3]." ".$wr[4].":".$wr[5]." Uhr");
		SetValueFloat(44395 /*[Energie\PV_Anlage\Tagesertrag]*/, floatval($wr[6]));
		SetValueFloat(26579 /*[Energie\PV_Anlage\Monat]*/, floatval($wr[7]));
		SetValueFloat(51166 /*[Energie\PV_Anlage\Jahr]*/, floatval($wr[8]));
		SetValueFloat(40181 /*[Energie\PV_Anlage\Anlagengesamtertrag]*/, floatval($wr[9]));
		SetValueFloat(34628 /*[Energie\PV_Anlage\Max. Leistung]*/, floatval($wr[10]));
      SetValueFloat(34886 /*[Energie\PV_Anlage\Temperatur WR]*/, floatval($wr[19]));
}

?>

Gruß
Jens

Danke, das probiere ich am Wochenende mal aus :grinning_face_with_smiling_eyes::+1: