Jo genau, so in der Art hab ich es jetzt auch gelöst. Manchmal ist es doch viel einfacher als man denkt.
So mit Modulen programmieren bin ich noch nicht so weit. Ich habe schon „Bausteine“ allerdings läuft das bei mir so ab.
Jeder Raum hat die gleichen Variablen.
in dem script ist nur ein include des Main Scripts

und in dem dann der Code der für alle Elemente funktioniert.
<?php
// Alle Funktionen einbinden
include '35953.ips.php';
$IDScript = $_IPS['SELF']; // ID des Scriptes
$EventID = $_IPS['EVENT']; // ID des Events
$EventName = IPS_GetName ($EventID);
$Event = $_IPS['SENDER']; // Event: TimerEvent - Variabel =
$IDHauptschalter = IPS_GetParent ($IDScript);
$Hauptschalter = getvalue ($IDHauptschalter);
$IDEventHauptschalter = IPS_GetEventIDByName ("event_hauptschalter", $IDScript);
$IDEventBrightness = IPS_GetEventIDByName ("event_brightness", $IDScript);
$BrightnessAktuell = getvalue (IPS_GetEvent($IDEventBrightness)["TriggerVariableID"]);
$BrightnessMin = GetValue (IPS_GetVariableIDByName ("settings_brightness_min", $IDHauptschalter));
$BrightnessMax = GetValue (IPS_GetVariableIDByName ("settings_brightness_max", $IDHauptschalter));
$IDEventAuszeit = IPS_GetEventIDByName ("event_auszeit", $IDScript);
$IDAuszeit = IPS_GetVariableIDByName ("settings_Auszeit", $IDHauptschalter);
$IDModusAlt = IPS_GetVariableIDByName ("modus_old", $IDHauptschalter);
$IDEventMelder = IPS_GetEventIDByName ("event_melder", $IDScript);
$IDMelder = IPS_GetEvent($IDEventMelder)["TriggerVariableID"];
$IDTimerHaupt = IPS_GetEventIDByName ("timer_hauptschalter", $IDScript);
$TimerHauptActiv = IPS_GetEvent ($IDTimerHaupt)["EventActive"];
$TimerHauptClock = time() + getvalue ($IDAuszeit) + 1;
$IDLichterListe = IPS_GetInstanceIDByName ("Lichter", IPS_GetParent ($IDScript));
$IDMasterGruppe = IPS_GetLink(IPS_GetLinkIDByName ("OFF", IPS_GetParent ($IDScript)))['TargetID'];
$Auszeit = getvalue ($IDAuszeit);
$IDDaemmerung = IPS_GetVariableIDByName ("info_daemmerung", $IDHauptschalter);
/*
// Einschalthelligkeit übertragen für Schalter
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
foreach(IPS_GetChildrenIDs ($IDLichterListe) as $IDLicht){
$Einschalthelligkeit = getvalue ($IDLicht);
$Ziel = IPS_GetLink(IPS_GetLinkIDByName ("ziel", $IDLicht))['TargetID'];
//Einschalthelligkeit übertragen
if (IPS_GetVariable ($Ziel)['VariableProfile'] == '~Scaling.KNX' and
$Einschalthelligkeit <= 100 ){
$Name = explode('.', IPS_getname (IPS_GetParent ($Ziel)))[0].".Einschaltwert";;
$IDEinschalt = IPS_GetVariableIDByName ("Wert", IPS_GetInstanceIDByName ($Name, IPS_GetParent (IPS_GetParent ($Ziel))));
if (getvalue ($IDEinschalt) != $Einschalthelligkeit) {RequestAction ($IDEinschalt, $Einschalthelligkeit); }else{}
}else{}
}
*/
// ############################################################################ <<<<<<<<<<<<<<<<<-----------------------
// Dämmerung abfragen -- (Was ist mit modi einbindung?)
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if ($EventID == $IDEventBrightness and
$BrightnessAktuell < $BrightnessMin and
getvalue ($IDDaemmerung) == false ){
setvalue ($IDDaemmerung, true);
// Einmalig Licht wenn jemand da ist einschalten
if ($Hauptschalter == 1 and
getvalue ($IDMelder) == true and
getvalue ($IDMasterGruppe) == false ){
Lichtmanager (true);
}else{}
}else{}
if ($EventID == $IDEventBrightness and
$BrightnessAktuell > $BrightnessMin + 100 ){
setvalue ($IDDaemmerung, false);
}else{}
if ($EventID == $IDEventBrightness and
$BrightnessAktuell > $BrightnessMax ){
setvalue ($IDDaemmerung, false);
// Licht ausschalten
Lichtmanager (false);
}else{}
// Modus ändern
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if ($EventID == $IDEventHauptschalter ){
setvalue ($IDModusAlt, $_IPS['OLDVALUE']);
setvalue ($IDAuszeit, 0);
IPS_SetEventActive($IDTimerHaupt, false);
}else{}
// Melder deaktivieren - Timer setzen
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if ($EventID == $IDEventAuszeit and
$Auszeit > 0 ){
if (IPS_GetEvent ($IDTimerHaupt)['EventActive'] == false){
setvalue ($IDModusAlt, getvalue ($IDHauptschalter));
}else{}
// Event von Hauptschalter kurzzeitig ausschalten
IPS_SetEventActive ($IDEventHauptschalter, false);
IPS_Sleep (500);
RequestAction ($IDHauptschalter, 0);
IPS_Sleep (500);
IPS_SetEventActive ($IDEventHauptschalter, true);
IPS_SetEventCyclicTimeBounds($IDTimerHaupt, $TimerHauptClock, 0);
IPS_SetEventActive($IDTimerHaupt, true);
}else{}
// Alten Modus auswählen wenn Timer abgelaufen
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if ($EventID == $IDTimerHaupt ){
RequestAction ($IDHauptschalter, getvalue($IDModusAlt));
setvalue ($IDAuszeit, 0);
IPS_SetEventActive($IDTimerHaupt, false);
}else{}
// Licht schalten
// -------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if ($EventID == $IDEventMelder or
$EventID == $IDEventHauptschalter ){
switch ($Hauptschalter) {
case 0: // 0 = Nix machen
break;
case 1: // 1 = ON OFF
if (getvalue ($IDMelder) == true and
$BrightnessAktuell < $BrightnessMin ){
Lichtmanager (true);
}else{}
if (getvalue ($IDMelder) == false ){
Lichtmanager (false);
}else{}
break;
case 2: // 2 = Nur Aus
if (getvalue ($IDMelder) == false ){
Lichtmanager (false);
}else{}
break;
}
}else{}
function Lichtmanager ($StatusNeu) {
global $IDScript, $IDLichterListe, $IDMasterGruppe;
foreach(IPS_GetChildrenIDs ($IDLichterListe) as $IDLicht){
$Einschalthelligkeit = getvalue ($IDLicht);
$Ziel = IPS_GetLink(IPS_GetLinkIDByName ("ziel", $IDLicht))['TargetID'];
// Licht schalten
if ($StatusNeu == true and $Einschalthelligkeit != 999 and getvalue ($Ziel) == 0) {RequestAction($Ziel, $Einschalthelligkeit); }else{}
if ($StatusNeu == false) {RequestAction($Ziel, 0); }else{}
}
}
Das wäre Sicher eine Sache für ein Modul. Nur tu ich mir mit der Entwicklung aktuell noch schwer. Bzw ich habs noch nie versucht. Dieses YouTube Tutorial von Symcon hab ich mal angeschaut. allerdings bin ich da nicht so wirklich durchgestiegen.
Evtl kannst du mir mal auf die Sprünge helfen