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):
|
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])
|
hour = int(value[2:4])
|
||||||
|
|
||||||
now = datetime.datetime.now(datetime.UTC)
|
now = datetime.datetime.now(datetime.UTC)
|
||||||
|
@ -57,7 +60,7 @@ class RawinsObs():
|
||||||
'timestamp': datetime.datetime(
|
'timestamp': datetime.datetime(
|
||||||
year = now.year,
|
year = now.year,
|
||||||
month = now.month,
|
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):
|
def parse_temp_dewpoint(self, value: str):
|
||||||
tenths = int(value[2])
|
if value[2] == '/':
|
||||||
sign = -1 if tenths % 1 == 0 else 1
|
return {
|
||||||
|
'temp': None,
|
||||||
|
'dewpoint': None
|
||||||
|
}
|
||||||
|
|
||||||
temp = sign * 0.1 * float(value[0:3])
|
if value[0:2] == '//':
|
||||||
dda = int(value[3:5])
|
temp = None
|
||||||
dd = dda * 0.1 if dda <= 50 else dda - 50
|
else:
|
||||||
dewpoint = temp - dd
|
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 {
|
return {
|
||||||
'temp': temp,
|
'temp': temp,
|
||||||
|
@ -85,6 +101,9 @@ class RawinsObs():
|
||||||
base_speed = 0
|
base_speed = 0
|
||||||
base_dir = 0
|
base_dir = 0
|
||||||
|
|
||||||
|
if value == '=':
|
||||||
|
return
|
||||||
|
|
||||||
if value[2] == '1':
|
if value[2] == '1':
|
||||||
base_speed = 100
|
base_speed = 100
|
||||||
elif value[2] == '5':
|
elif value[2] == '5':
|
||||||
|
@ -93,9 +112,25 @@ class RawinsObs():
|
||||||
base_speed = 100
|
base_speed = 100
|
||||||
base_dir = 5
|
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 {
|
return {
|
||||||
'dir': float(value[0:3]) + base_dir,
|
'dir': wind_dir,
|
||||||
'speed': float(value[4:]) + base_speed
|
'speed': wind_speed
|
||||||
}
|
}
|
||||||
|
|
||||||
def parse_height_pressure(self, value: str):
|
def parse_height_pressure(self, value: str):
|
||||||
|
@ -123,7 +158,7 @@ class RawinsObs():
|
||||||
samples = list()
|
samples = list()
|
||||||
|
|
||||||
for i in range(2, len(self.values), 3):
|
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
|
break
|
||||||
|
|
||||||
samples.append({
|
samples.append({
|
||||||
|
@ -132,6 +167,9 @@ class RawinsObs():
|
||||||
'wind': self.parse_wind(self.values[i+2])
|
'wind': self.parse_wind(self.values[i+2])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if self.values[1][0:3] == 'NIL':
|
||||||
|
return None
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'timestamp': self.parse_timestamp(self.values[0]),
|
'timestamp': self.parse_timestamp(self.values[0]),
|
||||||
'station': int(self.values[1]),
|
'station': int(self.values[1]),
|
||||||
|
|
Loading…
Add table
Reference in a new issue