===== Weather conditions and forecast functions =====
You must have Level2 [[level2:how_to_connect_webhmi_to_level2#services|weather forecasting service]] activated to use this function.
==== GetCurrentWeather() ====
The GetCurrentWeather function returns the current weather conditions at the WebHMI installation location. The data is being updated approximately every two hours. The service requires an Internet connection, an account in Level2 and a subscription to the weather forecast. The function is available since version 2.5.2400.
If for some reason the data has not been received, the value nil will be returned.
The function returns a table with the following fields:
^time | The time for which the weather data was received |
^text | A short textual description of the current weather|
^temperature | Air temperature in degrees Celsius|
^pressure | Atmospheric pressure in hPa|
^humidity | Relative air humidity in %|
^windDirection | The direction of the wind origin, metrological degrees (north— 0 degrees)|
^windSpeed | Wind speed in m/s|
^cloudness | Covering the sky with clouds as a percentage|
^rain | Precipitation (rain), in mm|
^snow | Precipitation (snow), in mm|
==== GetForecastWeather(interval) ====
The GetForecastWeather function returns the weather forecast at the WebHMI installation location to the specified interval. The data is updated approximately every two hours. The service requires an Internet connection, an account in Level2 and a subscription to the weather forecast. The function is available since version 2.5.2400.
If for some reason the data has not been received, the value nil will be returned.
The interval is a three-hour time interval in the future. From zero to 6. Total six intervals. Zero interval is the forecast in about 3 hours. The first interval is the forecast in six hours. Etc. The format of the returned data is identical to the function GetCurrentWeather.
An example of a simple program that turns on and off the warm floor before entering the store, depending on the weather conditions.
function main (userId)
local current = GetCurrentWeather();
local nextForecast = GetForecastWeather(0);
if (nextForecast.temperature > 6 and current.temperature > 6) then -- positive temperature
WriteReg(91, 0); -- turn anti-ice off
end
if (current.snow < 1 and nextForecast.snow < 1) then -- not snowing
WriteReg(91, 0); -- turn anti-ice off
end
if (current.cloudness < 20 and nextForecast.cloudness < 20) then -- clear
WriteReg(91, 0); -- turn anti-ice
end
if (current.snow > 2 or nextForecast.snow > 2) then -- it's snowing
WriteReg(91, 1); -- turn anti-ice on
end
end
==== GetSunriseTime(interval) ====
The function GetSunriseTime returns the time in the format Unixtime of the sunrise in the current day.
The service requires an Internet connection, an account in Level2 and a subscription to the weather forecast. The function is available since version 2.5.2400.
If for some reason the data has not been received, the value nil will be returned.
==== GetSunsetTime(interval) ====
The function GetSunsetTime returns the time in Unixtime format of sunset in the current day.
The service requires an Internet connection, an account in Level2 and a subscription to the weather forecast. The function is available since version 2.5.2400.
If for some reason the data has not been received, the value nil will be returned.
===== One more example =====
---------------------------- TIMER ----------------------------
fiveMinTimer = {}
setmetatable(fiveMinTimer, {
__call = function (self)
self.DELAY = 2
local t = os.date("*t")
local ifTimeBoundary = (t.min % self.DELAY == 0) and true or false
if (ifTimeBoundary and not self.lock) then
self.lock = true
return true
end
if (self.lock and not ifTimeBoundary) then
self.lock = false
DEBUG("released lock")
end
return false
end
})
---------------------------- MAIN ----------------------------
function main (userId)
if fiveMinTimer() then
weatherDemoLevel2()
end
end
---------------------------- HELPERS ---------------------------
-- invokes all functions related to weather
function weatherDemoLevel2()
local wdata = GetCurrentWeather()
tprint(wdata)
--[[
The GetCurrentWeather function returns the current weather conditions at the WebHMI installation location.
The data is being updated approximately every two hours. The service requires an Internet connection,
an account in Level2 and a subscription to the weather forecast. The function is available since version 2.5.2400.
If for some reason the data has not been received, the value nil will be returned.
--]]
wdata = GetForecastWeather(5)
tprint(wdata)
--[[
The GetForecastWeather function returns the weather forecast at the WebHMI installation location to the specified interval.
The data is updated approximately every two hours. The service requires an Internet connection, an account in Level2 and a
subscription to the weather forecast. The function is available since version 2.5.2400.
If for some reason the data has not been received, the value nil will be returned.
The interval is a three-hour time interval in the future. From zero to 6. Total six intervals. Zero interval is the forecast in about 3 hours. The first interval is the forecast in six hours. Etc. The format of the returned data is identical to the function GetCurrentWeather.
--]]
wdata = GetSunriseTime(4)
INFO(os.date("%X", wdata) )
--[[ The function GetSunriseTime returns the time in the format Unixtime of the sunrise in the current day. The service requires an
Internet connection, an account in Level2 and a subscription to the weather forecast. The function is available since version 2.5.2400.
If for some reason the data has not been received, the value nil will be returned.
--]]
wdata = GetSunsetTime(3)
INFO(os.date("%X", wdata) )
--[[ The function GetSunsetTime returns the time in Unixtime format of sunset in the current day.
The service requires an Internet connection, an account in Level2 and a subscription to the weather forecast.
The function is available since version 2.5.2400. If for some reason the data has not been received, the value nil will be returned.
--]]
end
-- prints a table
function tprint(t, indent)
if not indent then indent = 0 end
for k, v in pairs(t) do
local formatting = string.rep(' ', indent) .. k .. ': '
if type(v) == "table" then
ERROR(formatting)
tprint(v, indent + 1) -- recursive call
else
if type(v) == "boolean" then
v = v and "TRUE" or "FALSE"
end
ERROR(formatting .. v)
end
end
end