Hello, I'm implementing a driver for the Columbia Weather Systems MicroServer that supports a variety of their weather stations including the Pulsar 600. So far I have the driver polling the station reliably under WeeWX 3.9.2 under Python 2.7 and 4.0.0b13 under Python 3.6.
However, the issue I'm trying to resolve is the station can return a mix of US and metric units for the different fields yet a loop packet can only return one unit type. So, what is the best way to return a record that could be a mix of unit types? Note that I'm requesting the extended XML format which returns the unit type for each field. The following are examples of these records, first US/Imperial followed by an all metric record: <oriondata version='1.1' station='US Units 1 formatted'> <meas name='mtSampTime'>2020/02/18 03:17:09</meas> <meas name='mtTemp1' unit='degreeF' >7.7</meas> <meas name='mtWindChill' unit='degreeF' >7.7</meas> <meas name='mtHeatIndex' unit='degreeF' >8.0</meas> <meas name='mtDewPoint' unit='degreeF' >0.4</meas> <meas name='mtDegreeDay' unit='degreeF' >5237.3</meas> <meas name='mtDensityAltitude' unit='feetAlt' >-3759</meas> <meas name='mtAvgTempToday' unit='degreeF' >9.0</meas> <meas name='mtWetBulbGlobeTemp' unit='degreeF' >26.4</meas> <meas name='mtSaturatedVaporPressure' unit='inchesHg' >0.06</meas> <meas name='mtVaporPressure' unit='inchesHg' >0.05</meas> <meas name='mtDryAirPressure' unit='inchesHg' >30.05</meas> <meas name='mtDryAirDensity' unit='poundsPerFt3' >0.0853</meas> <meas name='mtAbsoluteHumidity' unit='poundsPerFt3' >0.0001</meas> <meas name='mtAirDensityRatio' unit='percent' >1</meas> <meas name='mtAdjustedAltitude' unit='feetAlt' >-3298</meas> <meas name='mtSAECorrectionFactor'>0.908</meas> <meas name='mtWetAirDensity' unit='poundsPerFt3' >0.0854</meas> <meas name='mtWetBulbTemp' unit='degreeF' >7.7</meas> <meas name='mtEvapotranspiration' unit='inchesRain' >0.0049</meas> <meas name='mtRelHumidity' unit='percent' >71</meas> <meas name='mtWindSpeed' unit='mph' >0.4</meas> <meas name='mtRawWindDir' unit='degrees' >0</meas> <meas name='mtAdjWindDir' unit='degrees' >0</meas> <meas name='mt3SecRollAvgWindSpeed' unit='mph' >0.4</meas> <meas name='mt3SecRollAvgWindDir' unit='degrees' >0</meas> <meas name='mt2MinRollAvgWindSpeed' unit='mph' >0.6</meas> <meas name='mt2MinRollAvgWindDir' unit='degrees' >346</meas> <meas name='mt10MinRollAvgWindSpeed' unit='mph' >0.8</meas> <meas name='mt10MinRollAvgWindDir' unit='degrees' >31</meas> <meas name='mt60MinRollAvgWindSpeed' unit='mph' >0.9</meas> <meas name='mt60MinRollAvgWindDir' unit='degrees' >60</meas> <meas name='mt60MinWindGustDir' unit='degrees' >244</meas> <meas name='mt60MinWindGustSpeed' unit='mph' >3.0</meas> <meas name='mt60MinWindGustTime'>2020/02/18 02:46:45</meas> <meas name='mt10MinWindGustDir' unit='degrees' >134</meas> <meas name='mt10MinWindGustSpeed' unit='mph' >1.8</meas> <meas name='mt10MinWindGustTime'>2020/02/18 03:11:33</meas> <meas name='mt2MinWindGustDir' unit='degrees' >294</meas> <meas name='mt2MinWindGustSpeed' unit='mph' >1.4</meas> <meas name='mt2MinWindGustTime'>2020/02/18 03:16:01</meas> <meas name='mtRainToday' unit='inchesRain' >0.0000</meas> <meas name='mtRainThisWeek' unit='inchesRain' >0.0031</meas> <meas name='mtRainThisMonth' unit='inchesRain' >0.6756</meas> <meas name='mtRainThisYear' unit='inchesRain' >3.0556</meas> <meas name='mtRainRate' unit='inchesPerHour' >0.0000</meas> <meas name='mtRainLastHr' unit='inchesPerHour' >0.0000</meas> <meas name='mtPrecipType'>0.000</meas> <meas name='mtRawBaromPress' unit='inchesHg' >30.09</meas> <meas name='mtAdjBaromPress' unit='inchesHg' >30.09</meas> <meas name='mtPressureTendency' unit='unitless_0' >0</meas> <meas name='mtTemp_2' unit='degreeF' >32.8</meas><!-- water temp --> </oriondata> <oriondata version='1.1' station='Metric Units 1 formatted'> <meas name='mtSampTime'>2020/02/18 03:19:25</meas> <meas name='mtWindChill' unit='degreeC' >-17.8</meas> <meas name='mtDegreeDay' unit='degreeC' >2891.8</meas> <meas name='mtAvgTempToday' unit='degreeC' >-12.8</meas> <meas name='mtEvapotranspiration' unit='mmRain' >-0.041</meas> <meas name='mtWindSpeed' unit='kmPerHour' >2.8</meas> <meas name='mtRawWindDir' unit='degrees' >101</meas> <meas name='mtAdjWindDir' unit='degrees' >101</meas> <meas name='mt3SecRollAvgWindSpeed' unit='kmPerHour' >2.7</meas> <meas name='mt3SecRollAvgWindDir' unit='degrees' >98</meas> <meas name='mt2MinRollAvgWindSpeed' unit='kmPerHour' >1.5</meas> <meas name='mt2MinRollAvgWindDir' unit='degrees' >155</meas> <meas name='mt10MinRollAvgWindSpeed' unit='kmPerHour' >1.4</meas> <meas name='mt10MinRollAvgWindDir' unit='degrees' >80</meas> <meas name='mt60MinRollAvgWindSpeed' unit='kmPerHour' >1.5</meas> <meas name='mt60MinRollAvgWindDir' unit='degrees' >62</meas> <meas name='mt60MinWindGustDir' unit='degrees' >100</meas> <meas name='mt60MinWindGustSpeed' unit='kmPerHour' >2.8</meas> <meas name='mt60MinWindGustTime'>2020/02/18 03:19:25</meas> <meas name='mt10MinWindGustDir' unit='degrees' >100</meas> <meas name='mt10MinWindGustSpeed' unit='kmPerHour' >2.8</meas> <meas name='mt10MinWindGustTime'>2020/02/18 03:19:25</meas> <meas name='mt2MinWindGustDir' unit='degrees' >100</meas> <meas name='mt2MinWindGustSpeed' unit='kmPerHour' >2.8</meas> <meas name='mt2MinWindGustTime'>2020/02/18 03:19:25</meas> <meas name='mtRainToday' unit='mmRain' >0.000</meas> <meas name='mtRainThisWeek' unit='mmRain' >0.000</meas> <meas name='mtRainThisMonth' unit='mmRain' >17.018</meas> <meas name='mtRainThisYear' unit='mmRain' >77.470</meas> <meas name='mtRainRate' unit='mmPerHour' >0.000</meas> <meas name='mtRainLastHr' unit='mmPerHour' >0.000</meas> <meas name='mtPressureTendency' unit='unitless_0' >0</meas> </oriondata> My first inclination is to split up the fields into separate loop packets - one packet for US/Imperial measurements and a second packet for metric measurements then yield each one depending on availability. Does this sound like a reasonable approach or is there a better one? However, some conversions will be required for metric as some measurements such as wind speed can be returned in different units being one of kph or meters per second. Otherwise, wind speed could be returned as mph or knots. One issue is I haven't been able to find any definitive documentation as to all the fields a driver is supposed to output and what units are expected for US vs. metric packets. So any pointers on fields and their definitions would be helpful. If there are any existing drivers that handle a mixture of units in a similar way that I could reference, that would be very helpful to know. Thanks for any input, -Bill -- You received this message because you are subscribed to the Google Groups "weewx-development" group. To unsubscribe from this group and stop receiving emails from it, send an email to weewx-development+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/weewx-development/1142ae3a-c6c4-47d6-af01-33de21b2d5fd%40googlegroups.com.