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.
