Hjälp QuickApp

Post Reply
Systemfel
Medlem
Posts: 273
Joined: 14 Jan 2015, 01:02
6

Hej alla skulle behöva lite start hjälp med en quick app

Hur gör jag tex för att göra som en vd med 2 knappar som ändrar 2 st variabler tex sätter on till off ? läst lite blir inte riktigt klok behöver som sagt bara lite start hjälp ett exempel detta gäller Hc3 har kommit så långt att jag har lykats lista ut hur man gör själva quickappen
tänkte om någon hade något färdigt som man kan bara kolla på .. typ med lite knappar kod för att ändra en variabel ..

tack på förhand
Hc2 till Hc3 på g sakta men säkert :D
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1112
Joined: 03 Jan 2015, 16:49
6
Location: Vegby
Contact:

Nej det är inte lätt i början, men du kan kolla lite på den här....
https://www.zwaveforum.se/viewtopic.php ... are#p23268

Tänk bara på att det finns 23 olika QA-mallar att utgå från.
Min QA bygger på en "Binary switch" vilket gör att jag ser på ikonen om värmaren är till eller från.
HC3 (5.061 Beta) med ER4 och HC2 (4.600) med ER 3
Systemfel
Medlem
Posts: 273
Joined: 14 Jan 2015, 01:02
6

RH_Dreambox wrote: 28 Dec 2020, 18:22 Nej det är inte lätt i början, men du kan kolla lite på den här....
https://www.zwaveforum.se/viewtopic.php ... are#p23268

Tänk bara på att det finns 23 olika QA-mallar att utgå från.
Min QA bygger på en "Binary switch" vilket gör att jag ser på ikonen om värmaren är till eller från.
Tack jo har kollat lite men du använder ju variabler i själva quikappen eller vad man nu vill kalla det är det bättre än dom globala ?

såg du hade fina färger och det var man ju tvungen att ha oxå :) får se om jag kommer på mer frågor men får läsa på lite mer och testa mig fram :D :) :o

tack för vägledningen ..
Hc2 till Hc3 på g sakta men säkert :D
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1112
Joined: 03 Jan 2015, 16:49
6
Location: Vegby
Contact:

QuickAppens lokala variabler tycker jag är mycket användbara.
Tex. så har jag och gumman har var sin QA motorvärmare och då kan jag använda samma variabelnamn i båda.
Jag kan med andra ord utan problem skapa flera separat styrda motorvärmare.

Om jag hade använt globala variabler då måste jag dubblera variablerna och ge dem olika namn för att det inte skall bli konflikter mellan dem.
Globala variabler är ju bra utifall dessa används av flera QA eller scener, som tex. TimeOfDay och TTS.
HC3 (5.061 Beta) med ER4 och HC2 (4.600) med ER 3
Systemfel
Medlem
Posts: 273
Joined: 14 Jan 2015, 01:02
6

RH_Dreambox wrote: 31 Dec 2020, 11:15 QuickAppens lokala variabler tycker jag är mycket användbara.
Tex. så har jag och gumman har var sin QA motorvärmare och då kan jag använda samma variabelnamn i båda.
Jag kan med andra ord utan problem skapa flera separat styrda motorvärmare.

Om jag hade använt globala variabler då måste jag dubblera variablerna och ge dem olika namn för att det inte skall bli konflikter mellan dem.
Globala variabler är ju bra utifall dessa används av flera QA eller scener, som tex. TimeOfDay och TTS.
Och då är frågan omman kör lokala variabler hur fasen läser man dom i eventrunner ?
Hc2 till Hc3 på g sakta men säkert :D
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1112
Joined: 03 Jan 2015, 16:49
6
Location: Vegby
Contact:

Mot bättre vetande skulle jag svara, byt ut "setVariable" mot "getVariable".
Förhoppningsvis läser jang detta inlägg och ger dig ett korrekt svar.

Exempel på att skriva till en QA variabel.

Code: Select all

--========== Regel för Motorvärmare ==========
    AvreseTid = "06:30"  -- Ange din avresetid
    QA_CarHeater = 999   -- Ange ID för Motorvärmares QuickApp

    rule([[@{catch, 00:00} & wday('mon-fri') => 
            local time = pack(string.match(AvreseTid,'(%d%d):(%d%d)'));
            fibaro.call(QA_CarHeater,'setVariable','Dep_Hour',time[1]);
            fibaro.call(QA_CarHeater,'setVariable','Dep_Minute',time[2]);
            fibaro.call(QA_CarHeater,'setVariable','Heat_Status','Auto');
            fibaro.call(QA_CarHeater,'updateView','btn_standby','text','Standby');
            fibaro.call(QA_CarHeater,'updateView','btn_auto','text','AUTO');
       ]])
  --========== Slut på regel Motorvärmare ==========
HC3 (5.061 Beta) med ER4 och HC2 (4.600) med ER 3
jang
Medlem
Posts: 324
Joined: 05 Jan 2014, 00:44
7
Location: Stockholm

Ok, jag antar att du har en QA som ex. motorvärmar QAn som ska göra något på en viss tid.
Denna tid vill du lätt kunna ändra.

1. Din QA har ett antal knappar som sätter tiden. Antingen ett antal knappar med förvalda tider (enkelt), eller knappar som låter dig komponera valfri tid med timmar och minuter (lite mer komplicerat)
Anta den enkla varianten len en knapp för "07:00" och en knapp för "08:00"
Du definierar då lua funktioner som ska köras då man klickar på knapparna. I editor när du klickar på en knapp så får du i högra fältet en control ruta med knappinfo. Fyll i onReleased rutan med namnet på funktionen som ska anropas. ex. 'tid07' för första knappen och 'tid08' för den andra,

Sedan i koden, utanför ER4 main(), definierar du
function QuickApp:tid07() self:evalScript("tid=07:00") end
function QuickApp:tid08() self:evalScript("tid=08:00") end
function QuickApp:setTime(t) self:evalScript("tid="..t) end

Och i ER4 main() kan du ha en regel som ex.
Util.defTriggerVar("tid") -- deklarera att 'tid' är en lokal variabel som kan trigga regler
rule("tid = 07:00") -- initialisera 'tid' till ett värde
rule("@tid => motorvärmare:on") -- slå på motorvärmare på angiven tid

Om du vill sätta tiden från en annan scen eller QA kan du anropa
fibaro.call(QA_ID,"tid07")
eller
fibaro.call(QA_ID,"setTid","07:30")

2. quickVars. Jag tycker att man ska se på quickVars som initialiseringsvärden. I och med att en QA "kör hela tiden" och kan jobba med lokala Lua variabler (ex 1 ovan) och man lätt kan kommunicera med en QA med ex. fibaro.call för att sätta nya värden - så blir quickVars användbara för att lagra startupvärden för QAn (också värden som ska överleva en omstart av QAn, men det är iofs samma som startupvärden)
I ex 1 ovan så kan man tänka sig att istället för att initialisera 'tid' till "07:00" så tas det från en quickVar, och knapparna för tid07,tid08, och setTid lagrar sina tider i den quickVar variablen - så att den sist valda tiden används om QAn startar om.

3. ER4 kan sätta quickVar värden med fibaro.call(ID,"setVariable",<namn>,<värde>) som RH_Dreambox visar i sitt exempel. Om ER4 ska sätta sina egna variabler i en regel kan man skriva
rule(... => QA:setVariabel('A',44)")

Man kan trigga på en quickVar ändrar värde genom
rule("#quickvar{name='A',value='$value'} => log('QuickVar A's new value is %s',value)")

Jag insåg att jag har en bugg då event för quickvar bör innehålla QA deviceID också. Ska fixa i nästa release.
Systemfel
Medlem
Posts: 273
Joined: 14 Jan 2015, 01:02
6

jang wrote: 02 Jan 2021, 08:02 Ok, jag antar att du har en QA som ex. motorvärmar QAn som ska göra något på en viss tid.
Denna tid vill du lätt kunna ändra.

1. Din QA har ett antal knappar som sätter tiden. Antingen ett antal knappar med förvalda tider (enkelt), eller knappar som låter dig komponera valfri tid med timmar och minuter (lite mer komplicerat)
Anta den enkla varianten len en knapp för "07:00" och en knapp för "08:00"
Du definierar då lua funktioner som ska köras då man klickar på knapparna. I editor när du klickar på en knapp så får du i högra fältet en control ruta med knappinfo. Fyll i onReleased rutan med namnet på funktionen som ska anropas. ex. 'tid07' för första knappen och 'tid08' för den andra,

Sedan i koden, utanför ER4 main(), definierar du
function QuickApp:tid07() self:evalScript("tid=07:00") end
function QuickApp:tid08() self:evalScript("tid=08:00") end
function QuickApp:setTime(t) self:evalScript("tid="..t) end

Och i ER4 main() kan du ha en regel som ex.
Util.defTriggerVar("tid") -- deklarera att 'tid' är en lokal variabel som kan trigga regler
rule("tid = 07:00") -- initialisera 'tid' till ett värde
rule("@tid => motorvärmare:on") -- slå på motorvärmare på angiven tid

Om du vill sätta tiden från en annan scen eller QA kan du anropa
fibaro.call(QA_ID,"tid07")
eller
fibaro.call(QA_ID,"setTid","07:30")

2. quickVars. Jag tycker att man ska se på quickVars som initialiseringsvärden. I och med att en QA "kör hela tiden" och kan jobba med lokala Lua variabler (ex 1 ovan) och man lätt kan kommunicera med en QA med ex. fibaro.call för att sätta nya värden - så blir quickVars användbara för att lagra startupvärden för QAn (också värden som ska överleva en omstart av QAn, men det är iofs samma som startupvärden)
I ex 1 ovan så kan man tänka sig att istället för att initialisera 'tid' till "07:00" så tas det från en quickVar, och knapparna för tid07,tid08, och setTid lagrar sina tider i den quickVar variablen - så att den sist valda tiden används om QAn startar om.

3. ER4 kan sätta quickVar värden med fibaro.call(ID,"setVariable",<namn>,<värde>) som RH_Dreambox visar i sitt exempel. Om ER4 ska sätta sina egna variabler i en regel kan man skriva
rule(... => QA:setVariabel('A',44)")

Man kan trigga på en quickVar ändrar värde genom
rule("#quickvar{name='A',value='$value'} => log('QuickVar A's new value is %s',value)")

Jag insåg att jag har en bugg då event för quickvar bör innehålla QA deviceID också. Ska fixa i nästa release.
ohh tackar hhar dock kört fast lite. jag har lyckats göra så den ändrar den lokala variablen men får fan inte den att läsa den och sen tända en lampa

detta är koden

rule("#quickvar{name='229',Autoisak='Auto'} => 210:value=44 ") <--------- Vill läsa av variabeln men vet inte om detta är rätt prövat 100 olika sätt nu får dock inget fel meddelande men får heller inte lampan att tända sig..
rule("#quickvar{name='A',value='$value'} => <-- vet inte vad namn är vet heller inte A value mm $value kanske är Auto
Hehehe ja det är inte lätt men försöker förstå detta så får vi se..

Nedan är kod som fungerar

rule([[trueFor(00:01,sensorisak:safe) => fibaro.call(229,'setVariable','Autoisak','Auto');]]) <--- sensor som blir safe och ska ändra variabel värdet till Auto som sen ska läsas av så att det tänds auto .. ..

rule([[sensorisak:breached => fibaro.call(229,'setVariable','Autoisak','Manuell');]])


Tackar för all hjälp :) ni är guld värda :)
Hc2 till Hc3 på g sakta men säkert :D
User avatar
RH_Dreambox
Z-Wave Kung
Posts: 1112
Joined: 03 Jan 2015, 16:49
6
Location: Vegby
Contact:

Code: Select all

rule("#quickvar{name='229',Autoisak='Auto'} => 210:value=44 ")
Det enda jag kan se är att 229 är din QA's ID och inte en variabel.
Så pröva att ta bort insättningstecknen runt 229.
HC3 (5.061 Beta) med ER4 och HC2 (4.600) med ER 3
Systemfel
Medlem
Posts: 273
Joined: 14 Jan 2015, 01:02
6

RH_Dreambox wrote: 05 Jan 2021, 13:43

Code: Select all

rule("#quickvar{name='229',Autoisak='Auto'} => 210:value=44 ")
Det enda jag kan se är att 229 är din QA's ID och inte en variabel.
Så pröva att ta bort insättningstecknen runt 229.
Japp 229 är qa Id och variablen heter Autoisak och värdet är Auto

Tanken är när den står i auto så sak den tända lampan men den gör inte det alls Är funktionen i drift ? Får heller inget felmeddelande
även om jag tar bort alla insättningstecken prövat både.

Code: Select all

rule("#quickvar{name=229,Autoisak='Auto'} => 210:value=44 ")
och så här
rule("#quickvar{name=229,Autoisak=Auto} => 210:value=44 ")
Händer ingenting alls är det något jag missat ?
kan man hämta värdet ? och skriva ut det på något sätt ?
Hc2 till Hc3 på g sakta men säkert :D
jang
Medlem
Posts: 324
Joined: 05 Jan 2014, 00:44
7
Location: Stockholm

Systemfel wrote: 05 Jan 2021, 15:51
RH_Dreambox wrote: 05 Jan 2021, 13:43

Code: Select all

rule("#quickvar{name='229',Autoisak='Auto'} => 210:value=44 ")
Det enda jag kan se är att 229 är din QA's ID och inte en variabel.
Så pröva att ta bort insättningstecknen runt 229.
Japp 229 är qa Id och variablen heter Autoisak och värdet är Auto

Tanken är när den står i auto så sak den tända lampan men den gör inte det alls Är funktionen i drift ? Får heller inget felmeddelande
även om jag tar bort alla insättningstecken prövat både.

Code: Select all

rule("#quickvar{name=229,Autoisak='Auto'} => 210:value=44 ")
och så här
rule("#quickvar{name=229,Autoisak=Auto} => 210:value=44 ")
Händer ingenting alls är det något jag missat ?
kan man hämta värdet ? och skriva ut det på något sätt ?
Ok,
först måste du lägga till i ER4 att du vill ha quickVar events. Det är ett filter så att inte ER mechanism ska bli överhopad av event som ändå inte är av intresse.
Högst upp i ER4 main() funktion finns en rad typ

Code: Select all

  self:enableTriggerType({"device","global-variable","custom-event","profile","alarm"}) -- types of events we want
Lägg till "quickvar"

Code: Select all

  self:enableTriggerType({"quickvar","device","global-variable","custom-event","profile","alarm"}) -- types of events we want
Sedan i reglerna så kan du trigga på

Code: Select all

rule("#quickvar{id=229,name='Autoisak', value='Auto'} => 210:value=44 ")
Notera att eventet inte innehöll id förut men jag har just pushat fix40 som rättar till det.
Systemfel
Medlem
Posts: 273
Joined: 14 Jan 2015, 01:02
6

jang wrote: 05 Jan 2021, 16:52
Systemfel wrote: 05 Jan 2021, 15:51
RH_Dreambox wrote: 05 Jan 2021, 13:43

Code: Select all

rule("#quickvar{name='229',Autoisak='Auto'} => 210:value=44 ")
Det enda jag kan se är att 229 är din QA's ID och inte en variabel.
Så pröva att ta bort insättningstecknen runt 229.
Japp 229 är qa Id och variablen heter Autoisak och värdet är Auto

Tanken är när den står i auto så sak den tända lampan men den gör inte det alls Är funktionen i drift ? Får heller inget felmeddelande
även om jag tar bort alla insättningstecken prövat både.

Code: Select all

rule("#quickvar{name=229,Autoisak='Auto'} => 210:value=44 ")
och så här
rule("#quickvar{name=229,Autoisak=Auto} => 210:value=44 ")
Händer ingenting alls är det något jag missat ?
kan man hämta värdet ? och skriva ut det på något sätt ?
Ok,
först måste du lägga till i ER4 att du vill ha quickVar events. Det är ett filter så att inte ER mechanism ska bli överhopad av event som ändå inte är av intresse.
Högst upp i ER4 main() funktion finns en rad typ

Code: Select all

  self:enableTriggerType({"device","global-variable","custom-event","profile","alarm"}) -- types of events we want
Lägg till "quickvar"

Code: Select all

  self:enableTriggerType({"quickvar","device","global-variable","custom-event","profile","alarm"}) -- types of events we want
Sedan i reglerna så kan du trigga på

Code: Select all

rule("#quickvar{id=229,name='Autoisak', value='Auto'} => 210:value=44 ")
Notera att eventet inte innehöll id förut men jag har just pushat fix40 som rättar till det.
Ohhh

Jag vet inte om jag gjort något fel men tror inte det. Får det fortfarande inte att fungera.
Har lagt till allt du sagt plus startat om homecenter 3 för säkerhets skull kollat så eventrunner kör fixen x40

men nä det fungerar inte.

Code: Select all

 
rule("#quickvar{id=229,name='Autoisak', value='Auto'} & sensorsov3:breached  => Taklampa3:value=44") 
Hc2 till Hc3 på g sakta men säkert :D
jang
Medlem
Posts: 324
Joined: 05 Jan 2014, 00:44
7
Location: Stockholm

Systemfel wrote: 05 Jan 2021, 21:06 Jag vet inte om jag gjort något fel men tror inte det. Får det fortfarande inte att fungera.
Har lagt till allt du sagt plus startat om homecenter 3 för säkerhets skull kollat så eventrunner kör fixen x40

men nä det fungerar inte.

Code: Select all

 
rule("#quickvar{id=229,name='Autoisak', value='Auto'} & sensorsov3:breached  => Taklampa3:value=44") 
Ok, eventet #quickvar får du bara när variabeln ändras. Jag tror jag börjar förstå vad du vill åstadkomma nu.
Du behöver egentligen bara läsa värdet av quickvar variabeln när din sensor blir breached?

Code: Select all

function getQAvar(id, name)
    for _,v in ipairs(api.get("/devices/"..id).properties.quickAppVariables or {}) do
      if v.name==name then return v.value end
    end
    return ""
end 

rule("sensorsov3:breached  & getQAvar(229, 'Autoisak') == 'Auto' => Taklampa3:value=44") 
Nu hämtar den quickVar värdet varje gång sensorn aktiveras. Det är inte så dyrt så det bör vara ok.
Om man vill kan man initiera en variabel med quickVar variabelns värde när man startar upp och sedan uppdatera den när den ändras

Code: Select all

auto = getQAvar(229, 'Autoisak')  -- initiera auto
rule("#quickvar{id=229,name='Autoisak', value='$val'} => auto=val")  -- updater nor quickVar ändras
rule("sensorsov3:breached  & auto == 'Auto' => Taklampa3:value=44") 
-- regel...
Systemfel
Medlem
Posts: 273
Joined: 14 Jan 2015, 01:02
6

jang wrote: 05 Jan 2021, 22:48
Systemfel wrote: 05 Jan 2021, 21:06 Jag vet inte om jag gjort något fel men tror inte det. Får det fortfarande inte att fungera.
Har lagt till allt du sagt plus startat om homecenter 3 för säkerhets skull kollat så eventrunner kör fixen x40

men nä det fungerar inte.

Code: Select all

 
rule("#quickvar{id=229,name='Autoisak', value='Auto'} & sensorsov3:breached  => Taklampa3:value=44") 
Ok, eventet #quickvar får du bara när variabeln ändras. Jag tror jag börjar förstå vad du vill åstadkomma nu.
Du behöver egentligen bara läsa värdet av quickvar variabeln när din sensor blir breached?

Code: Select all

function getQAvar(id, name)
    for _,v in ipairs(api.get("/devices/"..id).properties.quickAppVariables or {}) do
      if v.name==name then return v.value end
    end
    return ""
end 

rule("sensorsov3:breached  & getQAvar(229, 'Autoisak') == 'Auto' => Taklampa3:value=44") 
Nu hämtar den quickVar värdet varje gång sensorn aktiveras. Det är inte så dyrt så det bör vara ok.
Om man vill kan man initiera en variabel med quickVar variabelns värde när man startar upp och sedan uppdatera den när den ändras

Code: Select all

auto = getQAvar(229, 'Autoisak')  -- initiera auto
rule("#quickvar{id=229,name='Autoisak', value='$val'} => auto=val")  -- updater nor quickVar ändras
rule("sensorsov3:breached  & auto == 'Auto' => Taklampa3:value=44") 
-- regel...

Yes Behöver bara läsa det helt rätt.
Har en hel del ideer men det svåra är hur man ska försöka göra det så det fungerar i praktiken utan att det felar..

Tanken är att kidsen ska kunna ändra lite själva hur dom vill ha det i sina rum om tex fönsterbelysning ska tändas med resterande fönster belysning osv. Just detta jag försöker fixa är så att om dom kommer till sitt rum och det är mörkt så ska det tändas automatiskt men inte hela tiden där av variablen sen kommer det en variabel till som dom kan välja om detta ska vara i gång eller inte i qa som då står på auto eller manuellt tex. ska försöka göra en wakeupp qa oxå med belysningen i taket som dom kan sätta tiden mm.. men blir längre fram.
För just nu för jag över sakta men säkert från hc2 till hc3 så det är ett stort projekt och allt görs manuellt...

Men hc3 är ju inte riktigt 100% än en hel del buggar i både android appen och i hc3 och det är rätt tråkigt för jag hade hoppats Fibaro hade släppt en lite mer färdig produkt nu med uppdateringar mm. Men som vanligt.

Så just nu kör jag 2 system tills en del löst sig. Detta skulle man ju kunna lösa med Gps men det fungera ju lite när det känner för har testat det lite smått och radien är ju ett halvt kvarter den kollar på och det går ju inte minska ner i heller sen så funkar det Ibland och ibland inte. Fibaro har lite att jobba på känns det som och vi får väll hoppas att dom ser till att få igång sakerna så det fungerar ..



Men ska testa detta under morgon dagen så ser vi om det fungerar..

Kunde inte hålla mig borta. Det fungerar perfekt. så nu kan jag jobba vidare med detta :)



Tack jang :) Din eventrunner är grymmt bra så ett Jätte tack för din hjälp och tålamod.
Hc2 till Hc3 på g sakta men säkert :D
jang
Medlem
Posts: 324
Joined: 05 Jan 2014, 00:44
7
Location: Stockholm

Ett sätt att tänka på är att du har ett antal QAs som egentligen bara är användargränssnitt. Ex. sätta belysning i rum till auto. Ställa in väckningstid etc. Vad dessa QAs gör är att sätta fibaro globala variabler med rätt värden, "Auto", "07:00" etc.
Variablerna får ha namn som typ Anna_alarm, SovrumAnna_auto etc.

Sedan har du en ER4 QA med alla regler, ER4 är bra på att använda och uppdatera regler när globala ändrar värden.
Systemfel
Medlem
Posts: 273
Joined: 14 Jan 2015, 01:02
6

jang wrote: 06 Jan 2021, 06:56 Ett sätt att tänka på är att du har ett antal QAs som egentligen bara är användargränssnitt. Ex. sätta belysning i rum till auto. Ställa in väckningstid etc. Vad dessa QAs gör är att sätta fibaro globala variabler med rätt värden, "Auto", "07:00" etc.
Variablerna får ha namn som typ Anna_alarm, SovrumAnna_auto etc.

Sedan har du en ER4 QA med alla regler, ER4 är bra på att använda och uppdatera regler när globala ändrar värden.
Jo tanken var tt använda qa som användargränsnitt men tänkte nu när det fanns en lokala variabel i qa så kunde man ju använda den oxå istället för globala variablen blir ju så många sådana annars . men visst man kan ju sammla dom oxå under samma namn..
Vet du jang om man kan ha bilder i Qa eller ja typ en icon i labels ?
har inte sett detta någonstans.. får testa lite och se eventuellt ladda ner någon qa osv titta igenom dom ...
Hc2 till Hc3 på g sakta men säkert :D
jang
Medlem
Posts: 324
Joined: 05 Jan 2014, 00:44
7
Location: Stockholm

Systemfel wrote: 06 Jan 2021, 13:56 Jo tanken var tt använda qa som användargränsnitt men tänkte nu när det fanns en lokala variabel i qa så kunde man ju använda den oxå istället för globala variablen blir ju så många sådana annars . men visst man kan ju sammla dom oxå under samma namn..
Vet du jang om man kan ha bilder i Qa eller ja typ en icon i labels ?
har inte sett detta någonstans.. får testa lite och se eventuellt ladda ner någon qa osv titta igenom dom ...
Man kan lägga in "emojis" i texten på knappar. Att lägga in bilder är inte supportat.
Vi hoppas att det ska bli bättre support att designa QA interface i framtiden.
Post Reply