EventRunner
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Ja det där med solens uppgång var ju inte så svårt (när man kan det)
Och det var ju bra att man kan använda catchup, det hade jag missat. Men det vore väl bra om även scener kunde använda catchup, men jag nöjer mig med detta så länge.
Det är mycket info att ta in när man börjar med något nytt och annorlunda än det man kört i flera år. Det gäller bara att läsa på allt man kan hitta om ER, så kanske lösningen finns där.
Och det var ju bra att man kan använda catchup, det hade jag missat. Men det vore väl bra om även scener kunde använda catchup, men jag nöjer mig med detta så länge.
Det är mycket info att ta in när man börjar med något nytt och annorlunda än det man kört i flera år. Det gäller bara att läsa på allt man kan hitta om ER, så kanske lösningen finns där.
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Luascheduler är en ren tids-schedulerare och då kan det funka att hela scenen försöker göra catchup. I ER mixas det ibland med trigger villkor i reglerna och då blir det svårt generellt. Jag försökte vara smart tidigare men det gav oönskade effekter, så nu får man markera tidsregler med catchup om man behöver det. Också som i exemplet att man kan begränsa det till ett tidsintervall.RH_Dreambox wrote: ↑22 Mar 2019, 16:48 Ja det där med solens uppgång var ju inte så svårt (när man kan det)
Och det var ju bra att man kan använda catchup, det hade jag missat. Men det vore väl bra om även scener kunde använda catchup, men jag nöjer mig med detta så länge.
Det är mycket info att ta in när man börjar med något nytt och annorlunda än det man kört i flera år. Det gäller bara att läsa på allt man kan hitta om ER, så kanske lösningen finns där.
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Det var rätt kul det här!
Men nu försöker jag få till att min tablet i hallen skall tala om när jag skall ställa ut soptunnan (skicka texten till en global variabel TTS).
Jag tycker koden ser korrekt ut men jag får ändå ett felmeddelande. Vad kan jag ha missat?
Felmeddelandet
Men nu försöker jag få till att min tablet i hallen skall tala om när jag skall ställa ut soptunnan (skicka texten till en global variabel TTS).
Jag tycker koden ser korrekt ut men jag får ändå ett felmeddelande. Vad kan jag ha missat?
Code: Select all
rule("@08:44 & wday('sat') & wnum%2 == 0 => $TTS = 'Idag skall du ställa fram soptunnan.&vol=12'")
Code: Select all
[20:1][DEBUG] 08:44:00: [31mSat Mar 23: Error in '@08:44 & wday('sat') & wnum%2 == 0 => $TTS = 'Idag skall du ställa fram soptunnan.'': Event Runner/EventRunner.lua:1164: Event Runner/EventRunner.lua:1036: attempt to perform arithmetic on local 'b' (a nil value)[0m
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Har du Mac eller Windows? Ifallet Windows, vilket OS? Jag använder bara Mac så jag har lite dålig koll på Windows.RH_Dreambox wrote: ↑23 Mar 2019, 09:56 Det var rätt kul det här!
Men nu försöker jag få till att min tablet i hallen skall tala om när jag skall ställa ut soptunnan (skicka texten till en global variabel TTS).
Jag tycker koden ser korrekt ut men jag får ändå ett felmeddelande. Vad kan jag ha missat?
FelmeddelandetCode: Select all
rule("@08:44 & wday('sat') & wnum%2 == 0 => $TTS = 'Idag skall du ställa fram soptunnan.&vol=12'")
Code: Select all
[20:1][DEBUG] 08:44:00: [31mSat Mar 23: Error in '@08:44 & wday('sat') & wnum%2 == 0 => $TTS = 'Idag skall du ställa fram soptunnan.'': Event Runner/EventRunner.lua:1164: Event Runner/EventRunner.lua:1036: attempt to perform arithmetic on local 'b' (a nil value)[0m
Det ser ut som wnum returnerar nil, och sättet att få veckonummer i Lua är med os.date("%V"), och det kan vara strul med Windows
Kan du prova att köra det här i ZBS (behöver inte vara en scen)
print( os.date("%W") )
print( os.date("%V") )
print(os.getenv('OS')) -- För att se vilket OS som rapporteras.
och se vilket som fungerar?
Om os.date("%V") fungerar kan du använda
Code: Select all
rule("@08:44 & wday('sat') & osdate('%V')%2 == 0 => $TTS = 'Idag skall du ställa fram soptunnan.&vol=12'")
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
print( os.date("%W") ) ger resultatet 11och print( os.date("%V") ) ger ett blankt svar.
Men det är ju vecka 12 nu, så varför 11 som svar?
Glömde...
Windows 10.
EDIT
Körd i ZeroBrane. Den här fungerade, men en etta i koden betyder väl udda vecka, nu är det ju jämn vecka.
Och den här raden fungerade i HC2
Men det är ju vecka 12 nu, så varför 11 som svar?
Glömde...
Windows 10.
EDIT
Körd i ZeroBrane. Den här fungerade, men en etta i koden betyder väl udda vecka, nu är det ju jämn vecka.
Code: Select all
rule("@09:50 & wday('sat') & osdate('%W')%2 == 1 => $TTS = 'Idag skall du ställa fram soptunnan.&vol=12'")
Code: Select all
rule("@10:04 & wday('sat') & wnum%2 == 0 => $TTS = 'Viktigt meddelande. Idag skall du ställa fram soptunnan.&vol=12'")
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Det ska vara 12 enligt ISO standard. 11 är veckonummer som startar på 0.RH_Dreambox wrote: ↑23 Mar 2019, 10:40 print( os.date("%W") ) ger resultatet 11och print( os.date("%V") ) ger ett blankt svar.
Men det är ju vecka 12 nu, så varför 11 som svar?
Glömde...
Windows 10.
EDIT
Körd i ZeroBrane. Den här fungerade, men en etta i koden betyder väl udda vecka, nu är det ju jämn vecka.Och den här raden fungerade i HC2Code: Select all
rule("@09:50 & wday('sat') & osdate('%W')%2 == 1 => $TTS = 'Idag skall du ställa fram soptunnan.&vol=12'")
Code: Select all
rule("@10:04 & wday('sat') & wnum%2 == 0 => $TTS = 'Viktigt meddelande. Idag skall du ställa fram soptunnan.&vol=12'")
Ok, jag har pushat en ny version av EventRunner (v2.0 fix B7) med en egen version av week number - kan inte lita på Lua
Nu borde det funka... för alla.
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Tack, nu funkar det även i Windows. Vi får skylla detta på Bill Gates
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Är i behov av lite hjälp, jag har en fördefinerad variabel som heter "Month"
Kan man få ER att uppdatera den variabeln men rätt värde den 1 i varje månad?
Så nu när vi rullar över i April så uppdateras variabeln med "April"
Kan man få ER att uppdatera den variabeln men rätt värde den 1 i varje månad?
Så nu när vi rullar över i April så uppdateras variabeln med "April"
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Den här fungerar för mig.
Jag är bara lite osäker på var funktionen montName skall placeras.
Jag lade den under function main().
Jag är bara lite osäker på var funktionen montName skall placeras.
Jag lade den under function main().
Code: Select all
function monthName() return ({"Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"})[osDate("*m").month] end
Code: Select all
-- Uppdatera variabeln Month vid midnatt den första dagen i månaden
Rule.eval("@00:00 & day('1') => $Month = 'monthName'")
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Code: Select all
months={"Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"}
rule("$Month=months[osdate('*t').month]") -- set when scene starts up
rule("@00:00 & day('1') => $Month=months[osdate('*t').month]") --- ... and every midnight
rule("$Month => log('Month:%s',$Month)")
alt som RH_Dreambox. Måste vara funktionsanrop ex. monthName()
Code: Select all
function monthName()
return ({"Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"})[osDate("*t").month]
end
rule("$Month=monthName()")
rule("@00:00 & day('1') => $Month=monthName()")
rule("$Month => log('Month:%s',$Month)")
Code: Select all
rule([[@00:00 & day('1') =>
month('nov-mar') => $Season='Vinter'
month('apr-may') => $Season='Vår'
month('jun-jul') => $Season='Sommar'
month('aug-oct') => $Season='Höst'
]])
day(...) är en ganska flexibel funktion.
Code: Select all
rule("@08:00 & day('1') => log('kl 8.00 första dagen i månaden')")
rule("@08:00 & day('last') => log('kl 8.00 sista dagen i månaden')")
rule("@08:00 & day('lastw') => log('kl 8.00 första dagen i sista veckan i månaden')")
rule("@08:00 & day('lastw-last') & wday('mon') => log('kl 8.00 sista måndagen I veckan')")
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
@jang, ditt exempel med months utan någon funktion fungerade bra.
Men jag får inte till ditt exempel men Season, inte heller mitt exempel nedan för WeekDay.
Kan du ge mig en liten hint om vad jag har gjort fel?
Debug visar att det fungerar, men ... Skall det bli ett ensamt tecken i slutet på debug-stycket?
Men jag får inte till ditt exempel men Season, inte heller mitt exempel nedan för WeekDay.
Kan du ge mig en liten hint om vad jag har gjort fel?
Debug visar att det fungerar, men ... Skall det bli ett ensamt tecken i slutet på debug-stycket?
Code: Select all
-- WEEKDAY #######################################
days={"Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag","Söndag"}
rule("$WeekDay=days[osdate('*t').wday]") -- set when scene starts up
rule("@15:10 & day('26') => $WeekDay=days[osdate('*t').wday]") --- ... and every midnight
rule("$WeekDay => log('WeekDay:%s',$WeekDay)")
-- SEASON #######################################
rule([[@15:11 & day('26') =>
month('nov-mar') => $Season = 'Vinter'
month('apr-may') => $Season = 'Vår'
month('jun-jul') => $Season = 'Sommar'
month('aug-oct') => $Season = 'Höst'
]])
Code: Select all
[DEBUG] 15:10:00: [true]>>'@15:10 & day('26') => $WeekDay=days[osdate('*t').wday]'
[DEBUG] 15:11:00: [true]>>'@15:11 & day('26') =>
[DEBUG] 15:11:00: month('nov-mar') => $Season = 'Vinter'
[DEBUG] 15:11:00: month('apr-may') => $Season = 'Vår'
[DEBUG] 15:11:00: month('jun-jul') => $Season = 'Sommar'
[DEBUG] 15:11:00: month('aug-oct') => $Season = 'Höst'
[DEBUG] 15:11:00: '
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Code: Select all
rule([[@00:00 & day('1') =>
|| month('nov-mar') >> $Season='Vinter'
|| month('apr-may') >> $Season='Vår'
|| month('jun-jul') >> $Season='Sommar'
|| month('aug-oct') >> $Season='Höst'
]])
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Ja den fungerade mycket bättre
Men hann du titta på den andra koden som jag inte får till?
Månader funkade bra, men inte veckodagar.
EDIT
Jag kom på vad felet var...
Veckan skall ju börja med Söndag
EDIT
Och det skall ju ske varje dag, inte första dagen i månaden
Men hann du titta på den andra koden som jag inte får till?
Månader funkade bra, men inte veckodagar.
EDIT
Jag kom på vad felet var...
Veckan skall ju börja med Söndag
EDIT
Och det skall ju ske varje dag, inte första dagen i månaden
Code: Select all
-- WEEKDAY #######################################
days={"Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"}
rule("$WeekDay=days[osdate('*t').wday]") -- set when scene starts up
rule("@00:00 => $WeekDay=days[osdate('*t').wday]") --- ... and every midnight
rule("$WeekDay => log('WeekDay:%s',$WeekDay)")
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
RH_Dreambox wrote: ↑26 Mar 2019, 17:19 EDIT
Och det skall ju ske varje dag, inte första dagen i månaden
Code: Select all
-- WEEKDAY ####################################### days={"Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"} rule("$WeekDay=days[osdate('*t').wday]") -- set when scene starts up rule("@00:00 => $WeekDay=days[osdate('*t').wday]") --- ... and every midnight rule("$WeekDay => log('WeekDay:%s',$WeekDay)")
Här funkar även catchup så man slipper uppstartsregeln
Code: Select all
days={"Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"}
rule("@{catch,00:00} => $WeekDay=days[osdate('*t').wday]") --- run at startup and every midnight
rule("$WeekDay => log('WeekDay:%s',$WeekDay)")
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Tack för lektionen med catchup
Och tack för en utmärkt DEBUG i ER.
Och tack för en utmärkt DEBUG i ER.
Min gamla ombyggda HC2 har fått ett nytt liv och min HC3 är nu nedkopplad.
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
HC2 med Home Assistant har blivit en riktig Game Changer och nu har jag hemautomatik på riktigt.
https://www.zwaveforum.se/viewtopic.php?t=7087
Om man vill sätta lite dag/tid variabler så kan man kombinera det i en regel som körs vid midnatt varje dag
En till finess i ER är att vi kan ha sektioner av regler som vi kan aktivera/avaktivera med andra regler
Alla regler startar aktiverade så vi måste ha någon regel som slår på/av de andra. I exemplet ovan är det för olika säsonger men jag har funnit att det är ganska bra för arbetsdagar vs. lediga dagar. På så sätt slipper man massa extra tester i alla regler beroende på vilken typ av dag det är och man kan fokusera på funktionaliteten.
Ex.
Code: Select all
days={"Söndag","Måndag","Tisdag","Onsdag","Torsdag","Fredag","Lördag"}
months={"Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December"}
rule([[@{catch,00:00} =>
$WeekDay=days[osdate('*t').wday];
$Month=months[osdate('*t').month];
|| month('nov-mar') >> $Season='Vinter'
|| month('apr-may') >> $Season='Vår'
|| month('jun-jul') >> $Season='Sommar'
|| month('aug-oct') >> $Season='Höst']])
Code: Select all
Event.SECTION='Winter' -- Winter rules
Rule.eval("@sunset => xmasTree:on")
Event.SECTION='Summer' -- Summer rules
Rule.eval("@sunset => lamp:on")
Event.SECTION=nil -- rest of rules doesn't belong to any section
Rule.eval([[@{catch,00:00} =>
|| month('dec-jan') >> enable('Winter'); disable('Summer')
|| month('jun-aug') >> enable('Summer'); disable('Winter')
]])
Ex.
Code: Select all
Event.SECTION='Weekend'
Rule.eval("sensor:breached =>lamp:on") -- Weekend, turn on lamp when someone moves
Event.SECTION='Weekday'
Rule.eval("@06:30 => lamp:on") -- Working days, turn on lamp at 6:30, always
Event.SECTION=nil -- rest of rules doesn't belong to any section
Rule.eval([[@{catch,00:00} =>
|| wday('sat-sun') >> enable('Weekend'); disable('Weekday')
|| wday('mon-fri') >> enable('Weekday'); disable('Weekend')
]])
Hej!
Finns det möjlighet att använda rest-api't?
Jag vill göra detta:
Om inte så kanske jag att jag kan kalla på "ett tryck" på en VD?
Finns det möjlighet att använda rest-api't?
Jag vill göra detta:
Code: Select all
deviceID = "208" -- Example room ID
data = '{"properties": {"parameters":[{"id":19,"size":1,"value":0}]}}'
HOST = Net.FHttp("127.0.0.1",11111);
local response ,status, err = HOST:PUT('/api/devices/'..deviceID, data);
fibaro:debug(' Error code: ' .. err)
if (tonumber(status)==200) then
fibaro:debug('Funkade :)')
else
fibaro:debug('Funkade inte :(')
end
Om inte så kanske jag att jag kan kalla på "ett tryck" på en VD?
Tryck på VD funkar alltid.MastrUsr wrote: ↑26 Mar 2019, 18:24 Hej!
Finns det möjlighet att använda rest-api't?
Jag vill göra detta:Om inte så kanske jag att jag kan kalla på "ett tryck" på en VD?Code: Select all
deviceID = "208" -- Example room ID data = '{"properties": {"parameters":[{"id":19,"size":1,"value":0}]}}' HOST = Net.FHttp("127.0.0.1",11111); local response ,status, err = HOST:PUT('/api/devices/'..deviceID, data); fibaro:debug(' Error code: ' .. err) if (tonumber(status)==200) then fibaro:debug('Funkade :)') else fibaro:debug('Funkade inte :(') end
Net.FHttp är en VD funktion som inte finns i scener.
I scener finns api.put/get/post(url, data) som funkar att anropa från regler också
Code: Select all
rule("@15:00 => api.put(frm('/api/devices/%s',deviceID),{id=19,size=1,value=0})")
Alternativt definiera en Lua funktion
Code: Select all
function updateDevice(id, data) api.put("/api/devices/"..id,data) end
rule("@15:00 => updateDevice(deviceID,{id=19,size=1,value=0})")
Last edited by jang on 01 Apr 2019, 04:29, edited 1 time in total.