Hi,
Socket Server anlegen, Registervariable dazu und einen Script zuweisen;
und das schöne ist, wir brauchen NICHT zu pollen,
die Daten kommen im eingestelltem Intervall,
bzw. bei Switchen mit maximal 100ms Intervallverzögerung.
(schaut euch den Quellcode an)
Bei mir laufen für die Heizungsanlage momentan 5 ESP´s welche alle Ihre Daten auf einen gemeinsamen Port senden und dort dann die einzelnen Variablen beschreibt.
Ist alles noch in der Entstehungsphase, … natürlich träume ich von einem Modul…
<?
//IPS_LogMessage("Sender ", $_IPS['SENDER']);
if ($_IPS['SENDER'] == 'RegisterVariable'){
$data = $_IPS['VALUE'];
$Prefix1 = "&idx="; // damit fängt der Datensatz an
$Suffix1 = "&";
$Prefix2 = "&svalue="; // damit fängt der Datensatz an
$Suffix2 = "HTTP/1.1";
$Prefix3 = "&switchcmd="; // damit fängt der Datensatz an
$Suffix3 = "HTTP/1.1";
//$Ende1nachZeichen = 2; // und ist xx Zeichen lang
$AnfangID = strlen($Prefix1)+(strpos($_IPS['VALUE'], $Prefix1));
$EndeID = strpos($_IPS['VALUE'], $Suffix1, $AnfangID+1);
$ID = substr($_IPS['VALUE'], $AnfangID, $EndeID-$AnfangID);
$AnfangValue = strlen($Prefix2)+(strpos($_IPS['VALUE'], $Prefix2));
$EndeValue = strpos($_IPS['VALUE'], $Suffix2, $AnfangValue);
$Value = substr($_IPS['VALUE'], $AnfangValue, $EndeValue-$AnfangValue-1);
$AnfangSw = strlen($Prefix3)+(strpos($_IPS['VALUE'], $Prefix3));
$EndeSw = strpos($_IPS['VALUE'], $Suffix3, $AnfangSw);
$Switch = substr($_IPS['VALUE'], $AnfangSw, $EndeSw-$AnfangSw-1);
//IPS_LogMessage("Switch roh: ", $Switch);
if($Switch == "On"){
$Switch = true;
}else{
$Switch = false;
}
//IPS_LogMessage("Data rin: ", $data);
//IPS_LogMessage("AnfangID: ", $AnfangID);
//IPS_LogMessage("EndeID: ", $EndeID);
//IPS_LogMessage("EndeValue: ", $EndeValue);
//IPS_LogMessage("IDx: ", $ID);
//IPS_LogMessage("Value: ", $Value);
//IPS_LogMessage("Switch: ", $Switch);
switch ($ID) {
case "11":
SetValueFloat(19733 /*[Technik\Heizung\Heizungskreislauf\Vorlauftemperatur]*/, $Value);
break;
case "12":
SetValueFloat(35466 /*[Technik\Heizung\Ofen unten\Kesseltemperatur rein]*/, $Value);
break;
case "13":
SetValueFloat(27988 /*[Technik\Heizung\Ofen unten\Kesseltemperatur raus]*/, $Value);
break;
case "14":
SetValueFloat(16213 /*[Technik\Heizung\Heizungskreislauf\Raumtemperatur]*/, $Value);
break;
case "15":
SetValueFloat(50069 /*[Technik\Heizung\Ofen unten\Kesseltemperatur raus Anlegefühler]*/, $Value);
break;
case "16":
SetValueFloat(41903 /*[Technik\Heizung\Ofen unten\Kesseltemperatur]*/, $Value);
break;
case "17":
SetValueFloat(37351 /*[Technik\Heizung\Ofen unten\Kesseltemperatur rein Anlegefühler]*/, $Value);
break;
case "18":
SetValueFloat(37285 /*[Technik\Heizung\WW-Speicher\Speichertemperatur unten]*/, $Value);
break;
case "19":
SetValueFloat(38710 /*[Technik\Heizung\WW-Speicher\Speichertemperatur oben]*/, $Value);
break;
case "21":
SetValueFloat(17367 /*[Technik\Heizung\Ofen oben\Kesseltemperatur rein Anlegefühler]*/, $Value);
break;
case "22":
SetValueFloat(51305 /*[Technik\Heizung\Ofen oben\Kesseltemperatur]*/, $Value);
break;
case "23":
SetValueFloat(10757 /*[Technik\Heizung\Ofen oben\Kesseltemperatur raus Anlegefühler]*/, $Value);
break;
case "24":
SetValueFloat(51638 /*[Technik\Heizung\Ofen oben\Temperatur Ansaugluft]*/, $Value);
break;
case "25":
SetValueFloat(28208 /*[Technik\Heizung\Ofen oben\Temperatur Ofen unten]*/, $Value);
break;
case "26":
SetValueFloat(47645 /*[Technik\Heizung\WW-Speicher\Wassertemperatur unten]*/, $Value);
break;
case "27":
SetValueFloat(32898 /*[Technik\Heizung\WW-Speicher\Wassertemperatur oben]*/, $Value);
break;
case "28":
SetValueFloat(10847 /*[Technik\Heizung\WW-Speicher\Wassertemperatur Zirkulation]*/, $Value);
break;
case "29":
SetValueFloat(28889 /*[Technik\Heizung\Solaranlage Dach\Solarkollektor Rücklauftemperatur]*/, $Value);
break;
case "30":
SetValueFloat(26414 /*[Technik\Heizung\Solaranlage Dach\Solarkollektor Vorlauftemperatur]*/, $Value);
break;
case "31":
SetValueFloat(33279 /*[Technik\Heizung\Solaranlage Dach\Solarkollektor1 Temperatur]*/, $Value);
break;
case "91":
SetValue(51243 /*[Technik\Heizung\Heizungskreislauf\ESP_Heizungsraum_Uptime]*/, $Value);
break;
case "92":
$UpTimealt = GetValueInteger(25286 /*[Technik\Heizung\Ofen unten\ESP_PO_unten_Uptime]*/);
$Leistungsvorgabe = GetValueInteger(55234 /*[Technik\Heizung\Ofen unten\LeistungsVorgabeInt]*/);
SetValue(25286 /*[Technik\Heizung\Ofen unten\ESP_PO_unten_Uptime]*/, $Value);
// WatchDog
$UpTimeneu = $Value;
$Diff = $UpTimeneu - $UpTimealt;
if ($Diff < 0){
WWWReader_SetPage(52045 /*[WWW Reader Nabbis]*/, "http://192.168.113.201/control?cmd=PWM,13,".$Leistungsvorgabe);
IPS_ApplyChanges(52045 /*[WWW Reader Nabbis]*/);
WWWReader_UpdatePage(52045 /*[WWW Reader Nabbis]*/);
}
break;
case "93":
SetValue(45598 /*[Technik\Heizung\Solaranlage Dach\ESP_Solaranlage-Dach_Uptime]*/, $Value);
break;
case "94":
SetValue(33550 /*[Technik\Heizung\WW-Speicher\ESP_WW-Speicher_Uptime]*/, $Value);
break;
case "95":
SetValue(58161 /*[Technik\Heizung\Solaranlage Dach\U_ESP_Solaranlage-Dach]*/, $Value);
break;
case "96":
SetValue(28222 /*[Technik\Heizung\WW-Speicher\U_ESP_WW-Speicher]*/, $Value);
break;
case "97":
SetValue(59097 /*[Technik\Heizung\Heizungskreislauf\U_ESP_Heizungsraum]*/, $Value);
break;
case "98":
SetValue(29760 /*[Technik\Heizung\Ofen oben\U_ESP_PO_oben]*/, $Value);
break;
case "99":
SetValue(32802 /*[Technik\Heizung\Ofen unten\U_ESP_PO_unten]*/, $Value);
break;
}
}
?>
Hope it helps.
mfg
BerndJ