Page 19 of 25
Re: EventRunner
Posted: 25 Feb 2020, 16:56
by jang
RH_Dreambox wrote: ↑25 Feb 2020, 14:28
@PeterM5 Kolla du också för säkerhets skull, men när jag testade så blev det bara ett blink på de inställda 30 sekunderna. Men kanske har jag missat något?
Vi sparar lampans 'state' före 1s vilan, sedan kollar vi om dess 'state' ändrats efter vilan, om så har ngn klickat på knappen, och isåfall avslutar vi loopen.
@jang Är jag helt ute och reser om jag säger att efter 1 sek paus så ändras ju statusen av regeln och villkoret för att stänga av uppfylls?
Du har rätt, det är ngt skumt med det här - jag återkommer....
Re: EventRunner
Posted: 25 Feb 2020, 17:23
by jang
jang wrote: ↑25 Feb 2020, 16:56
RH_Dreambox wrote: ↑25 Feb 2020, 14:28
@PeterM5 Kolla du också för säkerhets skull, men när jag testade så blev det bara ett blink på de inställda 30 sekunderna. Men kanske har jag missat något?
Vi sparar lampans 'state' före 1s vilan, sedan kollar vi om dess 'state' ändrats efter vilan, om så har ngn klickat på knappen, och isåfall avslutar vi loopen.
@jang Är jag helt ute och reser om jag säger att efter 1 sek paus så ändras ju statusen av regeln och villkoret för att stänga av uppfylls?
Du har rätt, det är ngt skumt med det här - jag återkommer....
Ok, jag har en wall-plug, och det visar sig att om man om man läser värdet, slår på pluggen och sedan läser värdet igen så hinner inte HC2:an uppdatera värdet. ER är för snabb
Här har jag en åsikt att Fibaro borde optimistiskt uppdatera värdet och sedan om det visade sig vara fel så sätta tillbaka det till gamla värdet - men jag kan förstå att det här var enklare.
Så om man testar:
Code: Select all
print(fibaro.getValue(17,"value"))
fibaro.call(17,"turnOn")
print(fibaro.getValue(17,"value"))
blir det samma värde även om vi tänt. I vårt fall så togglar vi värdet men principen är densamma. Vad vi kan göra är att låta lampan få lite tid på sig att uppdatera sitt värde, dvs vi läser det före vi togglar. Testen blir då "state==lampa:value", dvs vår toggel hade ingen verkan för ngn switchade tillbaka värdet.
Den här koden funkar för mig med min wall plug.
Code: Select all
rule([[sensor.garage_pir:breached =>
local lampa,state = garage.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until sensor.garage_pir:safe | state==lampa:value;
lampa:off]])
Re: EventRunner
Posted: 25 Feb 2020, 17:36
by RH_Dreambox
Den här koden funkar för mig med min wall plug.
CODE: SELECT ALL
rule([[sensor.garage_pir:breached =>
local lampa,state = garage.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until sensor.garage_pir:safe | state==lampa:value;
lampa:off]])
Ja den koden fungerade bättre, så nu borde även @PeterM5 bli nöjd
Re: EventRunner
Posted: 25 Feb 2020, 23:52
by PeterM5
RH_Dreambox wrote: ↑25 Feb 2020, 17:36
Den här koden funkar för mig med min wall plug.
CODE: SELECT ALL
rule([[sensor.garage_pir:breached =>
local lampa,state = garage.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until sensor.garage_pir:safe | state==lampa:value;
lampa:off]])
Ja den koden fungerade bättre, så nu borde även @PeterM5 bli nöjd
Det fungerar som tänkt när jag testar
Men när jag ska lägga till min lampa i hallen och sensorn i garaget får jag felmeddelande.
Hur ska koden se ut med mina device?
Code: Select all
--[[
%% properties
298 value
381 value
--]]
HT =
{
hall = {lampa = 298},
bilplats = {sensor = 381},
}
rule([[HT.bilplats.sensor:breached =>
HT.hall.lampa,state = HT.hall.lampa,nil;
repeat state=HT.hall.lampa:value; HT.hall.lampa:toggle; wait(1) until HT.bilplats.sensor:safe | state==HT.hall.lampa:value;
HT.hall.lampa:off]])
Re: EventRunner
Posted: 26 Feb 2020, 12:54
by RH_Dreambox
Så här skall din regel se ut.
Vill du inte ha tidsintervallet så tar du bort detta ( & 23:00..06:00 ).
Code: Select all
rule([[bilplats.sensor:breached & 23:00..06:00 =>
local lampa,state = hall.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until bilplats.sensor:safe | state==lampa:value;
lampa:off]])
Re: EventRunner
Posted: 26 Feb 2020, 13:08
by jang
RH_Dreambox wrote: ↑26 Feb 2020, 12:54
Så här skall din regel se ut.
Vill du inte ha tidsintervallet så tar du bort detta ( & 23:00..06:00 ).
Code: Select all
rule([[bilplats.sensor:breached & 23:00..06:00 =>
local lampa,state = hall.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until bilplats.sensor:safe | state==lampa:value;
lampa:off]])
dvs om du gjort
Re: EventRunner
Posted: 26 Feb 2020, 22:03
by PeterM5
jang wrote: ↑26 Feb 2020, 13:08
RH_Dreambox wrote: ↑26 Feb 2020, 12:54
Så här skall din regel se ut.
Vill du inte ha tidsintervallet så tar du bort detta ( & 23:00..06:00 ).
Code: Select all
rule([[bilplats.sensor:breached & 23:00..06:00 =>
local lampa,state = hall.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until bilplats.sensor:safe | state==lampa:value;
lampa:off]])
dvs om du gjort
Code: Select all
rule([[HT.bilplats.sensor:breached | HT.outserverroom.sensor:breached & $TOD=='Sleep' =>
local lampa,state = HT.kontor.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until trueFor(00:02:00,HT.bilplats.sensor:safe) | state==lampa:value;
lampa:off]])
Tack, nu funkar det.
Går det att använda en global variabel också, jag får inte detta att fungera?
Re: EventRunner
Posted: 26 Feb 2020, 22:13
by PeterM5
PeterM5 wrote: ↑26 Feb 2020, 22:03
jang wrote: ↑26 Feb 2020, 13:08
RH_Dreambox wrote: ↑26 Feb 2020, 12:54
Så här skall din regel se ut.
Vill du inte ha tidsintervallet så tar du bort detta ( & 23:00..06:00 ).
Code: Select all
rule([[bilplats.sensor:breached & 23:00..06:00 =>
local lampa,state = hall.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until bilplats.sensor:safe | state==lampa:value;
lampa:off]])
dvs om du gjort
Code: Select all
rule([[HT.bilplats.sensor:breached | HT.outserverroom.sensor:breached & $TOD=='Sleep' =>
local lampa,state = HT.kontor.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until trueFor(00:02:00,HT.bilplats.sensor:safe) | state==lampa:value;
lampa:off]])
Tack, nu funkar det.
Går det att använda en global variabel också, jag får inte detta att fungera?
Code: Select all
rule([[$TOD=='Sleep' & HT.bilplats.sensor:breached | HT.outserverroom.sensor:breached =>
local lampa,state = HT.kontor.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until trueFor(00:02:00,HT.bilplats.sensor:safe) | state==lampa:value;
lampa:off]])
Nu verkar det funka, tack för all hjälp
Re: EventRunner
Posted: 27 Feb 2020, 08:15
by jang
PeterM5 wrote: ↑26 Feb 2020, 22:13
PeterM5 wrote: ↑26 Feb 2020, 22:03
Tack, nu funkar det.
Går det att använda en global variabel också, jag får inte detta att fungera?
Code: Select all
rule([[$TOD=='Sleep' & HT.bilplats.sensor:breached | HT.outserverroom.sensor:breached =>
local lampa,state = HT.kontor.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until trueFor(00:02:00,HT.bilplats.sensor:safe) | state==lampa:value;
lampa:off]])
Nu verkar det funka, tack för all hjälp
Du kan inte använda trueFor inuti en while loop sådär. trueFor får endast användas på vänstersidan av '=>*.
Dessutom har '&' högre prioritet än '|'.
Jag tror du måste skriva
Code: Select all
rule([[$TOD=='Sleep' & (HT.bilplats.sensor:breached | HT.outserverroom.sensor:breached) =>
local lampa, sensor, state = HT.kontor.lampa, HT.bilplats.sensor, nil;
repeat state=lampa:value; lampa:toggle; wait(1) until (sensor:safe & sensor:last > 00:02) | state==lampa:value;
lampa:off]])
Jag grupperade breached enheterna med () så att det tolkas (sleep & (bilplats | outserverroom)) - utan parenteser tolkades det som ((sleep & bilplats) | outserverroom)
I repeat loopen testar vi om sensorn är safe och om :last (vilket är tiden sedan sista förändringen) är större an 2min. Nu kommer den att blinka 2min+(sensorns tid för återställning efter den varit breached) efter den blir breached.
Re: EventRunner
Posted: 27 Feb 2020, 22:06
by PeterM5
jang wrote: ↑27 Feb 2020, 08:15
PeterM5 wrote: ↑26 Feb 2020, 22:13
PeterM5 wrote: ↑26 Feb 2020, 22:03
Tack, nu funkar det.
Går det att använda en global variabel också, jag får inte detta att fungera?
Code: Select all
rule([[$TOD=='Sleep' & HT.bilplats.sensor:breached | HT.outserverroom.sensor:breached =>
local lampa,state = HT.kontor.lampa,nil;
repeat state=lampa:value; lampa:toggle; wait(1) until trueFor(00:02:00,HT.bilplats.sensor:safe) | state==lampa:value;
lampa:off]])
Nu verkar det funka, tack för all hjälp
Du kan inte använda trueFor inuti en while loop sådär. trueFor får endast användas på vänstersidan av '=>*.
Dessutom har '&' högre prioritet än '|'.
Jag tror du måste skriva
Code: Select all
rule([[$TOD=='Sleep' & (HT.bilplats.sensor:breached | HT.outserverroom.sensor:breached) =>
local lampa, sensor, state = HT.kontor.lampa, HT.bilplats.sensor, nil;
repeat state=lampa:value; lampa:toggle; wait(1) until (sensor:safe & sensor:last > 00:02) | state==lampa:value;
lampa:off]])
Jag grupperade breached enheterna med () så att det tolkas (sleep & (bilplats | outserverroom)) - utan parenteser tolkades det som ((sleep & bilplats) | outserverroom)
I repeat loopen testar vi om sensorn är safe och om :last (vilket är tiden sedan sista förändringen) är större an 2min. Nu kommer den att blinka 2min+(sensorns tid för återställning efter den varit breached) efter den blir breached.
Jag har testat nu, men lampan tänds bara en eller två ggr efter det inget.
Det som jag sa funkade igår, verkade blinka som det skulle förutom att jag inte hade testat sensorn outserverroom.
Re: EventRunner
Posted: 28 Feb 2020, 12:04
by jang
PeterM5 wrote: ↑27 Feb 2020, 22:06
Jag har testat nu, men lampan tänds bara en eller två ggr efter det inget.
Det som jag sa funkade igår, verkade blinka som det skulle förutom att jag inte hade testat sensorn outserverroom.
Det är väl 2 olika sensorer vi pratar om?
Jag skulle dela upp det i 2 regler för tydlighetens skull
Code: Select all
rule([[$TOD=='Sleep' & HT.bilplats.sensor:breached =>
local lampa, sensor, state = HT.kontor.lampa, HT.bilplats.sensor, nil;
repeat state=lampa:value; lampa:toggle; wait(1) until (sensor:safe & sensor:last > 00:02) | state==lampa:value;
lampa:off]])
rule([[$TOD=='Sleep' & HT.outserverroom.sensor:breached =>
local lampa, sensor, state = HT.kontor.lampa, HT.outserverroom.sensor, nil;
repeat state=lampa:value; lampa:toggle; wait(1) until (sensor:safe & sensor:last > 00:02) | state==lampa:value;
lampa:off]])
en kombinerad variant, lite mer komplex
Code: Select all
larmSensors = { HT.bilplats.sensor, HT.outserverroom.sensor}
rule([[$TOD=='Sleep' & larmSensors:breached =>
local lampa, state = HT.kontor.lampa, nil;
repeat state=lampa:value; lampa:toggle; wait(1) until (larmSensors:safe & min(larmSensors:last) > 00:02) | state==lampa:value;
lampa:off]])
Re: EventRunner
Posted: 29 Feb 2020, 19:39
by PeterM5
jang wrote: ↑28 Feb 2020, 12:04
PeterM5 wrote: ↑27 Feb 2020, 22:06
Jag har testat nu, men lampan tänds bara en eller två ggr efter det inget.
Det som jag sa funkade igår, verkade blinka som det skulle förutom att jag inte hade testat sensorn outserverroom.
Det är väl 2 olika sensorer vi pratar om?
Jag skulle dela upp det i 2 regler för tydlighetens skull
Code: Select all
rule([[$TOD=='Sleep' & HT.bilplats.sensor:breached =>
local lampa, sensor, state = HT.kontor.lampa, HT.bilplats.sensor, nil;
repeat state=lampa:value; lampa:toggle; wait(1) until (sensor:safe & sensor:last > 00:02) | state==lampa:value;
lampa:off]])
rule([[$TOD=='Sleep' & HT.outserverroom.sensor:breached =>
local lampa, sensor, state = HT.kontor.lampa, HT.outserverroom.sensor, nil;
repeat state=lampa:value; lampa:toggle; wait(1) until (sensor:safe & sensor:last > 00:02) | state==lampa:value;
lampa:off]])
en kombinerad variant, lite mer komplex
Code: Select all
larmSensors = { HT.bilplats.sensor, HT.outserverroom.sensor}
rule([[$TOD=='Sleep' & larmSensors:breached =>
local lampa, state = HT.kontor.lampa, nil;
repeat state=lampa:value; lampa:toggle; wait(1) until (larmSensors:safe & min(sensor:last) > 00:02) | state==lampa:value;
lampa:off]])
Jag har testat båda nu.
Funkar bra förutom att det slutar blinka när sensorn är safe, jag får det inte att funka med 2 minuters väntetid.
Re: EventRunner
Posted: 01 Mar 2020, 13:31
by jang
PeterM5 wrote: ↑29 Feb 2020, 19:39
Jag har testat båda nu.
Funkar bra förutom att det slutar blinka när sensorn är safe, jag får det inte att funka med 2 minuters väntetid.
Ok, det var en liten bug i den sista varianten, den kombinerade, ska testa mot larmSensors i 'until' testet. Jag har ändrat i min post.
Jag förstår inte varför den slår av efter 2 blink. verkar som "last modified" inte blir rätt på sensorn?
Kan du prova den här varianten
Code: Select all
rule([[$TOD=='Sleep' & HT.bilplats.sensor:breached =>
local lampa, sensor, state = HT.kontor.lampa, HT.bilplats.sensor, nil;
LBBD=now+00:02;
repeat state=lampa:value; lampa:toggle; wait(1) until (sensor:safe & now > LBBD) | state==lampa:value;
lampa:off]])
LBBD = Last Breached Bilplats Delay
Re: EventRunner
Posted: 02 Mar 2020, 21:22
by PeterM5
jang wrote: ↑01 Mar 2020, 13:31
PeterM5 wrote: ↑29 Feb 2020, 19:39
Jag har testat båda nu.
Funkar bra förutom att det slutar blinka när sensorn är safe, jag får det inte att funka med 2 minuters väntetid.
Ok, det var en liten bug i den sista varianten, den kombinerade, ska testa mot larmSensors i 'until' testet. Jag har ändrat i min post.
Jag förstår inte varför den slår av efter 2 blink. verkar som "last modified" inte blir rätt på sensorn?
Kan du prova den här varianten
Code: Select all
rule([[$TOD=='Sleep' & HT.bilplats.sensor:breached =>
local lampa, sensor, state = HT.kontor.lampa, HT.bilplats.sensor, nil;
LBBD=now+00:02;
repeat state=lampa:value; lampa:toggle; wait(1) until (sensor:safe & now > LBBD) | state==lampa:value;
lampa:off]])
LBBD = Last Breached Bilplats Delay
Tack, nu har jag testat.
Jag testade med en lampa, Dimmer2 och den strulade först.
Parameter 34 var satt till 1 och jag satte den till 0 istället, jag fick för mig att den inte hann stänga av riktigt innan den skulle tändas igen.
Kan det stämma, nu fungerar det som tänkt iallafall.
Tack för hjälpen
"Parameter 34
Soft-Start functionality
Time required to warm up the filament of halogen bulb.
0 - no soft-start
1 - short soft-start (0,1s)
Standardvärde
2 - long soft-start (0,5s)"
Re: EventRunner
Posted: 08 Mar 2020, 13:54
by RH_Dreambox
Jag försöker skriva en regel som med hjälp av temperaturen skall tala om för mig när det är dax att ställa ut eller ta in växterna från växthuset.
Men jag tänker fel någonstans, för inte ens dessa enkla regler fungerar.
Code: Select all
rule("@sensor.temp_golv >= 15 => $TTS = 'Nu kan du ställa ut växterna.&vol=12'")
rule("@sensor.temp_golv <= 10 => $TTS = 'Nu är det dax att ta in växterna.&vol=12'")
Testar jag med klockslag fungerar det , men inte med temperaturen som trigger. (tempsensorn finns med i headern)
Nästa karamell är att det får inte bli tjatiga upprepningar vid en temperaturförändring, utan jag skall bara påminnas en eller högst två gånger.
"once" har jag sett någonstans, men jag hittar inte hur det används. Nollställs "once" en gång per dygn eller hur funkar det?
Re: EventRunner
Posted: 08 Mar 2020, 14:45
by sonnyboy
Ska det verkligen vara ett @ innan sensor?
Re: EventRunner
Posted: 08 Mar 2020, 18:33
by RH_Dreambox
sonnyboy wrote: ↑08 Mar 2020, 14:45
Ska det verkligen vara ett @ innan sensor?
Jag antar det, för tar jag bort @ så får jag ett felmeddelande
Re: EventRunner
Posted: 08 Mar 2020, 18:50
by jang
Om sensor.temp_golv är en device (en integer) så ska regeln se ut som
Code: Select all
rule("sensor.temp_golv:temp >= 15 => $TTS = 'Nu kan du ställa ut växterna.&vol=12'")
:temp hämtar temperaturen (vilket är samma som :value)
Om du bara vill ha en gång
Code: Select all
rule("once(sensor.temp_golv:temp >= 15) => $TTS = 'Nu kan du ställa ut växterna.&vol=12'")
Då måste den gå under 15 för att trigga igen. (dvs villkoret måste bli falskt innan det kan bli sant igen)
Det finns lite hyss för att återställa den varje dygn om du behöver det - hör av dig isåfall.
@ tolkar värdet efter som en tid vilket kan bli mycket konstigt...
Re: EventRunner
Posted: 09 Mar 2020, 11:50
by RH_Dreambox
Tack @jang !
Jag kompletterade koden med några tider också, så att man inte väcks mitt i natten om temperaturen skulle stämma.
Men om jag behöver göra reset på "once", kan jag inte då bara skriva en regel som jag triggar tex. kl. 08:00 att "sensor.temp_golv:temp == 0"?
Code: Select all
-- UTERUM ##################################
rule([[
once(sensor.temp_golv:temp >= 15) & 08:00..20:00 =>
$TTS = 'Meddelande från växthuset! Växterna kan ställas ut, nu!&vol=12'
]])
rule([[
once(sensor.temp_golv:temp <= 10) & 08:00..20:00 =>
$TTS = 'Meddelande från växthuset! Nu är det dax, ta in växterna, nu!&vol=12'
]])
Din property :temp förklarar också varför några andra av mina regler inte fungerar
Och nu hittade jag också fler propertys i det du skrivit om property functions.
Men,
är :power och :lux detsamma som :value? Kan man använda vilket som?
Re: EventRunner
Posted: 09 Mar 2020, 18:27
by Texan
Går det att tända och släcka lampor efter lux värde på en eller flera sensorer mellan 09:00 och 18:00.
Skulle vilja tända lampor när det blir mulet på dagen och släcka ifall det blir ljust igen.