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/CAPXATBVqGvM_WTN8cnJVQCmT0ogP1%2B9-pWpu4Saz3xqsk_c%2Bog%40mail.gmail.com.

Reply via email to