Compare commits
2 commits
221142a08e
...
aa2b18f3dd
Author | SHA1 | Date | |
---|---|---|---|
aa2b18f3dd | |||
78b1c0e5b6 |
1 changed files with 75 additions and 17 deletions
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue