Fibaro Home Center 2 – LUA-scen för att tända/släcka belysning – enkla versionen

Vi har tidigare gått igenom ett avancerat luascript som använder flera olika rörelsesensorer och timervariabler för att på ett intelligent sätt styra belysningen i våra lokaler. Det skriptet är antagligen mer avancerat än vad de flesta behöver, så här kommer den enkla varianten.

Scriptet nedan triggas av en rörelsesnsor eller en dörrsensor och använder den globala variabeln timer, och den globala variabeln night. Här kan du läsa mer om variabler, och här kan du läsa mer om hur du skapar en scen som sätter variabeln night.

Scriptet bör vara mycket lättare att förstå och modifiera än den avancerade varianten.

Som vanligt svarar vi gärna på frågor!

6 svar till Fibaro Home Center 2 – LUA-scen för att tända/släcka belysning – enkla versionen

  • Hej!
    Tack för bra post. Jag får dock ett Debug-fel som lyder:
    [DEBUG] 12:05:29: line 25: attempt to concatenate local ‘timerValue’ (a nil value)

    Oerhört tacksam om ni kunde bistå med lite hjälp här!

    Med vänlig hälsning, /Rasmus

    • Hej!
      Det ser ut som du kanske missat att skapa den globala variabeln ”timer”. Dessa skapar du under ”Panels” -> ”Variable Panels”. Sen lägger du till en variabel som heter ”timer”, så borde felmeddelandet försvinna.
      Felet beror på att koden hämtar in värdet på den globala variabeln ”timer” med anrop:
      local timerValue = fibaro:getGlobalValue(timer)
      I och med att variabeln inte finns sätts ”timerValue” till nil, vilket motsvarar ”inget värde” och då kan inte utskriften ske korrekt längre ner i koden (fibaro:debug på rad 25).

  • Nu har denna tråd några månader på nacken.. Men testar att väcka den.
    Jag är ny i LUA djungeln och försöker lära mig lite.
    Kommandona i sig är väl (mer eller mindre) logiska. Men det som alltid är lite lurigt när man testar färdiga scener och ändra ID:n och variabler att matcha sina egna, är formatteringen. Att bara klistra in och byta ID nummer har hittils aldrig funkat direct. Det kommer alltid t.ex mellanslag som genererar fel i stil med ”unexpected character at line xx.
    Vad finns det för tumregler där? De scener jag testat, inkl denna, slutar med att jag får sudda varje mellanslag i början av varje rad tills koden körs igenom till botten utan fel.

    Fråga 2..

    Nu ser koden ut så här:

    –[[
    %% properties
    220 value
    %% globals
    –]]

    –220 RD3 – motion sensor bathroom downstairs

    –Scene purpose
    — IF motion sensor detects movement lamp keep it on for 3 minutes — but only do so if global variable ”night” is true..
    — If new movement detected during the 3 minute period reset the timer to 3 minutes

    local sceneId = 41 –ID of this scene, used to detect number of instances run
    local timerEndTime = 180 –Seconds to keep the lamp turned on after PIR detects movement
    local timer = ”timer” –Name of global variabel to control the timer
    local timerValue = fibaro:getGlobalValue(timer) –Current value of global variabel for timer
    local triggerValue = fibaro:getValue(220, ”value”) –Get motion sensor value that activated this scene
    local lights = 23 –light to be controlled by this scene

    fibaro:debug(”start, timer = ” .. timerValue .. ” lights = ” .. fibaro:getValue(lights, ”value”) .. ” ,triggerValue = ” .. triggerValue .. ”,night = ” .. fibaro:getGlobalValue(”night”)) –debug
    if ( fibaro:getValue(lights, ”value”) == ”0” and triggerValue > 0 and tonumber(fibaro:getGlobalValue(”night”)) > 0) then
    fibaro:call(lights, ”turnOn”)
    fibaro:setGlobal(timer, timerEndTime)
    while (fibaro:getGlobalValue(timer) ~= ”0”) do
    timerValue = tonumber(fibaro:getGlobalValue(timer))
    fibaro:setGlobal(timer, timerValue-1)
    fibaro:debug(”Loop – timer = ” .. fibaro:getGlobalValue(timer))
    fibaro:sleep(1000) end

    fibaro:call(lights, ”turnOff”)

    else
    if fibaro:countScenes(sceneId) > 1
    then fibaro:setGlobal(timer, timerEndTime)
    fibaro:debug(”New instance, totalt = ” .. fibaro:countScenes(sceneId))
    end

    .. och jag får följande fel:
    [DEBUG] 00:15:28: line 38: ‘end’ expected (to close ‘if’ at line 23)near

    Nu har jag visserligen editerat den lite.. Gissar något väsentligt försvunnit? 🙂

    • Lua bryr sig egentligen inte om whitespace, det är främst för läsbarhet, så det enda jag kan tänka mig är antingen att HC2 inte har stöd för en viss typ av whitespace, eller att de whitespace-tecken som kopieras inte tolkas som whitespace av någon anledning.

      Angående felmeddelandet gissar jag att det är en ”end” för lite i koden, jag tror det behöver vara en för både ”if”- och ”while”-blocket.

  • Vet inte.. Testat nu olika varianter. Ta bort end. Flytta till raden under.. Får samma fel.

    Det skumma är att jag inte ändrat något på logiken i koden. Bortsett från kommentarerna som jag tog bort (för att bli av med diverse felmeddelanden..) så ser det ju likadant ut i er kod ovan.

  • Kommentera