Compare commits

...

2 commits

View file

@ -48,29 +48,49 @@ class RawinsObs():
}
def parse_timestamp(self, value: str):
day = int(value[0:2]) - 50
if value[0:2] == '//':
return None
day = int(value[0:2])
hour = int(value[2:4])
now = datetime.datetime.now(datetime.UTC)
self.timestamp = datetime.datetime(
year = now.year,
month = now.month,
day = day
)
return {
'timestamp': datetime.datetime(
year = now.year,
month = now.month,
day = day if day < 51 else day - 50
)
}
def parse_surface(self, value: str):
def parse_surface_pressure(self, value: str):
if value[0:2] == '99':
self.surface = float(value[2:5])
return {
'surface': float(value[2:5])
}
def parse_temp_dewpoint(self, value: str):
tenths = int(value[2])
sign = -1 if tenths % 1 == 0 else 1
if value[2] == '/':
return {
'temp': None,
'dewpoint': None
}
temp = sign * 0.1 * float(value[0:3])
dda = int(value[3:5])
dd = dda * 0.1 if dda <= 50 else dda - 50
dewpoint = temp - dd
if value[0:2] == '//':
temp = None
else:
tenths = int(value[2])
sign = -1 if tenths % 1 == 0 else 1
temp = sign * 0.1 * float(value[0:3])
if value[3:5] == '//':
dewpoint = None
else:
dda = int(value[3:5])
dd = dda * 0.1 if dda <= 50 else dda - 50
dewpoint = temp - dd
return {
'temp': temp,
@ -81,6 +101,9 @@ class RawinsObs():
base_speed = 0
base_dir = 0
if value == '=':
return
if value[2] == '1':
base_speed = 100
elif value[2] == '5':
@ -89,9 +112,25 @@ class RawinsObs():
base_speed = 100
base_dir = 5
if value[0:3] == '///':
return {
'dir': None,
'speed': None
}
if value[0:2] == '//':
wind_dir = None
else:
wind_dir = float(value[0:3]) + base_dir
if value[3:5] == '//':
wind_speed = None
else:
wind_speed = float(value[3:5]) + base_speed
return {
'dir': float(value[0:3]) + base_dir,
'speed': float(value[4:]) + base_speed
'dir': wind_dir,
'speed': wind_speed
}
def parse_height_pressure(self, value: str):
@ -116,7 +155,26 @@ class RawinsObs():
}
def parse_ttaa(self):
pass
samples = list()
for i in range(2, len(self.values), 3):
if len(self.values) <= i+2 or self.values[i][-1] == '=':
break
samples.append({
'pressure': self.parse_surface_pressure(self.values[i]),
'temp_dewp': self.parse_temp_dewpoint(self.values[i+1]),
'wind': self.parse_wind(self.values[i+2])
})
if self.values[1][0:3] == 'NIL':
return None
return {
'timestamp': self.parse_timestamp(self.values[0]),
'station': int(self.values[1]),
'samples': samples
}
class RawinsChunk():
def __init__(self,