Istället för sleep?

Post Reply
Samuel
Ny medlem
Posts: 10
Joined: 06 Dec 2014, 23:18
9
Location: Borås

Har ett automatljus i hallen som nu går på 3 olika blockscener o skulle vilja få dom till lua istället, scriptet funkar till såpass att det tänder, dimmrar o släcker.

MEN blir det en förnyad rörelse så vi jag ha uppdimmring igen, detta funkar inte nu.

Antar för att det är fibaro:sleep som ställer till det då den inte känner av rörelsen under sleep. Vad kan man använda sig istället som fördröjning av tid som inte stoppar loopen?

Code: Select all

--[[
%% properties
84 value
%% events
%% globals
--]]

local startSource = fibaro:getSourceTrigger();

if (fibaro:countScenes() > 1) then   --Kör bara en Scen
  fibaro:abort();
  fibaro:debug("Stoppa övriga Scener")
end

if (
 ( tonumber(fibaro:getValue(84, "value")) > 0 ) --Ir deckare från larm
or
startSource["type"] == "other"
)
then
	fibaro:call(90, "setValue", "80");  --Tänd hallbelysning 80%
  fibaro:debug("Tänd 80%")	
  fibaro:sleep (1200000)
 
  fibaro:call(90, "setValue", "40");  --Dimmra till 40%
 fibaro:debug("Dimmra 40%")	
  fibaro:sleep (600000)	
	
  fibaro:call(90, "turnOff");  --Släck hall
	 fibaro:debug("Släck")
end
Fibaro HC2 v4.056
alexndr
Medlem
Posts: 420
Joined: 14 Jul 2016, 14:38
8

Samuel wrote:Har ett automatljus i hallen som nu går på 3 olika blockscener o skulle vilja få dom till lua istället, scriptet funkar till såpass att det tänder, dimmrar o släcker.

MEN blir det en förnyad rörelse så vi jag ha uppdimmring igen, detta funkar inte nu.

Antar för att det är fibaro:sleep som ställer till det då den inte känner av rörelsen under sleep. Vad kan man använda sig istället som fördröjning av tid som inte stoppar loopen?

Code: Select all

--[[
%% properties
84 value
%% events
%% globals
--]]

local startSource = fibaro:getSourceTrigger();

if (fibaro:countScenes() > 1) then   --Kör bara en Scen
  fibaro:abort();
  fibaro:debug("Stoppa övriga Scener")
end

if (
 ( tonumber(fibaro:getValue(84, "value")) > 0 ) --Ir deckare från larm
or
startSource["type"] == "other"
)
then
	fibaro:call(90, "setValue", "80");  --Tänd hallbelysning 80%
  fibaro:debug("Tänd 80%")	
  fibaro:sleep (1200000)
 
  fibaro:call(90, "setValue", "40");  --Dimmra till 40%
 fibaro:debug("Dimmra 40%")	
  fibaro:sleep (600000)	
	
  fibaro:call(90, "turnOff");  --Släck hall
	 fibaro:debug("Släck")
end
Det är ju din check med countScenes() som gör att den inte känner av rörelsen. Ligger du och sover med sleep har du redan en scen aktiv och den nya aktivering gör fibaro:abort(), det vill säga. ingenting.

Jag skulle ändrat ditt skript enligt följande:

1. Inte gjort sleep på 1200000 resp. 600000 utan gjort en loop med en kortare sömnperiod. Vill du har direkt reaktion på sekunden får du ändra till att bara sova 1000ms. Därefter skulle jag ha räknare för tiden du vill sova. 600 och 1200 i ditt exempel. Detta möjliggör att du kan reagera på vad som händer från andra aktiveringar inom en sekund.

2. För efterkommande aktiveringar av scenen, ställa om parametrar för hur första aktiveringen skall agera när den vaknar upp ur sin sömn. Därefter gör de fibaro:abort().
Post Reply