I agree that, all things being equal, a driver should just pass it on; but this 
is not that case.

There won’t be any meaningful loss of precision for the double conversions. As 
such, the alternative, splitting into separate packets, is an unnecessary 
complication even without factoring in that StdWXCalculate might not be able to 
perform some calculations.

> On Mar 8, 2020, at 9:17 PM, Thomas Keffer <tkef...@gmail.com> wrote:
> 
> 
> Yes. A good driver makes minimal interpretations about the data it is seeing. 
> If possible, it should just pass it on.
> 
>> On Sun, Mar 8, 2020 at 9:03 PM John Kline <j...@johnkline.com> wrote:
>> This isn’t the general case.  I find it difficult to see the harm in 
>> converting to and fro for some cases.  Are you worried about loss of 
>> precision?
>> 
>>>> On Mar 8, 2020, at 8:45 PM, Thomas Keffer <tkef...@gmail.com> wrote:
>>>> 
>>> 
>>> As you concluded, it's generally best to keep the unit system as close to 
>>> the "native" unit system of the hardware as possible.
>>> 
>>> -tk
>>> 
>>>> On Sun, Mar 8, 2020 at 8:32 PM Bill Burton <bburton...@gmail.com> wrote:
>>>> Hello,
>>>> 
>>>>> On Sunday, March 8, 2020 at 4:01:53 PM UTC-4, John Kline wrote:
>>>>> Since you are writing the driver, have you considered performing the 
>>>>> necessary conversions so that the driver returns US or metric (i.e., one 
>>>>> or the other, not a mix)?
>>>> 
>>>> Yes, good question. I suppose it could be done that way picking one unit 
>>>> type for the packet and then converting all fields not in the same unit 
>>>> type. However, if the weather station is configured to return metric units 
>>>> but the driver is written to convert all fields to US/imperial but the 
>>>> archive database is configured to be metric, then there's a double 
>>>> conversion, metric -> US -> metric. So I was thinking if the fields 
>>>> returned by the driver are the original units returned by the weather 
>>>> station, then there's zero or one conversions to store archive records, 
>>>> never two conversions. 
>>>> 
>>>> -Bill
>>>> 
>>>>> 
>>>>>>> On Mar 8, 2020, at 12:57 PM, Bill Burton <bburt...@gmail.com> wrote:
>>>>>>> 
>>>>>> 
>>>>>> 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-de...@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.
>>>> 
>>>> -- 
>>>> 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/0d252600-cedb-4d9a-8902-b14028684e99%40googlegroups.com.
>>> 
>>> -- 
>>> 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/CAPq0zEAD_5VZ%2B54oLvhkZ7m1XeqDDJ0YHDdvvxvrXpL0J3FrOg%40mail.gmail.com.
> 
> -- 
> 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/CAPq0zEB4b%3DKjhmSL5A52OakiPURH8k1JzpijSCCrY9vNxJ83bg%40mail.gmail.com.

-- 
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/B8B0E54F-B06F-4986-B953-D1365EB7ABE0%40johnkline.com.

Reply via email to