Re: Lua kod för att styra lampor beroende på veckor?
Posted: 04 Nov 2019, 23:32
Tackar, blir perfekt
Allt inom Z-wave och IoT
https://www.zwaveforum.se/
Ja, -10:00 blir före soluppgången. +10:00 efter.
Code: Select all
rule("@sunrise-00:10 & wday('mon-fri') & wnum % 2 == 0 => kitchen.lampaTak:off")
:value=0 översätts till fibaro:call(ID,'setValue',0) och :off fibaro:call(ID,"turnOff") - dvs ingen större skillnad. Tycker om att använda :off när jag släcker lampor då koden känns mer "självdokumenterande"
Code: Select all
local _HueUserName = ".........." -- Hue API key
local _HueIP = "192.168.1.XX" -- Hue bridge IP
Code: Select all
-- Hue setup before main() starts. You can add more Hue.connect() inside this if you have more Hue bridges.
function HueSetup() if _HueUserName and _HueIP then Hue.connect(_HueUserName,_HueIP,"Hue") end end
Code: Select all
Hue.dump()
Code: Select all
Hue.define("Window lamp",12001)
Code: Select all
Rule.eval("@07:00 => 12001:on") -- Turn on lamp
Rule.eval("@07:00 => 12001:value=50") -- Dim to 50%
Code: Select all
HomeTable = {
kitchen = { lamp = 12001 }
}
Code: Select all
Rule.eval("@07:00 => kitchen.lamp:on")
Code: Select all
rule("lampa:off")
rule("lampa:on")
rule("lampa:value=50") -- Dimma till 50%
rule("lampa:value={99,0,0}") -- Sätt till röd färg
rule("lampa:value={0,99,0}") -- Sätt till blå färg
rule("lampa:value={0,0,99}") -- Sätt till grön färg
rule("lampa:value={0,0,99,50}") -- Sätt till grön färg, 50% dimmad
rule("lampa:value='Night scene' ") -- Sätt lampa till Hue scene 'Night scene'
Code: Select all
rule("$HueValue = lampa:values") -- :values returnerar alla Hue properities
rule("lampa:values = $HueValue") -- återställ värden till lampan.
Ja , du måste lägga till dem under --[[ %% propertiesTexan wrote: ↑08 Dec 2019, 14:02 Har en entré lampa som jag vill ska tändas då man öppnar dörren (magnet kontakt) och om jag är på insidan av dörren så ska den tändas av en rörelse sensor som jag har där och så länge det är rörelse så skall den hållas tänd och släckas efter 5min då ingen är där. Hur får man till det, är det bara att lägga till dessa två sensorer mellan --[[ och --]] och sedan bygga regeln........
sensors = {339, 345}
lampaEntre = 329
rule("sensors:breached & 04:10..22:30 => lampaBad:value=100")
Code: Select all
doorSensor = 339
motionSensor = 345
sensors = {doorSensor, motionSensor}
lampaEntre = 329
rule("sensors:breached & sunset-01:00..22:30 => lampaEntre:on")
rule("trueFor(00:05,sensors:safe) => lampaEntre:off")
Code: Select all
--[[
%% properties
339 value
345 value
220 value
51 value
211 value
%% events
5 CentralSceneEvent
22 GeofenceEvent
%% globals
TimeOfDay
Test
%% autostart
--]]
Code: Select all
dev =
{ livingroom = {lampaTak = 206, lampaBed = 205, lampaGlas = 308},
kitchen = {lampaWind = 33, lampaSink = 68},
bathroom = {lampaBad = 329, lampaMirr = 335},
closet = {lampaCloset = 152},
hallway = {lampaHall = 40},
},
Code: Select all
-- Dina regler
--rule("@now+00:00:02 => livingroom. lampaBed:on") -- Test light, turn on 2 seconds after ER started/saved
--rule("@sunset-00:10 & wnum % 2 == 1 => kitchen.lampaTak:value=30") -- Sätt till 30%, udda veckor, solnedgång-10min
-- Tänd och släck jämna veckor ( Jämn vecka = 0 )
rule("@05:28 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaSink:value=10") -- Sätt till 20%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaWind:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => livingroom.lampaTak:value=1")
rule("@05:28 & wday('fri') & wnum%2 == 0 => kitchen.lampaSink:value=10") -- Sätt till 20%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('fri') & wnum%2 == 0 => kitchen.lampaWind:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('fri') & wnum%2 == 0 => livingroom.lampaTak:value=1")
rule("@07:10 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaSink:value=0")
rule("@08:15 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaWind:value=0")
rule("@sunrise+00:10 => livingroom.lampaTak:value=0")
--rule("@08:10 & wday('mon-fri') & wnum%2 == 0 => livingroom.lampaTak:value=0")
rule("@23:00 & wday('mon-thu') => livingroom.lampaGlas:off")
rule("@24:00 & wday('fri-sun') => livingroom.lampaGlas:off")
-- Tänd och släck udda veckor ( Udda vecka = 1 )
--rule("@now+00:00:02 => 12001:on") -- Test light, turn on 2 seconds after ER started/saved
--rule("@now+00:00:02 => 12002:on") -- Test light, turn on 2 seconds after ER started/saved
rule("@sunset+03:00 & wday('mon-fri') => 12001:value'Night scene'")
rule("@04:28 & wday('mon-thu') & wnum%2 == 1 => kitchen.lampaSink:value=10") -- Sätt till 20%, udda veckor, soluppgång-10min
rule("@04:29 & wday('mon-thu') & wnum%2 == 1 => kitchen.lampaWind:value=1") -- Sätt till on, udda veckor, soluppgång-10min
rule("@04:29 & wday('mon-thu') & wnum%2 == 1 => livingroom.lampaTak:value=1")
rule("@04:10 & wday('fri') & wnum%2 == 1 => kitchen.lampaSink:value=10") -- Sätt till 20%, udda veckor, soluppgång-10min
rule("@04:10 & wday('fri') & wnum%2 == 1 => kitchen.lampaWind:value=1") -- Sätt till on, udda veckor, soluppgång-10min
rule("@04:11 & wday('fri') & wnum%2 == 1 => livingroom.lampaTak:value=1")
rule("@07:15 & wday('mon-fri') & wnum%2 == 1 => kitchen.lampaSink:value=0")
rule("@08:17 & wday('mon-fri') & wnum%2 == 1 => kitchen.lampaWind:value=0")
--rule("@sunrise+00:10 & wday('mon-fri') & wnum%2 == 1 => livingroom.lampaTak:value=0")
--rule("@08:10 & wday('mon-fri') & wnum%2 == 1 => livingroom.lampaTak:value=0")
sensors = {339, 345}
lampaBad = 329
lampaMirr = 335
rule("sensors:breached & 04:10..22:30 => lampaBad:value=100")
rule("sensors:breached & 22:30..04:10 => lampaBad:value=5")
rule("sensors:breached & 04:10..23:59 => lampaMirr:value=1")
rule("trueFor(00:04,sensors:safe) => lampaBad:off")
rule("trueFor(00:04,sensors:safe) => lampaMirr:off")
--
sensors = 220
lampaCloset = 152
rule("sensors:breached => closet.lampaCloset:value=1")
rule("trueFor(00:02,sensors:safe) => closet.lampaCloset:value=0")
--
doorsensor = 211
motionsensor = 51
sensors = {doorsensor, motionsensor}
lampaHall = 40
rule("sensors:breached => hallway.lampaHall:value=75")
rule("trueFor(00:03,sensors:safe) => hallway.lampaHall:off")
Code: Select all
rule("@05:28 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaSink:value=10") -- Sätt till 20%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => kitchen.lampaWind:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('mon-thu') & wnum%2 == 0 => livingroom.lampaTak:value=1")
rule("@05:28 & wday('fri') & wnum%2 == 0 => kitchen.lampaSink:value=10") -- Sätt till 20%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('fri') & wnum%2 == 0 => kitchen.lampaWind:value=1") -- Sätt till on%, jämna veckor, soluppgång-10min
rule("@05:29 & wday('fri') & wnum%2 == 0 => livingroom.lampaTak:value=1")
rule("@07:10 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaSink:value=0")
rule("@08:15 & wday('mon-fri') & wnum%2 == 0 => kitchen.lampaWind:value=0")
rule("@sunrise+00:10 => livingroom.lampaTak:value=0")
--rule("@08:10 & wday('mon-fri') & wnum%2 == 0 => livingroom.lampaTak:value=0")
rule("@23:00 & wday('mon-thu') => livingroom.lampaGlas:off")
rule("@24:00 & wday('fri-sun') => livingroom.lampaGlas:off")
-- Tänd och släck udda veckor ( Udda vecka = 1 )
--rule("@now+00:00:02 => 12001:on") -- Test light, turn on 2 seconds after ER started/saved
--rule("@now+00:00:02 => 12002:on") -- Test light, turn on 2 seconds after ER started/saved
rule("@sunset+03:00 & wday('mon-fri') => 12001:value'Night scene'")
rule("@04:28 & wday('mon-thu') & wnum%2 == 1 => kitchen.lampaSink:value=10") -- Sätt till 20%, udda veckor, soluppgång-10min
rule("@04:29 & wday('mon-thu') & wnum%2 == 1 => kitchen.lampaWind:value=1") -- Sätt till on, udda veckor, soluppgång-10min
rule("@04:29 & wday('mon-thu') & wnum%2 == 1 => livingroom.lampaTak:value=1")
rule("@04:10 & wday('fri') & wnum%2 == 1 => kitchen.lampaSink:value=10") -- Sätt till 20%, udda veckor, soluppgång-10min
rule("@04:10 & wday('fri') & wnum%2 == 1 => kitchen.lampaWind:value=1") -- Sätt till on, udda veckor, soluppgång-10min
rule("@04:11 & wday('fri') & wnum%2 == 1 => livingroom.lampaTak:value=1")
rule("@07:15 & wday('mon-fri') & wnum%2 == 1 => kitchen.lampaSink:value=0")
rule("@08:17 & wday('mon-fri') & wnum%2 == 1 => kitchen.lampaWind:value=0")
--rule("@sunrise+00:10 & wday('mon-fri') & wnum%2 == 1 => livingroom.lampaTak:value=0")
--rule("@08:10 & wday('mon-fri') & wnum%2 == 1 => livingroom.lampaTak:value=0")
badSensors = {339, 345}
--lampaBad = 329
--lampaMirr = 335
rule("badSensors:breached & 04:10..22:30 => bathroom.lampaBad:value=100")
rule("badSensors:breached & 22:30..04:10 => bathroom.lampaBad:value=5")
rule("badSensors:breached & 04:10..23:59 => bathroom.lampaMirr:value=1")
rule("trueFor(00:04,badSensors:safe) => bathroom.lampaBad:off; bathroom.lampaMirr:off")
-- rule("trueFor(00:04,badSensors:safe) => bathroom.lampaMirr:off")
--
closetSensors = 220
--lampaCloset = 152
rule("closetSensors:breached => closet.lampaCloset:value=1")
rule("trueFor(00:02,closetSensors:safe) => closet.lampaCloset:value=0")
--
doorsensor = 211
motionsensor = 51
doorSensors = {doorsensor, motionsensor}
--lampaHall = 40
rule("doorSensors:breached => hallway.lampaHall:value=75")
rule("trueFor(00:03,doorSensors:safe) => hallway.lampaHall:off")
Code: Select all
badSensors = {339, 345, 456}
rule("badSensors:breached & 04:10..22:30 => bathroom.lampaBad:value=100")
rule("badSensors:breached & 22:30..04:10 => bathroom.lampaBad:value=5")
rule("badSensors:breached & 04:10..23:59 => bathroom.lampaMirr:value=1")
rule("trueFor(00:02,badSensors:safe) => bathroom.lampaBad:off; bathroom.lampaMirr:off")
Code: Select all
motionsensor1 = 339
motionsensor2 = 345
mksensor = 456
badSensors = {motionsensor1, motionsensor2}
rule("mksensor:breached & 04:10..22:30 => bathroom.lampaBad:value=100; bathroom.lampaMirr:value=1")
rule("badSensors:breached & 04:10..22:30 => bathroom.lampaBad:value=100; bathroom.lampaMirr:value=1")
rule("badSensors:breached & 22:30..04:10 => bathroom.lampaBad:value=5; bathroom.lampaMirr:off")
rule("mksensor:breached & 22:30..04:10 => bathroom.lampaMirr:off; bathroom.lampaBad:value=5")
rule("trueFor(00:00,mksensor:safe) => bathroom.lampaBad:off; bathroom.lampaMirr:off")
rule("trueFor(00:01,badSensors:safe) => bathroom.lampaBad:off; bathroom.lampaMirr:off")
Prova det här, vi har en flagga 'iBadrum' som sätts till sant om ngn rör sig i badrummet medans dörren är stängd och sätts till falskt om den öppnas.Texan wrote: ↑09 Jan 2020, 00:10 Har skaffat en dörrsensor (456) till badrummet som jag tänkte att ifall dörren är stängt så blir lamporna tända ex max 30min ifall man ligger i badet med stängd dörr och lite rörelse eller sitter länge på stolen
Hur blir det då?
Code: Select all
badSensors = {339, 345, 456} rule("badSensors:breached & 04:10..22:30 => bathroom.lampaBad:value=100") rule("badSensors:breached & 22:30..04:10 => bathroom.lampaBad:value=5") rule("badSensors:breached & 04:10..23:59 => bathroom.lampaMirr:value=1") rule("trueFor(00:02,badSensors:safe) => bathroom.lampaBad:off; bathroom.lampaMirr:off")
Prövade detta men det känns inte som rätt sättCode: Select all
motionsensor1 = 339 motionsensor2 = 345 mksensor = 456 badSensors = {motionsensor1, motionsensor2} rule("mksensor:breached & 04:10..22:30 => bathroom.lampaBad:value=100; bathroom.lampaMirr:value=1") rule("badSensors:breached & 04:10..22:30 => bathroom.lampaBad:value=100; bathroom.lampaMirr:value=1") rule("badSensors:breached & 22:30..04:10 => bathroom.lampaBad:value=5; bathroom.lampaMirr:off") rule("mksensor:breached & 22:30..04:10 => bathroom.lampaMirr:off; bathroom.lampaBad:value=5") rule("trueFor(00:00,mksensor:safe) => bathroom.lampaBad:off; bathroom.lampaMirr:off") rule("trueFor(00:01,badSensors:safe) => bathroom.lampaBad:off; bathroom.lampaMirr:off")
Code: Select all
motionsensor1 = 339
motionsensor2 = 345
mksensor = 456
badSensors = {motionsensor1, motionsensor2}
rule("mksensor:breached & 04:10..22:30 => bathroom.lampaBad:value=100; bathroom.lampaMirr:value=1")
rule("badSensors:breached & 04:10..22:30 => bathroom.lampaBad:value=100; bathroom.lampaMirr:value=1")
rule("badSensors:breached & 22:30..04:10 => bathroom.lampaBad:value=5; bathroom.lampaMirr:off")
rule("mksensor:breached & 22:30..04:10 => bathroom.lampaMirr:off; bathroom.lampaBad:value=5")
rule("trueFor(00:05,mksensor:safe & !iBadrum) => bathroom.lampaBad:off; bathroom.lampaMirr:off")
rule("trueFor(00:05,badSensors:safe & !iBadrum) => bathroom.lampaBad:off; bathroom.lampaMirr:off")
rule("mkSensor:breached => iBadrum = false") -- Dörr öppnas, vi vet inte om ngn är i badrummet
rule("badSensors:breached => if mkSensor:safe then iBadrum = true end") -- Sensor breached och dörr stängd, ngn inne i badrummet
Ah, det blev en miss - nytt försök.
Code: Select all
motionsensor1 = 339
motionsensor2 = 345
mksensor = 456
badSensors = {motionsensor1, motionsensor2}
bathroom = { lampaBad = 100, lampaMirr = 101}
Util.triggerVar('iBadrum')
rule("mksensor:breached & 04:10..22:30 => bathroom.lampaBad:value=100; bathroom.lampaMirr:value=1")
rule("badSensors:breached & 04:10..22:30 => bathroom.lampaBad:value=100; bathroom.lampaMirr:value=1")
rule("badSensors:breached & 22:30..04:10 => bathroom.lampaBad:value=5; bathroom.lampaMirr:off")
rule("mksensor:breached & 22:30..04:10 => bathroom.lampaMirr:off; bathroom.lampaBad:value=5")
rule("mksensor:breached => iBadrum = false") -- Dörr öppnas, vi vet inte om ngn är i badrummet
rule("badSensors:breached => if mksensor:safe then iBadrum = true end") -- Sensor breached och dörr stängd, ngn inne i badrummet
rule("trueFor(00:05,badSensors:safe & mksensor:value & !iBadrum) => bathroom.lampaBad:off; bathroom.lampaMirr:off") -- check if sensors safe for 5min, retrigger rule every time door value changes