noch ein Vorschlag.
Wäre es Möglich einen Ausgang für die Szenen zu Definieren, der angiebt ob alle Werte auf 0 sind?
Ich möchte die Szenen zur Raumsteuerung nutzen und damit ist jetzt aktuell immer Szene 0 OFF definiert, die alle Lichter ausschaltet wenn keiner mehr im Raum ist. für die Visu wäre es schön, wenn es einen Bool Wert gibt, der 0 wenn z.B. Szene OFF aktiv ist und 1 wenn irgenwas anderes oder Unbekannt aktiv ist.
Bin Gerade etwas in der Findungsphase wie man das am besten Standardisieren kann.
aktuell habe ich mir eine Baumstruktur gebaut.
wenn ich dann Schlafzimmer den Bool auf 0 hab, dann sind alle Lichter aus gegangen.
Möchte das jetzt über Szenen steuern.
Jeder Raum hat Bewegungsmelder verbaut. der Soll dann Tageweise die Szenen ansteuern. Dies soll jetzt durch die Szenensteuerung ersetzt werden. Da aktuell noch hinter jedem Licht ein Wochenplan Steckt, der die Einschalthelligkeit des jeweiligen Lichtes vorgibt.
wie habt ihr das so gelöst? Ich möchte noch ein paar Sonderszenen dazu packen, die dann aber von anderen Ereignissen getriggert werden. Die Szene „- OFF -“ ist immer die den Raum ausschaltet.
<?php
$IDScript = $_IPS['SELF'];
$EventName = IPS_GetName ($_IPS['EVENT']);
$IDAktiv = IPS_GetParent ($IDScript);
$SzeneVorgabe = '- OFF -';
$IDModul = IPS_GetInstanceIDByName ("Szenensteuerung", $IDAktiv);
$IDSzeneOff = IPS_GetVariableIDByName ($SzeneVorgabe, $IDModul);
$IDLichtAktiv = IPS_GetVariableIDByName ("LichtAktiv", $IDScript);
$IDDaemmerung = IPS_GetVariableIDByName ("info_dämmerung", $IDScript);
$Daemmerung = GetValue ($IDDaemmerung);
$BrightAktuell = getvalue (IPS_GetEvent(IPS_GetEventIDByName ("helligkeit", $IDScript))["TriggerVariableID"]);
$BewRaum = getvalue (IPS_GetEvent(IPS_GetEventIDByName ("bewegung_main", $IDScript))["TriggerVariableID"]);
$Stunde = date("H", time());
// Abfrage ob Script aktive
if (getvalue ($IDAktiv) == 0) {goto Programmende;}else{}
// Schaltet bei Dunkelheit einmalig ein
if ($EventName == "helligkeit" and $BrightAktuell < 300 and $Daemmerung == false) {setvalue ($IDDaemmerung, true); RequestAction (IPS_GetVariableIDByName (Tagesszene ($Stunde), $IDModul), 2);}
// Schaltet bei Helligkeit einmalig aus
if ($EventName == "helligkeit" and $BrightAktuell > 600 and $Daemmerung == true) {setvalue ($IDDaemmerung, false); Ausschalten (); }
// Schalten bei bewegung ein
if ($EventName == "bewegung_main" and $BewRaum == true and $Daemmerung == true) {RequestAction (IPS_GetVariableIDByName (Tagesszene ($Stunde), $IDModul), 2);}
// Schalten bei bewegung ein
if ($EventName == "bewegung_main" and $BewRaum == false and $Daemmerung == true) {Ausschalten ();}
function Ausschalten () {
global $IDLichtAktiv, $IDSzeneOff;
RequestAction ($IDSzeneOff, 2);
setvalue ($IDLichtAktiv, false);
}
function Tagesszene ($StundeUebergabe) {
global $IDLichtAktiv, $IDSzeneOff;
setvalue ($IDLichtAktiv, true);
switch ($StundeUebergabe){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5: return '4 Nachts'; break;
case 6:
case 7:
case 8: return '1 Früh'; break;
case 9:
case 10:
case 11: return '2 Tagsüber'; break;
case 12:
case 13:
case 14:
case 15:
case 16: return '3 Abends'; break;
case 17:
case 18:
case 19:
case 20:
case 21: return '4 Nachts'; break;
case 22:
case 23:
}
}
Programmende: