Hallo
Ich habe folgendes Szenario
In jedem Raum ist ein Bewegungsmelder vorhanden. Dieser soll im Tagesverlauf verschiedene Aufgaben haben.
Nachts
- Im Flur Licht dezent ein und ausschalten (Einschalthelligkeit für MDT Dimmer)
- Im Schlafzimmer nur Licht ausschalten
Tagsüber
- je nach Umgebungshelligkeit Licht ein und ausschalten
- Bei nicht aktivität über ca. halbe Stunde alle Lichter ausschalten, da keiner mehr im Raum ist
es sollen Tags andere Lichter als Nachts geschalten werden.
Das ganze wird irgendwie ganz schön komplizert.
Den Anfang hab ich schon mal gemacht. bin aber drauf und dran da nochmal ganz neu anzusetzen.
Hier noch der Code:
<?php
$IDOwn = $_IPS['SELF'];
$IDMain = IPS_GetParent ($IDOwn);
$IDOutputHard = IPS_GetVariableIDByName ("output_hardware", $IDMain);
$IDOutputSoft = IPS_GetVariableIDByName ("output_software (auf aktualisieren abfragen)", $IDMain);
$IDSetVorgabe = IPS_GetVariableIDByName ("settings_vorgabe", $IDMain);
$IDSetNachlauf = IPS_GetVariableIDByName ("settings_nachlaufzeit (sec)", $IDMain);
$IDSetBright = IPS_GetVariableIDByName ("settings_brightness", $IDMain);
$IDStatusBright = IPS_GetEvent(IPS_GetEventIDByName ("INFO_Bright", $_IPS['SELF']))['TriggerVariableID'];
// Hardware Status berechnen
$StatusHardware = 0;
foreach (IPS_GetChildrenIDs($_IPS['SELF']) as $ID) {
// Namen rausfiltern
if(IPS_GetName ($ID) == "BEW_Input" and GetValue (IPS_GetEvent($ID)['TriggerVariableID']) == true){$StatusHardware = $StatusHardware + 1;}else{};
}
if ($StatusHardware > 0){$StatusHardware = true;}else{$StatusHardware = false;}
if ($_IPS['SENDER'] == "Variable") {
IPS_SetScriptTimer ($IDOwn, 0);
}
if ($_IPS['SENDER'] == "TimerEvent") {
IPS_SetScriptTimer ($IDOwn, 0);
// setvalue ($IDOutputSoft, $StatusSoftware);
setvalue ($IDOutputSoft, false);
goto Programmende;
}
// Software Status berechnen
switch (getvalue ($IDMain)){
case 0: // Immer AUS
$StatusSoftware = false;
break;
case 1: // Immer EIN
$StatusSoftware = true;
break;
case 2: // Automatik je nach Vorgabe
switch (getvalue ($IDSetVorgabe)){
case 0: // Deaktiviert Nix machen
$StatusSoftware = getvalue ($IDOutputSoft);
break;
case 1: // Aus und Ein Immer
$StatusSoftware = $StatusHardware;
// Ausschalttimer starten
if ($StatusSoftware == false){IPS_SetScriptTimer ($IDOwn, 0); IPS_SetScriptTimer ($IDOwn, getvalue ($IDSetNachlauf)); goto Programmende;}
break;
case 2: // Aus und Ein Helligkeitsabhänig
if ($StatusHardware == true) {
// einschalten
if (getvalue ($IDStatusBright) < getvalue ($IDSetBright)){
// dunkel
$StatusSoftware = true;
}else{
$StatusSoftware = getvalue ($IDOutputSoft);
}
}else{
// ausschalten
$StatusSoftware = false;
}
// Ausschalttimer starten
if ($StatusSoftware == false){IPS_SetScriptTimer ($IDOwn, 0); IPS_SetScriptTimer ($IDOwn, getvalue ($IDSetNachlauf)); goto Programmende;}
break;
case 3: // Nur Ausschalten
if ($StatusHardware == false){
$StatusSoftware = false;
// Ausschalttimer starten
if ($StatusSoftware == false){IPS_SetScriptTimer ($IDOwn, 0); IPS_SetScriptTimer ($IDOwn, getvalue ($IDSetNachlauf)); goto Programmende;}
setvalue ($IDOutputSoft, $StatusSoftware);
}else{
$StatusSoftware = getvalue ($IDOutputSoft);}
break;
}
}
// Ausgabe der Statuswerte nur bei Änderung
if (getvalue ($IDOutputSoft) == $StatusSoftware){} else {setvalue ($IDOutputSoft, $StatusSoftware);}
Programmende:
if (getvalue ($IDOutputHard) == $StatusHardware){} else {setvalue ($IDOutputHard, $StatusHardware);}
Vielleicht hat da schonmal jemand sowas in der Art gemacht und kann helfen? PHP bin ich im grunde fit. Möchte das ganze allerdings variabel für jeden Raum gestalten über Links zu den Lichtern oder ähnliches.
Für Tips und Infos bin ich überaus dankbar.