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.

Reply via email to