Page 13 of 25

Re: EventRunner

Posted: 27 Oct 2019, 08:53
by RH_Dreambox
Så var det då vintertid igen, klockradion gick igång och huset var helt mörkt och nedsläckt!
@jang hade ju med sin regel för vintertid lovat att ER skulle fungera som vanligt söndag morgon?
Gumman som hade haft en jobbig lördagseftermiddag vaknade med huvudvärk och gick till köket för att ta en huvudvärkstablett. Då passerade hon en sensor som bara är aktiverad när vi sover, så nu triggade den larmet och hall-lampan blinkade som en tok!

Jag startade om ER men eländet bara fortsatte. Då kollade jag klockorna och såg till min förvåning att jag var uppe en timma för tidigt!
Utöver vintertidsförändringen på en timma så hade vi gått upp ytterligare en timma för tidigt då klockradion gick igång! Inte undra på att vi var trötta!

Jag kollar upp allt en gång till och alla klockor visar samma tid (vintertid), även klockradion, och jag blir bara mer förvirrad.
En timma senare går klockradion igång igen! Då går det upp ett ljus, att det är klockradions fel!

@jangs ER och regel fungerade precis som det var tänkt (tack jang!), men den förbaskade klockradion hade än en gång spelat oss ett spratt.
Varje ändring mellan sommar- och vintertid så har den krånglat, så även denna gång. Den hade av någon anledning väckt oss två timmar tidigare, och när vi sedan gått upp så har den uppdaterats (via radiolänk) till rätt tid.
Kanske skulle jag titta på om ER kan väcka oss i stället :-).

Re: EventRunner

Posted: 27 Oct 2019, 08:59
by MastrUsr
RH_Dreambox wrote:Så var det då vintertid igen, klockradion gick igång och huset var helt mörkt och nedsläckt!
@jang hade ju med sin regel för vintertid lovat att ER skulle fungera som vanligt söndag morgon?
Gumman som hade haft en jobbig lördagseftermiddag vaknade med huvudvärk och gick till köket för att ta en huvudvärkstablett. Då passerade hon en sensor som bara är aktiverad när vi sover, så nu triggade den larmet och hall-lampan blinkade som en tok!

Jag startade om ER men eländet bara fortsatte. Då kollade jag klockorna och såg till min förvåning att jag var uppe en timma för tidigt!
Utöver vintertidsförändringen på en timma så hade vi gått upp ytterligare en timma för tidigt då klockradion gick igång! Inte undra på att vi var trötta!

Jag kollar upp allt en gång till och alla klockor visar samma tid (vintertid), även klockradion, och jag blir bara mer förvirrad.
En timma senare går klockradion igång igen! Då går det upp ett ljus, att det är klockradions fel!

@jangs ER och regel fungerade precis som det var tänkt (tack jang!), men den förbaskade klockradion hade än en gång spelat oss ett spratt.
Varje ändring mellan sommar- och vintertid så har den krånglat, så även denna gång. Den hade av någon anledning väckt oss två timmar tidigare, och när vi sedan gått upp så har den uppdaterats (via radiolänk) till rätt tid.
Kanske skulle jag titta på om ER kan väcka oss i stället :-).
Stackars er men underhållande läsning på morgonkvisten Image

Skickat från min SM-N960F via Tapatalk


Re: EventRunner

Posted: 27 Oct 2019, 13:06
by MastrUsr
Hej @jang!
Är det meningen att det ska vara massa '%' i loggen eller är det meningen att några värden ska ersätta dessa?

T.ex:

Code: Select all

[DEBUG] 12:02:13: Posting {"type":"%%SUB%%","event":[{"type":"ERLog"}],"_from":92} at Sun Oct 27 12:02:13
Eller detta vid varje "supervisor ping" (jag såg att man kan stänga av det med '_debugflags = {triggers=false}'):

Code: Select all

[DEBUG] 12:04:14: Incoming event:{"_from":92,"type":"%%PING%%"}

Re: EventRunner

Posted: 27 Oct 2019, 14:27
by jang
MastrUsr wrote: 27 Oct 2019, 13:06 Hej @jang!
Är det meningen att det ska vara massa '%' i loggen eller är det meningen att några värden ska ersätta dessa?

T.ex:

Code: Select all

[DEBUG] 12:02:13: Posting {"type":"%%SUB%%","event":[{"type":"ERLog"}],"_from":92} at Sun Oct 27 12:02:13
Eller detta vid varje "supervisor ping" (jag såg att man kan stänga av det med '_debugflags = {triggers=false}'):

Code: Select all

[DEBUG] 12:04:14: Incoming event:{"_from":92,"type":"%%PING%%"}
Ja, när man har Supervisorn igång så får man lite mer logutskrifter.
De "inbyggda" events som Supervisor och ER scener skickar mellan varandra är av typ "%%<type>%%" för att minska chansen att det krockar med ngt som användare kan hitta på. Så, ja, det ska vara %-tecken.
Jag ska se om man kan dölja dessa "interna events" på ngt sätt utan att dölja alla triggers (som du hade upptäckt med _debugflags.trigger=false).

Re: EventRunner

Posted: 30 Oct 2019, 12:34
by RH_Dreambox
Vi hade ett strömavbrott under några morgontimmar och en stund efter att strömmen var tillbaka såg jag att ER inte startat upp på någon av mina två HC2.
Efter en normal omstart av HC2 så brukar ju ER hoppa igång av sig självt, men inte nu.
Kan det bero på att bredbandsroutern tar lång tid på sig att starta upp efter ett strömavbrott?

Code: Select all

[DEBUG] 10:23:48: 2019-10-30 10:23:48.289246 [ error] API: Host not found (authoritative)
[DEBUG] 10:23:48: 2019-10-30 10:23:48.291025 [ fatal] Unknown exception: /opt/fibaro/scenes/1.lua:2283: bad argument #1 to 'ipairs' (table expected, got nil)
[DEBUG] 10:25:13: Aborting: Server not started yet
[DEBUG] 10:25:41: Aborting: Server not started yet
[DEBUG] 10:25:45: Aborting: Server not started yet

[DEBUG] 10:23:32: 2019-10-30 10:23:32.095779 [ error] API: Host not found (authoritative)
[DEBUG] 10:23:32: 2019-10-30 10:23:32.097714 [ fatal] Unknown exception: /opt/fibaro/scenes/140.lua:2183: bad argument #1 to 'ipairs' (table expected, got nil)
[DEBUG] 10:23:41: Aborting: Server not started yet
[DEBUG] 10:24:03: Aborting: Server not started yet
[DEBUG] 10:26:09: Aborting: Server not started yet

Re: EventRunner

Posted: 30 Oct 2019, 14:16
by jang
RH_Dreambox wrote: 30 Oct 2019, 12:34 Vi hade ett strömavbrott under några morgontimmar och en stund efter att strömmen var tillbaka såg jag att ER inte startat upp på någon av mina två HC2.
Efter en normal omstart av HC2 så brukar ju ER hoppa igång av sig självt, men inte nu.
Kan det bero på att bredbandsroutern tar lång tid på sig att starta upp efter ett strömavbrott?

Code: Select all

[DEBUG] 10:23:48: 2019-10-30 10:23:48.289246 [ error] API: Host not found (authoritative)
[DEBUG] 10:23:48: 2019-10-30 10:23:48.291025 [ fatal] Unknown exception: /opt/fibaro/scenes/1.lua:2283: bad argument #1 to 'ipairs' (table expected, got nil)
[DEBUG] 10:25:13: Aborting: Server not started yet
[DEBUG] 10:25:41: Aborting: Server not started yet
[DEBUG] 10:25:45: Aborting: Server not started yet

[DEBUG] 10:23:32: 2019-10-30 10:23:32.095779 [ error] API: Host not found (authoritative)
[DEBUG] 10:23:32: 2019-10-30 10:23:32.097714 [ fatal] Unknown exception: /opt/fibaro/scenes/140.lua:2183: bad argument #1 to 'ipairs' (table expected, got nil)
[DEBUG] 10:23:41: Aborting: Server not started yet
[DEBUG] 10:24:03: Aborting: Server not started yet
[DEBUG] 10:26:09: Aborting: Server not started yet
Ja det kan det bero på. Ser ut som ER försöker anropa ngt med HTTP och det finns inget nätverk och Lua dör ([fatal])
Kan du hjälpa mig? Är raden 2283 i den första scenen (Unknown exception: /opt/fibaro/scenes/1.lua:2283: bad argument #1 to 'ipairs' (table expected, got nil))
samma som raden 2183 i den andra scenen (Unknown exception: /opt/fibaro/scenes/140.lua:2183: bad argument #1 to 'ipairs' (table expected, got nil)

Är det samma kodrader?
Isåfall kanske jag kan koda några extra kontroller så att den inte dör.

Min misstanke är att det är koden som ser ut såhär

Code: Select all

  local _netTime = net.HTTPClient()
  Util.defvar('TimeDiff',0)
  Event.event({type='%timeDiffLoop%'},
    function()
      _netTime:request("http://worldtimeapi.org:80/api/ip",{
          option = {method='GET',timeout=5000},
          success = function(resp)
            if resp.status==200 then Util.defvar('TimeDiff',json.decode(resp.data).unixtime-os.time()) end
            Event.post({type='%timeDiffLoop%',_sh=true},'+/06:00')
          end,
          error = function(resp) print(resp.status) Event.post({type='%timeDiffLoop%',_sh=true},'+/06:00') end
        })
    end)
  Event.post({type='%timeDiffLoop%',_sh=true})
  
Den anropar en extern tids-server var sjätte timme och uppdaterar en variabel med tidsdifferensen mellan HC2:an och "riktig" tid. Det här var ett problem för ett tag sedan när HC2:an inte uppdatera sin klocka så bra.
En enkel fix skulle att vara att ändra sista raden till

Code: Select all

  Event.post({type='%timeDiffLoop%',_sh=true},"+/00:05")
så att den gör första anropet 5min efter scenen startat upp och inte direkt, så att routrar och annat hinner starta.
Alternativt att jag

Re: EventRunner

Posted: 30 Oct 2019, 17:35
by RH_Dreambox
@jang, ursäkta sent svar, men jag hade lite strul med att få igång den ena HC2'an efter ytterligare ett strömavbrott. (Man gräver för fiber i mitt område).
Jo det är exakt samma rad i båda

Code: Select all

    for _,s1 in ipairs(api.get("/scenes")) do
Jag har några HTTP-anrop för Netatmo och Open Weather så det är säkert de som ställer till det, men jag skall testa med ditt tips för den sista raden.
Det var den här funktionen som den stannade på....

Code: Select all

 function Util.findScenes(str)
    local res = {}
    for _,s1 in ipairs(api.get("/scenes")) do
      if s1.isLua and s1.id~=__fibaroSceneId and s1.runningInstances > 0 then
        local s2=api.get("/scenes/"..s1.id)
        if s2==nil or s2.lua==nil then Log(LOG.ERROR,"Scene missing: %s",s1.id)
        elseif s2.lua:match(str) then res[#res+1]=s1.id end
      end
    end
    return res
  end

Re: EventRunner

Posted: 31 Oct 2019, 08:42
by jang
RH_Dreambox wrote: 30 Oct 2019, 17:35 @jang, ursäkta sent svar, men jag hade lite strul med att få igång den ena HC2'an efter ytterligare ett strömavbrott. (Man gräver för fiber i mitt område).
Jo det är exakt samma rad i båda

Code: Select all

    for _,s1 in ipairs(api.get("/scenes")) do
Jag har några HTTP-anrop för Netatmo och Open Weather så det är säkert de som ställer till det, men jag skall testa med ditt tips för den sista raden.
Det var den här funktionen som den stannade på....

Man kan också lägga till en fördröjning när ER startar upp.
Före "function main()" kan man lägga till

Code: Select all

if not _EMULATED then fibaro:sleep(10*1000) end
då kommer scenen att vänta 10s innan den drar igång och kanske routern har startat?
Å andra sidan kan det vara irriterande att den alltid väntar 10s om man håller på att testa regler och startar om den manuellt ofta.

Re: EventRunner

Posted: 31 Oct 2019, 14:52
by RH_Dreambox
@jang, en fråga om nätverks-trafik (Z-wave).
Jag har en dörrsensor (sensastrip) där batterikapaciteten helt plötsligt störtdök från ca 90% till 25%.
Reglerna i ER ser ut som nedan. Kan dessa regler orsaka en så intensiv trafik så att batteriet dräneras på så kort tid?
Vad jag förstår så "pratar" ER med sensorn bara då dörren öppnas eller stängs.

Code: Select all

rule("sensor.garage_dörr:breached => garaget.takbelysning:on")
rule("trueFor(00:05,sensor.garage_dörr:safe) => garaget.takbelysning:off")
rule("@21:00 & sensor.garage_dörr:breached => $TTS = 'Viktig säkerhetsinformation. Klockan är nio, och garage-dörren är öppen.&vol=12'")

Re: EventRunner

Posted: 31 Oct 2019, 21:12
by jang
RH_Dreambox wrote: 31 Oct 2019, 14:52 @jang, en fråga om nätverks-trafik (Z-wave).
Jag har en dörrsensor (sensastrip) där batterikapaciteten helt plötsligt störtdök från ca 90% till 25%.
Reglerna i ER ser ut som nedan. Kan dessa regler orsaka en så intensiv trafik så att batteriet dräneras på så kort tid?
Vad jag förstår så "pratar" ER med sensorn bara då dörren öppnas eller stängs.

Code: Select all

rule("sensor.garage_dörr:breached => garaget.takbelysning:on")
rule("trueFor(00:05,sensor.garage_dörr:safe) => garaget.takbelysning:off")
rule("@21:00 & sensor.garage_dörr:breached => $TTS = 'Viktig säkerhetsinformation. Klockan är nio, och garage-dörren är öppen.&vol=12'")
Nej, det är inte ERs som orsakar det.
Dina regler (dvs ER) använder fibaro:getValue(sensor.garage_dörr,"value") för att läsa sensorns värde.
Sensorer skickar värden till HC2:an när enheterna triggas eller vid pollintervall.
fibaro:getValue returnerar bara det nuvarande värdet som är lagrat i HC2:an.
Så oavsett hur ofta ER anropar fibaro:getValue så genererar det inte ngn ny Z-wave trafik.
Om man gör garaget.takbelysning:off så blir det en fibaro:call(garaget.takbelysning,"turnOff") som genererar trafik.
Å andra sidan händer det inte så ofta..

Re: EventRunner

Posted: 02 Nov 2019, 14:40
by sonnyboy
Sitter och funderar på hur jag ska släcka "allmänbelysningen" på kvällen, men får inte till det alls.
Jag vill att det ska släckas på vardagar mellan 22:15 & 22:45 och på helger mellan 23:15 & 23:50 jag vill att ER ska slumpa fram släckningstiden.
Är ER så smart att det skulle fungera?

Använder denna till att slumpmässigt tända och det fungerar kanon, sen en lite modifierad för att släcka barnens rum, men den är alltid klockan 20:00.

Code: Select all

	   --Function turn on all lamps
  function printf(...) fibaro:debug(string.format(...)) end
  math.randomseed(os.time())
  local deviceIDs = { 248, 250, 252, 269, 45, 189, 36, 480, 274, 300 }
  
  function turnOnAllLamps()
      local ids,sec=Util.randomizeList(deviceIDs),0
      for _,id in ipairs(ids) do -- pick Id from randomized list
        local lightstatus=tonumber(fibaro:getValue(id, "value"));
        if (lightstatus==0) then
          sec = sec + math.random(10,30)
          printf("Turning on lamp %s with deviceID:%s in %s seconds",i,id,sec)
          setTimeout(function() fibaro:call(id, "turnOn") end, 1000*sec)
        else 
          printf("Lamp %s with deviceID:%s already on",i,id)
        end
		 fibaro:call(20, "pressButton", "4")
          fibaro:call(304, "pressButton", "1")
      end
    end

Re: EventRunner

Posted: 02 Nov 2019, 17:09
by jang
sonnyboy wrote: 02 Nov 2019, 14:40 Sitter och funderar på hur jag ska släcka "allmänbelysningen" på kvällen, men får inte till det alls.
Jag vill att det ska släckas på vardagar mellan 22:15 & 22:45 och på helger mellan 23:15 & 23:50 jag vill att ER ska slumpa fram släckningstiden.
Är ER så smart att det skulle fungera?

Använder denna till att slumpmässigt tända och det fungerar kanon, sen en lite modifierad för att släcka barnens rum, men den är alltid klockan 20:00.

Code: Select all

	   --Function turn on all lamps
  function printf(...) fibaro:debug(string.format(...)) end
  math.randomseed(os.time())
  local deviceIDs = { 248, 250, 252, 269, 45, 189, 36, 480, 274, 300 }
  
  function turnOnAllLamps()
      local ids,sec=Util.randomizeList(deviceIDs),0
      for _,id in ipairs(ids) do -- pick Id from randomized list
        local lightstatus=tonumber(fibaro:getValue(id, "value"));
        if (lightstatus==0) then
          sec = sec + math.random(10,30)
          printf("Turning on lamp %s with deviceID:%s in %s seconds",i,id,sec)
          setTimeout(function() fibaro:call(id, "turnOn") end, 1000*sec)
        else 
          printf("Lamp %s with deviceID:%s already on",i,id)
        end
		 fibaro:call(20, "pressButton", "4")
          fibaro:call(304, "pressButton", "1")
      end
    end
Om du vill släcka alla slumpmässigt men samtidigt är det enkelt.

Code: Select all

deviceIDs = { 248, 250, 252, 269, 45, 189, 36, 480, 274, 300 }
rule("@22:15+rnd(00:30) & wday('mon-fri') => deviceIDs:off")
rule("@23:15+rnd(00:35) & wday('sat-sun') => deviceIDs:off")
Här lägger vi till en slumpmässig tid till @ tiden.

Om du vill mer göra i samma stil som i koden du visar, dvs släcka lamporna en och en slumpmässigt i intervallet blir det lite mer avancerat

Code: Select all

deviceIDs = { 248, 250, 252, 269, 45, 189, 36, 480, 274, 300 }
rule("@22:15 & wday('mon-fri') => for _,id in ipairs(deviceIDs ) do post(#turnOff{id=id},os.time()+rnd(00:30)) end") 
rule("@23:15 & wday('sat-sun') =>  for _,id in ipairs(deviceIDs) do post(#turnOff{id=id},os.time()+rnd(00:35)) end")
rule("#turnOff{id='$id'} => id:off")
Här loopar vi över alla id i deviceIDs och postar ett event slumpmässigt i framtiden (30 eller 35min). Sedan har vi en handler som tar hand om eventet och släcker lampan.
Om man inte vill släcka om den redan är släckt kan man göra id:isOn&id:off i sista regeln

Re: EventRunner

Posted: 03 Nov 2019, 14:49
by sonnyboy
jang wrote: 02 Nov 2019, 17:09 Om du vill mer göra i samma stil som i koden du visar, dvs släcka lamporna en och en slumpmässigt i intervallet blir det lite mer avancerat
CODE: SELECT ALL

deviceIDs = { 248, 250, 252, 269, 45, 189, 36, 480, 274, 300 }
rule("@13:42 & wday('sun-thu') => for _,id in ipairs(deviceIDs ) do post(#turnOff{id=id},os.time()+rnd(00:30)) end")
rule("@23:15 & wday('fri-sat') => for _,id in ipairs(deviceIDs) do post(#turnOff{id=id},os.time()+rnd(00:35)) end")
rule("#turnOff{id='$id'} => id:off")
Här loopar vi över alla id i deviceIDs och postar ett event slumpmässigt i framtiden (30 eller 35min). Sedan har vi en handler som tar hand om eventet och släcker lampan.
Om man inte vill släcka om den redan är släckt kan man göra id:isOn&id:off i sista regeln
När jag pröva denna kod får jag bara en massa fel i loggen, säkert jag som gjort något fel.

Code: Select all

[DEBUG] 13:42:00: [true]>>'Rule:40[@13:42 & wday('sun-thu') => for _,id in ipairs(deviceIDs ) do post(#turnOff{id=i...]'

[DEBUG] 13:42:00: Error in 'Rule:40[@13:42 & wday('sun-thu') => for _,id in ipairs(deviceIDs ) do post(#turnOff{id=i...]': /opt/fibaro/scenes/323.lua:1785: bad argument #1 to 'fun' (table expected, got no value)

[DEBUG] 13:42:00:
[DEBUG] 13:42:00: Line 1783: end
[DEBUG] 13:42:00: Line 1784: local function handleCall(s,e,fun,args)
[DEBUG] 13:42:00: Line 1785:>>> local res = table.pack(fun(table.unpack(args)))
[DEBUG] 13:42:00: Line 1786: if type(res[1])=='table' and res[1][''] then
[DEBUG] 13:42:00: Line 1787: local co = e.co
[DEBUG] 13:42:00:

Re: EventRunner

Posted: 03 Nov 2019, 16:25
by jang
sonnyboy wrote: 03 Nov 2019, 14:49 När jag pröva denna kod får jag bara en massa fel i loggen, säkert jag som gjort något fel.

Code: Select all

[DEBUG] 13:42:00: [true]>>'Rule:40[@13:42 & wday('sun-thu') => for _,id in ipairs(deviceIDs ) do post(#turnOff{id=i...]'

[DEBUG] 13:42:00: Error in 'Rule:40[@13:42 & wday('sun-thu') => for _,id in ipairs(deviceIDs ) do post(#turnOff{id=i...]': /opt/fibaro/scenes/323.lua:1785: bad argument #1 to 'fun' (table expected, got no value)

[DEBUG] 13:42:00:
[DEBUG] 13:42:00: Line 1783: end
[DEBUG] 13:42:00: Line 1784: local function handleCall(s,e,fun,args)
[DEBUG] 13:42:00: Line 1785:>>> local res = table.pack(fun(table.unpack(args)))
[DEBUG] 13:42:00: Line 1786: if type(res[1])=='table' and res[1][''] then
[DEBUG] 13:42:00: Line 1787: local co = e.co
[DEBUG] 13:42:00:
Ser ut som devideIDs inte är definerad, eller deklarerad 'local'
Bör se ut i stil med

Code: Select all

deviceIDs = { 248, 250, 252, 269, 45, 189, 36, 480, 274, 300 }
rule("@13:42 & wday('sun-thu') => for _,id in ipairs(deviceIDs ) do post(#turnOff{id=id},os.time()+rnd(00:30)) end") 

Re: EventRunner

Posted: 05 Nov 2019, 16:30
by MastrUsr
Jag vet att det vid flera tillfällen har postats exempel på era olika regler (rules, Mike Higgins) i denna tråden men även i andra. Jag skulle vara intresserad av en tråd där man i princip bara postade sina regler med förklaring. Det blir så lätt att de försvinner i diskussionerna som sker runtomkring...

Finns detta någonstans som jag missat eller är det något fler skulle vara intresserade av?


Edit: det skulle lika gärna kunna vara på Fibaros forum för större bredd.

Re: EventRunner

Posted: 05 Nov 2019, 20:00
by jang
MastrUsr wrote: 05 Nov 2019, 16:30 Jag vet att det vid flera tillfällen har postats exempel på era olika regler (rules, Mike Higgins) i denna tråden men även i andra. Jag skulle vara intresserad av en tråd där man i princip bara postade sina regler med förklaring. Det blir så lätt att de försvinner i diskussionerna som sker runtomkring...

Finns detta någonstans som jag missat eller är det något fler skulle vara intresserade av?


Edit: det skulle lika gärna kunna vara på Fibaros forum för större bredd.
Egentligen skulle man vilja att det var en Wiki så man kunde hjälpas åt att kommentera regleran och strukturera i innehållet.
Om man bara har en forumtråd kan man inte korrigera andras posts, och det blir efter ett tag svårt att få överblick över alla posts i trådarna. En variant att den som äger första posten tar på sig att uppdatera den med ett index över de olika reglerna i tråden.

Re: EventRunner

Posted: 05 Nov 2019, 21:39
by MastrUsr
jang wrote:
MastrUsr wrote: 05 Nov 2019, 16:30 Jag vet att det vid flera tillfällen har postats exempel på era olika regler (rules, Mike Higgins) i denna tråden men även i andra. Jag skulle vara intresserad av en tråd där man i princip bara postade sina regler med förklaring. Det blir så lätt att de försvinner i diskussionerna som sker runtomkring...

Finns detta någonstans som jag missat eller är det något fler skulle vara intresserade av?


Edit: det skulle lika gärna kunna vara på Fibaros forum för större bredd.
Egentligen skulle man vilja att det var en Wiki så man kunde hjälpas åt att kommentera regleran och strukturera i innehållet.
Om man bara har en forumtråd kan man inte korrigera andras posts, och det blir efter ett tag svårt att få överblick över alla posts i trådarna. En variant att den som äger första posten tar på sig att uppdatera den med ett index över de olika reglerna i tråden.
Ja, ännu bättre! Novis i ämnet så undrar jag hur det skulle gå till men kanske någon skulle kunna skapa en wiki?

Skickat från min SM-N960F via Tapatalk


Re: EventRunner

Posted: 06 Nov 2019, 18:18
by RH_Dreambox
Jag tänkte rensa upp lite fler script (diskmaskin mfl.) som jag har och ersätta dem med regler i ER, och hittade då ett exempel av jompa som jag har modifierat.
Mina regler liknar jompas, men då TTS-meddelandet skickats så skall strömmen brytas till maskinen, och nästa gång den används så trycker man igång strömpluggen manuellt.
Tyvärr funkar inte min regel då den skapar ett felmeddelande och jag förstår inte vad som är fel. Skall det vara något annat än power i headern?
Så här ser headern, deklarationen och regeln ut nu.

Code: Select all

--[[
%% properties
679 power
%% events
%% globals 
%% autostart 
--]] 
--------------------------------------------------------------------------------------------------------
  local HT =  -- Example of in-line "home table"
    { kok = {diskmaskin = 679},
    }
------------------------------------------------------------------------------------------------------
rule("trueFor(00:05,kok.diskmaskin:power < 3 & kok.diskmaskin:isOn) => washingReady=true")
rule("kok.diskmaskin:power > 3 | kok.diskmaskin:isOff => washingReady=false")
rule("washingReady & now => $TTS = 'Tvätten är klar.&vol=12'") -- play first time breached
rule("washingReady => wait(00:00:05); $TTS = 'Har du kollat tvätten?&vol=12'")
rule("washingReady => kok.diskmaskin:off")
Och här är felmeddelandet

[DEBUG] 16:51:33: Garaget test - EventRunner v3.0 B77
[DEBUG] 16:51:33: Fibaro software version: 4.560
[DEBUG] 16:51:33: HC2 uptime: 125 hours
[DEBUG] 16:51:33: Sunrise 07:29, Sunset 16:09
[DEBUG] 16:51:33:
[DEBUG] 16:51:33: Loading rules
[DEBUG] 16:51:33: Rule:1[trueFor(00:05,kok.diskmaskin:power < 3 & kok.diskmaskin:isOn) => washingReady=tr...] = OK
[DEBUG] 16:51:33: Rule:2[kok.diskmaskin:power > 3 | kok.diskmaskin:isOff => washingReady=false] = OK
[DEBUG] 16:51:33: Error in 'washingReady => $TTS = 'Diskmaskinen är klar.&vol=12'': /opt/fibaro/scenes/785.lua:1698: no triggers found in header
[DEBUG] 16:51:33:
[DEBUG] 16:51:33: Line 1696: else s.push(f[1](ID(id,i,e._lastR),f[2],val,e)) end
[DEBUG] 16:51:33: Line 1697: end
[DEBUG] 16:51:33: Line 1698:>>> instr['%rule'] = function(s,n,e,i) local b,h=s.pop(),s.pop(); s.push(Rule.compRule({'=>',h,b,e.log},e)) end
[DEBUG] 16:51:33: Line 1699: instr['log'] = function(s,n) s.push(Log(LOG.ULOG,table.unpack(s.lift(n)))) end
[DEBUG] 16:51:33: Line 1700: instr['%logRule'] = function(s,n,e,i) local src,res = s.pop(),s.pop()
[DEBUG] 16:51:33:
[DEBUG] 16:51:33: Error loading rules:/opt/fibaro/scenes/785.lua:2006: /opt/fibaro/scenes/785.lua:1698: no triggers found in header
[DEBUG] 16:52:16: Aborting: Server not started yet
[DEBUG] 16:53:16: Aborting: Server not started yet
[DEBUG] 16:54:16: Aborting: Server not started yet

Re: EventRunner

Posted: 06 Nov 2019, 23:09
by jang
RH_Dreambox wrote: 06 Nov 2019, 18:18

Code: Select all

--[[
%% properties
679 power
%% events
%% globals 
%% autostart 
--]] 
--------------------------------------------------------------------------------------------------------
  local HT =  -- Example of in-line "home table"
    { kok = {diskmaskin = 679},
    }
------------------------------------------------------------------------------------------------------
rule("trueFor(00:05,kok.diskmaskin:power < 3 & kok.diskmaskin:isOn) => washingReady=true")
rule("kok.diskmaskin:power > 3 | kok.diskmaskin:isOff => washingReady=false")
rule("washingReady & now => $TTS = 'Tvätten är klar.&vol=12'") -- play first time breached
rule("washingReady => wait(00:00:05); $TTS = 'Har du kollat tvätten?&vol=12'")
rule("washingReady => kok.diskmaskin:off")
Ja ER klagar på att den inte hittar någon "trigger" i 3:e regeln.
Triggers är normalt devices eller fibaro globaler. Vanliga ER variabler som 'washingReady' triggar inte regler normalt.
Du kan tala om för ER att 'washingReady' ska vara en trigger variabel genom att deklarera den som en sådan.
Då, om man ändrar värdet på washingReady så kommer regler som har washingReady i vänsterledet att triggas.
Har kommenterat lite i reglerna eftersom det inte verkar helt rätt ändå....

Code: Select all

Util.defTriggerVar('washingReady')
-- Sätter washingReady=true om power är mindre än 3 och diskmaskin är på, i 5 min.
rule("trueFor(00:05,kok.diskmaskin:power < 3 & kok.diskmaskin:isOn) => washingReady=true")
-- Om power > 3 eller maskin blir 'off' så sätts washingReady=false
rule("kok.diskmaskin:power > 3 | kok.diskmaskin:isOff => washingReady=false")
-- Om washingReady==true spela TTS, now returnerar bara tiden och kommer alltid att vara sann
rule("washingReady & now => $TTS = 'Tvätten är klar.&vol=12'") -- play first time breached
-- Om washingReady==true vänta 5s och spela TTS (igen?)
rule("washingReady => wait(00:00:05); $TTS = 'Har du kollat tvätten?&vol=12'")
-- Om washingReady==slå av maskin...
rule("washingReady => kok.diskmaskin:off")
När washingReady sätts till falskt triggas sista regeln som slår av maskinen som triggar andra regeln som sätter washingReady=false...
Det är lite svårt att veta hur länge du ska köra TTS för att påminna. Det hade varit enklare att påminna tills
ngn slår av maskinen eller efter en viss tid. Ex.

Code: Select all

Util.defTriggerVar('washingReady')
rule("trueFor(00:05,kok.diskmaskin:power < 3 & kok.diskmaskin:isOn) => washingReady=true")
rule("kok.diskmaskin:power > 3 | kok.diskmaskin:isOff => washingReady=false")
rule("washingReady & now => $TTS = 'Tvätten är klar.&vol=12'") -- play first time breached
rule("trueFor(00:00:30,washingReady) => $TTS = 'Har du kollat tvätten?&vol=12; again()'") -- Påminn var 30s tills ngn slår av maskinen.
rule("trueFor(00:05:00,washingReady) => kok.diskmaskin:off")
Här påminner vi var 30s med TTS. Men efter 5min så slår vi av maskinen ändå.

Re: EventRunner

Posted: 07 Nov 2019, 10:44
by RH_Dreambox
Tack @jang för att du leder in mig på rätt spår, och ditt första exempel passar oss utmärkt.

Code: Select all

Util.defTriggerVar('washingReady')
rule("trueFor(00:05,kok.diskmaskin:power < 3 & kok.diskmaskin:isOn) => washingReady=true")
rule("kok.diskmaskin:power > 3 | kok.diskmaskin:isOff => washingReady=false")
rule("washingReady & now => $TTS = 'Tvätten är klar.&vol=12'") -- play first time breached
rule("washingReady => wait(00:00:05); $TTS = 'Har du kollat tvätten?&vol=12'")
rule("washingReady => kok.diskmaskin:off")
Men hur skriver jag då jag har tre olika triggers? En för tvättmaskinen, en för torktumlaren och en för 3D-skrivaren?
De kommer att ha olika regler, men jag tänker på Util.defTriggerVar.
Har försökt med lite olika varianter som den här, men bara den första triggern hittas.

Code: Select all

Util.defTriggerVar('dryerReady', 'washingReady', 'printerReady')