Kleine LUA Scripte Teil 2: Sturmwarnung

Hallo Boomx,
in der Globalen Variable (V_Wind) steht 0 und auch nur die 0.

Gruß
Carsten

Hast Du in die WU-Szene das Befüllen Deiner Variable eingebaut:

fibaro:setGlobal(“V_Wind”, wind)

Viele Grüße Hoggle

Hallo Hoogle,
ja so schaut es im WU-Script aus:

 if (stationID ~= nil) then
          fibaro:call(WU.selfId , "setProperty", "ui.lblStation.value", locationID);
          fibaro:call(WU.selfId , "setProperty", "ui.lblCity.value", city);
          fibaro:call(WU.selfId , "setProperty", "ui.lblTemp.value", WU.translation[WU.language]["Temperature"].." "..temperature.." °C");
          fibaro:call(WU.selfId , "setProperty", "ui.lblHum.value", WU.translation[WU.language]["Humidity"].." "..humidity);
          fibaro:call(WU.selfId , "setProperty", "ui.lblBar.value", WU.translation[WU.language]["Pressure"].." "..pression.." mb");
          fibaro:call(WU.selfId , "setProperty", "ui.lblWind.value", WU.translation[WU.language]["Wind"].." "..wind.." km/h");
          fibaro:setGlobal("V_Wind", wind)

Gruss
Carsten

Hi,

gib doch mal den Inhalt von wind aus:

fibaro:debug(wind)

Gruß

Hi boomx,
das Ergebnis ist 0.
Das ist aber merkwürdig, es kann doch nicht immer 0 sein.
Da scheint das WU Script wohl keinen Wert zu erhalten.

Ich glaube wir sind nah dran.

Gruss
Carsten

EDIT: Glaube das WU Script hat ein Problem.
Auf der Webseite steht eine Windgeschwindigkeit von 12km/h aber im Virtuellen Device wird 0 angezeigt.
Glaube im Moment daher auch das Problem.

Na super, jetzt kann ich meinen Beitrag nicht mehr bearbeiten.
Jetzt um 13:04 Uhr zeigt er an beim Debug 2.1 als Windgeschwindigkeit.

Das Sturmwarnungsscript zeigt aber immer noch an:
Line 18: Bad Argument #2 to ‚tonumber‘ (base out of range)

Hi,

die Zahl kann nicht in einen Integer gewandelt werden. Liegt an dem Inhalt (2.1). Ist das ein , oder ein .?

Gruß

Hi boomx,
er schreibt 2 (punkt) 1. In dem Virtuellen Modul von WU wird es auch als 2.1 angezeigt.
OK aber vergleichen muss man es ja trotzdem können.
Tonumber vergleicht nur ganze Zahlen ?

Gruss
Carsten

Hallo,
ich habe es hinbekommen mit der Abfrage. Es muss getGlobalValue und nicht getglobal abgefragt werden:
if ((tonumber(fibaro:getGlobalValue("V_Wind")) > tonumber(sturm))

Gruss
Carsten

Hallo Zusammen,
das Script lief bei mir ja nach einigen Problemen so mehr recht als schlecht, also habe ich noch mal ein wenig gebastelt
und so gefällt es mir nun.

Es lößt nur bei Sturm aus und ansonsten ist es ruhig.
Denke einiges hätte man besser oder einfacher machen können, aber bei den paar Kenntnissen die ich in LUA habe, freue ich mich das es klappt.

--[[
%% properties
75 wind
%% globals
V_Wind
--]]

local sturm = 62 -- km/h nach dem Sturm erkannt werden soll
local phoneID = {4} -- Handy-IDs
local maxID = 1000
fibaro:setGlobal('V_Wind', tonumber(string.format("%.0f", fibaro:getGlobalValue('V_Wind'))))
fibaro:debug(fibaro:getGlobalValue('V_Wind'))
fibaro:debug(sturm)

Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
 
local startSource = fibaro:getSourceTrigger();

if ((tonumber(fibaro:getGlobalValue('V_Wind')) > tonumber(sturm))
    and startSource['type'] == 'other') then
    if (startSource['type'] == 'other') then
     Debug('white', "SZENE MANUELL GESTARTET")
    else
     Debug('green', "SZENE DURCH WIND-VORHERSAGE GESTARTET")
    end
  	Debug('red', "ACHTUNG! Sturm erkannt. Geschwindigkeit: " ..fibaro:getGlobalValue('V_Wind').. " km/h")
  	Debug('white', "Prüfe offene Fenster")
  	for id = 1, maxID do
      local deviceType = fibaro:getType(id)
      if (deviceType == 'com.fibaro.windowSensor' or deviceType == 'com.fibaro.doorSensor') then
          if (tonumber(fibaro:getValue(id, 'value')) == 1) then
            local name = fibaro:getName(id) 
            local room = fibaro:getRoomNameByDeviceID(id) 
            Debug('red', "ACHTUNG! Sturm erkannt. " ..name.. " im Raum " ..room.. " ist offen!")
        	for k=1, maxID do
                      if phoneID[k] ~= nil then
                        fibaro:call(tonumber(phoneID[k]), 'sendPush', 'ACHTUNG: Sturm erkannt! ' ..name.. ' im Raum ' ..room.. ' ist offen!')
                      end
            end
          	end
        end
    end
end


Gruss
Carsten :slight_smile: