Hallo Community,
ich will euch natürlich nicht den Script vorenthalten mit welchen ich die Werte aus der Solvis Steuerung mit IPS auslese.
Hier auch noch die Infos vom Hersteller http://www.solvis.de/fernbedienung-solvisremote.html
<?
$string = ReadDataFromSolvisRemote();
$arr = CreateArrayFromData($string);
print_r($arr);
function ReadDataFromSolvisRemote(){
$url = "http://xx.xx.xx.xx/sc2_val.xml";
$username = "xxx";
$password = "xxx";
$ch = curl_init();
curl_setopt($ch , CURLOPT_URL, $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
$string = curl_exec($ch);
curl_close($ch);
return $string;
}
function CreateArrayFromData($string){
$arr = array();
$string = substr ($string , 11); // erster Bereich übergehen
$string = substr ($string , 12); // Header übergehen
$string = substr ($string , 6); // Uhrzeit übergehen
$string = substr ($string , 4); // Anlagentyp
$string = substr ($string , 4); //Systemnummer
for ($i = 0; $i < 63; $i++) {
//Temps
if ($i<16){
$value = convertAtoH ($string , 4);
$string = substr ($string , 4);
if($value > 32767)
$value = $value - 65536;
$value = $value/10;
$arr['S'. ($i + 1)] = CreateArrEntry("Temperatur", $value, "°C");
}
// ??
else if($i == 16){
$value = convertAtoH ($string , 4);
$string = substr ($string , 4);
$arr['S16']=CreateArrEntry("???", $value, "l/m");
}
// Durchfluss
else if($i == 17){
$value = convertAtoH ($string , 4);
$string = substr ($string , 4);
$arr['S17']=CreateArrEntry("Durchfluss", $value, "l/h");
}
// AnalogIn
else if($i >= 18 && $i <=20){
$value = convertAtoH ($string , 4);
$string = substr ($string , 4);
}
// AnalogOut
else if($i >= 21 && $i <=24){
$value = convertAtoH ($string , 2);
$string = substr ($string , 2);
}
// Raumfühler
else if($i >= 25 && $i <=27){
$value = convertAtoH ($string , 4);
$string = substr ($string , 4);
if($value > 32767)
$value = $value - 65536;
$value = $value/10;
$arr['RF' .($i-24)] =CreateArrEntry("Raumfühler", $value, "°C");
}
// Outputs
else if($i >= 28 && $i <=41){
$value = convertAtoH ($string , 2);
$string = substr ($string , 2);
$arr['A' .($i-27)]=CreateArrEntry("Output", $value, "");
}
}
$string = substr ($string , 16); //Werte überspringen
$value = convertAtoH ($string , 4);
$string = substr ($string , 4);
$arr['SE']=CreateArrEntry("Solarertrag", $value, "kWh");
$string = substr ($string , 30); //Werte überspringen
$value = convertAtoH ($string , 4);
$string = substr ($string , 4);
$arr['SL']=CreateArrEntry("Solarertrag", $value, "kW");
return $arr;
}
function CreateArrEntry($name, $value, $unit){
$arr['Name'] = $name;
$arr['Value'] = $value;
$arr['Unit'] = $unit;
return $arr;
}
function convertAtoH($hexstring,$size){
$hexstring = substr($hexstring, 0, $size);
$chunkarray = Array();
for($i = 0; $i < ($size/2); $i++) {
$sstr = substr($hexstring,0,2);
$hexstring = substr($hexstring,2);
$chunkarray[] = $sstr;
}
if(strlen ($hexstring)) {
$chunkarray[] = $hexstring;
}
for($arsz = count($chunkarray); $arsz > 0; $arsz--) {
$hexstring .= $chunkarray[$arsz-1];
}
return hexdec($hexstring);
}
?>
Und als nächste kommt mein Brunner Heizkamin mit Wassertasche dran. Da wird ja in naher Zukunft auch die Möglichkeit existieren aus der Steuerung Daten auszulesen (http://www.mybrunner.de/).
Grüße Heinz