EventRunner

forumadmin
Site Admin
Posts: 252
Joined: 10 Dec 2011, 11:43

06 Oct 2020, 12:09

En fråga - vad använder du för att läsa av status på garageporten? Alltså om den är öppen eller stängd?
Självklart smög det in sig ett fel... Det kan vara läsare1.portstatus>0 men jag väljer att använda läsare1.portstatus~=0. Varför? Tja...

Det där med frugan var ju en mycket bra idé! Kommer aldrig glömma garaget mer än en gång! :twisted: Snor den istället, tack!
MastrUsr
Medlem
Posts: 183
Joined: 25 Apr 2017, 07:24

06 Oct 2020, 22:04

jang wrote:
MastrUsr wrote:
05 Oct 2020, 11:28
Jag är en pajas och glömde att man använder ~= i lua och inte !=.

Code: Select all

rule("@21:30 & läsare1.portstatus:value~=0 => telefon.eric:msg=('Garageporten är öppen')")
Jag verkar även fått till repeat, efter lite tragglande :)

Code: Select all

rule([[läsare1.portstatus==0 & @21:30 => tid=now+00:50; repeat telefon.eric:msg=('Garageporten är öppen'); wait(15:00); until now>tid | läsare1.portstatus==0; telefon.eric:msg=('Garageporten är stängd')]])
MastrUsr wrote:
23 Sep 2020, 09:33
Tjena! Försökte men failade...

Vill få en notis i telefonen när klockan är 21:30 och en enhets värde är skilt från 0, gärna var 15 min (max 3 gånger inkl. 21:30) om tillståndet kvarstår.

Jag kom inte längre än så här, men det funkade inte...

rule("@21:30 & portstatus != 0 => telefon.eric:msg=('Garageporten är öppen')")
Ursäkta, jag hade missat den här frågan... men du löste det :-)
Ska det inte vara "@21:30 & läsare1.portstatus>0 ...." dvs öppen är status > 0

Man kan skriva en sådan här. regel på lite olika sätt. Ett annat är trueFor...repeat

Code: Select all

rule("@21:15 & trueFor(00:15,läsare1.portstatus>0) =>  telefon.eric:msg=('Garageporten är öppen'); repeat(3)")
rule([[läsare1.portstatus==0 &  21:30..22:30 =>  telefon.eric:msg=('Garageporten är stängd')")
...eller en while loop. Här kan man fråga sig vad som ska hända om porten fortfarande är öppen efter 3 påminnelser

Code: Select all

rule([[@21:15 =>
           local t=now; 
           while läsare1.portstatus>0 & t+00:50 > now do 
                  telefon.eric:msg=('Garageporten är öppen'); 
                  wait(00:15) 
            end;  
            if läsare1.portstatus>0 then 
                  telefon.frugan:msg=('Eric har fortfarande inte stängt garageporten!')
            else  
                  telefon.eric:msg=('Garageporten är stängd')
            end]])
Funkade inte. Fick två notifikationer 21:31, en 21:47, en 22:00..

Dessutom är portstatusen 0. Märk att jag ändrat från '>' till '~='. Kanske är det som spökar..?

Skickat från min SM-N960F via Tapatalk





Last edited by MastrUsr on 06 Oct 2020, 22:04, edited 3 times in total.
MastrUsr
Medlem
Posts: 183
Joined: 25 Apr 2017, 07:24

06 Oct 2020, 22:07

forumadmin wrote:En fråga - vad använder du för att läsa av status på garageporten? Alltså om den är öppen eller stängd?
Självklart smög det in sig ett fel... Det kan vara läsare1.portstatus>0 men jag väljer att använda läsare1.portstatus~=0. Varför? Tja...

Det där med frugan var ju en mycket bra idé! Kommer aldrig glömma garaget mer än en gång! :twisted: Snor den istället, tack!
Har med en z-uno (arduino med zwave) gjort en trigger till garageportsöppnaren, kombinerat med fingeravtrycksläsare. Jag använder en "dimmer" i HC2 som visar olika lägen för porten... Uppe, nere, kör upp.... '0' är stängd.

Skickat från min SM-N960F via Tapatalk

jang
Medlem
Posts: 291
Joined: 05 Jan 2014, 00:44
Location: Stockholm

07 Oct 2020, 12:31

MastrUsr wrote:
06 Oct 2020, 22:04
jang wrote:
MastrUsr wrote:
05 Oct 2020, 11:28
...eller en while loop. Här kan man fråga sig vad som ska hända om porten fortfarande är öppen efter 3 påminnelser

Code: Select all

rule([[@21:15 =>
           local t=now; 
           while läsare1.portstatus>0 & t+00:50 > now do 
                  telefon.eric:msg=('Garageporten är öppen'); 
                  wait(00:15) 
            end;  
            if läsare1.portstatus>0 then 
                  telefon.frugan:msg=('Eric har fortfarande inte stängt garageporten!')
            else  
                  telefon.eric:msg=('Garageporten är stängd')
            end]])
Funkade inte. Fick två notifikationer 21:31, en 21:47, en 22:00..
Dessutom är portstatusen 0. Märk att jag ändrat från '>' till '~='. Kanske är det som spökar..?
Skickat från min SM-N960F via Tapatalk
Ok, jag såg att jag använt 21:15 - borde vara 21:30?
Fick du 3 notifikationer, 21:31, en 21:47, en 22:00 ?
Du borde ha fått den ~21:15, ~21:30, ~21:45 - så allt verkar 15min sent. Jag har varit med om att pushmeddelanden kommer sent (och t.o.m repeteras)
Om du lägger in log runt meddelandena så får du ett meddelande i konsolen när den skickar push meddelandet. Då kan du se om det är ngn sorts fördröjning?

Code: Select all

rule([[@21:30 =>
           local stopTime=now+00:50; 
           while läsare1.portstatus ~= 0 & now < stopTime do 
                  log('portstatus~=0 and now<stopTime');
                  telefon.eric:msg=log('Garageporten är öppen'); 
                  wait(00:15) 
            end;  
            log('portstatus==0 or now>=stopTime');
            if läsare1.portstatus ~= 0 then 
                  telefon.frugan:msg=log('Eric har fortfarande inte stängt garageporten!')
            else  
                  telefon.eric:msg=log('Garageporten är stängd')
            end]])
MastrUsr
Medlem
Posts: 183
Joined: 25 Apr 2017, 07:24

07 Oct 2020, 13:31

jang wrote:
07 Oct 2020, 12:31
Ok, jag såg att jag använt 21:15 - borde vara 21:30?
Fick du 3 notifikationer, 21:31, en 21:47, en 22:00 ?
Du borde ha fått den ~21:15, ~21:30, ~21:45 - så allt verkar 15min sent. Jag har varit med om att pushmeddelanden kommer sent (och t.o.m repeteras)
Om du lägger in log runt meddelandena så får du ett meddelande i konsolen när den skickar push meddelandet. Då kan du se om det är ngn sorts fördröjning?

Code: Select all

rule([[@21:30 =>
           local stopTime=now+00:50; 
           while läsare1.portstatus ~= 0 & now < stopTime do 
                  log('portstatus~=0 and now<stopTime');
                  telefon.eric:msg=log('Garageporten är öppen'); 
                  wait(00:15) 
            end;  
            log('portstatus==0 or now>=stopTime');
            if läsare1.portstatus ~= 0 then 
                  telefon.frugan:msg=log('Eric har fortfarande inte stängt garageporten!')
            else  
                  telefon.eric:msg=log('Garageporten är stängd')
            end]])
Nej, jag fick 2x notifikation 21:31. 1x 21:47. 1x 22:00. Min fästmö fick också någon gång men hon var för snabb att ta bort så jag vet inte om den kom 22:00 eller senare...
Det kan absolut varit fördröjt. När man låter telefonen ligga still kan den gå in i ett viloläge och sen när man tar upp den plingar det "massa". Men jag är osäker på vilken tid som då rapporteras (borde vara det nuvarande klockslaget).

Hur som helst tycker jag att ingen notifikation borde kommit eftersom ett villkor är att portstatus inte ska vara 0, vilket jag dubbelkollat att den är.

Jag lägger in den nya och testar (ändrar inte på något)!
jang
Medlem
Posts: 291
Joined: 05 Jan 2014, 00:44
Location: Stockholm

07 Oct 2020, 13:37

Ok, och kolla loggen runt 21:30 och se om den verkar trigga eller inte
MastrUsr
Medlem
Posts: 183
Joined: 25 Apr 2017, 07:24

07 Oct 2020, 21:37

jang wrote:Ok, och kolla loggen runt 21:30 och se om den verkar trigga eller inte
["läsare1"] = {fpidset = 387, lastread = 388, fpmode = 389, portstatus = 390},

ID 390 är 0. Image

Edit: ER har triggat var 15:e minut men nu även 22:15.

Varför tas inte portstatusen med som villkor?
Skickat från min SM-N960F via Tapatalk

jang
Medlem
Posts: 291
Joined: 05 Jan 2014, 00:44
Location: Stockholm

08 Oct 2020, 10:21

Verkar som jag hade somnat vid ratten - vi glömde :value for portstatus.

Code: Select all

rule([[@21:30 =>
           local stopTime=now+00:50; 
           while läsare1.portstatus:value ~= 0 & now < stopTime do 
                  log('portstatus~=0 and now<stopTime');
                  telefon.eric:msg=log('Garageporten är öppen'); 
                  wait(00:15) 
            end;  
            log('portstatus==0 or now>=stopTime');
            if läsare1.portstatus:value ~= 0 then 
                  telefon.frugan:msg=log('Eric har fortfarande inte stängt garageporten!')
            else  
                  telefon.eric:msg=log('Garageporten är stängd')
            end]])
I princip borde du kunna använda läsare1.portstatus:breached istället för läsare1.portstatus:value ~= 0
MastrUsr
Medlem
Posts: 183
Joined: 25 Apr 2017, 07:24

08 Oct 2020, 10:57

jang wrote:
08 Oct 2020, 10:21
Verkar som jag hade somnat vid ratten - vi glömde :value for portstatus.

Code: Select all

rule([[@21:30 =>
           local stopTime=now+00:50; 
           while läsare1.portstatus:value ~= 0 & now < stopTime do 
                  log('portstatus~=0 and now<stopTime');
                  telefon.eric:msg=log('Garageporten är öppen'); 
                  wait(00:15) 
            end;  
            log('portstatus==0 or now>=stopTime');
            if läsare1.portstatus:value ~= 0 then 
                  telefon.frugan:msg=log('Eric har fortfarande inte stängt garageporten!')
            else  
                  telefon.eric:msg=log('Garageporten är stängd')
            end]])
I princip borde du kunna använda läsare1.portstatus:breached istället för läsare1.portstatus:value ~= 0
Jag gjorde samma misstag vid mina simuleringar ;)

Ja, då borde det funka! Jag provar och återkommer.
forumadmin
Site Admin
Posts: 252
Joined: 10 Dec 2011, 11:43

09 Oct 2020, 07:46

Hej, försökt sätta upp en hometable enligt guiden i andra tråden.
Får error:
[09.10.2020] [07:45:00] [ERROR] [QUICKAPP300]: main.lua:15: '}' expected (to close '{' at line 14) near '<\195>'

Code: Select all

  
  HT = { 
      kök = {
        button = 84,
        gardin1 = 26,
        gardin2 = 27,
        gardin3 = 167,
        matbord = 53,
        köksö = 72,
        ledlist = 88,
        gardinled = 231,
        kylskåpled = 296
       },
       vardagsrum = {
        SONOS = 294,
        sensorskaff = 189,
        lightskaff = 226
        },
  }
jang
Medlem
Posts: 291
Joined: 05 Jan 2014, 00:44
Location: Stockholm

09 Oct 2020, 09:28

forumadmin wrote:
09 Oct 2020, 07:46
Hej, försökt sätta upp en hometable enligt guiden i andra tråden.
Får error:
[09.10.2020] [07:45:00] [ERROR] [QUICKAPP300]: main.lua:15: '}' expected (to close '{' at line 14) near '<\195>'

Code: Select all

  
  HT = { 
      kök = {
        button = 84,
        gardin1 = 26,
        gardin2 = 27,
        gardin3 = 167,
        matbord = 53,
        köksö = 72,
        ledlist = 88,
        gardinled = 231,
        kylskåpled = 296
       },
       vardagsrum = {
        SONOS = 294,
        sensorskaff = 189,
        lightskaff = 226
        },
  }
Sorry, jag var slarvig. Jag har editerat del 2. med en uppdatering.
Svenska tecken är inte tillåtna i namn på Lua variabler/konstanter så ditt exempel klagar på "kök = {"
Om man vill. ha en symbol med svenska tecken får man skriva ex. ['kök'] = {
Så din tabell blir

Code: Select all

  HT = {
    ['kök'] = {
      button = 84,
      gardin1 = 26,
      gardin2 = 27,
      gardin3 = 167,
      matbord = 53,
      ['köksö'] = 72,
      ledlist = 88,
      gardinled = 231,
      ['kylskåpled'] = 296
    },
    vardagsrum = {
      SONOS = 294,
      sensorskaff = 189,
      lightskaff = 226
    },
  }
Om man I ER sedan gör Util.defvars(HT) så kan man använda variablerna med svenska tecken - ER har mer sympati för det svenska språket än Lua...
Ex.

Code: Select all

rule("kök.button:isOn => kök.matbord:on")
MastrUsr
Medlem
Posts: 183
Joined: 25 Apr 2017, 07:24

16 Oct 2020, 13:04

MastrUsr wrote:
jang wrote:
08 Oct 2020, 10:21
Verkar som jag hade somnat vid ratten - vi glömde :value for portstatus.

Code: Select all

rule([[@21:30 =>
           local stopTime=now+00:50; 
           while läsare1.portstatus:value ~= 0 & now < stopTime do 
                  log('portstatus~=0 and now<stopTime');
                  telefon.eric:msg=log('Garageporten är öppen'); 
                  wait(00:15) 
            end;  
            log('portstatus==0 or now>=stopTime');
            if läsare1.portstatus:value ~= 0 then 
                  telefon.frugan:msg=log('Eric har fortfarande inte stängt garageporten!')
            else  
                  telefon.eric:msg=log('Garageporten är stängd')
            end]])
I princip borde du kunna använda läsare1.portstatus:breached istället för läsare1.portstatus:value ~= 0
Jag gjorde samma misstag vid mina simuleringar ;)

Ja, då borde det funka! Jag provar och återkommer.
Testat några dagar nu och det fungerar som tänkt! :)
Jag har dock något önskemål, om man har lust, absolut inget måste..
Jag vill direkt att man får en notifikation att det är stängt, om det meddelats att det är öppet och man sedan stänger. Som det är nu får man meddelande att det är stängt vid "nästa instans", alltså efter 15 min.

Ännu häftigare hade varit om man fick upp en interaktiv notifikation med två knappar. Stäng och tex skjut upp eller avbryt ytterligare notifikationer..

Tack så mycket för hjälpen :)

Skickat från min SM-N960F via Tapatalk


Teddy215
Ny medlem
Posts: 8
Joined: 12 May 2020, 14:55

16 Oct 2020, 14:58

Kanon!

Nu fungerar det att släcka med ett klick! :-)

Tänkte att keyid==2 skulle fungera som dubbeltryck på knappen men det verkar vara fel kommando

[16.10.2020] [14:54:25] [DEBUG] [QUICKAPP264]: [true]>>'Rule:5[button:central.keyId==1 => entretak:off]'
[16.10.2020] [14:54:25] [DEBUG] [QUICKAPP264]: fibaro.call(171,"turnOff") => nil
[16.10.2020] [14:54:25] [DEBUG] [QUICKAPP264]: fibaro.call(157,"turnOff") => nil
[16.10.2020] [14:54:25] [DEBUG] [QUICKAPP264]: [false]>>'Rule:6[button:central.keyId==2 => entretak:on]'

Vet inte om jag är ute och cyklar
jang
Medlem
Posts: 291
Joined: 05 Jan 2014, 00:44
Location: Stockholm

17 Oct 2020, 08:48

Teddy215 wrote:
16 Oct 2020, 14:58
Kanon!

Nu fungerar det att släcka med ett klick! :-)

Tänkte att keyid==2 skulle fungera som dubbeltryck på knappen men det verkar vara fel kommando

[16.10.2020] [14:54:25] [DEBUG] [QUICKAPP264]: [true]>>'Rule:5[button:central.keyId==1 => entretak:off]'
[16.10.2020] [14:54:25] [DEBUG] [QUICKAPP264]: fibaro.call(171,"turnOff") => nil
[16.10.2020] [14:54:25] [DEBUG] [QUICKAPP264]: fibaro.call(157,"turnOff") => nil
[16.10.2020] [14:54:25] [DEBUG] [QUICKAPP264]: [false]>>'Rule:6[button:central.keyId==2 => entretak:on]'

Vet inte om jag är ute och cyklar
Ok, så det är ett centralSceneEvent. Det eventet har 2 attribut. .keyId som du testar på i din regel som ger numret på knappen, och .keyAttribute send ger om det var ett enkel eller dubbelklick (eller trippel). Det finns normalt "Hold" och "Released" också.
Du kan testa din remote med den här regeln

Code: Select all

rule("button:central => log('keyId:%s, keyAttribute:%s',button:central.keyId,button:central.keyAttribute)")
Om den visar "Pressed2" vi dubbelklick så skulle en regel kunna se ut som

Code: Select all

rule("button:central.keyId==1 & button:central.keyAttribute=='Pressed2" => entretak:off") -- dubbelklick knapp 1
jang
Medlem
Posts: 291
Joined: 05 Jan 2014, 00:44
Location: Stockholm

18 Oct 2020, 11:01

MastrUsr wrote:
16 Oct 2020, 13:04
Testat några dagar nu och det fungerar som tänkt! :)
Jag har dock något önskemål, om man har lust, absolut inget måste..
Jag vill direkt att man får en notifikation att det är stängt, om det meddelats att det är öppet och man sedan stänger. Som det är nu får man meddelande att det är stängt vid "nästa instans", alltså efter 15 min.

Ännu häftigare hade varit om man fick upp en interaktiv notifikation med två knappar. Stäng och tex skjut upp eller avbryt ytterligare notifikationer..

Code: Select all

watching = nil
rule([[@21:30 =>
           local stopTime=now+00:50; 
           while läsare1.portstatus:breached & now < stopTime do 
                 watching = true;
                  log('portstatus~=0 and now<stopTime');
                  telefon.eric:msg=log('Garageporten är öppen'); 
                  wait(00:15) 
            end;  
            watching = false;
            log('portstatus==0 or now>=stopTime');
            if läsare1.portstatus:breached then 
                  telefon.frugan:msg=log('Eric har fortfarande inte stängt garageporten!')
            end]])

rule("läsare1.portstatus:safe & watching => telefon.eric:msg=log('Garageporten är stängd')")
Att lägga till en notifiering så fort som dörren stängs är ganska enkelt - kod ovan.
Att få en interaktiv notifiering är också ganske enkelt. Problemet är att jag får det inte att fungera. Det blir bara en vanlig push sedan senaste uppdateringen. Har någon av er lyckats med en interaktiv notifiering på sistonde?
Last edited by jang on 18 Oct 2020, 14:03, edited 1 time in total.
MastrUsr
Medlem
Posts: 183
Joined: 25 Apr 2017, 07:24

18 Oct 2020, 13:51

jang wrote:
18 Oct 2020, 11:01
MastrUsr wrote:
16 Oct 2020, 13:04
Testat några dagar nu och det fungerar som tänkt! :)
Jag har dock något önskemål, om man har lust, absolut inget måste..
Jag vill direkt att man får en notifikation att det är stängt, om det meddelats att det är öppet och man sedan stänger. Som det är nu får man meddelande att det är stängt vid "nästa instans", alltså efter 15 min.

Ännu häftigare hade varit om man fick upp en interaktiv notifikation med två knappar. Stäng och tex skjut upp eller avbryt ytterligare notifikationer..

Code: Select all

watching = nil
rule([[@21:30 =>
           local stopTime=now+00:50; 
           while läsare1.portstatus:breached & now < stopTime do 
                 watching = true;
                  log('portstatus~=0 and now<stopTime');
                  telefon.eric:msg=log('Garageporten är öppen'); 
                  wait(00:15) 
            end;  
            watching = false;
            log('portstatus==0 or now>=stopTime');
            if läsare1.portstatus:breached then 
                  telefon.frugan:msg=log('Eric har fortfarande inte stängt garageporten!')
            end]])

rule("läsare1.portstatus:safe and watching => telefon.eric:msg=log('Garageporten är stängd')")
Att lägga till en notifiering så fort som dörren stängs är ganska enkelt - kod ovan.
Att få en interaktiv notifiering är också ganske enkelt. Problemet är att jag får det inte att fungera. Det blir bara en vanlig push sedan senaste uppdateringen. Har någon av er lyckats med en interaktiv notifiering på sistonde?


Code: Select all

[DEBUG] 13:49:39: Error in 'läsare1.portstatus:breached and watching => telefon.eric:msg=log('Garageporten är stängd')': /opt/fibaro/scenes/91.lua:1777: no triggers found in header

[DEBUG] 13:49:39:
[DEBUG] 13:49:39: Line 1775: else s.push(f[1](ID(id,i,e._lastR),f[2],val,e)) end
[DEBUG] 13:49:39: Line 1776: end
[DEBUG] 13:49:39: Line 1777:>>> 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] 13:49:39: Line 1778: instr['log'] = function(s,n) s.push(Log(LOG.ULOG,table.unpack(s.lift(n)))) end
[DEBUG] 13:49:39: Line 1779: instr['%logRule'] = function(s,n,e,i) local src,res = s.pop(),s.pop()
[DEBUG] 13:49:39:
[DEBUG] 13:49:39: Error loading rules:/opt/fibaro/scenes/91.lua:2085: /opt/fibaro/scenes/91.lua:1777: no triggers found in header
jang
Medlem
Posts: 291
Joined: 05 Jan 2014, 00:44
Location: Stockholm

18 Oct 2020, 14:03

Ska vara "läsare1.portstatus:safe & watching => ..."
hade skrivit "and".
MastrUsr
Medlem
Posts: 183
Joined: 25 Apr 2017, 07:24

18 Oct 2020, 14:32

jang wrote:Ska vara "läsare1.portstatus:safe & watching => ..."
hade skrivit "and".
Ah, lätt hänt. Tack igen! Återkommer när jag testat..

Skickat från min SM-N960F via Tapatalk

MastrUsr
Medlem
Posts: 183
Joined: 25 Apr 2017, 07:24

19 Oct 2020, 11:28

RH_Dreambox wrote:
24 Nov 2019, 11:52
@jang Här är koden för mina värmare. I din förra version fick jag samma fel, men det åtgärdade jag med ett semikolon (se röd rad nedan).
Förseningstiden är OK som den är. Din variabel AUTO_OFF kan jag ändra vid behov, men oftast ställer man den bara en gång.
Du nämnde att du inte hade någon tempgivare, men kan du inte använda Fibaros väder-temp, som har ID 3 för dina tester EDIT: Kollade nu men det verkar inte funka.

-- START CARHEATER RH/YH ######################################
local BTNS = {"Travel","Hplus","Hminus","Mplus","Mminus","Temp","Status","Auto","On","Off","Heating","Tp","Tm"}
VD1,VD2=1071,1072 -- VD IDs
Users = {[VD1]={heater=712},[VD2]={heater=710}} -- deviceID for heaters
User1,User2=Users[VD1],Users[VD2]
AUTO_OFF = 15*60 -- Turn off 15min after auto has turned on heater
outsideTemp = 928
runTime = 0

for vd,u in pairs(Users) do -- Initialize VD at restart
u.vd=VDev.proxy(vd)
local a = u.vd.getValue("Travel"):match("(%d%d:%d%d)")
u.vd.setValue("Travel", a and a~="" and a or "07:00")
u.travel = toTime(u.vd.getValue("Travel"))
u.status = fibaro:getValue(u.heater,"value") == '0' and 'Av' or 'På'
Event.post({type='Update',user=u})
end

rule("#MV_VD{id='$id',value='$value'} => post({type=Users[id].vd.nameOf(value), user=Users[id],_sh=true})")

rule("#Hplus{user='$user'} => user.travel=(user.travel+01:00) % 24:00; post(#Update{user=user})")
rule("#Hminus{user='$user'} => user.travel=(user.travel-01:00) % 24:00; post(#Update{user=user})")
rule("#Mplus{user='$user'} => user.travel=(user.travel+00:01) % 24:00; post(#Update{user=user})")
rule("#Mminus{user='$user'} => user.travel=(user.travel-00:01) % 24:00; post(#Update{user=user})")
rule("#On{user='$user'} => user.heater:on") -- Turn on heater
rule("#Off{user='$user'} => user.heater:off") -- Turn off heater
rule("#Auto{user='$user'} & user.status == 'Av' => user.status = 'Auto'; post(#Update{user=user})")

rule([[#Update{user='$user'} =>
user.vd.setValue('Status',user.status); -- Update status
user.vd.setValue('Temp',outsideTemp:value); -- Update temp
user.timer=cancel(user.timer); -- Cancel ev. timer
user.timer2=cancel(user.timer2); -- Cancel ev. timer
local startTime = user.travel+midnight;
if startTime < ostime() then startTime += 24:00 end; -- Travel time passed, bump to next day
user.vd.setValue('Travel',osdate('%A %H:%M',startTime)); -- Update travel time in VD
local orgStart = startTime;
startTime -= runTime; -- Subtract heater time
if startTime < ostime() then startTime=ostime() end; -- If passed, set start time to now
if user.status == 'Auto' then -- If auto mode, start timer
log('Startar motorvärmare %s',osdate('%c',startTime));
user.timer = post(#On{user=user},startTime); -- Timer when heater should start
user.timer2 = post(#Off{user=user}, orgStart+AUTO_OFF) -- Timer for auto off
end;
user.vd.setValue('Heating',osdate('%H:%M',startTime)); -- Update heater time in VD
]])

rule("User1.heater:isOn => cancel(User1.timer); User1.status='På'; post(#Update{user=User1})")
rule("User1.heater:isOff => cancel(User1.timer); User1.status='Av'; post(#Update{user=User1})")
rule("User2.heater:isOn => cancel(User2.timer); User2.status='På'; post(#Update{user=User2})") -- remove if only one user
rule("User2.heater:isOff => cancel(User2.timer); User2.status='Av'; post(#Update{user=User2})") -- remove if only one user
rule([[outsideTemp:value => -- Outside temp changes, update user values
local outTemp = outsideTemp:value;
runTime = math.floor(60+100*outTemp/(outTemp-35));
if outTemp>10 then runTime=0 end;
runTime *= 60;
log('H:%s T:%s',runTime,outsideTemp);
post(#Update{user=User1});
post(#Update{user=User2}) -- remove if only one user
]]).start()
-- SLUT CARHEATER RH/YH ######################################

EDIT:
Koden ovan är rättad och fungerar nu.
Hej!
Jag har lagt in din värmarVD och det fungerar toppen! Jag skulle dock vilja ändra så att den även är styrd per dag (som jag gjorde i min - som för övrigt strular).
Hur ska jag spara mina värden för vilka dagar som värmaren ska startas? T.ex. Mån, Ons, Fre. Jag tänker att man lägger till 7 knappar i VD'n med Må, Ti, On... med samma kod som i de tidigare knapparna..

I min VD så sparar jag undan en array som en jsonsträng(?) i en global variabel (1 för må, 2 för ti osv.) och jämför med nuvarande dag, men allt som oftast så händer något och dessa verkar inte längre avkodas som de ska och VD'n funkar helt enkelt inte.
Post Reply