matthewwall / weewx-sdr

weewx driver for software-defined radio
GNU General Public License v3.0
114 stars 74 forks source link

Fineoffset-WH32 #163

Open mfraser opened 2 years ago

mfraser commented 2 years ago

I have just purchased a WH32 outdoor sensor. It responds as: {"time" : "2022-08-19 21:34:58", "model" : "Fineoffset-WH32", "id" : 1 3, "battery_ok" : 1, "temperature_C" : 26.200, "humidity" : 55, "mic" : "CRC" }

Is this the same as the WH32B?

sandeen commented 3 months ago

I have one too, and I think the only difference is the lack of the "B" on the Model string .I just cloned the existing WH32B class and edited out the B in sdr.py, but you could probably just as easily edit class FOWH32BPacket(Packet): to remove the "B" everywhere. I should send a pull request ... ;) (edit: should probably remove pressure, too, as this device doesn't sent pressure as far as I know)

--- /usr/share/weewx/user/sdr.py    2023-08-23 12:51:27.106343593 -0500
+++ /etc/weewx/bin/user/sdr.py  2024-05-26 17:43:50.048720047 -0500
@@ -1604,6 +1604,41 @@
         return Packet.add_identifiers(pkt, station_id, FOWH32BPacket.__name__)

+class FOWH32Packet(Packet):
+    # This is for a WH32 which is the indoors sensor array for an Ambient
+    # Weather WS-2902A. The same sensor array is used for several models.
+
+    # time      : 2019-04-08 00:48:02
+    # model     : Fineoffset-WH32
+    # ID        : 146
+    # Temperature: 17.5 C
+    # Humidity  : 60 %
+    # Pressure  : 1001.2 hPa
+    # Battery   : OK
+    # Integrity : CHECKSUM
+
+    # {"time" : "2024-05-26 20:23:03", "model" : "Fineoffset-WH32", "id" : 172, "battery_ok" : 1, "temperature_C" : 21.900, "humidity" : 60, "mic" : "CRC"}
+
+
+    IDENTIFIER = "Fineoffset-WH32"
+
+    @staticmethod
+    def parse_json(obj):
+        pkt = dict()
+        pkt['dateTime'] = Packet.parse_time(obj.get('time'))
+        pkt['usUnits'] = weewx.METRIC
+        pkt['station_id'] = obj.get('id')
+        pkt['temperature'] = Packet.get_float(obj, 'temperature_C')
+        pkt['humidity'] = Packet.get_float(obj, 'humidity')
+        pkt['battery'] = 0 if obj.get('battery') == 'OK' else 1
+        return FOWH32Packet.insert_ids(pkt)
+
+    @staticmethod
+    def insert_ids(pkt):
+        station_id = pkt.pop('station_id', '0000')
+        return Packet.add_identifiers(pkt, station_id, FOWH32Packet.__name__)
+
+
 class FOWH5Packet(Packet):
     # {"time" : "2019-10-27 14:51:21", "model" : "Fine Offset WH5 sensor", "id" : 48, "temperature_C" : 11.700, "humidity" : 62, "mic" : "CRC"}