In the log should be more info with the error message. I think it might be
multiple lines, which is why it did not show up in the grep.
But, I think the problem is that we don’t have the ‘type’ setting in quite
the correct place. Try something like this
[[topics]]
[[[message]]]
type = json
keyword_separator = ":"
keyword_delimiter = ","
# Units for MQTT payloads without unit value.
# Valid values: US, METRIC, METRICWX
# For more information see,
http://weewx.com/docs/customizing.htm#units
# Default is US
# unit_system = METRIC
[[[homeassistant/sensor/barometer]]]
[[[[message]]]]
type = individual
[[[[homeassistant/sensor/barometer]]]]
name = barometer
units = mbar
Sorry for the tenseness of the replies, I’m away from my computer for a few
days.
rich
On Saturday, 14 August 2021 at 11:53:05 UTC-4 [email protected] wrote:
> Rich, I set up for both json and individual mqtt callback types, the
> beginning of my topics section in [MQTTSubscribeDriver] is shown, the
> remainder of the topic section is the same as my previous post. I am unable
> to get the first topic (homeassistant/sensor/barometer) running as
> individual callback to be recorded in weewx. I ran in logging level =
> DEBUG and looking grep barometer mqtt.log show at bottom, I see that the
> barometer topic is set up, read, with a value of 1025, but the last line
> shows that its value is ignored. Any thoughts why not working?
>
> # [[message_callback]]
> # The format of the MQTT payload.
> # Currently support: individual, json, keyword
> # Must be specified.
> [[topics]]
> [[[message]]]
> type = json
> keyword_separator = ":"
> keyword_delimiter = ","
> # Units for MQTT payloads without unit value.
> # Valid values: US, METRIC, METRICWX
> # For more information see,
> http://weewx.com/docs/customizing.htm#units
> # Default is US
> # unit_system = METRIC
> [[[homeassistant/sensor/barometer]]]
> [[[[homeassistant/sensor/barometer]]]]
> type = individual
> name = barometer
> units = mbar
>
> [[[rtl_433/9b13b3f4-rtl433/events]]]
> msg_id_field = id
> [[[[time]]]]
> ignore_msg_id_field = True
> ignore = True
> [[[[model]]]]
> ignore_msg_id_field = True
> ignore = True
>
> .........
>
>
> grep barometer mqtt.log
> 2021-08-14 11:07:51 DEBUG (Driver) MQTTSUBscriber sanitized_service_dict
> is {u'username': u'----', u'log': u'true', u'topics': {u'message':
> {u'type': u'json', u'keyword_separator': u':', u'keyword_delimiter': u','},
> u'homeassistant/sensor/barometer': {u'homeassistant/sensor/barometer':
> {u'type': u'individual', u'name': u'barometer', u'units': u'mbar',
> u'ignore': u'False'}}, u'rtl_433/9b13b3f4-rtl433/events': {u'msg_id_field':
> u'id', u'time': {u'ignore_msg_id_field': u'True', u'ignore': u'True'},
> u'model': {u'ignore_msg_id_field': u'True', u'ignore': u'True'}, u'id':
> {u'ignore_msg_id_field': u'True', u'ignore': u'True'}, u'channel':
> {u'ignore_msg_id_field': u'True', u'ignore': u'True'}, u'battery_ok':
> {u'ignore_msg_id_field': u'True', u'ignore': u'True'},
> u'temperature_C_223': {u'name': u'outTemp', u'units': u'degree_C'},
> u'humidity_223': {u'name': u'outHumidity'}, u'strike_count_223': {u'name':
> u'lightning_strike_count', u'contains_total': u'True'}, u'storm_dist_223':
> {u'name': u'lightning_distance', u'units': u'mile'}, u'active':
> {u'ignore_msg_id_field': u'True', u'ignore': u'True'}, u'rfi':
> {u'ignore_msg_id_field': u'True', u'ignore': u'True'}, u'exception':
> {u'ignore_msg_id_field': u'True', u'ignore': u'True'}, u'raw_msg':
> {u'ignore_msg_id_field': u'True', u'ignore': u'True'}, u'mic':
> {u'ignore_msg_id_field': u'True', u'ignore': u'True'}, u'rain_mm_1322':
> {u'name': u'rain', u'contains_total': u'true', u'units': u'mm'}}},
> u'driver': u'user.MQTTSubscribe', u'logging_level': u'DEBUG', u'host':
> u'localhost', u'keepalive': u'60', u'port': u'1883', u'logging_filename':
> u'/home/pi/mqtt.log'}
> 2021-08-14 11:07:51 DEBUG (Driver) TopicManager self.subscribed_topics is
> {"homeassistant/sensor/barometer": {"datetime_format": null,
> "msg_id_field": null, "qos": 0, "filters": {}, "fields":
> {"homeassistant/sensor/barometer": {"name": "barometer", "contains_total":
> false, "conversion_error_to_none": false, "ignore": false,
> "conversion_func": {"source": "lambda x: to_float(x)", "compiled":
> "<function <lambda> at 0x761368b0>"}, "units": "mbar"}},
> "message-1628953671.535918": {"type": "json", "keyword_separator": ":",
> "keyword_delimiter": ","}, "use_server_datetime": false, "queue": {"name":
> "homeassistant/sensor/barometer", "type": "normal", "adjust_start_time":
> 0.0, "adjust_end_time": 0.0, "ignore_start_time": false, "ignore_end_time":
> false, "data": "deque([])", "max_size": 2147483647}, "ignore_msg_id_field":
> [], "ignore": false, "subscribe": true, "conversion_func": {"source":
> "lambda x: to_float(x)", "compiled": "<function <lambda> at 0x76200970>"},
> "unit_system": 1, "topic_tail_is_fieldname": false, "offset_format": null},
> "rtl_433/9b13b3f4-rtl433/events": {"datetime_format": null, "msg_id_field":
> "id", "qos": 0, "filters": {}, "fields": {"exception": {"ignore": true,
> "conversion_func": {"source": "lambda x: to_float(x)", "compiled":
> "<function <lambda> at 0x7614ecb0>"}, "contains_total": false, "name":
> "exception", "conversion_error_to_none": false}, "temperature_C_223":
> {"name": "outTemp", "contains_total": false, "conversion_error_to_none":
> false, "ignore": false, "conversion_func": {"source": "lambda x:
> to_float(x)", "compiled": "<function <lambda> at 0x761366b0>"}, "units":
> "degree_C"}, "rain_mm_1322": {"name": "rain", "contains_total": true,
> "conversion_error_to_none": false, "ignore": false, "conversion_func":
> {"source": "lambda x: to_float(x)", "compiled": "<function <lambda> at
> 0x761530f0>"}, "units": "mm"}, "strike_count_223": {"ignore": false,
> "conversion_func": {"source": "lambda x: to_float(x)", "compiled":
> "<function <lambda> at 0x7614ad70>"}, "contains_total": true, "name":
> "lightning_strike_count", "conversion_error_to_none": false}, "battery_ok":
> {"ignore": true, "conversion_func": {"source": "lambda x: to_float(x)",
> "compiled": "<function <lambda> at 0x76136bb0>"}, "contains_total": false,
> "name": "battery_ok", "conversion_error_to_none": false}, "humidity_223":
> {"ignore": false, "conversion_func": {"source": "lambda x: to_float(x)",
> "compiled": "<function <lambda> at 0x7614a9b0>"}, "contains_total": false,
> "name": "outHumidity", "conversion_error_to_none": false}, "mic":
> {"ignore": true, "conversion_func": {"source": "lambda x: to_float(x)",
> "compiled": "<function <lambda> at 0x7614e3f0>"}, "contains_total": false,
> "name": "mic", "conversion_error_to_none": false}, "raw_msg": {"ignore":
> true, "conversion_func": {"source": "lambda x: to_float(x)", "compiled":
> "<function <lambda> at 0x7614ebb0>"}, "contains_total": false, "name":
> "raw_msg", "conversion_error_to_none": false}, "rfi": {"ignore": true,
> "conversion_func": {"source": "lambda x: to_float(x)", "compiled":
> "<function <lambda> at 0x7614eb70>"}, "contains_total": false, "name":
> "rfi", "conversion_error_to_none": false}, "storm_dist_223": {"name":
> "lightning_distance", "contains_total": false, "conversion_error_to_none":
> false, "ignore": false, "conversion_func": {"source": "lambda x:
> to_float(x)", "compiled": "<function <lambda> at 0x7614a770>"}, "units":
> "mile"}, "time": {"ignore": true, "conversion_func": {"source": "lambda x:
> to_float(x)", "compiled": "<function <lambda> at 0x761367f0>"},
> "contains_total": false, "name": "time", "conversion_error_to_none":
> false}, "active": {"ignore": true, "conversion_func": {"source": "lambda x:
> to_float(x)", "compiled": "<function <lambda> at 0x7614e730>"},
> "contains_total": false, "name": "active", "conversion_error_to_none":
> false}, "model": {"ignore": true, "conversion_func": {"source": "lambda x:
> to_float(x)", "compiled": "<function <lambda> at 0x761367b0>"},
> "contains_total": false, "name": "model", "conversion_error_to_none":
> false}, "id": {"ignore": true, "conversion_func": {"source": "lambda x:
> to_float(x)", "compiled": "<function <lambda> at 0x76136730>"},
> "contains_total": false, "name": "id", "conversion_error_to_none": false},
> "channel": {"ignore": true, "conversion_func": {"source": "lambda x:
> to_float(x)", "compiled": "<function <lambda> at 0x76136370>"},
> "contains_total": false, "name": "channel", "conversion_error_to_none":
> false}}, "message-1628953671.535918": {"type": "json", "keyword_separator":
> ":", "keyword_delimiter": ","}, "use_server_datetime": false, "queue":
> {"name": "rtl_433/9b13b3f4-rtl433/events", "type": "normal",
> "adjust_start_time": 0.0, "adjust_end_time": 0.0, "ignore_start_time":
> false, "ignore_end_time": false, "data": "deque([])", "max_size":
> 2147483647}, "ignore_msg_id_field": ["time", "model", "id", "channel",
> "battery_ok", "active", "rfi", "exception", "raw_msg", "mic"], "ignore":
> false, "subscribe": true, "conversion_func": {"source": "lambda x:
> to_float(x)", "compiled": "<function <lambda> at 0x761365b0>"},
> "unit_system": 1, "topic_tail_is_fieldname": false, "offset_format": null},
> "1628953671.557307-windGust-windGustDir-windDir-windSpeed":
> {"datetime_format": null, "queue": {"name":
> "1628953671.557307-windGust-windGustDir-windDir-windSpeed", "type":
> "collector", "adjust_start_time": 0.0, "adjust_end_time": 0.0,
> "ignore_start_time": false, "ignore_end_time": false, "data": "deque([])",
> "max_size": 2147483647}, "qos": 0, "message-1628953671.535918": {},
> "use_server_datetime": false, "offset_format": null, "subscribe": false,
> "unit_system": 1, "topic_tail_is_fieldname": false}}
> 2021-08-14 11:07:51 DEBUG (Driver) MQTTSubscribe MQTT: Sending SUBSCRIBE
> (d0, m1) [('homeassistant/sensor/barometer', 0)]
> 2021-08-14 11:07:51 INFO (Driver) Subscribing to
> homeassistant/sensor/barometer has a mid 1 and rc 0
> 2021-08-14 11:10:02 DEBUG (Driver) MQTTSubscribe MQTT: Received PUBLISH
> (d0, q0, r0, m0), 'homeassistant/sensor/barometer', ... (8 bytes)
> 2021-08-14 11:10:02 DEBUG (Driver) MessageCallbackProvider data-> incoming
> topic: homeassistant/sensor/barometer, QOS: 0, retain: 0, payload: 1025.455
> 2021-08-14 11:10:02 ERROR (Driver) **** MessageCallbackProvider Ignoring
> topic=homeassistant/sensor/barometer and payload=1025.455
>
> On Friday, August 13, 2021 at 9:53:04 PM UTC-4 [email protected] wrote:
>
>> Good to hear you have something working.
>> Here is some information on configuring the message type by payload.
>>
>> https://github.com/bellrichm/WeeWX-MQTTSubscribe/issues/113#issuecomment-809655246
>> This exists on the version you have. If you have any feedback, let me
>> know.
>> rich
>>
>>
>> On Friday, 13 August 2021 at 17:03:28 UTC-4 [email protected] wrote:
>>
>>> Rich, I have solved problem for persisting distance values without
>>> lightning strikes, I am now using json rather than individual message
>>> callback, this leads to both lightning_strikes and lightning_distance to be
>>> in same loop which as you predicted would solved the problem. My
>>> [MQTTSubscribeDriver] entry for the acurite 6054 lightning detector and
>>> acurite -rain899 rainfall gauge are included below, my example shows
>>> working for msg_id_field for acurite 6054 to be 233 and the acurite
>>> -rain899 to be 1322. Msg_id_field may differ for other peoples devices,
>>> but I don't know.
>>>
>>> One question remains, as usual when you solve one problem, you create
>>> another, I have sensors which for their mqtt output are not formatted in
>>> json, but work using "individual" callback. Some might be convertible to
>>> json but others will not. I see you have in configuring experimental
>>> options, the option to pick for each topic the type of format, with "name =
>>> value format" but I am not sure where that goes or if it will work with my
>>> current version (2.1.0rc). Thanks for the suggestions and the great work
>>> on MQTTSubscribeDriver. Gene
>>>
>>>
>>>
>>>
>>> [[message_callback]]
>>> # The format of the MQTT payload.
>>> # Currently support: individual, json, keyword
>>> # Must be specified.
>>> type = json
>>> # keyword_separator = ":"
>>> # keyword_delimiter = ","
>>> [[topics]]
>>> # Units for MQTT payloads without unit value.
>>> # Valid values: US, METRIC, METRICWX
>>> # For more information see,
>>> http://weewx.com/docs/customizing.htm#units
>>> # Default is US
>>> unit_system = METRIC
>>> [[[rtl_433/9b13b3f4-rtl433/events]]]
>>> msg_id_field = id
>>> [[[[time]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[model]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[id]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[channel]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[battery_ok]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[temperature_C_223]]]]
>>> name = outTemp
>>> units = degree_C
>>> [[[[humidity_223]]]]
>>> name = outHumidity
>>> [[[[strike_count_223]]]]
>>> name = lightning_strike_count
>>> contains_total = True
>>> [[[[storm_dist_223]]]]
>>> name = lightning_distance
>>> units = mile
>>> [[[[active]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[rfi]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[exception]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[raw_msg]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[mic]]]]
>>> ignore_msg_id_field = True
>>> ignore = True
>>> [[[[rain_mm_1322]]]]
>>> name = rain
>>> contains_total = true
>>> units = mm
>>>
>>>
>>> On Thursday, August 12, 2021 at 7:49:04 PM UTC-4 [email protected]
>>> wrote:
>>>
>>>> I am guessing that you are getting loop packets with just distance
>>>> because of the order the data is arriving over MQTT.
>>>>
>>>> For example:
>>>> message with distance arrives
>>>> - data is saved
>>>> another message with distance arrives
>>>> - packet with saved data is created
>>>> - current message is saved
>>>> message with count arrives
>>>> - count is saved
>>>> a message with either distance or count arrives
>>>> - packet with saved data is created
>>>> - data received is saved
>>>>
>>>> A debug level log would confirm this.
>>>>
>>>> If a ‘corrections’ expression won’t fix this, I will need a debug level
>>>> log to get an understanding of the data being received.
>>>>
>>>> If you are using rtl_433 to publish to MQTT, I’d also be interested in
>>>> what is being published to the ‘events’ topic.
>>>> rich
>>>>
>>>> On Thursday, 12 August 2021 at 16:45:35 UTC-4 [email protected] wrote:
>>>>
>>>>> Not quite bingo, I am still getting some fixed lightning_distance
>>>>> integers in the absence of strikes, about 6 per hour. Loops are produced
>>>>> with lightning_distance = 7.999 and no information on
>>>>> lightning_strike_count and other loops have with both lightning_distance
>>>>> =
>>>>> 7.999 and lightning_strike_count = 0 See below output from weewxd for 2
>>>>> hours.
>>>>>
>>>>> I changed [[Corrections]] to
>>>>> lightning_distance = None if lightning_strike_count == 0 or None
>>>>> else lightning_distance
>>>>>
>>>>> thinking that this correction would set lightning_distance to none in
>>>>> the absence of a lightning strike count, but the correction had no
>>>>> effect.
>>>>> Looking at all the loops there is no reason some loops have
>>>>> lightning_distance: 7.99 while the great majority have the desired
>>>>> lightning_distance: None.
>>>>>
>>>>> I got a great improvement moving to MQTTSubscribeDriver 2.1.0rc but
>>>>> the problem persists to a small degree. The problem is
>>>>> happening sporadically and rarely. Any thoughts? I really don't want
>>>>> to
>>>>> give up MQTTSubscribeDriver since it is so versatile in what data you can
>>>>> bring into weewx.
>>>>>
>>>>>
>>>>> pi@raspberrypi:~ $ grep "lightning_distance: 7" weewxout1
>>>>> LOOP: 2021-08-12 13:58:54 EDT (1628791134) active: 1.0, cloudbase:
>>>>> 4673.53199141, dateTime: 1628791134.4, dewpoint: 68.5748592378,
>>>>> heatindex:
>>>>> 84.58478629, humidex: 95.6055479842, lightning_distance: 7.99999999694,
>>>>> lightning_strike_count: None, maxSolarRad: None, outHumidity: 65.0,
>>>>> outTemp: 81.5, rainRate: 0, usUnits: 1
>>>>> REC: 2021-08-12 14:00:00 EDT (1628791200) active: 0.4, cloudbase:
>>>>> 4592.04983163, dateTime: 1628791200, dewpoint: 68.8533815408, ET: None,
>>>>> heatindex: 84.5975618398, humidex: 95.7627385325, interval: 5,
>>>>> lightning_distance: 7.99999999694, lightning_strike_count: 0.0,
>>>>> maxSolarRad: None, outHumidity: 65.8, outTemp: 81.4200008, rain: 0.04,
>>>>> rainRate: 0.0421052631579, usUnits: 1
>>>>> LOOP: 2021-08-12 14:42:54 EDT (1628793774) active: 1.0, dateTime:
>>>>> 1628793774.25, lightning_distance: 7.99999999694, maxSolarRad: None,
>>>>> rainRate: 0, usUnits: 1
>>>>> REC: 2021-08-12 14:45:00 EDT (1628793900) active: 1.0, altimeter:
>>>>> 30.3586782548, barometer: 30.2545352733, cloudbase: 4768.17055948,
>>>>> dateTime: 1628793900, dewpoint: 70.2239033928, ET: None, heatindex:
>>>>> 87.9424503611, humidex: 99.1008122419, interval: 5, lightning_distance:
>>>>> 7.99999999694, lightning_strike_count: 0.0, maxSolarRad: None,
>>>>> outHumidity:
>>>>> 64.3243243243, outTemp: 83.5654538545, pressure: 28.5043137197, rain:
>>>>> 0.0,
>>>>> rainRate: 0.0, usUnits: 1
>>>>> LOOP: 2021-08-12 14:58:06 EDT (1628794686) active: 1.0, dateTime:
>>>>> 1628794686.48, lightning_distance: 7.99999999694, maxSolarRad: None,
>>>>> rainRate: 0, usUnits: 1
>>>>> LOOP: 2021-08-12 14:58:30 EDT (1628794710) active: 1.0, dateTime:
>>>>> 1628794710.6, lightning_distance: 7.99999999694, maxSolarRad: None,
>>>>> rainRate: 0, usUnits: 1
>>>>> REC: 2021-08-12 15:00:00 EDT (1628794800) active: 0.911764705882,
>>>>> altimeter: 30.352863321, barometer: 30.248274916, cloudbase:
>>>>> 4781.8918872,
>>>>> dateTime: 1628794800, dewpoint: 71.158468132, ET: None, heatindex:
>>>>> 89.7957954486, humidex: 100.932534378, interval: 5, lightning_distance:
>>>>> 7.99999999694, lightning_strike_count: 0.0, maxSolarRad: None,
>>>>> outHumidity:
>>>>> 64.3235294118, outTemp: 84.5603924356, pressure: 28.4987883408, rain:
>>>>> 0.0,
>>>>> rainRate: 0.0, usUnits: 1
>>>>> LOOP: 2021-08-12 15:50:46 EDT (1628797846) active: 1.0, dateTime:
>>>>> 1628797846.38, lightning_distance: 7.99999999694, maxSolarRad: None,
>>>>> rainRate: 0, usUnits: 1
>>>>> REC: 2021-08-12 15:55:00 EDT (1628798100) active: 1.0, altimeter:
>>>>> 30.3401020979, barometer: 30.2347797117, cloudbase: 4909.75354319,
>>>>> dateTime: 1628798100, dewpoint: 71.8556696944, ET: None, heatindex:
>>>>> 91.9474302989, humidex: 102.838512165, interval: 5, lightning_distance:
>>>>> 7.99999999694, lightning_strike_count: 0.0, maxSolarRad: None,
>>>>> outHumidity:
>>>>> 63.2432432432, outTemp: 85.8181836364, pressure: 28.4866625997, rain:
>>>>> 0.0,
>>>>> rainRate: 0.0, usUnits: 1
>>>>>
>>>>> On Wednesday, August 11, 2021 at 3:12:22 PM UTC-4 Gene LeSage wrote:
>>>>>
>>>>>> Bingo, fixed by installing v2.1.0-RC MQTTSubscribeDriver. Adding
>>>>>> collect_observations = True and single_queue = True to [[topics], I
>>>>>> get
>>>>>> desired behavior. Null lightning distance is recorded in absence of
>>>>>> strikes and with an test simulated lightning strike by battery charger
>>>>>> shorting, I get lightning strike recording and a lightning distance.
>>>>>> Loop
>>>>>> shows both lightning distance and strikes in same loop:
>>>>>>
>>>>>> LOOP: 2021-08-11 14:56:07 EDT (1628708167) active: 1.0, cloudbase:
>>>>>> 5636.94172822, dateTime: 1628708167.42, dewpoint: 70.6358563958,
>>>>>> heatindex:
>>>>>> 93.4196227576, humidex: 103.698544022, lightning_distance: None,
>>>>>> lightning_strike_count: 0, maxSolarRad: None, outHumidity: 57.0,
>>>>>> outTemp:
>>>>>> 87.8, rainRate: 0, usUnits: 1
>>>>>> LOOP: 2021-08-11 14:56:07 EDT (1628708167) active: 1.0, cloudbase:
>>>>>> 5636.94172822, dateTime: 1628708167.43, dewpoint: 70.6358563958,
>>>>>> heatindex:
>>>>>> 93.4196227576, humidex: 103.698544022, lightning_distance: None,
>>>>>> lightning_strike_count: 0, maxSolarRad: None, outHumidity: 57.0,
>>>>>> outTemp:
>>>>>> 87.8, rainRate: 0, usUnits: 1
>>>>>>
>>>>>> Supporting the idea that lightning strikes and distances were being
>>>>>> interpreted at different times I caught two lightning strikes this
>>>>>> morning
>>>>>> (before installing v2.1.0-RC) which shows the 8 am lightning strike
>>>>>> before
>>>>>> lightning distance change and the 11 am lightning strike after
>>>>>> lightning
>>>>>> distance change. By not being synchronized, the correction
>>>>>> (lightning_distance = lightning_distance if lightning_strike_count > 0
>>>>>> else
>>>>>> None) would never work.
>>>>>>
>>>>>> Thanks
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> [image: Screenshot (14).png]
>>>>>>
>>>>>> On Wednesday, August 11, 2021 at 11:41:31 AM UTC-4 [email protected]
>>>>>> wrote:
>>>>>>
>>>>>>> I fear the root cause is that MQTTSubscribeDriver takes each MQTT
>>>>>>> message and creates a loop packet. This works ok for 'aggregated'
>>>>>>> messages
>>>>>>> like json or keyword (the original implementations). But for
>>>>>>> 'individual'
>>>>>>> payloads that are dependent on each other, it is problematic.I've
>>>>>>> already
>>>>>>> had to deal with this for wind data. MQTTSubscribe collects speed and
>>>>>>> direction data into a single loop packet.
>>>>>>>
>>>>>>> Since then I've been experimenting with collecting data and creating
>>>>>>> the loop packet from the collection. Looking at your loop packets, I
>>>>>>> think
>>>>>>> it might help you.
>>>>>>>
>>>>>>> The code is a pre-release which can be found here,
>>>>>>> https://github.com/bellrichm/WeeWX-MQTTSubscribe/releases/tag/v2.1.0-rc02
>>>>>>>
>>>>>>> You will need to add two undocumented configuration options.
>>>>>>>
>>>>>>> [MQTTSubscribeDriver]
>>>>>>> .
>>>>>>> .
>>>>>>> .
>>>>>>>
>>>>>>> [[topics]
>>>>>>> # With the exception of wind data, by default a packet is
>>>>>>> created for every MQTT message received.
>>>>>>> # When this is true, MQTTSubscribe attempts to collect
>>>>>>> observations across messages into a packet.
>>>>>>> # Default is False.
>>>>>>> # This is experimental and may be removed.
>>>>>>> collect_observations = True
>>>>>>>
>>>>>>> # With the exception of wind data, by default a queue is
>>>>>>> created for every MQTT topic.
>>>>>>> # When this is true, MQTTSubsribe uses a single queue for
>>>>>>> all non wind data.
>>>>>>> # This is useful when 'collect_observations = True'.
>>>>>>> # Default is False.
>>>>>>> # This is experimental and may be removed.
>>>>>>> single_queue = True
>>>>>>>
>>>>>>> .
>>>>>>> .
>>>>>>> .
>>>>>>>
>>>>>>> With this, the incoming data should be collected and a loop packet
>>>>>>> only created when the arriving observation is already in the
>>>>>>> collection.
>>>>>>> Since, hopefully, the loop packet now has both strike and distance
>>>>>>> data,
>>>>>>> your [[Corrections]] should work.
>>>>>>>
>>>>>>> If this doesn't work. I'll have to go back to the drawing board and
>>>>>>> look for a different solution. If it comes to this, I'd need a debug
>>>>>>> level
>>>>>>> log for at least one archive period so that I can analyze the data.
>>>>>>>
>>>>>>> This is beta code, so the usual caveats apply.
>>>>>>> rich
>>>>>>>
>>>>>>> ps.
>>>>>>> If you are using rtl_433 to publish to MQTT, another option might be
>>>>>>> to use the 'events' topic that it publishes to. This is a json
>>>>>>> formatted
>>>>>>> message so the loop packet created for each MQTT message should have
>>>>>>> both
>>>>>>> the strike and distance data.
>>>>>>>
>>>>>>> On Wednesday, 11 August 2021 at 09:52:39 UTC-4 [email protected]
>>>>>>> wrote:
>>>>>>>
>>>>>>>> I am using weewx-MQTTSubscribe to bring data into Weewx from
>>>>>>>> sensors, so i don't use SDR sensor map, see config for mqttsubscribe
>>>>>>>> here
>>>>>>>> https://github.com/bellrichm/WeeWX-MQTTSubscribe/wiki/Configuring
>>>>>>>> A number of unsuccessful tries to modify mqttsubscribe are commented
>>>>>>>> out.
>>>>>>>> [MQTTSubscribeDriver]
>>>>>>>> [[topics]]
>>>>>>>>
>>>>>>>> [[[rtl_433/9b13b3f4-rtl433/devices/Acurite-6045M/C/223/strike_count]]]
>>>>>>>>
>>>>>>>> [[[[rtl_433/9b13b3f4-rtl433/devices/Acurite-6045M/C/223/strike_count]]]]
>>>>>>>> name = lightning_strike_count #strikes_total
>>>>>>>> #strike_count
>>>>>>>> contains_total = true
>>>>>>>> # conversion_type = int
>>>>>>>> # units = count
>>>>>>>> # expires_after = 0
>>>>>>>>
>>>>>>>> [[[rtl_433/9b13b3f4-rtl433/devices/Acurite-6045M/C/223/storm_dist]]]
>>>>>>>>
>>>>>>>> [[[[rtl_433/9b13b3f4-rtl433/devices/Acurite-6045M/C/223/storm_dist]]]]
>>>>>>>> name = lightning_distance #strike_dist
>>>>>>>> #LS_1_distance
>>>>>>>> # units = mile
>>>>>>>> # conversion_type = int
>>>>>>>> # expires_after = 0
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> [[Corrections]]
>>>>>>>> # For each type, an arbitrary calibration expression can be
>>>>>>>> given.
>>>>>>>> # It should be in the units defined in the StdConvert
>>>>>>>> section.
>>>>>>>> # Example:
>>>>>>>> lightning_distance = lightning_distance if
>>>>>>>> lightning_strike_count > 0 else None
>>>>>>>>
>>>>>>>> [Accumulator]
>>>>>>>> [[lightning_strike_count]]
>>>>>>>> extractor = sum
>>>>>>>> [[lightning_distance]]
>>>>>>>> extractor = min
>>>>>>>> # merger = minmax
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wednesday, August 11, 2021 at 7:58:38 AM UTC-4
>>>>>>>> [email protected] wrote:
>>>>>>>>
>>>>>>>>> I think going back to your original issue something seems to be
>>>>>>>>> off. Can you post you weewx.conf for lightning data? If you're using
>>>>>>>>> sdr,
>>>>>>>>> should contain the following in each section:
>>>>>>>>>
>>>>>>>>> [SDR]
>>>>>>>>> [[sensor_map]]
>>>>>>>>> ......
>>>>>>>>> lightning_distance = distance.XXXX.AcuriteLightningPacket
>>>>>>>>> strikes_total = strikes_total.XXXX.AcuriteLightningPacket
>>>>>>>>> [[deltas]]
>>>>>>>>> rain = rain_total
>>>>>>>>> lightning_strike_count = strikes_total
>>>>>>>>>
>>>>>>>>> [StdCalibrate]
>>>>>>>>>
>>>>>>>>> [[Corrections]]
>>>>>>>>> lightning_distance = lightning_distance if
>>>>>>>>> lightning_strike_count > 0 else None
>>>>>>>>>
>>>>>>>>> [Accumulator]
>>>>>>>>> [[lightning_strike_count]]
>>>>>>>>> extractor = sum
>>>>>>>>> [[lightning_distance]]
>>>>>>>>> extractor = min
>>>>>>>>>
>>>>>>>>> On Tuesday, August 10, 2021 at 2:46:44 PM UTC-4 [email protected]
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> 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/64f26af3-72fa-48cb-86d1-7c258fe9ef3cn%40googlegroups.com.