Das sieht jetzt schon besser aus und lässt sich leichter "lesen" und überblicken.
Das Problem an sich bleibt natürlich und lässt sich am einfachsten durch abtrennen des 'Sonst, wenn' in ein separates Programm beheben.
Programme werden immer von oben nach unten abgearbeitet und durch alles was nicht "nur prüfen" ist getriggert.
Die "Zusatzbedingung" 'bei Änderung' wird nicht im Vorfeld geprüft sondern erst wenn der triggernde Wert "an der Reihe" ist.
Dazu kommt es aber nicht da das Programm immer im ersten DANN landet und sich dann beendet.
A:Dein Programm rennt (durch "Lichtbedarf Mario" bzw. "Licht Mario" getriggert) los.
B: "Lichtbedarf Mario" hat sich geändert = WAHR;
C: "Lichtbedarf Mario" steht auf 'ist wahr' = WAHR;
D: alle Prüfbedingungen ok = WAHR;
DANN
E: "Licht Mario" --> setze auf 'ist wahr'
"Licht Mario" ist ein Trigger im 'Sonst, wenn' also springe zu... A
A: Jetzt rennt dein Programm (durch "Licht Mario" getriggert) los.
B: "Lichtbedarf Mario" ist nicht der Trigger muss also nicht auf Änderung geprüft werden;
C: "Lichtbedarf Mario" steht auf 'ist wahr' = WAHR;
D: alle Prüfbedingungen ok = WAHR;
DANN
E: "Licht Mario" --> setze auf 'ist wahr'
"Licht Mario" ist ein Trigger im 'Sonst, wenn' also springe zu... A
usw.
Durch den Retrigger-Haken werden auch die Timer immer wieder neu gestartet so das "Lichtbedarf Mario" nicht mehr auf 'ist falsch' gesetzt wird.
Schwer zu erklären, vielleicht kommt @Xel66 noch vorbei... er kann das besser.