It would return None - no value is present for that query's results.

A quick grep of an installed v5 shows NaN is never even referenced other 
than in a comment or two.

(from https://www.datacamp.com/tutorial/python-nan-missing-values-in-python#)
*"NaN is a floating-point representation of "Not a Number," used primarily 
in numerical computations. None, on the other hand, is Python's object 
representing the absence of a value akin to null in other languages. 
While NaN is used in mathematical or scientific computations, None is more 
general-purpose, indicating the lack of data."*

On Saturday, May 4, 2024 at 2:20:50 PM UTC-7 Joel Bion wrote:

> I guess this is as good a time as any to ask if None is the way Weewx 
> represents a nonexistent element of data for the result of a query to any 
> of its API functions. For example, if I want the barometric pressure at 
> 9am, and no pressure was recorded around that time, is it None that would 
> be returned?
>
> Is there ever a case where (like in some other Python packages) NaN is 
> used? 
>
>
> Sent from my iPhone
>
> On May 4, 2024, at 2:05 PM, Michael Frotscher <[email protected]> wrote:
>
> Admittedly more elegant, thanks!
>
> Like I said, I'm still getting into Python, so I wasn't aware one could 
> apply get() here.
> I usually have a fair understanding of what code does and can generate 
> pseudocode of what I want, but implementing that in proper Python code is 
> what I struggle with.
>
> On Saturday, May 4, 2024 at 2:59:47 PM UTC-5 Tom Keffer wrote:
>
>> Or, combining into one step...
>>
>> if event.record.get('rain') is not None:
>>     do something
>>
>>
>>
>> On Sat, May 4, 2024 at 11:58 AM Michael Frotscher <[email protected]> 
>> wrote:
>>
>>> That did it, thanks, Frantisek!
>>> I now check that if 'rain' is in event.record, then check if it is 
>>> non-Null, and if those two conditions are true, 'rain' has a valid value 
>>> and I can use it for arithmetic.
>>>
>>> On Saturday, May 4, 2024 at 4:17:10 AM UTC-5 František Slimařík wrote:
>>>
>>>> Hello,
>>>>
>>>> event.record is dictionary. If you do event.record["rain" ] = something 
>>>> you add new key/value into dictionary (if doesn´t exists or overwrite 
>>>> current value). In case packet doesn´t contain no value for rain, 
>>>> key/value 
>>>> pair is not added. If you do something and you are not sure if key exist 
>>>> in 
>>>> dictionary you should do:
>>>>
>>>> if "rain" in event.record:
>>>>   do_something
>>>>
>>>>
>>>> pá 3. 5. 2024 v 21:31 odesílatel Michael Frotscher <[email protected]> 
>>>> napsal:
>>>>
>>>>> Even more unexpected, it seems I can write to those "undefined" 
>>>>> variables, but trying to read them gives me a Key Error.
>>>>> I have created a new field in the database called "raintotal", where I 
>>>>> want to store the running total of the rainfall.
>>>>> Trying to test this for being "None", gives:
>>>>> CRITICAL __main__:     ****      if event.record['raintotal'] == None: 
>>>>> CRITICAL __main__:     ****         ~~~~~~~~~~~~^^^^^^^^^^^^^ 
>>>>> CRITICAL __main__:     ****  KeyError: 'raintotal' 
>>>>> CRITICAL __main__:     ****  Exiting.
>>>>>
>>>>> But if I just write to it:
>>>>>
>>>>> event.record['raintotal'] = 12345
>>>>>
>>>>> That ends up in the database and doesn't throw an error.
>>>>>
>>>>> On Friday, May 3, 2024 at 2:06:22 PM UTC-5 Michael Frotscher wrote:
>>>>>
>>>>>> Same here, 'rain' is None unless it's raining, then it'll show data. 
>>>>>> I haven't checked the raw packets, but in the archive table the numbers 
>>>>>> are 
>>>>>> all multiples of my tipping bucket size, so that all makes sense.
>>>>>> That's why I added the "check for Null/None" if-clause.
>>>>>> But to be populated with data, 'rain' has to be defined. And weewx 
>>>>>> crashes on that 
>>>>>> if event.record['rain'] != None:
>>>>>> clause. Do I need to check for a packet? like event.package?
>>>>>> On Friday, May 3, 2024 at 12:29:38 PM UTC-5 František Slimařík wrote:
>>>>>>
>>>>>>> I believe "rain" is specific in this case. I was checking raw 
>>>>>>> packets previously on my device and normally is rain "none" if it´s not 
>>>>>>> raining ;) So it depends what your device is sending to weewx.
>>>>>>>
>>>>>>> raw packet: {'dateTime': 1642794129, 'usUnits': 1, 'rain_total': 
>>>>>>> 0.0, 'barometer': 30.22, 'temperature_out': 28.7, 'dewpoint': 20.1, 
>>>>>>> 'humidity_out': 69.0, 'wind_speed': 2.6, 'wind_gust': 2.6, 'wind_dir': 
>>>>>>> 268.0, 'solar_radiation': 0.0, 'uv': 0.0, 'temperature_in': 70.1, 
>>>>>>> 'humidity_in': 51.0, 'rain': None}
>>>>>>>
>>>>>>> pá 3. 5. 2024 v 15:37 odesílatel Michael Frotscher <
>>>>>>> [email protected]> napsal:
>>>>>>>
>>>>>>>> Hmm,
>>>>>>>> ok, so it works for "pressure", which contains data in every 
>>>>>>>> archive period and is not None.
>>>>>>>> I've tried to substitute that with "rain", which is what I really 
>>>>>>>> want. That is usually "Null/None" in the database, but gets the amount 
>>>>>>>> of a 
>>>>>>>> bucket tip added to it every time that happens.
>>>>>>>> It is fed by MQTT, which publishes the bucket amount on every tip, 
>>>>>>>> and that works. It even sums them up correctly if several bucket tips 
>>>>>>>> occur 
>>>>>>>> in an archive period.
>>>>>>>>
>>>>>>>> However, trying to retrieve that with "if event.record['rain'] != 
>>>>>>>> None:"
>>>>>>>> I get a Key Error. Meaning the variable doesn't exist. Isn't every 
>>>>>>>> weewx measurement in the dictionary?
>>>>>>>> That happens with any measurement that's in the database but 
>>>>>>>> normally "Null".
>>>>>>>>
>>>>>>>> I've tried to define it as Null/None in the init-part of the 
>>>>>>>> service 
>>>>>>>> rain = None
>>>>>>>>
>>>>>>>> But still get the key error.
>>>>>>>>
>>>>>>>> Thanks!
>>>>>>>> On Friday, May 3, 2024 at 7:30:12 AM UTC-5 Michael Frotscher wrote:
>>>>>>>>
>>>>>>>>> Thanks, guys!
>>>>>>>>> I see my mistake now. It's not about strings/floats at all, but I 
>>>>>>>>> wrongly assumed that all measurements that have values assigned to 
>>>>>>>>> them 
>>>>>>>>> (via LOOP or whatever) would already be defined as global variables.
>>>>>>>>> That's obviously not the case, but assigning the last value to the 
>>>>>>>>> variable via "event.record['pressure']" (as Frantisek pointed out) is 
>>>>>>>>> necessary. I'm still not sure why that needs to be in single quotes, 
>>>>>>>>> indicating a string and not a number.
>>>>>>>>> I would have expected something like "event.record(pressure)".
>>>>>>>>>
>>>>>>>>> I have to admit that I have not found this in any examples out 
>>>>>>>>> there, and not in the documentation for sure.
>>>>>>>>>
>>>>>>>>> But it's now doing what I want.
>>>>>>>>>
>>>>>>>>> On Friday, May 3, 2024 at 12:16:50 AM UTC-5 František Slimařík 
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> I guess you want something like this:
>>>>>>>>>>
>>>>>>>>>> if event.record['pressure'] != None:
>>>>>>>>>>   newpressure = (event.record['pressure'] * 10)
>>>>>>>>>>   event.record['pb'] = newpressure
>>>>>>>>>>
>>>>>>>>>> Dne pátek 3. května 2024 v 3:38:01 UTC+2 uživatel Tom Keffer 
>>>>>>>>>> napsal:
>>>>>>>>>>
>>>>>>>>>>> On Thu, May 2, 2024 at 6:32 PM Michael Frotscher <
>>>>>>>>>>> [email protected]> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Here's the full code of my service:
>>>>>>>>>>>>      
>>>>>>>>>>>>
>>>>>>>>>>>    def new_archive_packet(self, event): 
>>>>>>>>>>>>
>>>>>>>>>>>>       if 'pressure' != None:
>>>>>>>>>>>>         newpressure = ('pressure' * 10)
>>>>>>>>>>>>         event.record['pb'] = newpressure
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Strictly interpreted, you first ask whether the string 
>>>>>>>>>>> "'pressure'" is equal to None. It's not, so we proceed to the next 
>>>>>>>>>>> statement. Now you're trying to multiply a string ('pressure') by 
>>>>>>>>>>> 10. 
>>>>>>>>>>> Surprisingly, this will succeed, but likely does not give you the 
>>>>>>>>>>> results 
>>>>>>>>>>> you expect. The variable "newpressure" will actually be set to the 
>>>>>>>>>>> string 
>>>>>>>>>>> 'pressurepressurepressurepressurepressurepressurepressurepressurepressurepressure'.
>>>>>>>>>>>  
>>>>>>>>>>> That is, the string 'pressure' concatenated 10 times.
>>>>>>>>>>>
>>>>>>>>>>> You want a *variable* pressure, not the literal string 
>>>>>>>>>>> 'pressure'. Where will it come from?
>>>>>>>>>>>
>>>>>>>>>>> I would suggest taking an online Python course if this is 
>>>>>>>>>>> unfamiliar to you. 
>>>>>>>>>>>
>>>>>>>>>>> -tk
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> -- 
>>>>>>>> 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 [email protected].
>>>>>>>>
>>>>>>> To view this discussion on the web visit 
>>>>>>>> https://groups.google.com/d/msgid/weewx-development/8a2868e8-7f39-4038-acd5-c783572e2226n%40googlegroups.com
>>>>>>>>  
>>>>>>>> <https://groups.google.com/d/msgid/weewx-development/8a2868e8-7f39-4038-acd5-c783572e2226n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>> -- 
>>>>> 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 [email protected].
>>>>>
>>>> To view this discussion on the web visit 
>>>>> https://groups.google.com/d/msgid/weewx-development/cc1d11ae-3adf-46f5-a65a-c6da05880e73n%40googlegroups.com
>>>>>  
>>>>> <https://groups.google.com/d/msgid/weewx-development/cc1d11ae-3adf-46f5-a65a-c6da05880e73n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> -- 
>>> 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 [email protected].
>>>
>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/weewx-development/44a5a9c6-491f-4c10-a777-78f310a2a04dn%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/weewx-development/44a5a9c6-491f-4c10-a777-78f310a2a04dn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> -- 
> 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 [email protected].
>
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/weewx-development/31ee4807-ea36-4fb1-b355-b9759d0a1798n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/weewx-development/31ee4807-ea36-4fb1-b355-b9759d0a1798n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/weewx-development/a524ba9c-773e-4e5d-95e6-39aae59c774en%40googlegroups.com.

Reply via email to