Möchte man die Position eines Rollladens im Designer visualisieren, besteht das Problem darin,
daß man einen Wert von 0 bis 100% auf 3 Icon reduzieren muss (wenn man nicht mehr hat).
Das folgende „IPSmagic-Skript“ tut genau dies: es liefert 3 Positionen: Auf, Mitte, Zu in Form einer Integer Variablen: 0,1,2
Diese kann dann im Designer den Icons zugeordnet werden (siehe Bild 1).
Im Skript selber müssen nur die Werte für „$auf“ und „$zu“ angepasst werden.
Getriggert wird das Skript z.B. durch „LEVEL“ (bei Änderung) beim HomeMatic System (siehe Bild 2: LEVEL: 27.5% > „Position“: 1 > Icon "Rollladen-Mitte wird angezeigt )
(später auch durch die errechnete „Position“ aus einem universellen (auch für 1-Wire) „IPS-Rollladen-Modul“ - ist in Vorbereitung)
MST
// (c) by IP-Symcon 2008
// lauffähig ab Version 2.0
// Trigger: "Bei Variablenänderung" > "LEVEL"
if($IPS_SENDER == "Execute")
{
echo "Diese Skript kann so nicht ausgeführt werden.
";
echo "Bitte triggern sie das Skript über eine Float Variable";
}
if($IPS_SENDER == "Variable")
{
if(!is_float($IPS_VALUE))
{
die("Skript kann nur Float Variablen verarbeiten!");
}
$vid = CreateVariableByName($IPS_VARIABLE, "Position", 1);
$auf = 20; // bis 20 Prozent > AUF
$zu = 80; // ab 80 Prozent > ZU
// sonst > MITTE
$pos = $IPS_VALUE*100;
if(($pos > 100) || ($pos < 0))
{
die("Position out of bounds (".$pos."), Variable: [".IPS_GetLocation($IPS_VARIABLE)."]");
}
if ($pos <= $auf) {
SetValueInteger($vid,0);
} elseif ($pos >= $zu) {
SetValueInteger($vid,2);
} else {
SetValueInteger($vid,1);
}
}
function CreateVariableByName($id, $name, $type)
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid===false) {
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "This Variable was created by Script #$IPS_SELF");
}
return $vid;
}