Ich habe mal einen Workarround geschaffen und hoffe dass dieser bei Euch auch funktioniert:
Script anlegen:
<?
require_once "includes/rega_include.php";
if ( $IPS_SENDER == "Variable" )
{
$obj = IPS_GetObject($IPS_VARIABLE);
$parent_id = $obj['ParentID'];
$ips_addr = HM_GetAddress($parent_id);
$datapoint = "BidCos-RF.$ips_addr.LEVEL";
$cmd = sprintf("var result = dom.GetObject(\"$datapoint\").State();");
$result = Post_Request($cmd);
$position = round($result*100, 2);
$varid = @IPS_GetObjectIDByName("POSITION", $parent_id);
if ( $varid != 0 )
{
SetValueFloat(IPS_GetObjectIDByName("POSITION", $parent_id), $position);
IPS_SetVariableCustomAction($varid, $IPS_SELF);
} else
{
$varid = IPS_CreateVariable(2);
IPS_SetName($varid, "POSITION");
IPS_SetParent($varid, $parent_id);
IPS_SetVariableCustomProfile($varid, "MY-Level.HM");
IPS_SetHidden(IPS_GetObjectIDByName("LEVEL", $parent_id), true);
IPS_SetVariableCustomAction($varid, $IPS_SELF);
SetValueFloat($varid, $position);
}
}
if ( $IPS_SENDER == "WebFront" )
{
$obj = IPS_GetObject($IPS_VARIABLE);
$parent_id = $obj['ParentID'];
$value = $IPS_VALUE/100;
HM_WriteValueFloat($parent_id, "LEVEL", $value);
}
?>
Diesem Script fügt ihr für jeden Jallousieaktor ein Ereignis zu. Trigger ist die Variable WORKING eines jeden Aktors.
→ Bei bestimmten Wert: FALSE
False ist wichtig, damit das Script die Variable POSITION nach dem Fahren aktualisiert.
Das Script legt automatisch die Variable POSITION an und versteckt LEVEL. Auch wird der Variablen POSITION des Aktors eine „eigene Aktion“ hinterlegt. Und zwar dieses Script. Es kümmert sich auch um den Request vom WebFrontEnd.
Legt noch im Verzeichnis:
/Scripts
einen Ordner an mit Namen: includes
In diesesm Ordner legt Ihr eine Datei an mit Namen: rega_include.php
Inhalt dieser Datei:
<?php
$host = "<ip der HM-CCU>";
$port = "8181";
function Post_Request ($sdata)
{
include "config.php";
$fp = fsockopen ($host, $port, $errno, $errstr, 30);
if (!$fp)
echo "$errstr ($errno)<br />
";
else
{
$st = "POST /tclrega.exe HTTP/1.1
";
$st = $st . "Content-type: application/x-www-form-urlencoded
";
$st = $st . "Connection: Close
";
$st = $st . "Content-length: ". strlen($sdata) ."
";
fputs($fp,$st.$sdata);
$st = "";
$t = fgets($fp,100);
$st = $st . $t . "
";
while ($t != "
")
{
$t = fgets($fp,100);
}
$t = "";
while (!feof($fp))
{
$t .= fgets($fp,10000);
}
fclose($fp);
}
$xml = new SimpleXMLElement(utf8_encode($t));
return utf8_decode($xml->result);
}
?>
Bei mir läuft das nun vorerst einmal. Interessant wäre jedoch die Lösung des Problems. Ob es nun ein BUG der CCU ist, oder ob irgendwo anders vielleicht noch Informationen abgegriffen werden können.
Viele Grüße
Sascha