Allow complete parsing of TTAA data
This commit is contained in:
parent
78b1c0e5b6
commit
aa2b18f3dd
1 changed files with 49 additions and 11 deletions
|
@ -48,7 +48,10 @@ 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)
|
||||
|
@ -57,7 +60,7 @@ class RawinsObs():
|
|||
'timestamp': datetime.datetime(
|
||||
year = now.year,
|
||||
month = now.month,
|
||||
day = day
|
||||
day = day if day < 51 else day - 50
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -68,13 +71,26 @@ class RawinsObs():
|
|||
}
|
||||
|
||||
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,
|
||||
|
@ -85,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':
|
||||
|
@ -93,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):
|
||||
|
@ -123,7 +158,7 @@ class RawinsObs():
|
|||
samples = list()
|
||||
|
||||
for i in range(2, len(self.values), 3):
|
||||
if len(self.values) <= i+2:
|
||||
if len(self.values) <= i+2 or self.values[i][-1] == '=':
|
||||
break
|
||||
|
||||
samples.append({
|
||||
|
@ -132,6 +167,9 @@ class RawinsObs():
|
|||
'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]),
|
||||
|
|
Loading…
Add table
Reference in a new issue