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! Snor den istället, tack!
EventRunner
-
- Site Admin
- Posts: 276
- Joined: 10 Dec 2011, 11:43
- 12
En fråga - vad använder du för att läsa av status på garageporten? Alltså om den är öppen eller stängd?
Funkade inte. Fick två notifikationer 21:31, en 21:47, en 22:00..jang wrote:Ursäkta, jag hade missat den här frågan... men du löste detMastrUsr wrote: ↑05 Oct 2020, 11:28 Jag är en pajas och glömde att man använder ~= i lua och inte !=.Jag verkar även fått till repeat, efter lite tragglandeCode: Select all
rule("@21:30 & läsare1.portstatus:value~=0 => telefon.eric:msg=('Garageporten är öppen')")
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')")
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...eller en while loop. Här kan man fråga sig vad som ska hända om porten fortfarande är öppen efter 3 påminnelserCode: 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')")
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]])
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.
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.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! Snor den istället, tack!
Skickat från min SM-N960F via Tapatalk
Ok, jag såg att jag använt 21:15 - borde vara 21:30?MastrUsr wrote: ↑06 Oct 2020, 22:04jang wrote:Funkade inte. Fick två notifikationer 21:31, en 21:47, en 22:00..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åminnelserCode: 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]])
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
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...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]])
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)!
["läsare1"] = {fpidset = 387, lastread = 388, fpmode = 389, portstatus = 390},jang wrote:Ok, och kolla loggen runt 21:30 och se om den verkar trigga eller inte
ID 390 är 0.
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
Verkar som jag hade somnat vid ratten - vi glömde :value for portstatus.
I princip borde du kunna använda läsare1.portstatus:breached istället för läsare1.portstatus:value ~= 0
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]])
Jag gjorde samma misstag vid mina simuleringarjang wrote: ↑08 Oct 2020, 10:21 Verkar som jag hade somnat vid ratten - vi glömde :value for portstatus.I princip borde du kunna använda läsare1.portstatus:breached istället för läsare1.portstatus:value ~= 0Code: 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]])
Ja, då borde det funka! Jag provar och återkommer.
-
- Site Admin
- Posts: 276
- Joined: 10 Dec 2011, 11:43
- 12
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>'
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.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 }, }
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
},
}
Ex.
Code: Select all
rule("kök.button:isOn => kök.matbord:on")
Testat några dagar nu och det fungerar som tänkt!MastrUsr wrote:Jag gjorde samma misstag vid mina simuleringarjang wrote: ↑08 Oct 2020, 10:21 Verkar som jag hade somnat vid ratten - vi glömde :value for portstatus.I princip borde du kunna använda läsare1.portstatus:breached istället för läsare1.portstatus:value ~= 0Code: 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]])
Ja, då borde det funka! Jag provar och återkommer.
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
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
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å.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
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)")
Code: Select all
rule("button:central.keyId==1 & button:central.keyAttribute=='Pressed2" => entretak:off") -- dubbelklick knapp 1
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 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.
jang wrote: ↑18 Oct 2020, 11:01MastrUsr 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..Att lägga till en notifiering så fort som dörren stängs är ganska enkelt - kod ovan.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 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
Hej!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.
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.