Moin!
Habe es gestern Nachmittag noch fertiggestellt. Ich habe ein Skript, was bei Variablenänderung der ganzen anzuzeigenden Objekte getriggert wird. Dieses macht nichts anderes, als eine Temp-Variable mit dem String zu beschreiben (immer). Also das „Aus,Organge,Aus, …“.
Dann gibt es ein Sende-Skript welches durch die Temp-Variable getriggert wird (und durch „unreach“ und „deaktiviert“). Wenn die Temp-Variable vor mehr als 5 Sekunden das letzte Mal geändert wurde und das Display nicht auf „Unreach“ oder „Deaktiviert“ steht, dann wird gesendet.
Wird innerhalb der 5 Sekunden erneut die Temp-Variable geändert, schiebt es sich wieder um 5 Sekunden nach hinten mit dem Senden, bis keine Änderung mehr erfolgt. So werde ich nach wie vor schnell am Display informiert, aber gerade bei „All-Off“ oder ähnlichen Aktionen mit viel An/aus wird nur einmal gesendet
Perfekt ![:slight_smile: :slight_smile:](https://community.symcon.de/images/emoji/win10/slight_smile.png?v=9)
So sieht der Objektbaum vom HMOULED16-Display im Wohnzimmer aus:
Skript „Wand-Display Wohnzimmer (HM-OU-LED16)“:
<?
$LED_Temp_Var = 56224; // Temp-Variable in die der String geschrieben wird ("Aus, Organge, Aus, ...")
// Hier werden den LED die Bool-Variablen zugeordnet (Fenster-STATE, Aktiv-STATE, ...)
$VariablenIDs_Quellen_AR = array(1=>48838,2=>30290,3=>37164,4=>20188,5=>49002,6=>32439,7=>29270,8=>52756,9=>46598,10=>57494,11=>59397,12=>19271,13=>46554,14=>53361,15=>38540,16=>23819);
$i = 1;
$LEDstringAR = "";
while ($i <= 16) {
$TrueFalse = GetValue($VariablenIDs_Quellen_AR[$i]);
//echo "LED-$i -- $TrueFalse
";
if ($TrueFalse == true) {
$LEDstringAR[$i] = "Orange";
}
else {
$LEDstringAR[$i] = "Aus";
}
$i++;
}
$LEDstring = implode(",", $LEDstringAR);
SetValue($LED_Temp_Var, $LEDstring);
?>
Skript „SendeSkript_HM-Display-WZ“:
<?
$LED_Temp_Var = 56224 /*[Skripte & Variablen\HomeMatic\Wand-Display Wohnzimmer (HM-OU-LED16)\SendeSkript_HM-Display-WZ\Temp-LED-Var]*/;
$DisplayID = 47176 /*[Hardware\HomeMatic\Wand-Display\DISPLAY02 (Wohnzimmer)\LED01]*/;
$DisplayUnreach = 59105 /*[Hardware\HomeMatic\Wand-Display\DISPLAY02 (Wohnzimmer)\DISPLAY02 (Wohnzimmer)\UNREACH]*/;
$DisplayDeaktiviert = 13189 /*[Skripte & Variablen\HomeMatic\Wand-Display Wohnzimmer (HM-OU-LED16)\Deaktiviert]*/;
$EVENT_UnreachFalse = 11059 /*[Skripte & Variablen\HomeMatic\Wand-Display Wohnzimmer (HM-OU-LED16)\SendeSkript_HM-Display-WZ\]*/;
$EVENT_DeaktiviertFalse = 19949 /*[Skripte & Variablen\HomeMatic\Wand-Display Wohnzimmer (HM-OU-LED16)\SendeSkript_HM-Display-WZ\]*/;
$EVENT_TempVarChange = 38931 /*[Skripte & Variablen\HomeMatic\Wand-Display Wohnzimmer (HM-OU-LED16)\SendeSkript_HM-Display-WZ\]*/;
$TempVar_LastChanged = IPS_GetVariable($LED_Temp_Var);
$TempVar_LastChanged = $TempVar_LastChanged["VariableChanged"];
$TempVar_TimeDiff = time() - $TempVar_LastChanged;
if (@$_IPS['EVENT'] == $EVENT_TempVarChange) {
IPS_SetScriptTimer($_IPS['SELF'], 5);
}
elseif ((@$_IPS['EVENT'] == $EVENT_UnreachFalse) OR (@$_IPS['EVENT'] == $EVENT_DeaktiviertFalse)) {
HMOULED16_Senden();
}
if ($_IPS['SENDER'] == "TimerEvent") {
if (($TempVar_TimeDiff >= 5) AND (GetValue($DisplayUnreach) == false) AND (GetValue($DisplayDeaktiviert) == false)) {
IPS_SetScriptTimer($_IPS['SELF'], 0);
HMOULED16_Senden();
}
elseif ((GetValue($DisplayUnreach) == true) OR (GetValue($DisplayDeaktiviert) == true)) {
IPS_SetScriptTimer($_IPS['SELF'], 0);
}
}
function HMOULED16_Senden() {
Global $DisplayID;
Global $LED_Temp_Var;
//$LED_Matrix = ["Rot","Grün","Orange","Aus","Aus","Aus","Aus","Aus","Aus","Aus","Aus","Aus","Aus","Aus","Aus","Aus"];
$LED_Matrix = explode(",", GetValue($LED_Temp_Var));
$Sequenz = 0;
foreach ($LED_Matrix as $key => $color) {
$LED_Nr = $key+1;
Calculate_LED_Control_Number ($LED_Nr, $Results);
$Sequenz = $Sequenz + $Results[$color];
}
@HM_WriteValueString($DisplayID, "ALL_LEDS", $Sequenz);
}
function Calculate_LED_Control_Number($LED_NR,&$Results) {
$Bereich = $LED_NR * 2;
$Rot_exp = $Bereich - 2;
$Gruen_exp = $Bereich - 1;
$Results["Rot"] = pow(2,$Rot_exp);
$Results["Grün"] = pow(2,$Gruen_exp);
$Results["Orange"] = $Results["Rot"]+$Results["Grün"];
$Results["Aus"] = 0;
}
?>
Kann natürlich auch noch erweitert werden, so dass man z.B. Integer-Variablen mit abfragen kann. Oder ein Zeitlimit einbauen, dass spätestens 15 Sekunden nach der 1. Temp-Variablen Änderung gesendet wird, …
Aber bei mir passt es so wunderbar und funktioniert traumhaft ![:slight_smile: :slight_smile:](https://community.symcon.de/images/emoji/win10/slight_smile.png?v=9)
Grüße,
Chris