Systemfel wrote: ↑03 Feb 2020, 22:16
GCsceneID1 = 401
Mob ={709,777,710}
rule("786:scene== S2.click & 06:00..09:30 | 21:00..23:30 => GCsceneID1:start")
rule("786:scene== S2.click & 09:30..21:00 | 23:30..06:00 => Mob:msg='Kan bara släcka från sovrummet mellan 06:00-09:30 och 21:00-23:30'")
Till nu själva problemet och det är att den kör detta av sig själv vid start tiden 06:00 och 21:00 delvis den släcker huset utan någon har tryckt på knappen. inte så optimalt.. Man ska kanske göra detta med veriabler i stället ? på något sätt... eller borde det funka eller ?
Ibland måste man förstå lite hur ER "tänker" för att det ska bli rätt
Det är allmänt lite knepigt att använda OR (|) i huvudet på en regel (vänster om pilen).
I ditt fall är problemet att i ER har AND (&) högre prioritet än OR (|), så din regel ser ut som
Code: Select all
rule(" ( 786:scene== S2.click & 06:00..09:30 ) | 21:00..23:30 => GCsceneID1:start")
Det andra problemet är att tidsintervalluttryck i regel-huvudet av typ X..Y triggar regeln vid tidpunkt X (samt Y+1sekund, men det blir alltid falskt) - vilket nästan alltid är vad man vill ha - men inte i det här fallet.
Så vad som händer är att 786:scene == S2.click gör att regeln triggas när du klickar på 786.S2, men den fortsätter att vara sant tills man klickar på någon annan knapp på 786 (786:scene returnerar alltid senaste scen-knappen som trycktes).
...så kl 06:00 triggas scenen igen, och eftersom 786:scene == S2.click fortfarande är sann exekveras regeln.
...och sedan 21:00 triggas regeln igen, och eftersom det inte finns några andra villkor körs den igen.
Lösningen i det här fallet är att flytta tidsintervall testerna till höger om pilen - för uttryck höger om pilen triggar inte regeln.
Code: Select all
rule("786:scene== S2.click => (06:00..09:30 | 21:00..23:30) & GCsceneID1:start")
rule("786:scene== S2.click => (09:30..21:00 | 23:30..06:00) & Mob:msg='Kan bara släcka från sovrummet mellan 06:00-09:30 och 21:00-23:30'")
ER har if-then-else sedan en tid tillbaka så din regel går också att skriva som
Code: Select all
rule([[786:scene== S2.click =>
if 06:00..09:30 | 21:00..23:30 then
GCsceneID1:start
else
Mob:msg='Kan bara släcka från sovrummet mellan 06:00-09:30 och 21:00-23:30'
end]])
Edit: Du skulle kanske kunna testa mot S2.double så är det kanske mindre risk för att det släcks oavsiktligt?