Tända lampor med slumptidsfördröjning

Hjälp varandra att vara kreativa för att göra hemmet mer bekvämt.
Post Reply
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Ibland så ser man kod som folk använder som tänder och släcker exakt alla lampor i en enda stor smäll. Och normalt sett så kanske det är bra - men från "tjuv vinkeln" så kanske man vill ha lite fördröjning mellan lamporna, och då inte samma fördröjning...

Som det slumpar (!) sig så finns en bra slumptalsgenerator i Fibaro's LUA kod implementation, som man kan nyttja på ett roligt sätt.

Tänk er följande:

Code: Select all

	fibaro:call(30, "turnOn");
	fibaro:call(33, "turnOn");
	fibaro:call(36, "turnOn");
	fibaro:call(42, "turnOn");
	fibaro:call(45, "turnOn");
    	fibaro:call(48, "turnOn");
Praktiskt - right men något avslöjande att man tänder och släcker allt på ett bräde... Så jag la till lite fördröjningar med fibaro:sleep, och då math.random(<minsekunder>*1000, <maxsekunder>*1000), och då blir det såhär:

Code: Select all

	fibaro:call(30, "turnOn");
	fibaro:call(33, "turnOn");
	fibaro:sleep(math.random(5000,8000));
	fibaro:call(36, "turnOn");
	fibaro:sleep(math.random(8000,12000));
	fibaro:call(42, "turnOn");
	fibaro:call(45, "turnOn");
	fibaro:sleep(math.random(8000,12000));
-- Sovrum specialbehandlas under helgdagar för extra sen morgon ;-)
    if ( fibaro:getGlobalValue("TOD") ~= "Morgon" or 
         ( ( fibaro:getGlobalValue("WorkToday") == "True" )
       		and fibaro:getGlobalValue("TOD") == "Morgon" 
       	 ) 
       ) 
    then
    	fibaro:call(48, "turnOn");
Och som ni ser råkar jag special behandla lamporna på fönsterbänken i sovrummet under lediga dagar... Men principen är såklart den att det skall bli slumpvisa fördröjningar mellan varje lampgrupp i detta fallet. Och just det jag ville tipsa om är just:

fibaro:sleep(math.random(8000,12000));

Som fördröjer med mellan 8 och 12 sekunder i detta fallet - alltså lite slumpvis.

Sedan kan man ju ta det en nivå till om man vill, och jag funderar på detta så jag har inte skrivit koden än, och det är att antingen slumpvis tändföljd eller mera troligt slumpvis "riktning" i tändandet/släckandet. Jag går ju från vardagarsrum till sovrum just nu - och det är alltid samma ordning - men jag funderar på att bygga slumpen som styr i ena eller andra riktningen. Slumpvis ordning skulle också innebära slumpvis fördröjning mellan varje "rum" och kan bli lätt konstigt eftersom man normalt sett antagligen tänder i en viss ordning - människan är ju en vanemänniska i botten...
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Kan man använda detta till att släcka lamporna? Jag har en 1-wire ljussensor som tänder när det blir mörkt nog, så tändningen är nästan alltid olika beroende på väder. Men släckningen är ju omedelbar :( så det skulle vara prima om man kunde använda din kod till släcka istället för tända.
Är inte så hemma på att koda i lua, men copy & paste kan jag ;)

Skickat från min GT-I9100 via Tapatalk 2
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Jag har ett liknande tänk, men använder en Aeon 4-in-1 för att känna av ljusintensiteten.

Jag tänder när det blir mörkt, släcker när det är natt, och tänder på morgonen om det är mörkt igen. Och sedan släcker när det blir tillräckligt ljust (eller låter bli att tända nu på sommaren då).

Jag testar mot en variabel:

Code: Select all

	LNightHour = "22" .. string.format("%02d",math.random(12,32)); -- Time which is considered to be night
Genom att använda math.random(12,32) så släcks det någon gång mellan 22.12 och 22.32. Mycket praktiskt alltså.

Har liknande för alla tider som styr "TOD" (TimeOfDay):

Code: Select all

    -- Generate NEW values for different TOD
	LMorningHour ="05" .. string.format("%02d",math.random(48,58)); --Time which is considered to be morning
	LDayHour ="08" .. string.format("%02d",math.random(00,11)); --Time which is considered to be day
	LDinnerHour ="16" .. string.format("%02d",math.random(02,12)); --Time which is considered to be dinner
	LEveningHour ="18" .. string.format("%02d",math.random(24,36)); --Time which is considered to be evening
	LTurndownHour ="21" .. string.format("%02d",math.random(01,16)); --Time which is considered to be turndown before night
	LNightHour = "22" .. string.format("%02d",math.random(12,32)); -- Time which is considered to be night
Edit: Helt omskrivet.
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Då ska jag pröva detta :)
Tackar för snabbt svar.

Skickat från min GT-I9100 via Tapatalk 2
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Gjorde en snabb test som såg ut så här

Code: Select all

--[[
%% properties

%% globals
--]]
fibaro:call(38, "turnOff");
   fibaro:sleep(math.random(8000,12000)); 
   fibaro:call(4, "turnOff");
   fibaro:sleep(math.random(5000,8000));
   fibaro:call(33, "turnOff");
   fibaro:sleep(math.random(8000,12000));
   fibaro:call(45, "turnOff");
   fibaro:sleep(math.random(8000,12000));
   fibaro:call(36, "turnOff");
   fibaro:sleep(math.random(8000,12000));
   fibaro:call(34, "turnOff");
   fibaro:sleep(math.random(8000,12000));
Funkade klockrent :D
Kan man även få in tiden som startar scenen i luakoden?
Typ vardagar 22,30 och fre, lördag 23,50
Så man slipper ha en scen för att starta koden
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Du kan ju, som jag gjort då, kombinera med min snurra för arbetsdag eller inte:
http://www.zwaveforum.se/viewtopic.php?f=21&t=4656
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Då har vi lagt in din lua :)
längtar efter 22:05 för att se om det funkar.
Variablerna har även uppdaterats dom med, fast klockan inte har vart 00:01
En fråga om lediga dagar som du lagt in, kan man lägga in ett tidsspann?
Som för semester ex 2014-07-01-2014-07-31
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Nej dessvärre måste man ange varje kalenderdatum för sig. Någon gång i framtiden kanske ;-)
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
Johan71
Medlem
Posts: 84
Joined: 24 Jan 2014, 11:46
10

Hej
Det där med random är ju lite intresannt. mao så slocknar inte alla samtidigt utan dom slocknar inom ett visst tidsspann?

Kan ni förklara lite mer ingående hur man gör, och är det något jag kan ha här?

Code: Select all

fibaro:call(11, "turnOff");
         fibaro:call(48, "turnOff");
         fibaro:call(7, "turnOff");
         fibaro:call(8, "turnOff");
         fibaro:call(10, "turnOff");
         fibaro:call(9, "turnOff");
         fibaro:call(5, "turnOff");
         fibaro:call(4, "turnOff");
         fibaro:call(6, "turnOff");
MVH Johan
_____________________________
Fibaro Home Center 2
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Code: Select all

	fibaro:call(11, "turnOff");
	fibaro:sleep(math.random(5000,8000)); 
	fibaro:call(48, "turnOff");
	fibaro:sleep(math.random(6000,9000)); 
	fibaro:call(7, "turnOff");
	fibaro:sleep(math.random(8000,12000)); 
	fibaro:call(8, "turnOff");
	fibaro:sleep(math.random(5000,12000)); 
	fibaro:call(10, "turnOff");
	fibaro:sleep(math.random(2000,5000)); 
	fibaro:call(9, "turnOff");
	fibaro:sleep(math.random(8000,12000)); 
	fibaro:call(5, "turnOff");
	fibaro:sleep(math.random(6000,9000)); 
	fibaro:call(4, "turnOff");
	fibaro:sleep(math.random(5000,8000)); 
	fibaro:call(6, "turnOff");
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
Johan71
Medlem
Posts: 84
Joined: 24 Jan 2014, 11:46
10

Bamsefar wrote:

Code: Select all

	fibaro:call(11, "turnOff");
	fibaro:sleep(math.random(5000,8000)); 
	fibaro:call(48, "turnOff");
	fibaro:sleep(math.random(6000,9000)); 
	fibaro:call(7, "turnOff");
	fibaro:sleep(math.random(8000,12000)); 
	fibaro:call(8, "turnOff");
	fibaro:sleep(math.random(5000,12000)); 
	fibaro:call(10, "turnOff");
	fibaro:sleep(math.random(2000,5000)); 
	fibaro:call(9, "turnOff");
	fibaro:sleep(math.random(8000,12000)); 
	fibaro:call(5, "turnOff");
	fibaro:sleep(math.random(6000,9000)); 
	fibaro:call(4, "turnOff");
	fibaro:sleep(math.random(5000,8000)); 
	fibaro:call(6, "turnOff");

ok fräänt men vad innebär värdena 6000,9000 osv..... är det mellan 60000 och 90000 sekunder så dras lamporna av ?eller vad är det
MVH Johan
_____________________________
Fibaro Home Center 2
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Det är ms.

Funktionen:

Code: Select all

fibaro:sleep(sekunder*1000);
Gör att processen väntar (sover) i sekunder*1000 (eftersom funktionen är på millisekund nivå, alltså tar man antalet sekunder och multiplicerar med 1000).

Funktionen:

Code: Select all

math.random(8000,12000)
Skapar ett slumptal mellan 8000 och 12000 (dvs man anger min resp max värde - så slumpas talet mellan dessa). Dvs om man tänker på sekunder*1000 enligt ovan, så är det alltså ett tal motsvarande mellan 8 och 12 sekunder som skapas.

Då blir funktionen:

Code: Select all

fibaro:sleep(math.random(8000,12000));
En fördröjning med mellan 8 och 12 sekunder, och det kan alltså vara 9,438 sekunders väntan en gång, och nästa är det kanske 10,534 sekunder. Det är det som är det goa med denna kombo - man kan kontrollera min och max antal sekunder och kan således "småstyra" fördröjningen men utan att sätta ett helt fast värde.
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
User avatar
sonnyboy
Proffsmedlem
Posts: 669
Joined: 26 Sep 2013, 08:05
11
Location: Västerås

Fungerade klockrent :D
Tack för att det delade med dig av koden.

Få se om det blir någon uppdatering på tidsspann ;)
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

sonnyboy wrote:Få se om det blir någon uppdatering på tidsspann ;)
Jag får väl lära mig datumhanteringen i LUA helt enkelt.... trial and error - here we go....
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
faketastic
Ny medlem
Posts: 16
Joined: 25 Feb 2014, 12:02
10

En fin sak hade varit att slumpa fram ordningen också så lamporna tänds helt olika varje gång.
Tack för tipset om randomfunktionen!
User avatar
Bamsefar
Z-Wave Kung
Posts: 1268
Joined: 25 Nov 2013, 15:06
10
Location: Stockholm

Även om slumpvis tändordning i första läget verkar vettigt, så undrar jag hur det kommer upplevas? Jag menar, en i sovrummet sedan köket och sedan nästa sovrum och kanske vardagsrummet innan det blir dags för köket igen eller något? Slumpvis tändning an ju också avslöjas av tjuven - således vill jag tro att det krävs någon form av ordning?
Kör Home Assistant efter totalt nederlag för HomeSeer :twisted: :twisted: :mrgreen:
Post Reply