Files
DevOps/Kodi/Lenovo/addons/weather.openmeteo/lib/conv.py
2025-10-25 13:21:06 +02:00

385 lines
8.0 KiB
Python

from . import utils
from . import config
# Time
def time(unit, value):
content = ''
if unit == 'timeiso':
data = utils.dt('isoloc', value)
else:
data = utils.dt('stamploc', value)
# Hour
if config.kodi.meri != '/':
content += str(int(data.strftime('%I')))
else:
content += str(int(data.strftime('%H')))
# Minute
if unit.startswith('time'):
content += data.strftime(':%M')
# Meri
if config.kodi.meri != '/':
content += data.strftime('%p')
return content
# Temperature
def tempconv(value, unit, kodi=False):
if value is not False:
value = float(value)
if unit == '°F':
v = value * 1.8 + 32
elif unit == 'K':
v = value + 273.15
elif unit == '°Ré':
v = value * 0.8
elif unit == '°Ra':
v = value * 1.8 + 491.67
elif unit == '°Rø':
v = value * 0.525 + 7.5
elif unit == '°D':
v = value / -0.667 + 150
elif unit == '°N':
v = value * 0.33
else:
v = value
if config.addon.tempdp == '0' or kodi is True:
return round(v)
else:
if config.addon.unitsep == ',':
return str(round(v,int(config.addon.tempdp))).replace('.',',')
else:
return round(v,int(config.addon.tempdp))
else:
if unit == '°F':
v = '°F'
elif unit == 'K':
v = 'K'
elif unit == '°Ré':
v = '°Ré'
elif unit == '°Ra':
v = '°Ra'
elif unit == '°Rø':
v = '°Rø'
elif unit == '°D':
v = '°D'
elif unit == '°N':
v = '°N'
else:
v = '°C'
return v
def temp(value=False, kodi=False):
if config.addon.temp == 'app' or kodi is True:
return tempconv(value, config.kodi.temp, kodi)
else:
return tempconv(value, config.addon.temp)
# Speed
def beaufort(value):
value = int(value)
if (value < 1.0):
v = '0'
elif (value >= 1.0) and (value < 5.6):
v = '1'
elif (value >= 5.6) and (value < 12.0):
v = '2'
elif (value >= 12.0) and (value < 20.0):
v = '3'
elif (value >= 20.0) and (value < 29.0):
v = '4'
elif (value >= 29.0) and (value < 39.0):
v = '5'
elif (value >= 39.0) and (value < 50.0):
v = '6'
elif (value >= 50.0) and (value < 62.0):
v = '7'
elif (value >= 62.0) and (value < 75.0):
v = '8'
elif (value >= 75.0) and (value < 89.0):
v = '9'
elif (value >= 89.0) and (value < 103.0):
v = '10'
elif (value >= 103.0) and (value < 118.0):
v = '11'
elif (value >= 118.0):
v = '12'
else:
v = ''
return v
def speedconv(value, unit):
if value is not False:
value = float(value)
if unit == 'mph':
v = value / 1.609344
elif unit == 'm/min':
v = value * 16,667
elif unit == 'm/s':
v = value / 3.6
elif unit == 'ft/h':
v = value * 3281
elif unit == 'ft/min':
v = value * 54.681
elif unit == 'ft/s':
v = value / 1.0971
elif unit == 'kts':
v = value / 1.852
elif unit == 'beaufort':
v = beaufort(value)
elif unit == 'inch/s':
v = value * 10.936
elif unit == 'yard/s':
v = value / 3.292
elif unit == 'Furlong/Fortnight':
v = value * 1670
else:
v = value
if config.addon.speeddp == '0':
return round(v)
else:
if config.addon.unitsep == ',':
return str(round(v,int(config.addon.speeddp))).replace('.',',')
else:
return round(v,int(config.addon.speeddp))
else:
if unit == 'mph':
v = 'mph'
elif unit == 'm/min':
v = 'm/min'
elif unit == 'm/s':
v = 'm/s'
elif unit == 'ft/h':
v = 'ft/h'
elif unit == 'ft/min':
v = 'ft/min'
elif unit == 'ft/s':
v = 'ft/s'
elif unit == 'kts':
v = 'kts'
elif unit == 'beaufort':
v = 'beaufort'
elif unit == 'inch/s':
v = 'inch/s'
elif unit == 'yard/s':
v = 'yard/s'
elif unit == 'Furlong/Fortnight':
v = 'Furlong/Fortnight'
else:
v = 'km/h'
return v
def speed(value=False, kodi=False):
if config.addon.speed == 'app' or kodi is True:
return speedconv(value, config.kodi.speed)
else:
return speedconv(value, config.addon.speed)
# Direction
def direction(deg):
if deg >= 349 or deg <= 11:
return utils.loc(71)
elif deg >= 12 and deg <= 33:
return utils.loc(72)
elif deg >= 34 and deg <= 56:
return utils.loc(73)
elif deg >= 57 and deg <= 78:
return utils.loc(74)
elif deg >= 79 and deg <= 101:
return utils.loc(75)
elif deg >= 102 and deg <= 123:
return utils.loc(76)
elif deg >= 124 and deg <= 146:
return utils.loc(77)
elif deg >= 147 and deg <= 168:
return utils.loc(78)
elif deg >= 169 and deg <= 191:
return utils.loc(79)
elif deg >= 192 and deg <= 213:
return utils.loc(80)
elif deg >= 214 and deg <= 236:
return utils.loc(81)
elif deg >= 237 and deg <= 258:
return utils.loc(82)
elif deg >= 259 and deg <= 281:
return utils.loc(83)
elif deg >= 282 and deg <= 303:
return utils.loc(84)
elif deg >= 304 and deg <= 326:
return utils.loc(85)
elif deg >= 327 and deg <= 348:
return utils.loc(86)
# Distance
def distanceconv(value, unit):
if value is not False:
value = float(value)
if unit == 'km':
v = value / 1000
elif unit == 'mi':
v = value / 1609
else:
v = value
if config.addon.distancedp == '0':
return round(v)
else:
if config.addon.unitsep == ',':
return str(round(v,int(config.addon.distancedp))).replace('.',',')
else:
return round(v,int(config.addon.distancedp))
else:
if unit == 'km':
v = 'km'
elif unit == 'mi':
v = 'mi'
else:
v = 'm'
return v
def distance(value=False):
return distanceconv(value, config.addon.distance)
# Precipitation
def precipconv(value, unit):
if value is not False:
value = float(value)
if unit == 'in':
v = value * 0.039
else:
v = value
if config.addon.precipdp == '0':
return round(v)
else:
if config.addon.unitsep == ',':
return str(round(v,int(config.addon.precipdp))).replace('.',',')
else:
return round(v,int(config.addon.precipdp))
else:
if unit == 'in':
v = 'in'
else:
v = 'mm'
return v
def precip(value=False):
return precipconv(value, config.addon.precip)
# Pressure
def pressureconv(value, unit):
if value is not False:
value = float(value)
if unit == 'kPa':
v = value * 0.1
elif unit == 'mmHg':
v = value * 0.7500637554
elif unit == 'inHg':
v = value * 0.02953
elif unit == 'psi':
v = value * 0.0145037738
else:
v = value
if config.addon.pressuredp == '0':
return round(v)
else:
if config.addon.unitsep == ',':
return str(round(v,int(config.addon.pressuredp))).replace('.',',')
else:
return round(v,int(config.addon.pressuredp))
else:
if unit == 'kPa':
v = 'kPa'
elif unit == 'mmHg':
v = 'mmHg'
elif unit == 'inHg':
v = 'inHg'
elif unit == 'psi':
v = 'psi'
else:
v = 'hPa'
return v
def pressure(value=False):
return pressureconv(value, config.addon.pressure)
# Decimal places
def dp(value, setting):
value = float(value)
if setting == '0':
return round(value)
else:
if config.addon.unitsep == ',':
return str(round(value, int(setting))).replace('.',',')
else:
return round(value, int(setting))
# Moonphase
def moonphase(deg):
if deg == 358 or deg == 359 or deg == 0 or deg == 1 or deg == 2:
return utils.locaddon(32440)
elif deg >= 3 and deg <= 87:
return utils.locaddon(32441)
elif deg == 88 or deg == 89 or deg == 90 or deg == 91 or deg == 92:
return utils.locaddon(32442)
elif deg >= 93 and deg <= 177:
return utils.locaddon(32443)
elif deg == 178 or deg == 179 or deg == 180 or deg == 181 or deg == 182:
return utils.locaddon(32444)
elif deg >= 183 and deg <= 267:
return utils.locaddon(32445)
elif deg == 268 or deg == 269 or deg == 270 or deg == 271 or deg == 272:
return utils.locaddon(32446)
elif deg >= 273 and deg <= 357:
return utils.locaddon(32447)
def moonphaseimage(deg):
if deg == 358 or deg == 359 or deg == 0 or deg == 1 or deg == 2:
return '0.png'
elif deg >= 3 and deg <= 87:
return '1.png'
elif deg == 88 or deg == 89 or deg == 90 or deg == 91 or deg == 92:
return '2.png'
elif deg >= 93 and deg <= 177:
return '3.png'
elif deg == 178 or deg == 179 or deg == 180 or deg == 181 or deg == 182:
return '4.png'
elif deg >= 183 and deg <= 267:
return '5.png'
elif deg == 268 or deg == 269 or deg == 270 or deg == 271 or deg == 272:
return '6.png'
elif deg >= 273 and deg <= 357:
return '7.png'