Ok, ich habe jetzt glaube ich den Fehler gefunden, weiß aber leider nicht wie ich das Lösen soll.
Wenn der Modus auf "Sonnenuntergang" steht, wird ja über den Schalter "Sunset", sobald dieser sich ändert, alles eingeschaltet. Wenn jetzt alles eingeschaltet wurde, dann ist auch alles in Ordnung. Wenn sich das Licht um z.B. 21 Uhr abgeschaltet hat und der Timecron um 22 Uhr wieder triggert, dann wird das Licht wieder eingeschaltet, da der Schalter "Sunset" immer noch An ist, wird die Rule getriggert.
Normalerweise würde ich den Sunset Schalter einfach nach einer Stunde wieder auf "Off" schalten lassen. Das Problem ist ja, wenn ich z.B. eine Stunde nach Sonnenuntergang nach Hause komme, dann triggert die Rule zwar aber das Licht geht nicht an, da der "Sunset" ja schon wieder aus ist.
Außerdem habe ich jetzt mal deine Variante probiert aber VS Code spuckt mir eine Menge Fehler aus:
Code: Alles auswählen
{
"resource": "/etc/openhab2/rules/beleuchtung.rules",
"owner": "_generated_diagnostic_collection_name_#0",
"code": "org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types",
"severity": 8,
"message": "Type mismatch: cannot convert from OnOffType to UnDefType",
"startLineNumber": 74,
"startColumn": 62,
"endLineNumber": 74,
"endColumn": 64
}
UND
Code: Alles auswählen
Type mismatch: cannot convert from UnDefType to String
Den oberen Fehler hat er in vielen verschiedenen Zeilen, den unteren Fehler hat er in zwei Zeilen (80, 81)
im OpenHAB Log sind aber keine Fehler, die Rules lädt er angeblich normal.
So sieht meine Rule jetzt aus:
Code: Alles auswählen
rule "Zeitschaltuhr"
when
Time cron "0 00 17-23 * * ?" or //täglich um 17, 18, 19 und 20 Uhr
Item Sunset changed to ON or
Item Spotlight1_Kitchen_Timer_On changed or
Item Spotlight1_Kitchen_Timer_Off changed or
Item Livingwall_Childsroom_Timer_On changed or
Item Livingwall_Childsroom_Timer_Off changed or
Item Anwesend changed
then
val Sl1_OnSel = if(Spotlight1_Kitchen_Timer_On.state instanceof Number) (Spotlight1_Kitchen_Timer_On.state as Number) else 0
val Sl1_OffSel = if(Spotlight1_Kitchen_Timer_Off.state instanceof Number) (Spotlight1_Kitchen_Timer_Off.state as Number) else 0
val Lc_OnSel = if(Livingwall_Childsroom_Timer_On.state instanceof Number) (Livingwall_Childsroom_Timer_On.state as Number) else 0
val Lc_OffSel = if(Livingwall_Childsroom_Timer_Off.state instanceof Number) (Livingwall_Childsroom_Timer_Off.state as Number) else 0
var Sl = NULL
var Lc = NULL
if(Anwesend.state == ON){
if(Sl1_OnSel == 0)
if(Sunset.state == ON) Sl = ON
else if(now.getHourOfDay > (15 + Sl1_OnSel)) Sl = ON
if(now.getHourOfDay > (19 + Sl1_OffSel)) Sl = ON
if(Lc_OnSel == 0)
if(Sunset.state == ON) Lc = ON
else if(now.getHourOfDay > (15 + Lc_OnSel)) Lc = ON
if(now.getHourOfDay > (19 + Lc_OffSel)) Lc = OFF
} else {
Lc = OFF
Sl = OFF
}
if(Sl != NULL && Sl != HUE_Kitchen_Spotlight1.getStateAs(OnOffType)) HUE_Kitchen_Spotlight1.sendCommand(Sl)
if(Lc != NULL && Lc != HUE_Childsroom_Livingwall.getStateAs(OnOffType)) HUE_Childsroom_Livingwall.sendCommand(Lc)
end