You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
3.3 KiB
Python

5 years ago
"""
Modul zum Umrechnen der US Einheiten aus Weewx in das Metrische System
Version 0.1
"""
import math
from typing import Optional, Union
def temperaturumrechner(fahrenheit: Optional[Union[int, float]]) -> Optional[float]:
"""
Umrechnung von Fahrenheit in Celsius
:param fahrenheit: int, float or None
:return: float or None
"""
if isinstance(fahrenheit, (int, float)):
celsius = (fahrenheit - 32) / 1.8
celsius = round(celsius, 2)
return celsius
else:
return None
def druckumrechner(inHG):
"""
Umwandlung von inHG in mBar
:param inHG: int, float or None
:return: float or None
"""
if isinstance(inHG, (int, float)):
mbar = inHG * 33.86389
mbar = round(mbar, 2)
return mbar
else:
return None
def himmelsrichtungwandler(grad):
"""
Umwandlung von Grad in Himmelsrichtung
von (>) bis (<=)
N 348,75 11,25
NNO 11,25 33,75
NO 33,75 56,25
ONO 56,25 78,75
O 78,75 101,25
OSO 101,25 123,75
SO 123,75 146,25
SSO 146,25 168,75
S 168,75 191,25
SSW 191,25 213,75
SW 213,75 236,25
WSW 236,25 258,75
W 258,75 281,25
WNW 281,25 303,75
NW 303,75 326,25
NNW 326,25 348,75
:param grad: float or None
:return: String or None
"""
if isinstance(grad, (int, float)):
richtung = ("N", "NNO", "NO", "ONO", "O", "OSO", "SO", "SSO", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW",
"N")
return richtung[int((int(grad / (360 / 32)) + 1) / 2)]
else:
return None
def windumrechner(wind):
"""
Umwandlung von milen pro std in km/h
:param wind: Int, float or None
:return: Float or None
"""
if isinstance(wind, (int, float)):
kmh = wind * 1.609346
kmh = round(kmh, 2)
return kmh
else:
return None
def regen_rate(wert):
"""
Umwandlung von Inch/h in mm/h
:param wert: Int, float or None
:return: Float or None
"""
if isinstance(wert, (int, float)):
regenrate = wert * 25.4
regenrate = round(regenrate, 2)
return regenrate
else:
return None
def regen_menge(wert):
"""
Umwandlung von Inch in mm
:param wert: Int, float or None
:return: Float or None
"""
if isinstance(wert, (int, float)):
regenmenge = wert * 25.4
regenmenge = round(regenmenge, 2)
return regenmenge
else:
return None
def magnus_formel_wasser(temperatur):
sattdampfdruck_wasser = 611.2 * math.e ** ((17.62 * temperatur) / (243.12 + temperatur))
return sattdampfdruck_wasser
def wasserdampf_partialdruck_berechnen(relative_feuchte, sattdampfdruck_wasser):
wasserdampf_partialdruck = (relative_feuchte/100) * sattdampfdruck_wasser
return wasserdampf_partialdruck
def celsius_in_kelvin(temperatur):
kelvin = temperatur + 273.15
return kelvin
def absolute_luftfeuchtigkeit(temperatur, relative_feuchte):
"""g/m³"""
if temperatur is None or relative_feuchte is None:
return
sattdampfdruck_wasser = magnus_formel_wasser(temperatur)
wasserdampf_partialdruck = wasserdampf_partialdruck_berechnen(relative_feuchte, sattdampfdruck_wasser)
kelvin = celsius_in_kelvin(temperatur)
abs_feuchte = round((wasserdampf_partialdruck / (461.51 * kelvin)) * 1000, 3)
return abs_feuchte