• Att tända eller släcka lampor eller andra enheter vid speciella tidpunkter på dygnet eller speciella dagar.
• Att repetera något under vissa tidsintervall, ex. att blinka en lampa eller att slå på en värmare 5min varje timme.
• Att reagera när en eller flera sensorer triggas och slå på belysning.
• Att slå av belysning när sensorer inte har triggats under en viss tid.
• Att skicka ett meddelande när ett fönster stått öppet i 10min, och fortsätta att skicka meddelanden var 10:e minut fönstret fortsätter att vara öppet.
• Att slå på belysning när medelvärdet av ett antal lux sensorer överstiger ett visst värde.
• Etc etc.
Den här typen av regler är enkla att definiera i EventRunner4.
Språket EventRunner använder för regler kallar jag för ”EventScript” och de har formen
Code: Select all
<villkor> => <kommandon>
Code: Select all
55:breached => 66:on
De flesta komponenter i HC3 has ett numeriskt id. Ex en z-wave rörelsesensor har id 55. I EventRunner kan vi testa vilka värden en device har med <id>:<property>.
I vårt exempel testar vi om rörelsesensor 55 har triggat med 55:breached som returnera sant eller falskt. Om vårt villkor är sant så utförs vårt kommando, 66:on som tänder lampan.
Villkoret i exemplet är bara en test, om 55 har triggats, men vi kan skriva mer komplexa test.
För att skapa komplexa tester använder vi operatorerna ’och’ som skrivs som ’&’, ’eller’ som skrivs som ’|’, och ’inte’ som skrivs som ’!’
Code: Select all
!55:breached => 66:off
Det finns en property för safe.
Code: Select all
55:safe => 66:off
Code: Select all
55:breached & 06:00..08:00 => 66:on
Code: Select all
55:breached & wday(’mon-fri’) => 66:on
Tidskonstanter i EventScript skrivs som HH:MM eller HH:MM:SS. Ex. sju på morgonen är 07:00 och 15 sekunder skrivs som 00:00:15.
Internt i regler översätts 00:00:15 till talet 15 och 07:00 till 3600*7, dvs antal sekunder.
Det gör att vi kan utföra vissa aritmetiska operationer med tid. 07:00+00:00:15 == 07:00:15 etc.
- Det finns vissa fördefinerade tidsvariabler
- ’sunset’ är tid för solnedgång i dag.
- ’sunrise’ är tid för soluppgång i dag.
- ’dusk’ är tid för gryning (lite tidigare än soluppgång)
- ’dawn’ är tid för skyming (lite senare än solnedgång)
- ’now’ tiden just nu (när regeln kör)
- ’midnight’ tiden för föregående midnatt.
Så vi kan trigga en regel om en enhet ändra värde.
Vi kan också trigga en regel på vissa tider
Code: Select all
@07:00 => 66:on
Code: Select all
@07:00 & wday(’sat-sun’) => 66:on
Vi kan också använda tidsvariabler
Code: Select all
@sunset-00:30 & wday(’sat-sun’) => 66:on
@ är en funktion som tar som argument ett antal sekunder efter midnatt och triggar regel då. Det låter oss göra aritmetik som i exemplet ovan. Vi kan också göra så här..
Code: Select all
@min(sunrise-00:30,07:00) & wday(’sat-sun’) => 66:on
Code: Select all
@00:00 => 66:on
Det finns en annan variant, @@ (två snabel-a) som istället triggar regel med det intervall som anges.
Code: Select all
@@00:05 => 66:toggle
Code: Select all
@@00:30 & sunrise..12:00 & wday(’mon-fri’) => 77:on
Låt oss återvända till regler som triggar om enheter ändrar värden.
Vo använda :safe och :breached för att testa om en sensor hade triggats eller gått tillbaka till normalt läge. Det finns en uppsjö av andra funktioner/tester. Här är några..
- <id>:safe – returnerar sant om sensor inte är triggad
- <id>:breached – returnerar sant om sensor är triggad
- <id>:isOn – returnera sant om enhet är påslagen
66:isOn => 88:on
Om 66 slås på, slå också på enhet 88
- <id>:isOff – returnera sant om enhet är avslagen
- <id>:lux – returnera enhets luxvärde (om det är en luxmätare)
- 99:lux > 200 => 88:on
Slå på enhet 88 om luxmätare 99s värde överstiger 200
- <id>:temp – returnera temperatur från en termometer
- <id>:bat -- returnerar batteristyrkan i procent för en batteridriven enhet
- <id>:isOpen – sant om enhet är öppen, fungerar för rollerShutter enheter
- <id>:isClosed
- <id>:isSecure -- fungerar för vissa lås
- <id>:isUnsecure
- <id>:on – Slå på enhet
- <id>:off – Slå av enhet
- <id>:value=<tal>, sätt enhets ’value’ till angivet värde. En dimmer kontrollerar sin ljusstyrka så
Ex.Om sensor 90 triggas efter solnedgång sätt dimnivå till 50% för dimmer 109Code: Select all
89:breached & sunset..sunrise => 109:value=50
En lista skrivs som {x,y,z,..}
Code: Select all
{89,88}:breached & sunset..sunrise => {109,110,11}:value=50
:safe fungerar lite annorlunda
Code: Select all
{89,88}:safe & sunset..sunrise => {109,110,11}:off
En annan funktion som kan vara bra att känna till är ’log’ som skriver ut en text i konsolen när regeln körs.
Ex.
Code: Select all
@sunset => log(’Nu är det solnedgång’)
Observera att vi använder ’….’ för att definiera strängen som ska skrivas ut och inte ”…”.
Anledningen är att våra regler är strängar som kommer att omges av ”…” och då kan vi inte ha strängar som definieras på samma sätt inuti våra regler – se exempel nedan.
Hur lägger man in regler i EventRunner4 QA?
Här är en video
https://www.youtube.com/watch?time_cont ... e=emb_logo
som går igenom hur man laddar ner och installerar EventRunner4.fqa
Man öppnar sedan QA editorn for EventRunner4 och skriver reglerna som strängar till funktionen rule(<string>)
Ex.
Code: Select all
rule(”{89,88}:safe & sunset..sunrise => {109,110,11}:off”)
Det finns många fler funktioner och sätt att interagera med enheter av olika typer. EventScript är egentligen ett komplett programmeringsspråk och vi ska senare hur vi kan använda det för att strukturera våra automatiseringsregler.