From bfc178481a71a321eb7198b819a32ce264315b9a Mon Sep 17 00:00:00 2001 From: XANTRONIX Industrial <xan@xantronix.com> Date: Fri, 28 Feb 2025 21:28:12 -0500 Subject: [PATCH] Start to parse individual values --- lib/xmet/rawins.py | 58 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 7 deletions(-) diff --git a/lib/xmet/rawins.py b/lib/xmet/rawins.py index 24d8164..5518227 100644 --- a/lib/xmet/rawins.py +++ b/lib/xmet/rawins.py @@ -15,20 +15,64 @@ class RawinsReaderException(Exception): class RawinsSample(): def __init__(self): - self.surface: bool = False - self.height: float = None - self.pressure: float = None - self.temp: float = None - self.dewpoint: float = None + self.surface: bool = False + self.height: float = None + self.pressure: float = None + self.temp: float = None + self.dewpoint: float = None + self.wind_dir: float = None + self.wind_speed: float = None class RawinsObs(): def __init__(self, kind: str): - self.kind: str = kind - self.values: list[str] = list() + self.kind: str = kind + self.timestamp: datetime.datetime = None + self.height: float = None + self.surface: float = None + self.values: list[str] = list() def read(self, value: str): self.values.append(value) + HEIGHTS = { + 'TTAA': lambda n: n * 100 + } + + def parse_timestamp(self, value: str): + day = int(value[0:2]) - 50 + hour = int(value[2:4]) + + now = datetime.datetime.now(datetime.UTC) + + self.timestamp = datetime.datetime( + year = now.year, + month = now.month, + day = day + ) + + self.height = self.HEIGHTS[self.kind](int(value[4])) + + def parse_surface(self, value: str): + if value[0:2] == '99': + self.surface = float(value[2:5]) + + def parse_temp_dewpoint(self, value: str): + tenths = int(value[2]) + sign = -1 if tenths % 1 == 0 else 1 + + 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 + + return { + 'temp': temp, + 'dewpoint': dewpoint + } + + def parse_ttaa(self): + pass + class RawinsChunk(): def __init__(self, wfo: str,