Hjälp med LUA, variabel för vindhastighet

Post Reply
valneg
Medlem
Posts: 32
Joined: 30 May 2015, 05:46

05 Jul 2018, 14:49

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
RH_Dreambox
Proffsmedlem
Posts: 867
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

05 Jul 2018, 17:37

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
2 st HC2 4.510, Recovery-stickorna ligger i skrivbordslådan nu!
valneg
Medlem
Posts: 32
Joined: 30 May 2015, 05:46

05 Jul 2018, 18:07

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.
RH_Dreambox
Proffsmedlem
Posts: 867
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

06 Jul 2018, 17:00

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 :-)
2 st HC2 4.510, Recovery-stickorna ligger i skrivbordslådan nu!
RH_Dreambox
Proffsmedlem
Posts: 867
Joined: 03 Jan 2015, 16:49
Location: Vegby
Contact:

07 Jul 2018, 14:12

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")))
2 st HC2 4.510, Recovery-stickorna ligger i skrivbordslådan nu!
valneg
Medlem
Posts: 32
Joined: 30 May 2015, 05:46

09 Jul 2018, 07:40

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
Post Reply