Initially I thought Rich's solution was going to work, adding his suggested 
correction <lightning_distance = lightning_distance if 
'lightning_strike_count'in locals() and lightning_strike_count> 0 else 
None>  eliminated my fixed lightning_distance data in the absence of 
lightning_counts, but it created a new problem, now I don't get 
lightning_distance values with a lightning strike.  I triggered the 
lightning detector with a spark by transiently shorting a battery charger 
at time 14:22:16 , which produced 2 detected lightnings and 14:22:24 which 
produced one, but the lightning_distance remains at None.  My mqtt explorer 
reports the lightning detector is sending a constant 12-mile lightning 
distant 

LOOP:   2021-08-10 14:22:16 EDT (1628619736) dateTime: 1628619736.82, 
lightning_distance: None, maxSolarRad: None, outHumidity: 73.0, rainRate: 
0.32, usUnits: 1
LOOP:   2021-08-10 14:22:16 EDT (1628619736) dateTime: 1628619736.81, 
lightning_strike_count: 2.0, maxSolarRad: None, rainRate: 0.32, usUnits: 1  
      <--------------------------------------------------------
LOOP:   2021-08-10 14:22:16 EDT (1628619736) dateTime: 1628619736.82, 
lightning_distance: None, lightning_strike_count: 0.0, maxSolarRad: None, 
rainRate: 0.32, usUnits: 1
LOOP:   2021-08-10 14:22:16 EDT (1628619736) dateTime: 1628619736.83, 
lightning_distance: None, lightning_strike_count: 0.0, maxSolarRad: None, 
rainRate: 0.32, usUnits: 1
LOOP:   2021-08-10 14:22:16 EDT (1628619736) dateTime: 1628619736.81, 
lightning_distance: None, maxSolarRad: None, rainRate: 0.32, usUnits: 1
LOOP:   2021-08-10 14:22:16 EDT (1628619736) dateTime: 1628619736.82, 
lightning_distance: None, maxSolarRad: None, rainRate: 0.32, usUnits: 1
LOOP:   2021-08-10 14:22:16 EDT (1628619736) dateTime: 1628619736.83, 
lightning_distance: None, maxSolarRad: None, rainRate: 0.32, usUnits: 1
LOOP:   2021-08-10 14:22:24 EDT (1628619744) dateTime: 1628619744.67, 
lightning_distance: None, maxSolarRad: None, outTemp: 82.000004, rainRate: 
0.32, usUnits: 1
LOOP:   2021-08-10 14:22:24 EDT (1628619744) dateTime: 1628619744.68, 
lightning_distance: None, maxSolarRad: None, outTemp: 82.000004, rainRate: 
0.32, usUnits: 1
LOOP:   2021-08-10 14:22:24 EDT (1628619744) dateTime: 1628619744.69, 
lightning_distance: None, maxSolarRad: None, outTemp: 82.000004, rainRate: 
0.32, usUnits: 1
LOOP:   2021-08-10 14:22:24 EDT (1628619744) dateTime: 1628619744.67, 
lightning_distance: None, maxSolarRad: None, outHumidity: 73.0, rainRate: 
0.32, usUnits: 1
LOOP:   2021-08-10 14:22:24 EDT (1628619744) dateTime: 1628619744.68, 
lightning_distance: None, maxSolarRad: None, outHumidity: 73.0, rainRate: 
0.32, usUnits: 1
LOOP:   2021-08-10 14:22:24 EDT (1628619744) dateTime: 1628619744.69, 
lightning_distance: None, maxSolarRad: None, outHumidity: 73.0, rainRate: 
0.32, usUnits: 1
LOOP:   2021-08-10 14:22:24 EDT (1628619744) dateTime: 1628619744.68, 
lightning_strike_count: 1.0, maxSolarRad: None, rainRate: 0.32, usUnits: 1  
          <-----------------------------------------------------------
LOOP:   2021-08-10 14:22:24 EDT (1628619744) dateTime: 1628619744.69, 
lightning_distance: None, lightning_strike_count: 0.0, maxSolarRad: None, 
rainRate: 0.32, usUnits: 1
LOOP:   2021-08-10 14:22:24 EDT (1628619744) dateTime: 1628619744.69, 
lightning_distance: None, lightning_strike_count: 0.0, maxSolarRad: None, 
rainRate: 0.32, usUnits: 1


On Tuesday, August 10, 2021 at 9:20:17 AM UTC-4 [email protected] wrote:

> I'm no python expert (probably know just enough to be dangerous), but 
> something like this might get you want you want. 
>
> # ligtning_strike_count must exist and have a count > 0 for 
> lightning_distance to have a valid value
> lightning_distance = lightning_distance if 'lightning_strike_count'in 
> locals() and lightning_strike_count> 0 else None
>
> rich
> On Tuesday, 10 August 2021 at 03:03:01 UTC-4 gjr80 wrote:
>
>> On Tuesday, 10 August 2021 at 08:37:42 UTC+10 [email protected] wrote:
>>
>>> Here is my output running weewxd directly, I see three lines which show 
>>> lightning_distance to be None, which is expected from corrections, but the 
>>> following three lines show lightning_distance to be 11.999...  It appears 
>>> the correction " lightning_distance = lightning_distance if 
>>> lightning_strike_count > 0 else None" is working but being ignored in final 
>>> output to graph and database.  Any additional thoughts?
>>>
>>
>> The reason you see no change to lightning_distance for some packets is 
>> that for those packets lightning_strike_count does not exist so your 
>> calibration expression fails and no change is made, in other words 
>> lightning_distance remains as it was 11.9999999954. Why does this 
>> happen, in layman's terms when lightning_strike_count is not in the loop 
>> packet the calibration expression in effect has an unknown variable (
>> lightning_strike_count) and the calibration expression raises an error. 
>> The StdCalibrate service which handles the calibration expressions 
>> catches that error and discards that calibration expression. Given the 
>> limitations of the StdCalibrate service I am not aware of any 
>> calibration expression that would do as you want, of course a WeeWX and 
>> python wizard might come along an prove me wrong!
>>
>> My thoughts on a solution, unless there is a simple solution in your 
>> WeeWX driver or elsewhere upstream of WeeWX I would be writing your own 
>> WeeWX service to look at the packet and make the necessary correction. This 
>> way you can use a bit of python code to do exactly what you want and you 
>> won't be limited by the single line expressions as used by StdCalibrate. 
>> All up it should take no more than 10 lines of code. The service could be a 
>> data_service or process_service (refer weewx.conf [Engine] [[Services]]) 
>> but would need to appear before StdArchive is called. The advantage of 
>> your own service is that there is no need to change any one else's code (eg 
>> WeeWX driver, upstream code) so you will not have your changes lost during 
>> an upgrade (WeeWX or otherwise).
>>
>> Gary
>>
>

-- 
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 on the web visit 
https://groups.google.com/d/msgid/weewx-user/c0994277-9dbd-4618-8be8-d758ec447306n%40googlegroups.com.

Reply via email to