I'm not quite following either. But as far as the corrections not working,
I think you are probably running into the fact that MQTTSubscribe creates a
packet for each topic. For 'individual' topics this works fine if
observations are not dependent on another. The correction you are writing
introduces a dependency between count and distance. Some additional
information is in this thread,
https://groups.google.com/g/weewx-user/c/NQIQ6KhG7To/m/Ke_SWuQxCwAJ
Is there an event topic? This is json message and therefore will get around
the dependency limitation of 'individual' topics.
rich
On Tuesday, 1 April 2025 at 18:14:40 UTC-4 vince wrote:
> Andrew - I think you need to more clearly state your setup and which
> problem(s) you are asking for help with because I certainly got very lost
> in your posts…..
>
> What is emitting mqtt ?
> Are there actual duplicate mqtt messages with the same timestamps ?
> How is your mqtt subscribe configured ?
> Which mqtt subscribe variant and version are you using ?
>
> What do a few received mqtt messages look like ?
> What do a few weewx loop messages with debug=1 look like ?
> What do you see ?
> What do you expect/hope to see ?
>
> On Tuesday, April 1, 2025 at 1:43:56 PM UTC-7 gjr80 wrote:
>
>> A few comments.
>>
>> I don't see multiple copies of a loop packet arriving causing a problem.
>> Archive record obs that are averaged (eg outTemp) will be the same
>> irrespective of how many time the loop packet is 'accumulated'. Per-period
>> obs such as rain and, in this case, lightning_strike_count will
>> similarly be unaffected as the difference for each such obs between
>> successive duplicate loop packets will be zero. Of course cumulative obs
>> will be nonsense, but as WeeWX does not use cumulative obs that should not
>> be a problem.
>>
>> Also, keep in mind how the [StdCalibrate] [[Corrections]] operate. Each
>> [StdCalibrate]
>> [[Corrections]] option value is used as the argument to a python eval()
>> statement; if the eval() statement causes a python exception to be
>> raised the correction is silently ignored (and if it exists the destination
>> obs is left unchanged, if it does not exist it is not created). I would
>> suggest your main issue is your lightning_distance correction not
>> working as intended (are you sure lightning_strike_count is indeed 0 or
>> is it None?). Also, the 2nd of your three lightning_distance corrections
>> is the one you use; WeeWX does not use 'nan' and use of Null will raise
>> a python exception.
>>
>> I would suggest you set some appropriate debug settings (I am not
>> familiar with the MQTTSubscribe driver to know what debug settings are
>> required) in place such that loop packets emitted by the MQTTSubscribe
>> driver
>> are logged. Then you will know exactly what is being fed to WeeWX and how
>> to ensure it is processed/recorded correctly.
>>
>> Gary
>> On Wednesday, 2 April 2025 at 04:52:32 UTC+10 Andrew McGinnis wrote:
>>
>>> ETA- 5000+ strike count/min comes from the sensor broadcasting packets
>>> in triplicate, and every 10 seconds for lightning. So up to 18 messages in
>>> each 1-min interval, with what was the true cumulative count of 303,
>>> resulted in 5454 strikes "recorded".
>>>
>>> If anyone has a way to suppress duplicate MQTT messages, I'm all ears.
>>> I get why sensors will send a packet multiple times to maximize the chances
>>> of reception at a station, but weewx (or, at least MQTTSubscribeDriver)
>>> sees each one and records it as a separate datapoint to aggregate in the
>>> archive period. Mostly harmless, but not entirely accurate.
>>> On Tuesday, April 1, 2025 at 2:28:50 PM UTC-4 Andrew McGinnis wrote:
>>>
>>>> I just set up an Acurite Atlas with the lightning detector sensor
>>>> add-on. The strike_count that it outputs is cumulative (after I found I
>>>> had 5000+ lightning strikes per 1min archive interval). I have it, and the
>>>> strike_distance outputs mapped to weewx as below. rtl_433 is converting
>>>> strike_distance from the imperial 'miles' that is natively output, to
>>>> metric 'km', hence the additional units switch:
>>>>
>>>> [[[rtl_433/pi4b8/devices/Acurite-Atlas/A/571/strike_count]]]
>>>> name = lightning_strike_count
>>>> contains_total = true
>>>> [[[rtl_433/pi4b8/devices/Acurite-Atlas/A/571/strike_distance]]]
>>>> name = lightning_distance
>>>> units = km
>>>>
>>>> The sensor output always has a strike count and distance, but since the
>>>> strike count is cumulative, there should be no recorded distance if the
>>>> delta is 0.
>>>>
>>>> In StdCalibrate/Corrections, I have these:
>>>> radiation = luminosity / 126.7 if luminosity is not None else None
>>>> (<----this is working as expected)
>>>> lightning_distance = lightning_distance if lightning_strike_count > 0
>>>> else float('nan') (<----does not work)
>>>> lightning_distance = lightning_distance if lightning_strike_count > 0
>>>> else None (<----does not work)
>>>> lightning_distance = lightning_distance if lightning_strike_count > 0
>>>> else Null (<----does not work)
>>>>
>>>> The *radiation *observation is being recorded as 0 when *luminosity *is
>>>> recorded as 0. But, since 0 is a valid possible output, if 0 != None, then
>>>> 0/126.7 = 0. Fair enough.
>>>> The *lightning_distance* should be evaluating as 0 or None, but
>>>> instead is being recorded as the sensor's output value, while
>>>> *lightning_strike_count* is recorded as 0. I went into the db and ran
>>>> the following, then rebuilt the affected dailies:
>>>>
>>>> - update archive set lightning_strike_count = 0 where
>>>> lightning_strike_count > 5;
>>>> - update archive set lightning_distance = 0 where
>>>> lightning_strike_count = 0;
>>>>
>>>> strike_count > 5 was because I caught my contains_total omission mid
>>>> day yesterday, and there was thunder last night. Strikes before the storm
>>>> were largely invalid, but distance wasn't necessarily.
>>>>
>>>> [image: Screenshot 2025-04-01 141609.png]
>>>> Straight away, *lightning_distance* is being recorded as the sensor's
>>>> value, instead of 0, or ideally None/null.
>>>> 0 is a valid possible distance, assuming I get a direct strike. Without
>>>> a strike, it's not 0 distance- there *isn't* a distance.
>>>>
>>>> Rather than continue trying random changes to the Corrections logic,
>>>> can anyone point to where the issue or mistake may lie? Is it something to
>>>> do with the referenced *lightning_strike_count* being a cumulative
>>>> number? Do I just need to yield and make the logic evaluate to 0?
>>>>
>>>
--
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 visit
https://groups.google.com/d/msgid/weewx-user/1e68532d-4cca-487f-aefa-bcb429c9462fn%40googlegroups.com.