У себя громкость проговаривания в зависимости времени суток и округление реализовывал таким образом:
url = require("socket.url")
local t = os.date('*t')
local AV_DEV = 25
local LS_SID = "urn:micasaverde-com:serviceId:Sonos1"
local current_second = t.hour * 3600 + t.min * 60 -- number of sec since midnight
local morning = 5 * 3600 + 0 * 60 -- 05:00
local afternoon = 12 * 3600 + 0 * 60 -- 12:00
local evening = 18 * 3600 + 0 * 60 -- 18:00
local night = 0 * 3600 + 0 * 60 -- 00:00
local name = "" -- "Екатерина и Дмитрий"
Array = {}
Array["Light Drizzle"] = "не задано"
Array["Light Rain"] = "лёгкий дождь"
Array["Light Snow"] = "лёгкий снег"
Array["Light Snow Grains"] = "не задано"
Array["Light Ice Crystals"] = "не задано"
Array["Light Ice Pellets"] = "не задано"
Array["Light Hail"] = "не задано"
Array["Light Mist"] = "не задано"
Array["Light Fog"] = "не задано"
Array["Light Fog Patches"] = "не задано"
Array["Light Smoke"] = "не задано"
Array["Light Volcanic Ash"] = "не задано"
Array["Light Widespread Dust"] = "не задано"
Array["Light Sand"] = "не задано"
Array["Light Haze"] = "не задано"
Array["Light Spray"] = "не задано"
Array["Light Dust Whirls"] = "не задано"
Array["Light Sandstorm"] = "не задано"
Array["Light Low Drifting Snow"] = "не задано"
Array["Light Low Drifting Widespread Dust"] = "не задано"
Array["Light Low Drifting Sand"] = "не задано"
Array["Light Blowing Snow"] = "не задано"
Array["Light Blowing Widespread Dust"] = "не задано"
Array["Light Blowing Sand"] = "не задано"
Array["Light Rain Mist"] = "не задано"
Array["Light Rain Showers"] = "небольшой дождь"
Array["Light Snow Showers"] = "не задано"
Array["Light Snow Blowing Snow Mist"] = "не задано"
Array["Light Ice Pellet Showers"] = "не задано"
Array["Light Hail Showers"] = "не задано"
Array["Light Small Hail Showers"] = "не задано"
Array["Light Thunderstorm"] = "не задано"
Array["Light Thunderstorms and Rain"] = "небольшая гроза и дождь"
Array["Light Thunderstorms and Snow"] = "не задано"
Array["Light Thunderstorms and Ice Pellets"] = "не задано"
Array["Light Thunderstorms with Hail"] = "не задано"
Array["Light Thunderstorms with Small Hail"] = "не задано"
Array["Light Freezing Drizzle"] = "не задано"
Array["Light Freezing Rain"] = "не задано"
Array["Light Freezing Fog"] = "не задано"
Array["Heavy Drizzle"] = "не задано"
Array["Heavy Rain"] = "сильный дождь"
Array["Heavy Snow"] = "сильный снег"
Array["Heavy Snow Grains"] = "не задано"
Array["Heavy Ice Crystals"] = "не задано"
Array["Heavy Ice Pellets"] = "не задано"
Array["Heavy Hail"] = "не задано"
Array["Heavy Mist"] = "не задано"
Array["Heavy Fog"] = "не задано"
Array["Heavy Fog Patches"] = "не задано"
Array["Heavy Smoke"] = "не задано"
Array["Heavy Volcanic Ash"] = "не задано"
Array["Heavy Widespread Dust"] = "не задано"
Array["Heavy Sand"] = "не задано"
Array["Heavy Haze"] = "не задано"
Array["Heavy Spray"] = "не задано"
Array["Heavy Dust Whirls"] = "не задано"
Array["Heavy Sandstorm"] = "не задано"
Array["Heavy Low Drifting Snow"] = "не задано"
Array["Heavy Low Drifting Widespread Dust"] = "не задано"
Array["Heavy Low Drifting Sand"] = "не задано"
Array["Heavy Blowing Snow"] = "не задано"
Array["Heavy Blowing Widespread Dust"] = "не задано"
Array["Heavy Blowing Sand"] = "не задано"
Array["Heavy Rain Mist"] = "не задано"
Array["Heavy Rain Showers"] = "не задано"
Array["Heavy Snow Showers"] = "не задано"
Array["Heavy Snow Blowing Snow Mist"] = "не задано"
Array["Heavy Ice Pellet Showers"] = "не задано"
Array["Heavy Hail Showers"] = "не задано"
Array["Heavy Small Hail Showers"] = "не задано"
Array["Heavy Thunderstorm"] = "не задано"
Array["Heavy Thunderstorms and Rain"] = "не задано"
Array["Heavy Thunderstorms and Snow"] = "не задано"
Array["Heavy Thunderstorms and Ice Pellets"] = "не задано"
Array["Heavy Thunderstorms with Hail"] = "не задано"
Array["Heavy Thunderstorms with Small Hail"] = "не задано"
Array["Heavy Freezing Drizzle"] = "не задано"
Array["Heavy Freezing Rain"] = "не задано"
Array["Heavy Freezing Fog"] = "не задано"
Array["Patches of Fog"] = "не задано"
Array["Shallow Fog"] = "стелющийся туман"
Array["Partial Fog"] = "не задано"
Array["Overcast"] = "сплошная облачность"
Array["Clear"] = "ясно"
Array["Partly Cloudy"] = "переменная облачность"
Array["Mostly Cloudy"] = "большая облачность"
Array["Scattered Clouds"] = "перистые облака"
Array["Small Hail"] = "не задано"
Array["Squals"] = "не задано"
Array["Funnel Cloud"] = "не задано"
local word = luup.variable_get("urn:upnp-micasaverde-com:serviceId:Weather1", "Condition", 26)
local TEMP_SID = "urn:upnp-org:serviceId:TemperatureSensor1"
local PING_SID = "urn:micasaverde-com:serviceId:SecuritySensor1"
local WUGTemp1 = math.floor(luup.variable_get(TEMP_SID, "CurrentTemperature", 27)) -- округление до целого
local WUGTempMIN = math.floor(luup.variable_get(TEMP_SID, "CurrentTemperature", 28)) -- округление до целого
local WUGTempMAX = math.floor(luup.variable_get(TEMP_SID, "CurrentTemperature", 29)) -- округление до целого
local hasbend = luup.variable_get(PING_SID, "Tripped", 21)
local wife = luup.variable_get(PING_SID, "Tripped", 22)
local valeria = luup.variable_get(PING_SID, "Tripped", 112)
if (hasbend == "1") and (wife == "0") and (valeria == "0") then name = "Дмитрий" end
if (hasbend == "0") and (wife == "1") and (valeria == "0") then name = "Екатерина" end
if (hasbend == "0") and (wife == "0") and (valeria == "1") then name = "Валерия" end
if (tonumber(WUGTemp1) > 0) then WUGTemp1 = "плюс " .. WUGTemp1 end
if (tonumber(WUGTempMIN) > 0) then WUGTempMIN = "плюс " .. WUGTempMIN end
if (tonumber(WUGTempMAX) > 0) then WUGTempMAX = "плюс " .. WUGTempMAX end
if (current_second > morning) and (current_second < afternoon) then
luup.call_action(LS_SID, "Say", {Text = string.format("Доброе утро, %s! На улице сейчас %s. %s. В течение дня: %s. Ночью %s.", name, WUGTemp1, Array[word], WUGTempMAX, WUGTempMIN), Language="ru", Volume=25}, AV_DEV)
elseif (current_second > afternoon) and (current_second < evening) then
luup.call_action(LS_SID, "Say", {Text = string.format("Добрый день, %s! На улице сейчас %s. %s. Ночью: %s. Завтра днём %s.", name, WUGTemp1, Array[word], WUGTempMIN, WUGTempMAX), Language="ru", Volume=40}, AV_DEV)
elseif (current_second > night) and (current_second < morning) then
luup.call_action(LS_SID, "Say", {Text = string.format("Доброй ночи, %s! На улице сейчас %s. %s. Ночью %s, завтра днём %s.", name, WUGTemp1, Array[word], WUGTempMIN, WUGTempMAX), Language="ru", Volume=25}, AV_DEV)
else
luup.call_action(LS_SID, "Say", {Text = string.format("Добрый вечер, %s! На улице сейчас %s. %s. Ночью %s, завтра днём %s.", name, WUGTemp1, Array[word], WUGTempMIN, WUGTempMAX), Language="ru", Volume=30}, AV_DEV)
end