Page 1 of 1

Hjälp med LUA, variabel för vindhastighet

Posted: 05 Jul 2018, 14:49
by valneg
Hej, undrar om någon har lite tid, behöver lite hjälp med LUA.
Har några rader i GEA som drar in resp. öppnar markiser beroende på ljusstyrka och vindhastighet.
Vindhastigheten kommer från Fibaro, skapat en LUA scen som ändrar på en variabel med tre olika nivåer.
Får till två av nivåerna men inte den tredje. Vill få till följande;
"Calm" = vindhastighet < 11
"Gentle" = vindhastighet > 11 men < 20
"Stormy" = vindhastighet < 20
Inga problem med "Calm" och "Gentle", får dock inte till "Stormy"
Koden ser just nu ut som nedan, får man till detta i GEA desto bättre :-)

Code: Select all

--[[
%% autostart
%% properties
%% weather
Wind
%% events
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(api.get('/weather')['Wind']) < tonumber(11) )
or
startSource["type"] == "other"
)
then
--vänta 10 minuter
  	--fibaro:sleep(600000)
	fibaro:setGlobal("Wind", "Calm");
	--fibaro:call(396, "sendDefinedPushNotification", "379");
end

if (
 ( tonumber(api.get('/weather')['Wind']) > tonumber(11) )
or
startSource["type"] == "other"
)
then
  --vänta 10 minuter
  	--fibaro:sleep(600000)
	fibaro:setGlobal("Wind", "Gentle");
	--fibaro:call(396, "sendDefinedPushNotification", "380");
end

Re: Hjälp med LUA, variabel för vindhastighet

Posted: 05 Jul 2018, 17:37
by RH_Dreambox
Om du har gjort som texten beskriver så får du ändra "Stormy" enligt nedan. "vindhastighet" skall vara "Större än" inte "Mindre än" som det står i din text.
"Stormy" = vindhastighet > 20

Re: Hjälp med LUA, variabel för vindhastighet

Posted: 05 Jul 2018, 18:07
by valneg
Tack för svar, ser att jag har skrivit fel i beskrivningen. Så här har jag tänkt för "Calm" och "Stormy"

Code: Select all

--[[
%% autostart
%% properties
%% weather
Wind
%% events
%% globals
--]]

local startSource = fibaro:getSourceTrigger();
if (
 ( tonumber(api.get('/weather')['Wind']) < tonumber(11) )
or
startSource["type"] == "other"
)
then
	fibaro:setGlobal("Wind", "Calm");
end

if (
 ( tonumber(api.get('/weather')['Wind']) > tonumber(20) )
or
startSource["type"] == "other"
)
then
	fibaro:setGlobal("Wind", "Stormy");
end
Det jag inte får till är mitt emellan läget, "Gentle". Vindhastighet mellan 11 och 20 dvs.

Re: Hjälp med LUA, variabel för vindhastighet

Posted: 06 Jul 2018, 17:00
by RH_Dreambox
Ungefär så här kan det se ut. 0 till 10.9 är Calm, 11 till 19.9 är Gentle , 20 och större blir Storm.

Code: Select all

if (( tonumber(api.get('/weather')['Wind']) < tonumber(11))
then
	fibaro:setGlobal("Wind", "Calm");

elseif (( tonumber(api.get('/weather')['Wind']) >= tonumber(11) ) and (( tonumber(api.get('/weather')['Wind']) < tonumber(20) ))
then
	fibaro:setGlobal("Wind", "Gentle");

elseif (( tonumber(api.get('/weather')['Wind']) >= tonumber(20) )
then
	fibaro:setGlobal("Wind", "Stormy");
end
EDIT
Koden ovan är uppdaterad.
Fotbollen i TV distraherade mig en aning :-)

Re: Hjälp med LUA, variabel för vindhastighet

Posted: 07 Jul 2018, 14:12
by RH_Dreambox
Eller så kan man göra så här.
Du har Wind som trigger i din kod och även Wind som Global variabel.
För att undvika problem så tycker jag du skall byta namn på den Globala variabeln. Den Globala variabeln i min kod heter "Vind"

Code: Select all

--[[
--%% autostart
%% properties
%% weather
Wind
%% events
%% globals
--]]

local wind_km_h = ( tonumber(api.get('/weather')['Wind']))
local wind_m_s = (math.ceil((wind_km_h / 0.36)) / 10)

fibaro:debug("Vind = "..wind_km_h.." km/h")
fibaro:debug("Vind = "..wind_m_s.." m/s")

if (wind_m_s == 0) then Vind = "Vindstilla"
  elseif (wind_m_s > 0) and (wind_m_s <= 0.2) then wind_data = "Lugnt"
  elseif (wind_m_s >= 0.3) and (wind_m_s <= 3.3) then wind_data = "Svag vind"
  elseif (wind_m_s >= 3.4) and (wind_m_s <= 7.9) then wind_data = "Måttlig vind"
  elseif (wind_m_s >= 8.0) and (wind_m_s <= 13.8) then wind_data = "Frisk vind"
  elseif (wind_m_s >= 13.9) and (wind_m_s <= 24.4) then wind_data = "Hård vind"
  elseif (wind_m_s >= 24.5) and (wind_m_s <= 32.6) then wind_data = "Storm"
  elseif (wind_m_s >= 32.7) then wind_data = "Orkan"
end
fibaro:setGlobal("Vind", wind_data)
--Kolla värde för den globala variabeln "Vind"
fibaro:debug (tostring(fibaro:getGlobalValue("Vind")))

Re: Hjälp med LUA, variabel för vindhastighet

Posted: 09 Jul 2018, 07:40
by valneg
Eller så kan man göra så här.
Du har Wind som trigger i din kod och även Wind som Global variabel.
För att undvika problem så tycker jag du skall byta namn på den Globala variabeln. Den Globala variabeln i min kod heter "Vind"
Stort tack, löste det med 3 olika scener under tiden men det här ser klart mycket bättre ut än min egen lösning :D