EventRunner

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

07 Nov 2019, 11:46

RH_Dreambox wrote:
07 Nov 2019, 10:44
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')
Tyvärr tar den bara en variabel åt gången.

Code: Select all

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

Code: Select all

for _,v in ipairs({'dryerReady', 'washingReady', 'printerReady'}) do Util.defTriggerVar(v) end
Det finns också en funktion i ER som heter Util.map som tar en funktion och en lista och anropar funktionen på alla elementen i listan

Code: Select all

Util.map(Util.defTriggerVar,{'dryerReady', 'washingReady', 'printerReady'})
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1048
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

07 Nov 2019, 13:03

Jag visste väl att du skulle ha en lösning i "bakfickan" :D.
Men om det inte spelar någon roll vilken metod man använder så föredrar jag den här...

Code: Select all

Util.map(Util.defTriggerVar,{'dryerReady', 'washingReady', 'printerReady'})
ER är lite som Office-paketet, man skrapar bara lite på ytan av alla bra funktioner som finns inbäddade i systemet :P.
2 st HC2 4.590 - EventRunner 3
MastrUsr
Medlem
Posts: 168
Joined: 25 Apr 2017, 07:24

07 Nov 2019, 14:08

RH_Dreambox wrote:Jag visste väl att du skulle ha en lösning i "bakfickan" :D.
Men om det inte spelar någon roll vilken metod man använder så föredrar jag den här...

Code: Select all

Util.map(Util.defTriggerVar,{'dryerReady', 'washingReady', 'printerReady'})
ER är lite som Office-paketet, man skrapar bara lite på ytan av alla bra funktioner som finns inbäddade i systemet :P.
Den ska jag också använda mig av!

Bra liknelse, exakt så är det!

Skickat från min SM-N960F via Tapatalk

User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1048
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

09 Nov 2019, 15:10

@jang, är det praktiskt möjligt att lägga in en Motorvärmar-funktion i ER? För ett par år sedan hade vi en tråd om detta som du kan läsa här:
viewtopic.php?f=12&t=4290&hilit=motorvä ... g&start=20
Vitsen med värmaren är att temp-tidskurvan skall följa Energimyndighetens rekommendationer och starta vid +10°C. Formeln för kurvan är ganska enkel och ser ut så här:

Code: Select all

runTime = math.floor(60 + 100*outTemp/(outTemp - 35))
  if outTemp > 10 then runTime = 0 end
ER bör kunna hantera minst två värmare (jag och gumman har varsin).
Man använder en egen tempsensor eller Fibaros vädertemp.
Man bör kunna ställa in en valfri förseningstid (avresan kan bli försenad)

Vi använder inte värmaren regelbundet, så för oss är det lämpligast med StandBy, Auto eller Manuell.
Vid manuell styrning bestämmer Fibaro-switchen uppvärmningstiden (parameter 4 och 5).

Men för de som har regelbundna tider så bör en VD kunna hantera ett veckoschema.
Bifogade filer och bilder visar den lösning som min familj använder idag.
Vi har även tablet med ImperiHome (bilderna) i hallen där vi hanterar värmarna.

Är detta möjligt eller blir det för tungarbetat för ER?
Attachments
Auto.jpg
Auto.jpg (94.63 KiB) Viewed 1846 times
Motorvärmare-scen-vd.zip
(2.78 KiB) Downloaded 31 times
VD Motorvärmare.jpg
VD Motorvärmare.jpg (30.6 KiB) Viewed 1848 times
Diagram_Temp-Tid.jpg
StandBy.jpg
StandBy.jpg (95.67 KiB) Viewed 1848 times
Manuell.jpg
Manuell.jpg (96.97 KiB) Viewed 1848 times
2 st HC2 4.590 - EventRunner 3
User avatar
sonnyboy
Proffsmedlem
Posts: 665
Joined: 26 Sep 2013, 08:05
Location: Västerås

09 Nov 2019, 21:38

@RH_Dreambox
Kul att du tänkte på detta du med, jag funderade på samma igår :)
Försökte gå igenom hela tråden på Fibaros forum om det fanns typ som Gea Alarm.
Tyvärr så hittade jag inget om det. Nu har jag löst det för mig och gumman genom olika rules som trycker på knapparna i den "gamla" VD:n då jag och gumman jobbar olika tider och har samma kabel.
Fibaro HomeCenter 2
Fw 4.561 Beta
BeyondMeasure 1.10
EventRunner
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1048
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

10 Nov 2019, 10:11

@sonnyboy, GEA har jag inte använt så jag vet inte hur Alarm funkade där, men var det inte jompa som hade några Alarm-VD?
Hur som helst så har jompa något liknande till ER. Jag skulle tro att han använder sig av några VD där också.

Code: Select all

rule("@03:00 & wday('sat-sun') => $AlarmClockDays1='Weekends';$AlarmClockTime1='07:30';$AlarmClockDays2='Weekends';$AlarmClockTime2='07:30';log('Alarmklocka: %s %s', $AlarmClockTime1, $AlarmClockDays1,) ")
  rule("@03:00 & wday('mon-fri') & $BankHoliday==1 | $Holiday==1 => $AlarmClockDays1='Weekdays';$AlarmClockTime1='07:30';$AlarmClockDays2='Weekdays';$AlarmClockTime2='07:30';log('Alarmklocka: %s %s', $AlarmClockTime1, $AlarmClockDays1,) ")
  rule("@03:00 & wday('mon-fri') & $BankHoliday==0 => $AlarmClockDays1='Weekdays';$AlarmClockTime1='05:00';log('Alarmklocka: %s %s', $AlarmClockTime1, $AlarmClockDays1,) ")
  rule("@03:00 & wday('mon-fri') & $BankHoliday==0 => $AlarmClockDays2='Weekdays';$AlarmClockTime2='07:00';log('Alarmklocka: %s %s', $AlarmClockTime2, $AlarmClockDays2,) ")
2 st HC2 4.590 - EventRunner 3
MastrUsr
Medlem
Posts: 168
Joined: 25 Apr 2017, 07:24

10 Nov 2019, 14:04

Min VD ser ut så här. "På-tiden" är satt till 1,5h.. Orkade inte lägga upp det också när det äntligen funkade.. Kul att ni tog upp detta bara dagar efter att jag blev klar med min VD, hehe. Image

Skickat från min SM-N960F via Tapatalk


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

16 Nov 2019, 11:03

Hej,
har funderat på motorvärmaren lite.
Det är inga problem att implementera det i ER - frågan är bara att göra det hyfsat elegant... Det är dessutom alltid lite krångligt med timers och alla specialfall som ofta inträder. Nåväl, här är ett försök...

Jag har inkluderat en ny version av VDn.
Alla knappar har samma kod

Code: Select all

local VDID = fibaro:getSelfId()
local scene = fibaro:getValue(VDID, "TCPPort")
local event = {type='MV_VD', id=VDID, value=_elementID_}
fibaro:startScene(scene,{urlencode(json.encode(event))})
Så, vad knappen gör (och alla knappar i VDn) är att den skickar ett event till sceneID som finns i VDns TCP port fält.
Eventet är av typ:

Code: Select all

#MV_VD{id=<VD id>, value=<knapp id>}
och vi kan därför skriva ER regler som

Code: Select all

rule("#{id=46, value=4} => log('VD 46 klickade på knapp med id 4')")
Ok, ER har en funktion som heter VDev.proxy(<VD id>) som returnerar ett objekt med metoder för att lättare jobba med en VD.
Ex.

Code: Select all

local vd = VDev.proxy(46)
vd.setValue('Travel','07:00') -- Sätter fältet ui.Travel.label i VD 46 till '07:00'
local name = vd.nameOf(2) -- returnerar 'Travel' om ui.Travel.label är fält 2 i VDn.
Så, om vi har det, kan vi skriva vår motorvärmarscen så här:

Code: Select all

    local BTNS = {"Travel","Hplus","Hminus","Mplus","Mminus","Temp","Status","Auto","On","Off","Heating"}   -- Name of fields in VD
    VD1,VD2=144,133 -- VD IDs
    Users = {[VD1]={heater=17},[VD2]={heater=19}} -- deviceID for heaters
    User1,User2=Users[VD1],Users[VD2] -- Remove VD2 if only one VD
    outsideTemp = 299 -- ID of temp device
    runTime = 0
  
    --Initialize VD at restart
    for vd,u in pairs(Users) do
      u.vd=VDev.proxy(vd) -- Create proxy to easier interact with VD
      local a = u.vd.getValue("Travel")         -- See if we have an old travel value and reuse it 
      u.vd.setValue("Travel",a and a~="" and a or "07:00") -- else default to 07:00
      u.travel = toTime(u.vd.getValue("Travel"))
      u.status = fibaro:getValue(u.heater,"value") == '0' and 'Av' or 'På' -- Status of heater currently 
      Event.post({type='Update',user=u}) -- Update fields in VD
    end

   -- Convert events from ID to easier events to handle...
    rule("#MV_VD{id='$id',value='$value'} => post({type=Users[id].vd.nameOf(value), user=Users[id],_sh=true})") 

   -- Buttons pressed in VD
    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})")

   -- Generic handler to update VD when a value changes (and set timer if needed)
    rule([[#Update{user='$user'}  =>
        user.vd.setValue('Status',user.status);                                  -- Update status
        user.vd.setValue('Travel',osdate('%H:%M',user.travel+midnight));         -- Update travel time
        user.vd.setValue('Temp',outsideTemp:value);                       -- Update temp
        user.vd.setValue('Heating',osdate('%H:%M',midnight+user.travel-runTime));  -- Update heater time
        cancel(user.timer);                                                            -- Cancel ev. timer
        user.timer=nil;
        local startTime = user.travel+midnight;
        if startTime < ostime() then startTime += 24:00 end;        -- Avresa passed, bump to next day
        startTime -= runTime;
        if startTime < ostime() then startTime=ostime() end;        -- Time passed, set 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)
        end;
        user.vd.setValue('Heating',osdate('%A %H:%M',startTime));  -- Update heater time (day in HC2 language)
        ]])

    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;
          post(#Update{user=User1});
         post(#Update{user=User2})  -- remove if only one user
    ]]).start()
Den hanterar 2 VD just nu, kan enkelt modifieras till en eller godtyckligt många.
värmare och temperatur deviceIDs måste deklareras under %% properties så att reglerna triggas när de ändras.
Logiken är att när Auto är satt så kör timern. På/Av slår på/av värmaren. Om man sätter auto när tiden har passerat så sätts timern till nästa dag. Om uppvärmningstiden är för liten så startas värmaren direkt. Om man slår på/av värmaren manuellt så uppdateras VDn.
Scenen behöver inte heller kontinuerligt polla VDn för värden då den bara reagerar på knapptryck och när temperaturen ändras.
Man kan modifiera den så att man har dagar också antar jag. Tyvärr har jag varken bil eller motorvärmare ;)

Men principen, att ha en VD där alla knappar bara skickar ett event till ER scenen och all logik hanteras i ER, är ngt som jag använder i mina andra VDs.
Attachments
683_Motorvärmare_YH.vfib.json.zip
(1.5 KiB) Downloaded 34 times
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1048
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

17 Nov 2019, 15:43

Tack @jang för allt arbete du lägger ned på oss användare :-)
Testar just nu din motorvärmarfunktion, men jag får inte igång den. Förmodligen har jag missat något, men vad?
Importerade VD är 1071 och 1072 men de reagerar inte på några knappar.

Så här ser men header ut:

Code: Select all

--[[
%% properties
928 value	928 är tempsensor
710 value	710 Switch värmare YH
712 value	712 Switch värmare RH
%% events
%% globals 
%% autostart 
--]] 
Det här är konfigurering av VD, enheter mm:

Code: Select all

-- CAR HEATER RH och YH ################################
local BTNS = {"Travel","Hplus","Hminus","Mplus","Mminus","Temp","Status","Auto","On","Off","Heating"}   -- Name of fields in VD
    VD1,VD2=1071,1072 -- VD IDs
    Users = {[VD1]={heater=712},[VD2]={heater=710}} -- deviceID for heaters
    User1,User2=Users[VD1],Users[VD2] -- Remove VD2 if only one VD
    outsideTemp = 928 -- ID of temp device
    runTime = 0
Och det här är felmeddelandet:

Code: Select all

[DEBUG] 14:25:15: Garaget test - EventRunner v3.0 B77
[DEBUG] 14:25:15: Fibaro software version: 4.560
[DEBUG] 14:25:15: HC2 uptime: 387 hours
[DEBUG] 14:25:15: Sunrise 07:54, Sunset 15:47
[DEBUG] 14:25:15:
[DEBUG] 14:25:15: Loading rules
[DEBUG] 14:25:15: Error loading rules:/opt/fibaro/scenes/785.lua:59: attempt to call field 'proxy' (a nil value)
Rad 59 finns i denna kod:

Code: Select all

--Initialize VD at restart
    		for vd,u in pairs(Users) do
Rad 59 >>      u.vd=VDev.proxy(vd) -- Create proxy to easier interact with VD
     	 local a = u.vd.getValue("Travel")         -- See if we have an old travel value and reuse it 
     	 u.vd.setValue("Travel",a and a~="" and a or "07:00") -- else default to 07:00
      	u.travel = toTime(u.vd.getValue("Travel"))
     	u.status = fibaro:getValue(u.heater,"value") == '0' and 'Av' or 'På' -- Status of heater currently 
     	 Event.post({type='Update',user=u}) -- Update fields in VD
    end
2 st HC2 4.590 - EventRunner 3
jang
Medlem
Posts: 252
Joined: 05 Jan 2014, 00:44
Location: Stockholm

17 Nov 2019, 15:47

V3, B77 är lite för gammal version. Senaste är B82. Du bör uppgradera till senaste. VDev.proxy har bara funnits sedan B79 tror jag.
Har du satt TCPPort:en i VDn till sceneID för ER?
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1048
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

17 Nov 2019, 17:15

jang wrote:
17 Nov 2019, 15:47
V3, B77 är lite för gammal version. Senaste är B82. Du bör uppgradera till senaste. VDev.proxy har bara funnits sedan B79 tror jag.
Har du satt TCPPort:en i VDn till sceneID för ER?
Av någon anledning så går det inte att uppdatera min test-ER så jag trodde att jag körde den senaste versionen.
Jag skall ladda ned en ny version och installera den manuellt.

Men vad menar du med TCPPort? Skall jag hitta på ett eget port-nummer, och skall det in i ER-skriptet också på något ställe?
EDIT: Om jag läser ovan vad du skriver så skall jag ersätta texten "TCPPort" med ER-scenens ID? = "785"
EDIT: Nu trillade nog slanten ned :oops: :oops: :oops:
Attachments
TCPPort.jpg
TCPPort.jpg (8.43 KiB) Viewed 1718 times
2 st HC2 4.590 - EventRunner 3
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1048
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

17 Nov 2019, 18:22

Nä det funkar inte nu heller. Nu fastnar det här:

Code: Select all

[DEBUG] 17:17:46: Garaget Test - EventRunner v3.0 B82
[DEBUG] 17:17:46: Fibaro software version: 4.560
[DEBUG] 17:17:46: HC2 uptime: 390 hours
[DEBUG] 17:17:46: Sunrise 07:54, Sunset 15:47
[DEBUG] 17:17:47:
[DEBUG] 17:17:47: Loading rules
[DEBUG] 17:17:47: Error loading rules:/opt/fibaro/scenes/785.lua:2618: attempt to index global 'rev' (a nil value)
Rad 2618

Code: Select all

    for _,r in ipairs(vd.properties.rows) do for _,e in ipairs(r.elements) do _proxy.map[e.name]=e.id; rev[e.id]=e.name end end
EDIT:
Det måst5e vara något fel med uppdateringen för min andra ER-scen gick inte heller att uppdatera!

Code: Select all

local _version,_fix = "3.0","B77"  -- Oct 24, 2019  
2 st HC2 4.590 - EventRunner 3
jang
Medlem
Posts: 252
Joined: 05 Jan 2014, 00:44
Location: Stockholm

17 Nov 2019, 18:42

RH_Dreambox wrote:
17 Nov 2019, 18:22
Nä det funkar inte nu heller. Nu fastnar det här:

Code: Select all

[DEBUG] 17:17:46: Garaget Test - EventRunner v3.0 B82
[DEBUG] 17:17:46: Fibaro software version: 4.560
[DEBUG] 17:17:46: HC2 uptime: 390 hours
[DEBUG] 17:17:46: Sunrise 07:54, Sunset 15:47
[DEBUG] 17:17:47:
[DEBUG] 17:17:47: Loading rules
[DEBUG] 17:17:47: Error loading rules:/opt/fibaro/scenes/785.lua:2618: attempt to index global 'rev' (a nil value)
Rad 2618

Code: Select all

    for _,r in ipairs(vd.properties.rows) do for _,e in ipairs(r.elements) do _proxy.map[e.name]=e.id; rev[e.id]=e.name end end
Sorry, nu var det jag som hade klantat till mig i senaste versionen.
Jag har laddat upp v3 B83 med en fix. Du kan också patcha den version du har genom att ändra

Code: Select all

    for _,r in ipairs(vd.properties.rows) do for _,e in ipairs(r.elements) do _proxy.map[e.name]=e.id; rev[e.id]=e.name end end
till

Code: Select all

    for _,r in ipairs(vd.properties.rows) do for _,e in ipairs(r.elements) do _proxy.map[e.name]=e.id; _proxy.rev[e.id]=e.name end end
dvs. Lägga till '_proxy.' före 'rev[e.id]'
Hoppas det funkar nu.
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1048
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

17 Nov 2019, 18:56

@jang nu har jag fått igång det!
Men ett litet önskemål är att ändra minuter till steg om 5 minuter per tryck. Det blir väldigt mycket tryckande annars.
Skall testa mer i morgon.
2 st HC2 4.590 - EventRunner 3
jang
Medlem
Posts: 252
Joined: 05 Jan 2014, 00:44
Location: Stockholm

17 Nov 2019, 19:09

Kul att det rör på sig :)
Det är de här raderna som lägger till resp drar av tid.

Code: Select all

    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})")
Sedan bör man ändra texten i VDn också.
Systemfel
Medlem
Posts: 234
Joined: 14 Jan 2015, 01:02

17 Nov 2019, 22:40

Hej alla har en liten undran hur får jag in sceneActivation

( tonumber(fibaro:getValue(512, "sceneActivation")) == 26 )

I Eventrunner delvis styra en scen med s2 på brytaren tex ?
kanske inte är jätte svårt att lösa men hittar inget direkt när jag söker på detta eller så ja söker jag dåligt..
det jag vill är att när jag trycker på s2 delvis knapp 2 på strömbrytaren så ska det skickas en push med fråga vill du släcka huset eller inte ? yes eller no ..

Tack för eran hjälp :)
Börjat pilla lite på min Fibaro home center 2 ( och det går bra )
jang
Medlem
Posts: 252
Joined: 05 Jan 2014, 00:44
Location: Stockholm

17 Nov 2019, 23:18

Systemfel wrote:
17 Nov 2019, 22:40
Hej alla har en liten undran hur får jag in sceneActivation

( tonumber(fibaro:getValue(512, "sceneActivation")) == 26 )

I Eventrunner delvis styra en scen med s2 på brytaren tex ?
kanske inte är jätte svårt att lösa men hittar inget direkt när jag söker på detta eller så ja söker jag dåligt..
det jag vill är att när jag trycker på s2 delvis knapp 2 på strömbrytaren så ska det skickas en push med fråga vill du släcka huset eller inte ? yes eller no ..

Tack för eran hjälp :)
Du deklarerar sceneActivation under %% properties

Code: Select all

--[
%% properties
512 sceneActivation
--]]
 :
 rule("512:scene== S2.click => ...")
77:scene kompileras till 'tonumber(fibaro:getValue(512, "sceneActivation"))'

Det finns fördefinerade tabeller
S1 = {click = "16", double = "14", tripple = "15", hold = "12", release = "13"}
S2 = {click = "26", double = "24", tripple = "25", hold = "22", release = "23"}
som man kan använda att testa :scene värdet mot.
jang
Medlem
Posts: 252
Joined: 05 Jan 2014, 00:44
Location: Stockholm

18 Nov 2019, 14:00

Systemfel wrote:
17 Nov 2019, 22:40
det jag vill är att när jag trycker på s2 delvis knapp 2 på strömbrytaren så ska det skickas en push med fråga vill du släcka huset eller inte ? yes eller no
Ok, såg att du ville pusha en fråga också. Är inte hemma så jag har inte syntaxen för en interaktiv push notis. Men jag kommer ihåg att man kan bara ge ett sceneID som ska startas upp för respektive knapp man trycker på.
Det går inte att ange en ER scene eftersom den inte vill startas upp när den redan kör.
Så man måste ange en annan (hjälp)scen.

Den scenen kan dock skicka ett event tillbaka till ER scenen.

Anta att push notisen har en ja och en nej knapp. Ja, startar upp scen 110. Nej, startar upp scen 112.

ER scen med ID 201

Code: Select all

rule("512:scene==S2.click => ..code for push notice")
rule("#Notice{answer='yes'} => Do whatever if user answered yes...")
rule("#Notice{answer='no'} => Do whatever if user answered no...")
Scene 110 (Ja scenen)

Code: Select all

--[[
%% properties
--]]
local ER_scene = 201
local scene = fibaro:getValue(VDID, "TCPPort")
local event = {type='Notice', answer='yes'}
fibaro:startScene(ER_scene,{urlencode(json.encode(event))}) -- send event to ER scene
Scene 112 (Ja scenen)

Code: Select all

--[[
%% properties
--]]
local ER_scene = 201
local scene = fibaro:getValue(VDID, "TCPPort")
local event = {type='Notice', answer='no'}
fibaro:startScene(ER_scene,{urlencode(json.encode(event))}) -- send event to ER scene
Tyvärr är min erfarenhet att push notiser med interaktion kan vara lite opålitliga.
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1048
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

19 Nov 2019, 16:06

@jang , min fru gav tyvärr motorvärmaren tummen ned :-(
Anledningen är att det tar alldeles för lång tid att ställa in tid mm. Man kan inte som på den gamla VD'n snabbt trycka 6 gånger för att ändra klockan 30 minuter.
Nu måste man vänta ca 10 sek mellan varje tryck tills värdet ändras innan man får trycka igen.
Att ställa avresetiden på den gamla VD'n tog bara några sekunder, men nu kan det ta flera minuter beroende på vilket tid man behöver ställa in, och det gjorde henne skogstokig!

Jag testar detta på en ER test-scen med bara motorvärmarens regler inlagda. Men är det så att ER kräver denna fördröjning mellan knapptryckningarna så blir det jobbigt att ställa en ny tid.
Man skulle vilja haft en slags buffert som samlar på sig knapptryckningarna och som sedan tömmer allt på samma gång.
Men om det inte går att göra på något annat sätt så kör jag vidare på det gamla sättet.

Om det går att lösa så har jag ett önskemål om en justering av VD'n.
Det vore bra om avresedagen syntes i det övre fönstret före avresetiden. Den visas ju längs ned, men den infon är ju mindre relrevant eftersom du där visar när värmaren startar.
Från början var det tänkt att visa där hur lång uppvärmningstiden var. Dvs. den tid i minuter som formeln räknar fram beroende på utetemperaturen.
Men om värmaren är avstängd (står i standby) så skal det helst inte stå någon dag där.
Attachments
VD CarHeater.jpg
2 st HC2 4.590 - EventRunner 3
jang
Medlem
Posts: 252
Joined: 05 Jan 2014, 00:44
Location: Stockholm

19 Nov 2019, 21:47

RH_Dreambox wrote:
19 Nov 2019, 16:06
@jang , min fru gav tyvärr motorvärmaren tummen ned :-(
Anledningen är att det tar alldeles för lång tid att ställa in tid mm. Man kan inte som på den gamla VD'n snabbt trycka 6 gånger för att ändra klockan 30 minuter.
Nu måste man vänta ca 10 sek mellan varje tryck tills värdet ändras innan man får trycka igen.
Inte bra när frun ger tummen ned ;)
Jag provade VDn själv och tiden ändras direkt i VD, max 0.5s fördröjning, Både mobil och lokal browser. Det verkar som det varierar kraftigt hur snabbt den lyckas starta upp scenen.
Mängden regler i ER spelar nästan ingen roll eftersom det är event triggat - så jag misstänker att det är kommunikationen mellan mobil - HC2 som delvis spelar in. 10s fördröjning låter dock på tok för mycket i vilket fall som helst. Är din HC2:a överbelastad? CPU last?
Nåväl. man skulle kunna lägga logiken för att sätta tiden i VDn bara - så antar jag att det skulle gå lite snabbare.
Låt mig försöka med en ny version inom de närmaste dagarna.
Post Reply