Page 1 of 1

Bara köra EN scen - hur lämpligast testa?

Posted: 15 Jul 2014, 09:55
by Bamsefar
Så det verkar finnas mer än en variant på hur man kollar om scenen redan körs resp hur man sedan hanterar detta. Så jag tänkte kolla hur andra gör.

Jag har i ett antal av mina scener följande kod:

Code: Select all

--kill any extra instances of the same scene
if (fibaro:countScenes() > 1) then fibaro:abort() end;
Den har nackdelen att körs redan scenen så fortsätter den instansen som redan körs och den du just startade dör. Nackdelen med det borde vara att OM du ändrar i din scen så kan man alltså inte få den nya versionen att köra sålänge som den gamla körs (t.ex. en oändlig while slinga med 60 sekunders sleep varje varv dygnet runt går alltså inte att avbryta)?

Om man tittar på Fibaro's UK hemsida, så har dom en del information:
http://www.fibarouk.co.uk/support/lua/l ... untscenes/

Vet dock inte om jag blev något klokare.

Det som är saken är att min wake-up scen tvärnitade imorse och då började jag titta på varför. Och då såg jag samtidigt 5 döda noder (jag har kanske haft enstaka någon gång - men 5 samtidigt? aldrig någonsin tidigare, och denna gång var det noder som ALDRIG strulat tidigare), och frågan är om den kodrad jag har ovan på något sätt stör Fibarons processer - låter helt absurbt, men då det inte finns någon vettig dokumentation.....

Så, frågan är, hur gör ni andra för att säkerställa att scener bara fungerar, och bara har EN upplaga - och hur fixar ni så att en som redan körs, är rätt version?

Re: Bara köra EN scen - hur lämpligast testa?

Posted: 15 Jul 2014, 18:11
by Bamsefar
I min jakt på att försöka klura ut vart mitt minne tar vägen, vilket är skälet till att jag jagar aktiva scener, så hackade jag ihop en liten scen som helt sonika lista alla scener som är aktiva, och hur många av den scenen som körs. Inte mycket till debug men i alla fall bättre än inget.

OBS! Tittar bara på de första 30 scenerna - ändra i for statementet nedan om du har flera (jag har 27 med denna scen)...

Code: Select all

--[[
%% properties

%% globals
--]]

if fibaro:countScenes() > 1 then fibaro:abort() end 

-- Check Scenes for Activity 
  
    for i = 1 , 30 do 

       local SceneID = tonumber(i) 

       if (fibaro:isSceneEnabled(i)) 
       then 
          fibaro:debug("Scene : " .. SceneID .. " is active with " .. fibaro:countScenes(i) .. " running sessions")
       else 
          -- fibaro:debug("Scene : " .. SceneID .. " is non active") 
       end 
    
       fibaro:sleep(100) 

    end