Hej,
Jag har bekymmer att hitta något sätt att få sovrumslampan att dimmra upp på angiven tid och dag.
Har ni hittat ett vettig och simpel lösning eller är det LUA som gäller i detta fallet?
Om så, har någon möjligtvis tid att hjälpa mig med ett script i LUA som skulle kunna fungera?
Det jag önskar för funktioner är:
Aktiveringstid: 05:30.
Aktiveringsdag: Mån-Fre.
Tid för den att dimmra upp 20 min.
En enhet skall styras.
Kl 07:00 släcker den om inte det skett innan via brytaren.
Dimmra från 1% till 100% på angiven tid
-
- Ny medlem
- Posts: 9
- Joined: 02 Aug 2016, 01:15
- 8
Fibaro HC 2
* 4st FGS-222.
* 1st FGS-212
* 2st FGD-212
* 1st FGWPx-10x
* 5st Scener
Litet men någon stans måste man börja
* 4st FGS-222.
* 1st FGS-212
* 2st FGD-212
* 1st FGWPx-10x
* 5st Scener
Litet men någon stans måste man börja
Det går att göra på lite olika sätt. Bl.a med EventRunner scenen som vi har en tråd i forumet om. Dock kräver den lite Lua kunskaper.
Tänkte istället slå ett slag för en Timer scen som jag har laddat upp på Fibaro forumet.
https://forum.fibaro.com/topic/47720-sc ... e-trigger/
Där lägger man till en %% time header i sina Lua scener och så kallas scenen på dessa tider.
Här lägger vi upp 20 tider mellan 05:30 och 05:50 och skickar med en 'tag' med det värde som dimmer ska dimma till.
07:00 sätter vi den till 0
För att den ska fungera måste du ladda ner Timer.lua v2.2 som finns i länken ovan och köra igång den på din HC2.
Även om du släcker före 05:50 så kommer den att fortsätta att dimma upp til 05:50. Det går att stoppa det med en extra test.
Tänkte istället slå ett slag för en Timer scen som jag har laddat upp på Fibaro forumet.
https://forum.fibaro.com/topic/47720-sc ... e-trigger/
Där lägger man till en %% time header i sina Lua scener och så kallas scenen på dessa tider.
Här lägger vi upp 20 tider mellan 05:30 och 05:50 och skickar med en 'tag' med det värde som dimmer ska dimma till.
07:00 sätter vi den till 0
För att den ska fungera måste du ladda ner Timer.lua v2.2 som finns i länken ovan och köra igång den på din HC2.
Även om du släcker före 05:50 så kommer den att fortsätta att dimma upp til 05:50. Det går att stoppa det med en extra test.
Code: Select all
--[[
%% properties
%% events
%% globals
%% time
05:30 weekdays 2
05:31 weekdays 5
05:32 weekdays 10
05:33 weekdays 15
05:34 weekdays 20
05:35 weekdays 25
05:36 weekdays 30
05:37 weekdays 35
05:38 weekdays 40
05:39 weekdays 45
05:40 weekdays 50
05:41 weekdays 55
05:42 weekdays 60
05:43 weekdays 65
05:44 weekdays 70
05:45 weekdays 75
05:46 weekdays 80
05:47 weekdays 85
05:48 weekdays 90
05:49 weekdays 95
05:50 weekdays 99
07:00 weekdays 0
--]]
DIMMER = 109
do local a,b=fibaro;b=a.getSourceTrigger;function a:getSourceTrigger()local c=b(a)local d=a:args()if type(d)=='table'and d[1]and type(d[1])=='table'then if d[1].type~= nil then return d[1]end end;return c end end
local st=fibaro:getSourceTrigger()
if st.type=='time' and st.time then
fibaro:debug(string.format("Triggered:%s, tag:'%s'",st.time,st.tag))
fibaro:call(DIMMER,"setValue",tonumber(st.tag))
end
if st.type=='time' and st.tag=='error' then
fibaro:debug("Time error:"..st.log)
end
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Eller så kan man använda en Dawn Simulator scen.
I den ställer man in hur lång tid ljuset skall tona upp, samt efter vilken kurva det skall ske.
Simulatorn har följande kurvor:
linear
inQuad
inExpo
outExpo
inOutQuad
inOutExpo
outInExpo
viewtopic.php?f=38&t=6355&hilit=dawn+simulator
I den ställer man in hur lång tid ljuset skall tona upp, samt efter vilken kurva det skall ske.
Simulatorn har följande kurvor:
linear
inQuad
inExpo
outExpo
inOutQuad
inOutExpo
outInExpo
viewtopic.php?f=38&t=6355&hilit=dawn+simulator
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Yep, hade glömt bort att den fanns. Dock måste man ha en scheduler för att starta scenen och exkludera helger (Exempelvis Time %% scenen)RH_Dreambox wrote: ↑10 Oct 2019, 08:53 Eller så kan man använda en Dawn Simulator scen.
viewtopic.php?f=38&t=6355&hilit=dawn+simulator
Jag fortsätter med Time%% exemplet.
En test om scenes startas upp efter 05:30 och lampan är av så insisterar den inte att fortsätta att dimmra (om ngn har vaknat och släckt lampan)
Dessutom tas start tiden från en fibaro global 'MORGON' som bör sättas till "05:30". Text från fibaro global kan substitueras in i Time%% regler med syntaxen <GLOBAL-NAME>
Kanke inte lika elegant som Dawn Simulator då man får handkoda dimm-kurvan. Å andra sidan kan man sätta den till blinkande
Code: Select all
--[[
%% properties
%% events
%% globals
%% time
<MORGON>+00:00 weekdays 2
<MORGON>+00:01 weekdays 5
<MORGON>+00:02 weekdays 10
<MORGON>+00:03 weekdays 15
<MORGON>+00:04 weekdays 20
<MORGON>+00:05 weekdays 25
<MORGON>+00:06 weekdays 30
<MORGON>+00:07 weekdays 35
<MORGON>+00:08 weekdays 40
<MORGON>+00:09 weekdays 45
<MORGON>+00:10 weekdays 50
<MORGON>+00:11 weekdays 55
<MORGON>+00:12 weekdays 60
<MORGON>+00:13 weekdays 65
<MORGON>+00:14 weekdays 70
<MORGON>+00:15 weekdays 75
<MORGON>+00:16 weekdays 80
<MORGON>+00:17 weekdays 85
<MORGON>+00:18 weekdays 90
<MORGON>+00:19 weekdays 95
<MORGON>+00:20 weekdays 99
07:00 weekdays 0
--]]
DIMMER = 109
do local a,b=fibaro;b=a.getSourceTrigger;function a:getSourceTrigger()local c=b(a)local d=a:args()if type(d)=='table'and d[1]and type(d[1])=='table'then if d[1].type~= nil then return d[1]end end;return c end end
local st=fibaro:getSourceTrigger()
if os.date("%H:%M) > fibaro:getGlobalValue("MORGON") and fibaro:getValue(DIMMER,"value") == "0" then
fibaro:abort() -- Someone may have turned off the lights after we started to dim... just exit.
end
if st.type=='time' and st.time then
fibaro:debug(string.format("Triggered:%s, tag:'%s'",st.time,st.tag))
fibaro:call(DIMMER,"setValue",tonumber(st.tag))
end
if st.type=='time' and st.tag=='error' then
fibaro:debug("Time error:"..st.log)
end
-
- Ny medlem
- Posts: 9
- Joined: 02 Aug 2016, 01:15
- 8
Tack för alla snabba och konsekventa svar.
Jag hittade igenom er en förenklad variant av det jag sökte,
kände mig mycket dum när jag inte hittade de i forumet tidigare vid sökningar
Denna såg verkligen simpel ut, och vid testande så fick jag den att fungera utan bekymmer hitintills.
Hittar ni något som inte är bra eller önödigt i den så får ni gärna komma med input
viewtopic.php?f=21&t=4081&p=9857&hilit=wakeup#p9857
Jag hittade igenom er en förenklad variant av det jag sökte,
kände mig mycket dum när jag inte hittade de i forumet tidigare vid sökningar
Denna såg verkligen simpel ut, och vid testande så fick jag den att fungera utan bekymmer hitintills.
Hittar ni något som inte är bra eller önödigt i den så får ni gärna komma med input
viewtopic.php?f=21&t=4081&p=9857&hilit=wakeup#p9857
Fibaro HC 2
* 4st FGS-222.
* 1st FGS-212
* 2st FGD-212
* 1st FGWPx-10x
* 5st Scener
Litet men någon stans måste man börja
* 4st FGS-222.
* 1st FGS-212
* 2st FGD-212
* 1st FGWPx-10x
* 5st Scener
Litet men någon stans måste man börja
Ok, bra att du hittade en lösning.
För att avsluta så kan jag visa hur det skulle se ut i ER med kurvorna från Dawn simulatorn. Här avbryts dimningen om ngn ändra värdet manuellt, ex. genom att släcka eller tända lampan under tiden den dimmar.
För att avsluta så kan jag visa hur det skulle se ut i ER med kurvorna från Dawn simulatorn. Här avbryts dimningen om ngn ändra värdet manuellt, ex. genom att släcka eller tända lampan under tiden den dimmar.
Code: Select all
function main()
:
:
do -- Dawn simulator code
equations = {
linear = function(t, b, c, d) return c * t / d + b; end,
inQuad = function(t, b, c, d) t = t / d; return c * math.pow(t, 2) + b; end,
inOutQuad = function(t, b, c, d) t = t / d * 2; return t < 1 and c / 2 * math.pow(t, 2) + b or -c / 2 * ((t - 1) * (t - 3) - 1) + b end,
outInExpo = function(t, b, c, d) return t < d / 2 and equations.outExpo(t * 2, b, c / 2, d) or equations.inExpo((t * 2) - d, b + c / 2, c / 2, d) end,
inExpo = function(t, b, c, d) return t == 0 and b or c * math.pow(2, 10 * (t / d - 1)) + b - c * 0.001 end,
outExpo = function(t, b, c, d) return t == d and b + c or c * 1.001 * (-math.pow(2, -10 * t / d) + 1) + b end,
inOutExpo = function(t, b, c, d)
if t == 0 then return b elseif t == d then return b + c end
t = t / d * 2
if t < 1 then return c / 2 * math.pow(2, 10 * (t - 1)) + b - c * 0.0005 else t = t - 1; return c / 2 * 1.0005 * (-math.pow(2, -10 * t) + 2) + b end
end,
}
Event.event({type='dimLight'},function(env)
local e,f = env.event,equations[env.event.curve] or equations['linear']
e.dir,e.start = e.dir or 1,e.start or 0
e.t = e.t or e.dir==1 and 0 or e.duration
local currV = tonumber(fibaro:getValue(e.id,"value"))
if e.v and currV ~= e.v then return end -- Someone changed the lightning, stop dimming
e.v = math.floor(f(e.t,e.start,e.stop,e.duration)+0.5)
fibaro:call(e.id,"setValue",e.v)
e.t=e.t+e.dir*e.interval
if 0 <= e.t and e.t <= e.duration then Event.post(e,os.time()+e.interval) end
end)
end
rule("lampID=199")
-- Ex. Dimma upp 05:30, dimma i 20min, stega med 1 minut. släck 07:00, vardagar
rule("@05:30 & wday('mon-fri') => post(#dimLight{id=lampID,start=0,stop=99,duration=00:20,interval=00:01,curve='outInExpo'})")
rule("@07:00 => lampID:off")
--Ex. Dimma ned (dir = -1)
rule("@22:00 & wday('mon-fri') => post(#dimLight{id=lampID,dir=-1,start=0,stop=99,duration=00:20,interval=00:01,curve='outInExpo'})")
end -- en main()
Denna nyper jag direkt när jag kommer hem
Tack @Jang för du delar med dig
Tack @Jang för du delar med dig
jang wrote: ↑11 Oct 2019, 15:33 Ok, bra att du hittade en lösning.
För att avsluta så kan jag visa hur det skulle se ut i ER med kurvorna från Dawn simulatorn. Här avbryts dimningen om ngn ändra värdet manuellt, ex. genom att släcka eller tända lampan under tiden den dimmar.
Code: Select all
function main() : : do -- Dawn simulator code equations = { linear = function(t, b, c, d) return c * t / d + b; end, inQuad = function(t, b, c, d) t = t / d; return c * math.pow(t, 2) + b; end, inOutQuad = function(t, b, c, d) t = t / d * 2; return t < 1 and c / 2 * math.pow(t, 2) + b or -c / 2 * ((t - 1) * (t - 3) - 1) + b end, outInExpo = function(t, b, c, d) return t < d / 2 and equations.outExpo(t * 2, b, c / 2, d) or equations.inExpo((t * 2) - d, b + c / 2, c / 2, d) end, inExpo = function(t, b, c, d) return t == 0 and b or c * math.pow(2, 10 * (t / d - 1)) + b - c * 0.001 end, outExpo = function(t, b, c, d) return t == d and b + c or c * 1.001 * (-math.pow(2, -10 * t / d) + 1) + b end, inOutExpo = function(t, b, c, d) if t == 0 then return b elseif t == d then return b + c end t = t / d * 2 if t < 1 then return c / 2 * math.pow(2, 10 * (t - 1)) + b - c * 0.0005 else t = t - 1; return c / 2 * 1.0005 * (-math.pow(2, -10 * t) + 2) + b end end, } Event.event({type='dimLight'},function(env) local e,f = env.event,equations[env.event.curve] or equations['linear'] e.dir,e.start = e.dir or 1,e.start or 0 e.t = e.t or e.dir==1 and 0 or e.duration local currV = tonumber(fibaro:getValue(e.id,"value")) if e.v and currV ~= e.v then return end -- Someone changed the lightning, stop dimming e.v = math.floor(f(e.t,e.start,e.stop,e.duration)+0.5) fibaro:call(e.id,"setValue",e.v) e.t=e.t+e.dir*e.interval if 0 <= e.t and e.t <= e.duration then Event.post(e,os.time()+e.interval) end end) end rule("lampID=199") -- Ex. Dimma upp 05:30, dimma i 20min, stega med 1 minut. släck 07:00, vardagar rule("@05:30 & wday('mon-fri') => post(#dimLight{id=lampID,start=0,stop=99,duration=00:20,interval=00:01,curve='outInExpo'})") rule("@07:00 => lampID:off") --Ex. Dimma ned (dir = -1) rule("@22:00 & wday('mon-fri') => post(#dimLight{id=lampID,dir=-1,start=0,stop=99,duration=00:20,interval=00:01,curve='outInExpo'})") end -- en main()
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Är det något mera som man ska tänka på för att fungera?
får detta i loggen men inget händer.
Har bara ändrat tiden allt annat är som i ditt förslag.
får detta i loggen men inget händer.
Code: Select all
[DEBUG] 17:33:00: [true]>>'Rule:40[@17:33 & wday('mon-fri') => post(#dimLight{id=lampID,start=0,stop=99,duration=00...]'
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Är det en dimmbar lampa?sonnyboy wrote: ↑11 Oct 2019, 17:37 Är det något mera som man ska tänka på för att fungera?
får detta i loggen men inget händer.Har bara ändrat tiden allt annat är som i ditt förslag.Code: Select all
[DEBUG] 17:33:00: [true]>>'Rule:40[@17:33 & wday('mon-fri') => post(#dimLight{id=lampID,start=0,stop=99,duration=00...]'
Ser det ut såhär?
Code: Select all
function main()
:
:
do -- Dawn simulator code
equations = {
linear = function(t, b, c, d) return c * t / d + b; end,
inQuad = function(t, b, c, d) t = t / d; return c * math.pow(t, 2) + b; end,
inOutQuad = function(t, b, c, d) t = t / d * 2; return t < 1 and c / 2 * math.pow(t, 2) + b or -c / 2 * ((t - 1) * (t - 3) - 1) + b end,
outInExpo = function(t, b, c, d) return t < d / 2 and equations.outExpo(t * 2, b, c / 2, d) or equations.inExpo((t * 2) - d, b + c / 2, c / 2, d) end,
inExpo = function(t, b, c, d) return t == 0 and b or c * math.pow(2, 10 * (t / d - 1)) + b - c * 0.001 end,
outExpo = function(t, b, c, d) return t == d and b + c or c * 1.001 * (-math.pow(2, -10 * t / d) + 1) + b end,
inOutExpo = function(t, b, c, d)
if t == 0 then return b elseif t == d then return b + c end
t = t / d * 2
if t < 1 then return c / 2 * math.pow(2, 10 * (t - 1)) + b - c * 0.0005 else t = t - 1; return c / 2 * 1.0005 * (-math.pow(2, -10 * t) + 2) + b end
end,
}
Event.event({type='dimLight'},function(env)
local e,f = env.event,equations[env.event.curve] or equations['linear']
e.dir,e.start = e.dir or 1,e.start or 0
e.t = e.t or e.dir==1 and 0 or e.duration
local currV = tonumber(fibaro:getValue(e.id,"value"))
if e.v and currV ~= e.v then return end -- Someone changed the lightning, stop dimming
e.v = math.floor(f(e.t,e.start,e.stop,e.duration)+0.5)
fibaro:call(e.id,"setValue",e.v)
e.t=e.t+e.dir*e.interval
if 0 <= e.t and e.t <= e.duration then Event.post(e,os.time()+e.interval) end
end)
end
rule("@17:33 & wday('mon-fri') => post(#dimLight{id=lampID,start=0,stop=99,duration=00:20,interval=00:01,curve='outInExpo'})")
rule("@17:33 & wday('mon-fri') => post(#dimLight{id=lampID,start=0,stop=99,duration=00:00:20,interval=00:00:01,curve='outInExpo'})")
Kör den på 20s med 1s steps.
Tips, om man vill testa en tidsregel direkt kan man skriva
rule("@now+2 & wday('mon-fri') => post(#dimLight...
så startar den 2 sekunder efter att scenen startat.
Jag har lagt in 'dim' som en standard feature i ER v3 B67.
med EventScript regler blir det
Code: Select all
fibaro:call(199,'dim',20,'up',1,'outExpo',0,99)
--dimmar upp device 199 under 20s, med 1s steg, funktion 'outExpo' och start 0 och stop 99
fibaro:call(199,'dim',20)
--dimmar upp device 199 under 20s, med 1s steg, funktion 'linear' och start 0 och stop 99
Code: Select all
rule("@05:30 => 199:dim={20,'up',1,'outExpo',0,99}")
-- eller
rule("@05:30 => 199:dim={20,'up'}") -- defaults to linear
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Ja, vad mer kan man säga än att "Gud hör bön"
En liten kort regel, och det fungerar strålande bra! Nu kan jag skippa scenen Dawn Simulator!
EDIT:
@jang, den där steg-parametern (tex. 1 s) är väl onödig?
Kan man inte bara ta och dela dim-tiden med skillnaden för start och stopp?
Med start 0 och stopp 99 och dim-tid 300 sek så delas 300 upp i 100 dim-steg?
En liten kort regel, och det fungerar strålande bra! Nu kan jag skippa scenen Dawn Simulator!
EDIT:
@jang, den där steg-parametern (tex. 1 s) är väl onödig?
Kan man inte bara ta och dela dim-tiden med skillnaden för start och stopp?
Med start 0 och stopp 99 och dim-tid 300 sek så delas 300 upp i 100 dim-steg?
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Det är lite knepigt. Om vi beräknar 100 punkter på kurvan, vilka punkter är intressanta? Om vi fördelar de jämt över intervallet så kanske vi får många punkter som är samma (på flacka partier) och få där det är intressant (ex. branta partier). Det blir ännu större problem om vi drar ut de 100 punkterna över ett större tidsintervall, ex 1 timme. Har vi en linjär kurva spelar det inte så stor roll.RH_Dreambox wrote: ↑12 Oct 2019, 11:18 @jang, den där steg-parametern (tex. 1 s) är väl onödig?
Kan man inte bara ta och dela dim-tiden med skillnaden för start och stopp?
Med start 0 och stopp 99 och dim-tid 300 sek så delas 300 upp i 100 dim-steg?
Iden med steglängd definerad i tid är att man kan anpassa själv lite. Tid istället för antal steg kändes mer intuitivt men det kan vara feltänkt.
Med 1s steglängd på 300s så beräknar vi 300 värden på en kurva från 0-99 och kanske vi plockar upp intressanta partierna i kurvan. Man skulle kunna sätta steglängd alltid till 1s, vilket också är default.
I nästa version så gör jag inget fibaro:call om värdet är samma som föregående för att minska på trafiken lite, så många små steglängder borde inte göra så mycket.