Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Hvordan definere tidsvariabler på en god måte med LUA?


Anbefalte innlegg

For å kunne lage gode scener for styring av lys, varme og annet, vil jeg tro man må ha en del variabler som kan fortelle systemet hvordan omgivelsene er.

 

Har prøvd å lage en scene som setter følgende variabler:

 

Soltid, med verdiene: Soloppgang, Solnedgang

Ukedag, med verdiene: Mandag, Tirsdag, Onsdag, Torsdag, Fredag, Lørdag, Søndag

Maaned, med verdiene: Januar, Februar, Mars, April, Mai, Juni...   ...Desember

Leggetid, med verdiene: Sover, Våken

 

LUA koden for disse 4, er i bunnen av denne posten.

(Har ikke fått sjekket om den fungerer enda.)

 

Min neste utfordring er en variabel som heter årstid, med verdiene: Vår, Sommer, Høst, Vinter.

 

Kriteriene for denne variabelen skal være:

 

Årstid vår:
Den delen av året da normal døgnmiddeltemperatur for det aktuelle stedet er mellom 0 og 10 °C og stigende.
Fra ca. 5. februar til ca. 6. mai. (midtpunkt=vårjevndøgn=ca. 21. mars)


Årstid sommer:
Den delen av året da døgnmiddeltemperaturen er over 10 ° C
Fra ca. 7. mai til ca. 6. august. (midtpunkt=sommersolverv=ca. 21. juni)


Årstid høst:
Den delen av året da normal døgnmiddeltemperatur for det aktuelle stedet er mellom 0 og 10 °C og synkende.
Fra ca. 7. august til ca. 16. november. (midtpunkt=høstjevndøgn=ca. 23. september)


Årstid vinter:
Den delen av året da døgnmiddeltemperaturen er under 0 ° C
Fra ca. 17. november til ca. 5. februar. (midtpunkt=vintersolverv=ca. 22. desember)

 

Noen gode tips for styring av variabelen årstid?

 

------

 

Her er koden for de første 4 variablene:

 

--[[
%% autostart
%% properties
%% globals
--]]



-- Opprett Variabelen: Soltid
-- med verdiene: Soloppgang, Solnedgang

-- Opprett variabelen: Ukedag
-- med verdiene: Mandag, Tirsdag, Onsdag, Torsdag, Fredag, Lørdag, Søndag

-- Opprett variabelen: Maaned
-- med verdiene: Januar, Februar, Mars, April, Mai, Juni...   ...Desember

-- Opprett variabelen: Leggetid
-- med verdiene: Sover, Våken



local sourceTrigger = fibaro:getSourceTrigger(); -- Hva har startet scenen?
 

if (sourceTrigger["type"] == "autostart") then; -- Hvis scenen er startet med autostart:
	while true do; -- Så lenge scenen er startet med autostart, kjør:


		local TidsTabell = os.date("*t");

			-- TidsTabell vil genereres og se ut som følger:

			-- year		2018
			-- month	01-12
			-- day		01-31
			-- hour		00-23
			-- min		00-59
			-- sec		00-59
			-- isdst	et boolean, "true" hvis sommertid, ellers "false"

		local Tid = (string.format("%02d", TidsTabell.hour) .. ":" .. string.format("%02d", TidsTabell.min)); -- "%02d" 0 padding, 2 heltall, d for desimaltall
		local Dag = tonumber(os.date("%w"));
		local Mnd = tonumber(os.date("%m"));
		local Soloppgang = fibaro:getValue(1, "sunriseHour"); -- Henter tidspunkt for soloppgang
		local Solnedgang = fibaro:getValue(1, "sunsetHour"); -- Henter tidspunkt for solnedgang
 
		local startSource = fibaro:getSourceTrigger();



		-- Setter variabel Soltid:    

		if (Tid == Soloppgang) then; -- Hvis tid er lik tiden for soloppgang, da
			fibaro:setGlobal("Soltid","Soloppgang"); -- settes variabelen Soltid til Soloppgang
		end;
	
		if (Tid == Solnedgang) then; -- Hvis tid er lik tiden for solnedgang, da
			fibaro:setGlobal("Soltid","Solnedgang"); -- settes variabelen Soltid til Solnedgang
		end;



		-- Setter variabel Ukedag:

		if(Dag == 0 and Tid == "00:00") then; 
		  	fibaro:setGlobal("Ukedag", "Søndag");
			fibaro:call(2, "sendDefinedEmailNotification", "15"); -- Beskjeden "Variabel Ukedag er endret", sendes på epost
		  elseif(Dag == 1 and Tid == "00:00") then; 
		  	fibaro:setGlobal("Ukedag", "Mandag");
			fibaro:call(2, "sendDefinedEmailNotification", "15");
		  elseif(Dag == 2 and Tid == "00:00") then; 
		  	fibaro:setGlobal("Ukedag", "Tirsdag");
			fibaro:call(2, "sendDefinedEmailNotification", "15");
		  elseif(Dag == 3 and Tid == "00:00") then; 
		  	fibaro:setGlobal("Ukedag", "Onsdag");
			fibaro:call(2, "sendDefinedEmailNotification", "15");
		  elseif(Dag == 4 and Tid == "00:00") then; 
		  	fibaro:setGlobal("Ukedag", "Torsdag");
			fibaro:call(2, "sendDefinedEmailNotification", "15");
		  elseif(Dag == 5 and Tid == "00:00") then; 
		  	fibaro:setGlobal("Ukedag", "Fredag");
			fibaro:call(2, "sendDefinedEmailNotification", "15");
		  elseif(Dag == 6 and Tid == "00:00") then; 
		  	fibaro:setGlobal("Ukedag", "Lørdag");
			fibaro:call(2, "sendDefinedEmailNotification", "15");
		end;


		-- Setter variabel Maaned

		if(Mnd == 01 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "Januar");
			fibaro:call(2, "sendDefinedEmailNotification", "123"); -- Beskjeden "Variabel Måned er endret", sendes på epost
		  elseif(Mnd == 02 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "Februar");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 03 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "Mars");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 04 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "April");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 05 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "Mai");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 06 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "Juni");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 07 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "Juli");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 08 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "August");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 09 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "September");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 10 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "Oktober");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 11 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
	  		fibaro:setGlobal("Maaned", "November");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		  elseif(Mnd == 12 and string.format("%02d", TidsTabell.day == "01") and Tid == "00:00") then; 
		  	fibaro:setGlobal("Maaned", "Desember");
			fibaro:call(2, "sendDefinedEmailNotification", "123");
		end;



		-- Setter variabel Leggetid:

		if (Tid == "23:30") then; 
			fibaro:setGlobal("Leggetid","Sover"); -- settes variabelen Leggetid til Sover
		end;
		if (Tid == "08:00") then; 
			fibaro:setGlobal("Leggetid","Våken"); -- settes variabelen Leggetid til Våken
		end;



	fibaro:sleep(60*1000); -- Vent 60 sekunder før programmet kjører igjen
end;
else;
	-- Hvis scenen er startet manuelt:
	local Soltid = fibaro:getGlobalValue("Soltid"); 
	if (Soltid == "Solnedgang") then;
		fibaro:setGlobal("Soltid","Soloppgang")
	else;
		fibaro:setGlobal("Soltid","Solnedgang")
	end;
end;

 

Mitt første forsøk på et brukende LUA program.

Føler det er en del repetisjoner der som burde vært unngått...

Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.