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,