Hej!
Har inte gett upp hoppet att lyckas med ett LUA script ännu. Försöker få en rörelsesensor att tända en lampa i 3 min och sedan släcka den om sensorn blivit överträdd oavsett status. (öppnar man ytterdörren ska hallampan tändas). I ett senare steg ska den givetvis inte tändas när man går ut men jag har inte sensor för det ännu, däremot kanske jag kan använda Foscam kameran jag ska ut och montera för det, vi får se hur den funkar.
Hur som helst, jag har googlat runt och till slut kommit fram till att scriptet nedan borde funka men det gör det givetvis inte
173 är rörelsesensorn
175 är en luxsensor (jag vill inte att hallampan ska tändas när det är tillräckligt ljust)
--[[
%% autostart
%% properties
173 value -- Pir ytterdörr
175 value -- ljussensor
%% globals
--]]
local sceneId = 69 --ID of this scene, used to detect number of instances run
local timerEndTime = 300 --Seconds to keep the lamp turned on after PIR detects movement
local timer = "timer" --Name of global variabel to control the timer
local Lights = 164
local startSource = fibaro:getSourceTrigger();
if (
( tonumber(fibaro:getValue(173, "value")) > 0 )
and
( tonumber(fibaro:getValue(175, "value")) < 100 )
or
startSource["type"] == "other"
)
then
fibaro:call(Lights, "turnOn")
fibaro:setGlobal(timer, timerEndTime) --Set global variabel for timer
end
while (fibaro:getGlobalValue(timer) ~= "0") do --loop until timer is 0
timerValue = tonumber(fibaro:getGlobalValue(timer)) --Get current value of global variabel timer
fibaro:setGlobal(timer, timerValue-1) --Decrease global variabel for timer with 1 second
fibaro:debug("Loop - timer = " .. fibaro:getGlobalValue(timer)) --debug
fibaro:sleep(1000) --Wait 1 second
end
fibaro:call(Lights, "turnOff") --Turn lights off
elseif fibaro:countScenes(sceneId) > 1 then --if scene is already running , reset the timer to 3 minutes
fibaro:setGlobal(timer, timerEndTime) --set global variabel for timer to 2 minutes
fibaro:debug("New instance, totalt = " .. fibaro:countScenes(sceneId)) --debug
end
när jag testar scriptet får jag
[ERROR] 21:41:00: line 32: expected near 'elseif' (raden i röd text)
Någon som har tankar/ideer eller kanske till och med kunskap
Det finns säkert fler fel, skulle vara tacksam för kommentarer till ändringar så jag ngn gång kanske lyckas börja lära mig.
Hjälp Lua som får rörelsesensor att tända lampa i 3 min
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Jag är ingen LUA-expert, men du har två END i koden före den krånglande raden. END avslutar den första IF-satsen så då måste du lägga till en ny IF-sats eller ta bort END.
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
Annars går det göra rätt mycket med blockscheman.
Om du t.ex. skapar en variabel "timer" som du sedan låter en scen räkna upp en gång per minut. Då kan du skapa en scen som tänder lampan och sätter "timer" till noll när dörren öppnas, sedan skapar du en scen till som släcker lampan när "timer" är 3.
Detta var kanske något förenklat, men det går i alla fall göra jättemycket med blockscheman. Det enda tillfälle jag har varit tvungen att använda LUA är när jag vill sätta en variabel till samma värde som en annan variabel har. Annars har jag lyckats få min HC2 att aktivera larm, skalskydd, larma av hålla koll på om vi är hemma, sover, är bortresta osv enbart med blockscheman.... Många scener blir det
/Peter
Om du t.ex. skapar en variabel "timer" som du sedan låter en scen räkna upp en gång per minut. Då kan du skapa en scen som tänder lampan och sätter "timer" till noll när dörren öppnas, sedan skapar du en scen till som släcker lampan när "timer" är 3.
Detta var kanske något förenklat, men det går i alla fall göra jättemycket med blockscheman. Det enda tillfälle jag har varit tvungen att använda LUA är när jag vill sätta en variabel till samma värde som en annan variabel har. Annars har jag lyckats få min HC2 att aktivera larm, skalskydd, larma av hålla koll på om vi är hemma, sover, är bortresta osv enbart med blockscheman.... Många scener blir det
/Peter
Låter spännande petke. Försöker verkligen lära mig block programmering, men tyvärr har jag för dålig kunskap. Dom flesta FAQ är ju för lua. Och det är VERKLIGEN överkurs för mig. Jaja. Får stånga huvudet blodigt.petke wrote:Annars går det göra rätt mycket med blockscheman.
Om du t.ex. skapar en variabel "timer" som du sedan låter en scen räkna upp en gång per minut. Då kan du skapa en scen som tänder lampan och sätter "timer" till noll när dörren öppnas, sedan skapar du en scen till som släcker lampan när "timer" är 3.
Detta var kanske något förenklat, men det går i alla fall göra jättemycket med blockscheman. Det enda tillfälle jag har varit tvungen att använda LUA är när jag vill sätta en variabel till samma värde som en annan variabel har. Annars har jag lyckats få min HC2 att aktivera larm, skalskydd, larma av hålla koll på om vi är hemma, sover, är bortresta osv enbart med blockscheman.... Många scener blir det
/Peter
Hejsan,
Naturligtvis skulle jag då vara smart och "hi-jacka" koden för att göra något likn. men hos mig smäller det två rader senare..
--[[
%% autostart
%% properties
80 och 84 value -- 2 * PIR outdoors
87 value -- light sensor, reporting value in Lux
%% globals
--]]
local sceneId = 29 --ID of this scene, used to detect number of instances run
local timerEndTime = 400 --Seconds to keep the lamp turned on after PIR detects movement
local timer = "timer" --Name of global variabel to control the timer
local Lights = 32
local startSource = fibaro:getSourceTrigger();
if (
( tonumber(fibaro:getValue(80, "value")) > 0 )
or
( tonumber(fibaro:getValue(84, "value")) > 0 )
and
( tonumber(fibaro:getValue(87, "value")) < 9 )
or
startSource["type"] == "other"
)
then
fibaro:call(Lights, "turnOn")
fibaro:setGlobal(timer, timerEndTime) --Set global variabel for timer
end
while (fibaro:getGlobalValue(timer) ~= "0") do --loop until timer is 0
timerValue = tonumber(fibaro:getGlobalValue(timer)) --Get current value of global variabel timer
fibaro:setGlobal(timer, timerValue-1) --Decrease global variabel for timer with 1 second
fibaro:debug("Loop - timer = " .. fibaro:getGlobalValue(timer)) --debug
fibaro:sleep(1000) --Wait 1 second
end
fibaro:call(Lights, "turnOff") --Turn lights off
elseif fibaro:countScenes(sceneId) > 1 then --if scene is already running , reset the timer to 3 minutes
fibaro:setGlobal(timer, timerEndTime) --set global variabel for timer to 2 minutes
fibaro:debug("New instance, totalt = " .. fibaro:countScenes(sceneId)) --debug
end
På den får jag "[ERROR] line 34: " expected near 'elseif'"
Fashinerande att det ska vara så svårt...
/DrPepper
Naturligtvis skulle jag då vara smart och "hi-jacka" koden för att göra något likn. men hos mig smäller det två rader senare..
--[[
%% autostart
%% properties
80 och 84 value -- 2 * PIR outdoors
87 value -- light sensor, reporting value in Lux
%% globals
--]]
local sceneId = 29 --ID of this scene, used to detect number of instances run
local timerEndTime = 400 --Seconds to keep the lamp turned on after PIR detects movement
local timer = "timer" --Name of global variabel to control the timer
local Lights = 32
local startSource = fibaro:getSourceTrigger();
if (
( tonumber(fibaro:getValue(80, "value")) > 0 )
or
( tonumber(fibaro:getValue(84, "value")) > 0 )
and
( tonumber(fibaro:getValue(87, "value")) < 9 )
or
startSource["type"] == "other"
)
then
fibaro:call(Lights, "turnOn")
fibaro:setGlobal(timer, timerEndTime) --Set global variabel for timer
end
while (fibaro:getGlobalValue(timer) ~= "0") do --loop until timer is 0
timerValue = tonumber(fibaro:getGlobalValue(timer)) --Get current value of global variabel timer
fibaro:setGlobal(timer, timerValue-1) --Decrease global variabel for timer with 1 second
fibaro:debug("Loop - timer = " .. fibaro:getGlobalValue(timer)) --debug
fibaro:sleep(1000) --Wait 1 second
end
fibaro:call(Lights, "turnOff") --Turn lights off
elseif fibaro:countScenes(sceneId) > 1 then --if scene is already running , reset the timer to 3 minutes
fibaro:setGlobal(timer, timerEndTime) --set global variabel for timer to 2 minutes
fibaro:debug("New instance, totalt = " .. fibaro:countScenes(sceneId)) --debug
end
På den får jag "[ERROR] line 34: " expected near 'elseif'"
Fashinerande att det ska vara så svårt...
/DrPepper
HC2, blandade sensorer och puckar.
"Hemautomation är inte "remote access" eller "in i en app och pilla" - hemautomation är rätt sensorer och puckar på rätt plats och, utan användarinteraktion, trigga önskade aktiviteter."
"Hemautomation är inte "remote access" eller "in i en app och pilla" - hemautomation är rätt sensorer och puckar på rätt plats och, utan användarinteraktion, trigga önskade aktiviteter."
Började försöka med att göra det i block men fick det aldrig att fungera, det kanske är något med timer som jag inte fattat. Har gjort en variabel som jag kallade för Timer, dvs skrev in det namnet på en variabel. Ska man gör något mer sedan ?petke wrote:Annars går det göra rätt mycket med blockscheman.
Om du t.ex. skapar en variabel "timer" som du sedan låter en scen räkna upp en gång per minut. Då kan du skapa en scen som tänder lampan och sätter "timer" till noll när dörren öppnas, sedan skapar du en scen till som släcker lampan när "timer" är 3.
Detta var kanske något förenklat, men det går i alla fall göra jättemycket med blockscheman. Det enda tillfälle jag har varit tvungen att använda LUA är när jag vill sätta en variabel till samma värde som en annan variabel har. Annars har jag lyckats få min HC2 att aktivera larm, skalskydd, larma av hålla koll på om vi är hemma, sover, är bortresta osv enbart med blockscheman.... Många scener blir det
/Peter
Förstår inte heller hur jag använder den i block. Finns det något bra ställe där man kan läsa mer om Blockprogrammering?
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Towanda, fixade du inte till din LUA-kod?
Som jag skrev tidigare så har din ELSEIF-sats ingen inledande IF-sats.
Din kod ser ut så här (kraftigt reducerad).
if (Här börjar din IF-sats)
or
and
or
then
end (Här slutar din IF-sats)
while *** do (Här börjar din WHILE DO)
end (Här slutar din WHILE DO)
elseif (Här kommer en ELSEIF som inte har någon inledande IF-sats eftersom den som fanns avslutats med END)
then
end (Här avslutas den ofullständiga ELSEIF-satsen)
Vad händer om du ändrar ELSEIF till IF ?
Som jag skrev tidigare så har din ELSEIF-sats ingen inledande IF-sats.
Din kod ser ut så här (kraftigt reducerad).
if (Här börjar din IF-sats)
or
and
or
then
end (Här slutar din IF-sats)
while *** do (Här börjar din WHILE DO)
end (Här slutar din WHILE DO)
elseif (Här kommer en ELSEIF som inte har någon inledande IF-sats eftersom den som fanns avslutats med END)
then
end (Här avslutas den ofullständiga ELSEIF-satsen)
Vad händer om du ändrar ELSEIF till IF ?
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
Ett enkelt exempel som tänder lampan i tre minuter efter att dörren öppnas.Towanda wrote:Började försöka med att göra det i block men fick det aldrig att fungera, det kanske är något med timer som jag inte fattat. Har gjort en variabel som jag kallade för Timer, dvs skrev in det namnet på en variabel. Ska man gör något mer sedan ?petke wrote:Annars går det göra rätt mycket med blockscheman.
Om du t.ex. skapar en variabel "timer" som du sedan låter en scen räkna upp en gång per minut. Då kan du skapa en scen som tänder lampan och sätter "timer" till noll när dörren öppnas, sedan skapar du en scen till som släcker lampan när "timer" är 3.
Detta var kanske något förenklat, men det går i alla fall göra jättemycket med blockscheman. Det enda tillfälle jag har varit tvungen att använda LUA är när jag vill sätta en variabel till samma värde som en annan variabel har. Annars har jag lyckats få min HC2 att aktivera larm, skalskydd, larma av hålla koll på om vi är hemma, sover, är bortresta osv enbart med blockscheman.... Många scener blir det
/Peter
Förstår inte heller hur jag använder den i block. Finns det något bra ställe där man kan läsa mer om Blockprogrammering?
Ökar variabeln Time med 1 varje minut.
Tänder lampan och sätter variabeln Time till 0 när dörren öppnas
Släcker lampan när variabeln Time har blivit 3
Dock finns brister i programmet som får fixas till efter eget önskemål. Du vill kanske att lampan bara tänds när du kommer hem om det är mörkt och kanske inte när du går hemifrån på morgonen osv.. Men det är klart att man kan fixa detta mycket snyggare med LUA...
Så, då har jag fått ett nytt HC2 och lagt till enheterna så det är dax att fortsätta testa.
Testade att byta ut elseif mot if på rad 32 (den som är rödmarkerad i min första post) och kör scriptet.
Nu kommer jag bara till rad 15 där jag får:
[ERROR] 21:51:44: line 15: attempt to compare number with nil
På rad 15 står det: ( tonumber(fibaro:getValue(6, "value")) > 0 )
Jag kör iofs ver 4.054 nu men dom kan väl inte ha ändrat på hur man skriver LUA? eller ??
Testade att byta ut elseif mot if på rad 32 (den som är rödmarkerad i min första post) och kör scriptet.
Nu kommer jag bara till rad 15 där jag får:
[ERROR] 21:51:44: line 15: attempt to compare number with nil
På rad 15 står det: ( tonumber(fibaro:getValue(6, "value")) > 0 )
Jag kör iofs ver 4.054 nu men dom kan väl inte ha ändrat på hur man skriver LUA? eller ??
Så här nästan fem år senare... Finns det möjlighet att du lägger upp skärmdumparna med ovanstående blockscener igen?petke wrote: ↑22 Jun 2015, 11:55Ett enkelt exempel som tänder lampan i tre minuter efter att dörren öppnas.Towanda wrote:Började försöka med att göra det i block men fick det aldrig att fungera, det kanske är något med timer som jag inte fattat. Har gjort en variabel som jag kallade för Timer, dvs skrev in det namnet på en variabel. Ska man gör något mer sedan ?petke wrote:Annars går det göra rätt mycket med blockscheman.
Om du t.ex. skapar en variabel "timer" som du sedan låter en scen räkna upp en gång per minut. Då kan du skapa en scen som tänder lampan och sätter "timer" till noll när dörren öppnas, sedan skapar du en scen till som släcker lampan när "timer" är 3.
Detta var kanske något förenklat, men det går i alla fall göra jättemycket med blockscheman. Det enda tillfälle jag har varit tvungen att använda LUA är när jag vill sätta en variabel till samma värde som en annan variabel har. Annars har jag lyckats få min HC2 att aktivera larm, skalskydd, larma av hålla koll på om vi är hemma, sover, är bortresta osv enbart med blockscheman.... Många scener blir det
/Peter
Förstår inte heller hur jag använder den i block. Finns det något bra ställe där man kan läsa mer om Blockprogrammering?
Ökar variabeln Time med 1 varje minut.
Tänder lampan och sätter variabeln Time till 0 när dörren öppnas
Släcker lampan när variabeln Time har blivit 3
Dock finns brister i programmet som får fixas till efter eget önskemål. Du vill kanske att lampan bara tänds när du kommer hem om det är mörkt och kanske inte när du går hemifrån på morgonen osv.. Men det är klart att man kan fixa detta mycket snyggare med LUA...
//Hans
- RH_Dreambox
- Z-Wave Kung
- Posts: 1203
- Joined: 03 Jan 2015, 16:49
- 9
- Location: Vegby
- Contact:
Blockscener är tyvärr väldigt begränsade, så om du vill kunna utnyttja potentialen i din HC2 så rekommenderar jag varmt att du installerar skriptet EventRunner som det skrivs mycket om här på forumet. viewtopic.php?f=38&t=6878
EventRunner underlättar enormt om du vill göra det där lilla extra med din hemautomatik, och jang som har skapat skriptet är mycket hjälpsam om du får problem.
EventRunner hittar du här...
https://github.com/jangabrielsson/Event ... unner3.lua
EventRunner underlättar enormt om du vill göra det där lilla extra med din hemautomatik, och jang som har skapat skriptet är mycket hjälpsam om du får problem.
EventRunner hittar du här...
https://github.com/jangabrielsson/Event ... unner3.lua
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
Tack för tipset! Jag har sett det nämnas lite här och där och ser verkligen fördelen med att kunna testköra på min dator innan jag lägger över det på HC2:an. Bara jag som måste våga ta steget och börja skriva lite kod även på fritiden.
//Hans
--[[
%% autostart
%% properties
80 och 84 value -- 2 * PIR outdoors
87 value -- light sensor, reporting value in Lux
%% globals
--]]
------------------------------------------------------------------------------------------------------
Borde väll vara så ?
--[[
%% autostart
%% properties
80 value
84 value
87 value -- light sensor, reporting value in Lux
%% globals
--]]
%% autostart
%% properties
80 och 84 value -- 2 * PIR outdoors
87 value -- light sensor, reporting value in Lux
%% globals
--]]
------------------------------------------------------------------------------------------------------
Borde väll vara så ?
--[[
%% autostart
%% properties
80 value
84 value
87 value -- light sensor, reporting value in Lux
%% globals
--]]
kör Hc3 och det fungerar bättre och bätttre sakta men säkert