Har kompletterat mitt Z-wave hem med sensorer på garageportarna som känner om de är öppna eller stängda samt brytare på portmotorerna så jag kan öppna och stänga via fibaro.
So far so good, funkar klockrent och jag har lite scener samt VD´s för att hantera dessa.
Men nu har jag kört fast lite grann. Sensorerna uppdaterar två globala variabler (en för varje port) med antingen "Open" eller "Closed".
Det jag vill göra är att trigga en scen som automatiskt stänger en port som vart öppen xx minuter.
Står helt still och jag kommer inte på hur jag ska få till det..
Tanken är att fibaro skickar en interaktiv push som säger "Port 1 har vart öppen XX min, vill du stänga?".
Allt är klart, bara timern som saknas. Den ska alltså börja räkna när variabeln ändras till Open. Sen nollställas/sluta räkna när den blir Closed.
Dvs om jag stänger direkt.
Timer på Global variabels ändring av värde..
Det här är nog minsta koden, men du behöver 2 scener, en per port. Du får lägga till notifieringen.
... och det bygger på antagandet att du inte kan få två ”Open” efter varann från samma port...
... och det bygger på antagandet att du inte kan få två ”Open” efter varann från samma port...
Code: Select all
--[[
%% globals
Garageport_1
--]]
timeout = 10 -- notify after 10 minutes
if fibaro:getGlobal("Garageport_1")=="Closed" then
fibaro:killScenes(__fibaroSceneId) -- kill ev. sleeping instance
else -- door open, wait and notify
fibaro:sleep(timeout*60*1000)
fibaro:debug("Stänger Port1")
api.post('/mobile/push', {["mobileDevices"]={4}, ["message"]=[[Garageport 1 öppen, vill du stänga?]], ["title"]='Garageport 1', ["category"]='YES_NO', ["data"]={["sceneId"]=108}});
end
Last edited by jang on 29 Sep 2018, 18:08, edited 3 times in total.
Den vill inte riktigt lira.. Får error:
[DEBUG] 16:03:49: [1;31m2018-09-29 16:03:49.119377 [ fatal] Unknown exception: /opt/fibaro/scenes/111.lua:10: syntax error near 'fibaro'
Men skulle detta kunna funka?
Men på denna får jag
[DEBUG] 16:17:55: [1;31m2018-09-29 16:17:55.243817 [ fatal] Unknown exception: /opt/fibaro/scenes/111.lua:14: ')' expected (to close '(' at line 11) near 'elseif'
[DEBUG] 16:03:49: [1;31m2018-09-29 16:03:49.119377 [ fatal] Unknown exception: /opt/fibaro/scenes/111.lua:10: syntax error near 'fibaro'
Men skulle detta kunna funka?
Code: Select all
--[[
%% properties
%% weather
%% events
%% globals
Garageport_1
--]]
if ( fibaro:getGlobalValue("Garageport_1") == "Open" ) --triggar scenen när Globala variabeln Garageport_1 ändras till Open
then
setTimeout(function() --Väntar i detta ex 10 sek då jag vill testa.
api.post('/mobile/push', {["mobileDevices"]={4}, ["message"]=[[Garageport 1 öppen, vill du stänga?]], ["title"]='Garageport 1', ["category"]='YES_NO', ["data"]={["sceneId"]=108}}); --Skickar sedan push till mobilen med fråga om jag vill stänga. Vid YES triggas scen 108 som bara stänger porten.
end
elseif ( fibaro:getGlobalValue("Garageport_1") == "Closed" ) -- om porten stängs inom 10 sek i detta fall så...
then
fibaro:killScenes(111) -- kill ev. sleeping instance --... dödas scenen.
end, 10000)
[DEBUG] 16:17:55: [1;31m2018-09-29 16:17:55.243817 [ fatal] Unknown exception: /opt/fibaro/scenes/111.lua:14: ')' expected (to close '(' at line 11) near 'elseif'
Koden blev konstig när jag klistrade in den. Har ändrat i den tidigare posten. Borde funka nu. Har också lagt till din notifiering.
setTimeout är lite onödig i ditt fall, och det ska isåfall bara vara när dörren öppnas. Nu är koden lite konstig, därav bl.a syntax felet.
setTimeout är lite onödig i ditt fall, och det ska isåfall bara vara när dörren öppnas. Nu är koden lite konstig, därav bl.a syntax felet.
Din version skulle se ut såhär - men tycker det är renare med en sleep (och jag tycker inte om sleep generellt)
__fibaroSceneId har värdet av scenens ID. Enklare om du duplicerar koden för den andra dörren.
Code: Select all
--[[
%% globals
Garageport_1
--]]
if (fibaro:getGlobalValue("Garageport_1") == "Open" ) then --triggar scenen när Globala variabeln Garageport_1 ändras till Open
setTimeout(function() --Väntar i detta ex 10 sek då jag vill testa.
api.post('/mobile/push', {["mobileDevices"]={4}, ["message"]=[[Garageport 1 öppen, vill du stänga?]], ["title"]='Garageport 1', ["category"]='YES_NO', ["data"]={["sceneId"]=108}}); --Skickar sedan push till mobilen med fråga om jag vill stänga. Vid YES triggas scen 108 som bara stänger porten.
end, 10*1000)
elseif (fibaro:getGlobalValue("Garageport_1") == "Closed") then -- om porten stängs inom 10 sek i detta fall så...
fibaro:killScenes(__fibaroSceneId) -- kill ev. sleeping instance --... dödas scenen.
end