Minnet tog slut efter ett par dagar

Diskussioner runt hur den tänkta funktionaliteten nås
Tomas0910
Wannabe
Inlägg: 4
Blev medlem: 17 okt 2015, 23:45
Ort: Stockholm

Minnet tog slut efter ett par dagar

Inlägg av Tomas0910 »

Hej!
Jag har åtta stycken Fibaro Motion Sensor FGMS001 uppsatta i olika rum där ett av användningsområdena är att undersöka om ingen rörelse har skett inom X minuter och därefter släcka ner lamporna i det rummet. Jag har programmerat det hela i LUA och det hela fungerade fint i ett par dagar. Därefter tog minnet slut i Fibaron och helt plötsligt så fungerade inga scener alls i huset. Misstänker att jag har gjort något fel i mitt script men kan inte se vad.

Scriptet aktiveras antingen av att rörelse upptäcks eller att lampan tänds. Samtliga rum har ett eget script så teoretiskt sett kan det bli åtta script som körs samtidigt.

Någon som kan se vad jag gör för fel i scriptet?

Jag har en Fibaro HC2, 4.056

Kod: Markera allt

--[[
%% autostart
%% properties
155 value
42 value
%% globals
--]]

-- Ta bort scener med samma ID som denna, så att bara EN av denna scene körs.
if (fibaro:countScenes() > 1) then fibaro:abort() end

-- Lägg in de lampor (ID) som statusen ska kontrolleras på
local Lampor = { 42 }

-- Tid i minuter innan enheten släcker lamporna
local tidMin = 10

-- Vilken bevakningsenhet (ID) används för kontrollen
local motionID = 155 

-- Hämta tiden då scenen aktiverades
local motionTid = os.time()

-- Räkna ut UNIX-tid då lampor ska släckas
tidOff = os.time() + (tidMin * 60)

-- Används för att pausa script om bevakningsenhet noterar rörelse
local motionCheck = 0

-- Status 0 för lampor betyder att alla är släckta, värde över någon lampa tänd
local StatusLampor = 0 

-- i används som räknare i loop
local i = 0

-- Gå igenom status på lampor, om alla är släckta avbryt
for loop,Lampa in pairs(Lampor) do
    fibaro:debug("Index: "..loop.." DeviceID: "..Lampa.." ("..fibaro:getName(Lampa)..") Status: "..fibaro:getValue(Lampa, "value"))
  	StatusLampor = StatusLampor + tonumber(fibaro:getValue(Lampa, "value"))
end

--Kontrollerar om alla lampor är släckta
fibaro:debug('StatusLampor har värdet: ' ..StatusLampor)

if (StatusLampor == 0) then 
  fibaro:debug('Lampor är redan släckta!')
  fibaro:abort() 
else 
  fibaro:debug('Antal tända lampor: '..StatusLampor)  
end

--Loop för att kontrollera när lampor ska släckas
while motionTid < tidOff do
  motionTid = os.time();
  
  --Uppdaterar ny tid om rörelse upptäcks
  if (fibaro:getValue(motionID, 'value') == '1') then 
    fibaro:debug('Rörelse upptäckt! Uppdaterar ny jämförelsetid (ca 30 sek)')
    --Uppdatera ny tid tills rörelse avbryts
    while fibaro:getValue(motionID, 'value') == '1' do
		-- Gör inget, bara avvakta
    end
    tidOff = os.time() + (tidMin * 60)
  end
  
  --Skriv ut debug var 1000:e gång
  i=i+1
  if(i>1000) then
    i = 0
    fibaro:debug('Senaste rörelse: ' ..motionTid..' Tid avslut: '..tidOff..' Skillnad: '..tidOff-motionTid)
  end
end

fibaro:debug('Påbörjar nedsläckning av lampor..')

-- Gå igenom status på lampor, om alla är släckta avbryt
for loop,Lampa in pairs(Lampor) do
  --Släck enbart tända enheter
  if (fibaro:getValue(Lampa, "value") > '0') then
    fibaro:debug('Släcker: '..Lampa..' ('..fibaro:getName(Lampa)..')')
    fibaro:call(Lampa, "turnOff")
  end
end

fibaro:debug('Avslutar script!')
fibaro:abort()