Anyway, thank you for helping me with this one!

For the record:

I have two pieces of hardware, one is using a classic anemometer with cups, 
the other one is an ultrasonic device. With very low wind speeds, the 
classic one shows zero wind, while the ultrasonic one shows low, but very 
plausible values. The ultrasonic one also doesn't freeze or gets blocked by 
snow, because is has a heating. On the other hand, the ultrasonic device 
often misses wind gusts and lacks accuracy in wet conditions.
In short, the closes approach to represent reality is: always use the 
values from the sensor, which is showing the higher reading. 
Also, the Wind direction of the ultrasonic device has a better resolution 
and no vane that sometimes doesn't move, even in wind speeds, the classic 
anemometer is rotating.
So the second thing is: always use windDir from the ultrasonic device. 

Both readings arrive in the same loop packet, their names are "windSpeed" 
and "ws90_windSpeed" (the latter ultrasonic), together with their gust 
speed and direction, except for situations, the sensor's data cannot be 
received by the console. So my first approach

[StdCalibrate]
    [[Corrections]]
        windSpeed = ws90_windSpeed if ws90 if ws90_windSpeed > windSpeed 
else windSpeed
        windGust = ws90_windGust if ws90_windGust > windGust else windGust
        windDir = ws90_windDir if ws90_windDir is not None else windDir

is working, but only in cases, both of the readings are present. 

Yesterday, windSpeed (from the classic device) was missing, where 
ws90_windSpeed was there. The result was, no windSpeed was recorded as at 
all, due to a python NameError, which was silently ignored. 

try:
event.record[obs_type] = eval(self.corrections[obs_type], {'math': math},
                                                  event.record)
    except (TypeError, NameError):
    pass

So, if this should work as intended, we need to check if windSpeed is 
there, or not.

What I want is to 

   - store whatever wind speed/gust is the higher, if both are present
   - store whatever wind speed/gust, when only one is present
   - store the ultrasonic wind direction if present, or else the other one

For now, I use these expressions, and the loop packets look good, and there 
shouldn't be a need to check for both being present:

[StdCalibrate]
    
    [[Corrections]]
        # For each type, an arbitrary calibration expression can be given.
        # It should be in the units defined in the StdConvert section.
        # Example:
        #foo = foo + 0.2
        windSpeed = ws90_windSpeed if 'windSpeed' not in locals() or 
ws90_windSpeed > windSpeed else windSpeed
        windGust = ws90_windGust if 'windGust' not in locals() or 
ws90_windGust > windGust else windGust
        windDir = ws90_windDir if 'ws90_windDir' in locals() and 
ws90_windDir is not None else windDir

I think this way I think I get my desired results, but after a long week my 
brain is a bit overloaded. So if anybody with cognitive capacities left 
could check if my expressions really make that much sense: very much 
appreciated :) 

[email protected] schrieb am Samstag, 9. März 2024 um 08:15:24 UTC+1:

> Actually
>
> *outTemp = 44 if outTemp in locals() else None*
>
>
> yields *None* when *outTemp * is there. 
>
> Since we are looking for the key '*outTemp' *and not it's value, our 
> expression needs to be:
>
> *outTemp = 44 if 'outTemp' in locals() else None*
>
>
>
> Tom Keffer schrieb am Samstag, 9. März 2024 um 03:22:24 UTC+1:
>
>> The facility uses the Python function eval 
>> <https://docs.python.org/3/library/functions.html#eval>. A dictionary 
>> with key 'math' and value the math module is passed in for *globals*. 
>> The record is passed in for *locals*. So, you could use the expression
>>
>> *outTemp = 44 if outTemp in locals() else None*
>>
>>
>>
>>
>> On Fri, Mar 8, 2024 at 3:33 PM Graham Eddy <[email protected]> wrote:
>>
>>> oops, python syntax would be: expr if ops_tye in globals() else None
>>> *⊣GE⊢*
>>>
>>> On 9 Mar 2024, at 10:31 am, Graham Eddy <[email protected]> wrote:
>>>
>>> i think ' if obs_type in globals() then expr else None ' would work
>>> *⊣GE⊢*
>>>
>>> On 9 Mar 2024, at 9:13 am, '[email protected]' via weewx-user <
>>> [email protected]> wrote:
>>>
>>> I think I remember that this has been asked before, how to check with an 
>>> expression in Corrections, if an obs_type is present? 
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "weewx-user" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/weewx-user/ae1bbcf8-23b1-475e-8749-62286df24fb0n%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/weewx-user/ae1bbcf8-23b1-475e-8749-62286df24fb0n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>>
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "weewx-user" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>>
>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/weewx-user/0507D046-7EED-4A96-8F28-038B70BECEC7%40geddy.au
>>>  
>>> <https://groups.google.com/d/msgid/weewx-user/0507D046-7EED-4A96-8F28-038B70BECEC7%40geddy.au?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"weewx-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-user/b50ddb1a-af97-4104-9e24-73b223bfc10fn%40googlegroups.com.

Reply via email to