Hi,
sorry, dass ich mich nicht gemeldet habe, aber ich komme nur noch am Wochenende mal vorbei uns lese im Forum da ich selbst im Moment an IPS keine Änderungen mehr durchführt.
Die Adresse Deines Aktors (FEQ0036933:3) ist korrekt? Ich vermute mal Du hast Sie aus dem WebUI ausgelesen.
Wie Du geschrieben hast, möchtest Du den aktuellen Status auslesen. Hier gibt es zwei Möglichkeiten. Du kannst direkt (über die CCU) den Aktor fragen (dauert länger und lohnt sich nicht, da die CCU den korrekten Status ohnehin gespeichert hat). Oder Du liest den in der CCU gespeicherten Status aus.
Die notwendigen Befehle sind State (direkt am Aktor lesen) oder Value (gespeicherter Status aus der CCU lesen)
Du hast jetzt STICKY_UNREACH benutzt. Das geht leider nicht. Hiermit kannst Du prüfen ob ein Wettermodul (Temperatur, Feuchtigkeit…) erreichbar ist.
Nur zur Info noch vorneweg. Wenn Du prüfen willst ob ein Aktor erreichbar ist, dann musst Du UNREACH benutzen. Allerdings wird UNREACH über einen anderen Kanal (immer 0) abgefragt.
Ich schlage vor, Du fängst noch mal neu an. Ich hoffe Du hast einen Schaltaktor, der in eine Steckdose gesteckt wird. Den bitte holen und in eine Steckdose an Deinem Arbeitsplatz einstecken.
Bitte die Verwaltungskonsole öffnen und folgendes Script neu anlegen:
<?
$CCU_IP="192.168.178.99";
$geraet="BidCos-RF.FEQ0072971:1";
$geraet_u="BidCos-RF.FEQ0072971:0";
$ccu_status="";
// Schalten
//$result=Post_Request ("var result = dom.GetObject('".$geraet.".STATE').State(true);");
//$result=Post_Request ("var result = dom.GetObject('".$geraet.".STATE').State(false);");
//echo "result=$result";
// Status abfragen
$ccu_status=Post_Request ("var state = dom.GetObject('".$geraet.".STATE').State();");
echo "State=".Get_Value("state")."
";
// oder
$ccu_status=Post_Request ("var value = dom.GetObject('".$geraet.".STATE').Value();");
echo "Value=".Get_Value("value")."
";
$ccu_status=Post_Request ("var value = dom.GetObject('".$geraet_u.".UNREACH').State();");
echo "unreach=".Get_Value("value")."
";
function Post_Request ($sdata)
{
global $CCU_IP;
$fp = fsockopen ($CCU_IP, 8181, $errno, $errstr, 2);
if (!$fp)
echo "$errstr ($errno)<br />
";
else
{
stream_set_blocking ( $fp , 1 ); // sicher gehen, dass der stream im non blocking Mode arbeitet
$st = "POST /tclrega.exe HTTP/1.1
";
$st = $st . "Content-type: application/x-www-form-urlencoded
";
$st = $st . "Content-Length: ". strlen($sdata) ."
";
$st = $st . "Connection: Close
";
fputs($fp,$st.$sdata);
$st = "";
$t = fgets($fp,500);
$st = $st . $t . "
";
while ($t != "
")
{
$t = fgets($fp,500);
}
$t = "";
while (!feof($fp))
{
$t .= fgets($fp,10000 /*[Objekt #10000 existiert nicht]*/);
}
fclose($fp);
}
return $t;
}
function Get_Value($var)
{global $ccu_status;
ereg("<".$var.">(.*)<\/".$var.">",$ccu_status,$tmp);
return($tmp[1]);
}
?>
Die benötigten Variablen findest Du am Anfang des Scripts:
$CCU_IP=„192.168.178.99“;
dürfte klar sein
$geraet=„BidCos-RF.FEQ0072971:1“;
Hier bitte Deine Adresse BidCos-RF.xxxx:1 eintragen.
$geraet_u=„BidCos-RF.FEQ0072971:0“;
Hier wird die selbe Adresse eingetragen aber für Kanal 0 (UNREACH)
Danach kannst Du oben rechts auf ausführen klicken und solltest z. B. folgende Ausgabe erhalten:
State=false
Value=false
unreach=false
Das bedeutet jetzt: Das Gerät meldet, dass es ausgeschaltet ist. Der Status in der CCU ist „ausgeschaltet“. Unreach ist false, also ist das Gerät erreichbar.
Du kannst mal etwas rumspielen, die Steckdose einschalten, wieder abfragen, oder mal einschalten, aus der Steckdose ziehen und dann abfragen (sollte dann dies ergeben):
State=false
Value=true
unreach=true
Der Aktor sagt er ist aus, (oder meldet sich nicht) der gespeicherte Status in der CCU ist „ein“. Der Aktor ist nicht erreichbar.
Du wolltest ja den Status abfragen, daher würdest Du den Befehl value benutzen:
$ccu_status=Post_Request ("var value = dom.GetObject('".$geraet.".STATE').Value();");
Das ganze andere Gedöns (State und UNREACH) brauchst Du nicht.
Ich wünsche einen schönen Tag.
Christoph.