EventRunner 4 - QuickApp HC3

Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

Systemfel wrote: 14 Jul 2022, 18:06
jang wrote: 14 Jul 2022, 09:23 Jag uppdaterade just ER4 och adderade support för autoupdate med hjälp av regler som förr.
Men, QAUpdater måste vara installerad eftersom ER4 numera ber QAUpdater att bli uppdaterad...
...och om det blir fel kan man gå in i QAUpdater och backa ER4 versionen...
Det finns en aktuell diskussion i Fibaro forumet och eventrunner tråden om det.
Perfekt Men hoss mig vill den inte uppdatera den vill inte ens lägga in eventrunner så det går att uppdatera den. ska testa ta ner en ny eventrunner och ladda in den filen. kan ju vara så att det har hänt något med alla uppdateringar mm eller om man råkat radera något.. reglerna kan man ju bara lätt föra över

Tog en ny fil och får den att uppdatera till denna version.
[2022-07-14] [19:02:35] [DEBUG] [QUICKAPP763]: QA EventRunner 4 - version:v0.5fix80 (QA toolbox 0.25)
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
jang
Medlem
Posts: 386
Joined: 05 Jan 2014, 00:44
8
Location: Stockholm

Om du lägger in QAUpdater så kan du välja "Install" knappen så installerar den EventRunner åt dig.
Klicka först på <Updates> för att välja EventRunner4
Sedan på <version> så att det blir sista versionen (0.83)
och klicka sedan på <Install> då får du en ny ER QA som du kan föra över reglerna till.

Tyvärr fungerar QA UI dåligt i nuvarande FW from Fibaro så att man kan behöva flippa mellan tabbar för att se uppdateringar på labels. Jag brukar hoppa mellan "Variables" och "Edit & Preview" tabben.

Dessutom håller jag med om att mitt val av knappar etc inte är det mest intuitiva - men det var svårt att få till ngt bra.
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

jang wrote: 14 Jul 2022, 21:48 Om du lägger in QAUpdater så kan du välja "Install" knappen så installerar den EventRunner åt dig.
Klicka först på <Updates> för att välja EventRunner4
Sedan på <version> så att det blir sista versionen (0.83)
och klicka sedan på <Install> då får du en ny ER QA som du kan föra över reglerna till.

Tyvärr fungerar QA UI dåligt i nuvarande FW from Fibaro så att man kan behöva flippa mellan tabbar för att se uppdateringar på labels. Jag brukar hoppa mellan "Variables" och "Edit & Preview" tabben.

Dessutom håller jag med om att mitt val av knappar etc inte är det mest intuitiva - men det var svårt att få till ngt bra.
Jag har nu lyckats uppdatera till version 0.82

Uppdatering Ahhh Nu förstog jag hur den funka sorry man e så trög i bland..
testade version 0.84 men där kan jag inte stänga av debug alls så den liksom flödar hela så kör 0.82 så länge.

Får dock ett konstigt meddelande på mina sensorer där jag har flera lux mätare..
[2022-07-15] [17:03:26] [TRACE] [QUICKAPP763]: Luxvärdet i Huset:table: 0xaaaad27c1dd0

kanske behöver skriva om det på något sätt när det är medel på luxen från flera sensorer ?
koden ser ut så här

Code: Select all

Luxsensorshuset={339,417,428}
rule("(average(Luxsensorshuset:lux)) & $Styrning=='On' => log('Luxvärdet i Huset:%s',Luxsensorshuset:lux)")
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
jang
Medlem
Posts: 386
Joined: 05 Jan 2014, 00:44
8
Location: Stockholm

I början av main så kan du slå av vissa debugflaggor.

Code: Select all

_debugFlags.trigger = false -- log incoming triggers.   SLÅ AV
_debugFlags.trigger2 = false -- log incoming triggers SLÅ AV
_debugFlags.sourceTrigger = false -- SLÅ AV
_debugFlags.fcall=true     -- log fibaro.call
_debugFlags.post = true    -- log internal posts
_debugFlags.rule=true      -- log rules being invoked (true or false)
_debugFlags.ruleTrue=true  -- log only rules that are true
_debugFlags.pubsub=true    -- log only rules that are true
_debugFlags.extendedErrors=true
------------- Put your rules inside QuickApp:main() -------------------

function QuickApp:main()    -- EventScript version
  local rule = function(...) return self:evalScript(...) end          -- old rule function
  self:enableTriggerType({"device","global-variable","custom-event","profile","alarm","location","quickvar","user"}) -- types of events we want
  fibaro.debugFlags.sourceTrigger=false -- SLÅ AV 
  local HT = { 
    keyfob = 26, 
    motion= 21,
    temp = 22,
    lux = 23,
  }
Problemet med din regel är att
Luxsensorshuset:lux
returnerar en lua table med lux värdena för devices i Luxsensorshuset.
Du räknar ut average på den i början av regeln.
Om du vill logga värdet så får du räkna ut det igen.
I din regel så räknar du ut average men du använder inte värdet till ngt,
Skulle göra såhär

Code: Select all

Luxsensorshuset={339,417,428}
X = 200
rule("Luxsensorshuset:lux & $Styrning=='On' => log('Luxvärdet i Huset:%s',average(Luxsensorshuset:lux))").start()
rule("once(average(Luxsensorshuset:lux) > X) & $Styrning=='On' => log('Luxvärdet I Huset > %s',X)").start()
rule("once(average(Luxsensorshuset:lux) <= X) & $Styrning=='On' => log('Luxvärdet I Huset <= %s',X)").start()
.start() gör att regeln körs direkt när den definieras. Annars kommer regeln att köras första gången då ngt lux värde ändras.
once(...) gör att villkoret blir sant så måste det bli falskt innan det kan bli sant igen. Det gör att vi bara triggar en gång då vi är över X och under X
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

jang wrote: 16 Jul 2022, 09:29 I början av main så kan du slå av vissa debugflaggor.

Code: Select all

_debugFlags.trigger = false -- log incoming triggers.   SLÅ AV
_debugFlags.trigger2 = false -- log incoming triggers SLÅ AV
_debugFlags.sourceTrigger = false -- SLÅ AV
_debugFlags.fcall=true     -- log fibaro.call
_debugFlags.post = true    -- log internal posts
_debugFlags.rule=true      -- log rules being invoked (true or false)
_debugFlags.ruleTrue=true  -- log only rules that are true
_debugFlags.pubsub=true    -- log only rules that are true
_debugFlags.extendedErrors=true
------------- Put your rules inside QuickApp:main() -------------------

function QuickApp:main()    -- EventScript version
  local rule = function(...) return self:evalScript(...) end          -- old rule function
  self:enableTriggerType({"device","global-variable","custom-event","profile","alarm","location","quickvar","user"}) -- types of events we want
  fibaro.debugFlags.sourceTrigger=false -- SLÅ AV 
  local HT = { 
    keyfob = 26, 
    motion= 21,
    temp = 22,
    lux = 23,
  }
Jo jag skrev false på debug reglerna men endån kom det upp hela tiden ska testa igen . för det fungerar på version 0.82
det är förmodligen jag som gör fel ..


Problemet med din regel är att
Luxsensorshuset:lux
returnerar en lua table med lux värdena för devices i Luxsensorshuset.
Du räknar ut average på den i början av regeln.
Om du vill logga värdet så får du räkna ut det igen.
I din regel så räknar du ut average men du använder inte värdet till ngt,
Skulle göra såhär

Code: Select all

Luxsensorshuset={339,417,428}
X = 200
rule("Luxsensorshuset:lux & $Styrning=='On' => log('Luxvärdet i Huset:%s',average(Luxsensorshuset:lux))").start()
rule("once(average(Luxsensorshuset:lux) > X) & $Styrning=='On' => log('Luxvärdet I Huset > %s',X)").start()
rule("once(average(Luxsensorshuset:lux) <= X) & $Styrning=='On' => log('Luxvärdet I Huset <= %s',X)").start()
.start() gör att regeln körs direkt när den definieras. Annars kommer regeln att köras första gången då ngt lux värde ändras.
once(...) gör att villkoret blir sant så måste det bli falskt innan det kan bli sant igen. Det gör att vi bara triggar en gång då vi är över X och under X
okej ska testa det . jo jag använder värdena i några Ruls faktist samtidigt som jag plockar ut dom med den reglen för att se
tack för svar och hjälp ska labborera lite med detta i kväll :)
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

jang wrote: 16 Jul 2022, 09:29 I början av main så kan du slå av vissa debugflaggor.

Code: Select all

_debugFlags.trigger = false -- log incoming triggers.   SLÅ AV
_debugFlags.trigger2 = false -- log incoming triggers SLÅ AV
_debugFlags.sourceTrigger = false -- SLÅ AV
_debugFlags.fcall=true     -- log fibaro.call
_debugFlags.post = true    -- log internal posts
_debugFlags.rule=true      -- log rules being invoked (true or false)
_debugFlags.ruleTrue=true  -- log only rules that are true
_debugFlags.pubsub=true    -- log only rules that are true
_debugFlags.extendedErrors=true
------------- Put your rules inside QuickApp:main() -------------------

function QuickApp:main()    -- EventScript version
  local rule = function(...) return self:evalScript(...) end          -- old rule function
  self:enableTriggerType({"device","global-variable","custom-event","profile","alarm","location","quickvar","user"}) -- types of events we want
  fibaro.debugFlags.sourceTrigger=false -- SLÅ AV 
  local HT = { 
    keyfob = 26, 
    motion= 21,
    temp = 22,
    lux = 23,
  }
Problemet med din regel är att
Luxsensorshuset:lux
returnerar en lua table med lux värdena för devices i Luxsensorshuset.
Du räknar ut average på den i början av regeln.
Om du vill logga värdet så får du räkna ut det igen.
I din regel så räknar du ut average men du använder inte värdet till ngt,
Skulle göra såhär

Code: Select all

Luxsensorshuset={339,417,428}
X = 200
rule("Luxsensorshuset:lux & $Styrning=='On' => log('Luxvärdet i Huset:%s',average(Luxsensorshuset:lux))").start()
rule("once(average(Luxsensorshuset:lux) > X) & $Styrning=='On' => log('Luxvärdet I Huset > %s',X)").start()
rule("once(average(Luxsensorshuset:lux) <= X) & $Styrning=='On' => log('Luxvärdet I Huset <= %s',X)").start()
.start() gör att regeln körs direkt när den definieras. Annars kommer regeln att köras första gången då ngt lux värde ändras.
once(...) gör att villkoret blir sant så måste det bli falskt innan det kan bli sant igen. Det gör att vi bara triggar en gång då vi är över X och under X

Hej Igen :)
Jag funderar på hur man kan ändra deciamal eller rentav ta bort det så det visar tex 114,3 ex eller bara heltal 114 ? antar att det kanske blir mycket kod ?
eller det kasnek inte går utan att skriva fyra sidor kod ?
2022-07-19] [07:20:39] [TRACE] [QUICKAPP763]: Luxvärdet i Huset:114.33333333333
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
jang
Medlem
Posts: 386
Joined: 05 Jan 2014, 00:44
8
Location: Stockholm

Så, log() använder string.format för att formatera utskriften. Vanligen använder vi '%s' för att skriva ut ett värde. %s gör i princip tostring() på värden, så ett decimaltal får så många decimaler som det finns.
Men, det finns många andra formateringskoder.
%f skriver ut ett decimaltal, och vi kan specificera antal med %.xf där x är antal decimaler.

Code: Select all

log("Värde är %1.f',math.pi)
skriver ut avrundat till en decimal

Code: Select all

log("Värde är %0.f',math.pi) 
skriver ut avrundat till 0 decimaler - dvs ett heltal
Om du alltid vill ha 2 decimaler (ex. 3.1 ska skrivas 3.10) så blir det

Code: Select all

log("Värde är %02.f',3.1)
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

jang wrote: 20 Jul 2022, 06:20 Så, log() använder string.format för att formatera utskriften. Vanligen använder vi '%s' för att skriva ut ett värde. %s gör i princip tostring() på värden, så ett decimaltal får så många decimaler som det finns.
Men, det finns många andra formateringskoder.
%f skriver ut ett decimaltal, och vi kan specificera antal med %.xf där x är antal decimaler.

Code: Select all

log("Värde är %1.f',math.pi)
skriver ut avrundat till en decimal

Code: Select all

log("Värde är %0.f',math.pi) 
skriver ut avrundat till 0 decimaler - dvs ett heltal
Om du alltid vill ha 2 decimaler (ex. 3.1 ska skrivas 3.10) så blir det

Code: Select all

log("Värde är %02.f',3.1)
Tack Jang Funkar super duper
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

Hej i värmen.. Jag såg på fibaros forum att du Jang Har börjat titta lite på #user

Code: Select all

rule("#user{id=2,value='action',data={id=756,actionName='turnOn'}} => log(' Kent har Öppnat  Garage porten')")
Har fått det att fungera med en fibaro plugg och garage porten och den visar user där eller ja vem som öppnat garageporten i log eller msg

Nu satt jag och funderade lite på User till låset på huset då jag har idlock Om någon öppnar via fibaro appen så hade ju det varit bra om man kunde se vem som öppnade låset med appen.

Tänkte jag kunde få att fungera men riktigt så enkelt var det ju inte.
användare e ju 2 och låset e729

Code: Select all

rule("#user{id=2,value='action',data={id=729,actionName='Lock'}} => log('Låset är låst')")

Code: Select all

rule("#Lock{id=729,mode='Manual',status='Unlock'} => log('Lås öppet - manuellt')")
Ha en riktigt fin dag :)
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

Tja alla Har en liten fråga finns det något sätt att få in dags priset på el i er4 tex ?
förutom Tibber ?
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

Hejsan
skulle behöva hjälp med en sak och det är att läsa ut en variabel för att slippa ändra en massa så tänkte jag att man kunde läsa av en variabel

Code: Select all

rule("@{catch,$window_sunset} & month('jan-nov')  & $Styrning=='On' & $Window_light=='Auto' => log('#C:Green#Tänder fönsterlamporna i huset Jan-nov');Bel_Fonsterlampor:on")
Tänkte då catch skulle läsas som variabel då med tex sunset+01:20 tex
så om man behöver ändra så ändrar man bara på ett ställe ?

Det verkar läsa men inte rätt då belysningen startar 15:57 och då är det sunset men vill flytta fram det mer med tiden men det verkar inte fungera

Någon som kan hjälpa till här.. Sen hur logar man värdet tex
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
User avatar
Texan
Medlem
Posts: 167
Joined: 25 Dec 2015, 15:07
6

Hej,
Hur blir det ifall man vill få HC3'an att starta om exempelvis en gång i veckan, är detta rätt?

Code: Select all

rule("@12:00 & wday('mon') => fibaro.homeCenter.systemService.reboot()")
jang
Medlem
Posts: 386
Joined: 05 Jan 2014, 00:44
8
Location: Stockholm

Texan wrote: 17 Nov 2022, 23:32 Hej,
Hur blir det ifall man vill få HC3'an att starta om exempelvis en gång i veckan, är detta rätt?

Code: Select all

rule("@12:00 & wday('mon') => fibaro.homeCenter.systemService.reboot()")
fibaro.systemService finns inte i QAs - bara Scenes

prova

Code: Select all

function reboot() api.post("/service/reboot",{recovery=false}) end
rule("@12:00 & wday('mon') => api.post('/service/reboot',{recovery=false})")

@12:00 är mitt på dagen, @00:00 mitt på natten...
jang
Medlem
Posts: 386
Joined: 05 Jan 2014, 00:44
8
Location: Stockholm

Systemfel wrote: 17 Nov 2022, 17:24 Hejsan
skulle behöva hjälp med en sak och det är att läsa ut en variabel för att slippa ändra en massa så tänkte jag att man kunde läsa av en variabel

Code: Select all

rule("@{catch,$window_sunset} & month('jan-nov')  & $Styrning=='On' & $Window_light=='Auto' => log('#C:Green#Tänder fönsterlamporna i huset Jan-nov');Bel_Fonsterlampor:on")
Tänkte då catch skulle läsas som variabel då med tex sunset+01:20 tex
så om man behöver ändra så ändrar man bara på ett ställe ?

Det verkar läsa men inte rätt då belysningen startar 15:57 och då är det sunset men vill flytta fram det mer med tiden men det verkar inte fungera

Någon som kan hjälpa till här.. Sen hur logar man värdet tex
Jo, det ska funka.
Om du sätter globala variabeln window_sunset till

Code: Select all

sunset+01:00
så ska det funka.
Du kan också logga
rule("log('window_sunset=%s',HM($window_sunset))")
User avatar
Texan
Medlem
Posts: 167
Joined: 25 Dec 2015, 15:07
6

jang wrote: 20 Nov 2022, 10:20
Texan wrote: 17 Nov 2022, 23:32 Hej,
Hur blir det ifall man vill få HC3'an att starta om exempelvis en gång i veckan, är detta rätt?

Code: Select all

rule("@12:00 & wday('mon') => fibaro.homeCenter.systemService.reboot()")
fibaro.systemService finns inte i QAs - bara Scenes

prova

Code: Select all

function reboot() api.post("/service/reboot",{recovery=false}) end
rule("@12:00 & wday('mon') => api.post('/service/reboot',{recovery=false})")

@12:00 är mitt på dagen, @00:00 mitt på natten...
Tyvärr så fungerade det inte...
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

jang wrote: 20 Nov 2022, 11:07
Systemfel wrote: 17 Nov 2022, 17:24 Hejsan
skulle behöva hjälp med en sak och det är att läsa ut en variabel för att slippa ändra en massa så tänkte jag att man kunde läsa av en variabel

Code: Select all

rule("@{catch,$window_sunset} & month('jan-nov')  & $Styrning=='On' & $Window_light=='Auto' => log('#C:Green#Tänder fönsterlamporna i huset Jan-nov');Bel_Fonsterlampor:on")
Tänkte då catch skulle läsas som variabel då med tex sunset+01:20 tex
så om man behöver ändra så ändrar man bara på ett ställe ?

Det verkar läsa men inte rätt då belysningen startar 15:57 och då är det sunset men vill flytta fram det mer med tiden men det verkar inte fungera

Någon som kan hjälpa till här.. Sen hur logar man värdet tex
Jo, det ska funka.
Om du sätter globala variabeln window_sunset till

Code: Select all

sunset+01:00
så ska det funka.
Du kan också logga
rule("log('window_sunset=%s',HM($window_sunset))")
Nopp det fungerar tyvärr inte att få den att läsa så. Om jag lägger in värde sunset bara så visar den att den tänder 15:47 lägger jag sunset+01:00 blir det ändrat men med bara en minut till 15:48 så den läser nog nått konstigt här :( vet inte om man måste hämta värdet på något annat sätt
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
jang
Medlem
Posts: 386
Joined: 05 Jan 2014, 00:44
8
Location: Stockholm

Du har rätt. Tid+offset i en variabel klarar bara av minuter
Så "sunset+60" ger en timme efter sunset.
"07:00+60" ger en timme efter 7 (kanske inte så användbart)

Vad man kan göra är att låte regeln beräkna offset.
rule("@sunset+$offset => ....")
och sätta globala variablen "offset" till "00:59:05"
så startar den 59min och 5s efter sunset.
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

jang wrote: 24 Nov 2022, 15:19 Du har rätt. Tid+offset i en variabel klarar bara av minuter
Så "sunset+60" ger en timme efter sunset.
"07:00+60" ger en timme efter 7 (kanske inte så användbart)

Vad man kan göra är att låte regeln beräkna offset.
rule("@sunset+$offset => ....")
och sätta globala variablen "offset" till "00:59:05"
så startar den 59min och 5s efter sunset.
Ska testa detta :) Tack för hjälp och förklaring


får ett felmeddelande så vet inte riktigt vad jag gör fel här

Code: Select all

[2022-11-24] [15:51:01] [ERROR] [QUICKAPP936]: Error in '@sunset+$offset => & month('jan-nov') => log('#C:Green# Tänder fönsterlamporna kväll Jan-nov'); Bel_Fonsterlampor:on': ./include/EventRunner.lua:760: Parser error char 8 ('+$') in expression '@sunset+$offset => & month('jan-nov') => log('#C:Green# Tänder fönsterlamporna kväll Jan-nov'); Bel_Fonsterlampor:on' (./include/EventRunner.lua:491: attempt to index a nil value (field '?'))
[2022-11-24] [15:51:01] [ERROR] [QUICKAPP936]: Main() ERROR:./include/EventRunner.lua:1730: ./include/EventRunner.lua:760: Parser error char 8 ('+$') in expression '@sunset+$offset => & month('jan-nov') => log('#C:Green# Tänder fönsterlamporna kväll Jan-nov'); Bel_Fonsterlampor:on' (./include/EventRunner.lua:491: attempt to index a nil value (field '?'))
koden ser ut så tiden ligger i en variabel som heter offset med tiden 00:55:00

Code: Select all

rule("@sunset+$offset => & month('jan-nov') => log('#C:Green# Tänder fönsterlamporna kväll Jan-nov'); Bel_Fonsterlampor:on")
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
jang
Medlem
Posts: 386
Joined: 05 Jan 2014, 00:44
8
Location: Stockholm

Sorry, jag var lite snabb.
'@' operatorn binder hårdare än '+' operator (vilket egentligen är fel och jag borde fixa)
Nu få du sätta paranteser runt uttrycket.
rule("@(sunset+$offset) => ....")
Systemfel
Medlem
Posts: 375
Joined: 14 Jan 2015, 01:02
7

jang wrote: 25 Nov 2022, 11:11 Sorry, jag var lite snabb.
'@' operatorn binder hårdare än '+' operator (vilket egentligen är fel och jag borde fixa)
Nu få du sätta paranteser runt uttrycket.
rule("@(sunset+$offset) => ....")
ooohh tack ska prova detta i helgen får vi se hur det bär sig :)
kör Hc3 och det fungerar bättre och bätttre sakta men säkert :D
Post Reply