I'd go with something like......
[[topics]]
[[[mytopic]]]
[[[[CO2_Value_PPM]]]]
name = co2
contains total = false
conversion type = float
[[[[measurementID]]]]
ignore = true
[[[[report_telemetry]]]]
ignore = true
Define the topic to subscribe to.
Do not ignore the one element therein that you want.
Ignore the elements you don't want.
On Monday, November 29, 2021 at 6:20:28 PM UTC-8 [email protected] wrote:
> *"Is it possible to have weewx ignore these elements and only process
> the "CO2_Value_PPM": 419 ?" *Yes, Rich provided the possible solution.
>
> * "I'm not sure what "float" does but mayve that's a problem...?" *A
> float is a real number. It is trying to convert 'report_telemetry' which
> is a string to a real number causing the failure.
>
> On Monday, November 29, 2021 at 9:05:54 PM UTC-5 [email protected] wrote:
>
>> Bob,
>> You are correct. The extra data is causing the problem. Due to a poor
>> early design decision, MQTTSubscribe defaults to converting everything to
>> float. Obviously, 'report_telemetry' cannot be converted to float. The
>> following configuration should work. It ignores all but 'CO2_Value_PPM'.
>> [[topics]]
>> [[[mytopic]]]
>> ignore = true
>> [[[[CO2_Value_PPM]]]]
>> name = co2
>> ignore = false
>> If that doesn't work, let me know and I can give a different
>> configuration.
>> rich
>>
>> On Monday, 29 November 2021 at 19:53:46 UTC-5 [email protected] wrote:
>>
>>> Last post of the day, I promise!
>>> I think the node-red flow is working the way it should and reporting the
>>> parsed message as in my last post.
>>>
>>> weewx.conf configuration (changed topic to "mytopic" in the flow and in
>>> weewx).
>>>
>>> [MQTTSubscribeService]
>>> # This section is for the MQTTSubscribe service.
>>> enable = true # false
>>>
>>> # The MQTT server.
>>> # Default is localhost.
>>> host = localhost
>>> port = 1883
>>> keepalive = 60
>>>
>>> username = None #admin #None
>>> password = None #admin #None
>>> binding = loop
>>>
>>> [[message_callback]]
>>> type = json #REPLACE_ME
>>>
>>> # mytopic is the topic to subscribe to.
>>> [[topics]]
>>>
>>> unit_system = US
>>>
>>> [[[mytopic]]]
>>>
>>> #data sent from RAK7244
>>> #ignore = true
>>> [[[[CO2_Value_PPM]]]]
>>> #weewx db field name
>>> name = co2
>>> ignore = false
>>> contains total = false
>>> conversion type = float
>>> #units = ppm
>>> #[[[SECOND/REPLACE_ME]]]
>>>
>>> *This is the weewx.log debug info:*
>>>
>>> Nov 29 19:20:58 n4mrv weewx[17143] DEBUG user.MQTTSubscribe: (Service)
>>> MessageCallbackProvider data-> incoming topic: mytopic, QOS: 0, retain: 0,
>>> payload: b'{\n "CO2_Value_PPM": 419,\n "measurementId": 4100,\n
>>> "type": "report_telemetry"\n}'
>>> Nov 29 19:20:58 n4mrv weewx[17143] ERROR user.MQTTSubscribe: (Service)
>>> MessageCallbackProvider on_message_json failed with <class
>>> 'user.MQTTSubscribe.ConversionError'> and reason Failed converting field
>>> type with value report_telemetry using 'lambda x: to_float(x)' with reason
>>> could not convert string to float: 'report_telemetry'..
>>> Nov 29 19:20:58 n4mrv weewx[17143] ERROR user.MQTTSubscribe: (Service)
>>> **** MessageCallbackProvider Ignoring topic=mytopic and payload=b'{\n
>>> "CO2_Value_PPM": 419,\n "measurementId": 4100,\n "type":
>>> "report_telemetry"\n}'
>>> Nov 29 19:20:58 n4mrv weewx[17143] ERROR user.MQTTSubscribe: (Service)
>>> **** MessageCallbackProvider Traceback (most recent call last):#012 File
>>> "/home/weewx/bin/user/MQTTSubscribe.py", line 1263, in _convert_value#012
>>> return conversion_func['compiled'](value)#012 File "<string>", line 1, in
>>> <lambda>#012 File "/home/weewx/bin/weeutil/weeutil.py", line 1276, in
>>> to_float#012 return float(x) if x is not None else None#012ValueError:
>>> could not convert string to float: 'report_telemetry'#012#012During
>>> handling of the above exception, another exception
>>> occurred:#012#012Traceback (most recent call last):#012 File
>>> "/home/weewx/bin/user/MQTTSubscribe.py", line 1427, in _on_message_json#012
>>> (fieldname, value) = self._update_data(fields, fields_conversion_func,
>>> lookup_key, data_flattened[key], unit_system)#012 File
>>> "/home/weewx/bin/user/MQTTSubscribe.py", line 1230, in _update_data#012
>>> value = self._convert_value(fields, default_field_conversion_func,
>>> orig_name, orig_value)#012 File "/home/weewx/bin/user/MQTTSubscribe.py",
>>> line 1268, in _convert_value#012 raise ConversionError("Failed
>>> converting field %s with value %s using '%s' with reason %s."
>>> \#012user.MQTTSubscribe.ConversionError: Failed converting field type with
>>> value report_telemetry using 'lambda x: to_float(x)' with reason could not
>>> convert string to float: 'report_telemetry'.
>>> Nov 29 19:20:59 n4mrv weewx[17143] DEBUG user.purple:
>>> new_loop_packet(Event type: <class 'weewx.NEW_LOOP_PACKET'> | packet:
>>> {'dateTime': 1638231660, 'usUnits': 1, 'barometer': 30.091, 'inTemp': 79.0,
>>> 'inHumidity': 27.0, 'outTemp': 33.7, 'windSpeed': 0.0, 'windSpeed10': 0.0,
>>> 'windDir': 0, 'extraTemp1': 72.0, 'soilTemp1': 51.0, 'soilTemp2': 97.0,
>>> 'soilTemp4': 47.0, 'leafTemp1': 51.0, 'leafTemp2': 97.0, 'outHumidity':
>>> 74.0, 'rainRate': 0.0, 'UV': 0.0, 'radiation': 0.0, 'stormRain': 0.0,
>>> 'dayRain': 0.0, 'monthRain': 0.6, 'yearRain': 41.65, 'dayET': 0.051,
>>> 'monthET': 1.15, 'yearET': 24.95, 'leafWet4': 0.0, 'insideAlarm': 0,
>>> 'rainAlarm': 0, 'outsideAlarm1': 0, 'outsideAlarm2': 0, 'extraAlarm1': 0,
>>> 'extraAlarm2': 0, 'extraAlarm3': 0, 'extraAlarm4': 0, 'extraAlarm5': 0,
>>> 'extraAlarm6': 0, 'extraAlarm7': 0, 'extraAlarm8': 0, 'soilLeafAlarm1': 0,
>>> 'soilLeafAlarm2': 0, 'soilLeafAlarm3': 0, 'soilLeafAlarm4': 0,
>>> 'txBatteryStatus': 0, 'consBatteryVoltage': 4.72, 'forecastIcon': 6,
>>> 'forecastRule': 44, 'sunrise': 1638187560, 'sunset': 1638222720, 'rain':
>>> 0.0, 'windGust': 0.0, 'windGustDir': None})
>>> Nov 29 19:20:59 n4mrv weewx[17143] DEBUG user.purple: new_loop_packet:
>>> self.cfg.concentrations: Concentrations(timestamp=1638231655, pm1_0=4.425,
>>> pm10_0=6.5649999999999995, pm2_5_cf_1=5.39, pm2_5_cf_1_b=7.39,
>>> current_temp_f=42, current_humidity=45)
>>> Nov 29 19:20:59 n4mrv weewx[17143] DEBUG user.purple: Time of reading
>>> being inserted: 2021-11-29 19:20:55 EST (1638231655)
>>> Nov 29 19:20:59 n4mrv weewx[17143] DEBUG user.purple: Inserted
>>> packet[pm1_0]: 4.425000 into packet.
>>> Nov 29 19:20:59 n4mrv weewx[17143] DEBUG user.purple: Inserted
>>> packet[pm2_5]: 4.534270 into packet.
>>> Nov 29 19:20:59 n4mrv weewx[17143] DEBUG user.purple: Inserted
>>> packet[pm10_0]: 6.565000 into packet.
>>> Nov 29 19:20:59 n4mrv weewx[17143] DEBUG user.MQTTSubscribe: (Service)
>>> data-> final packet is 2021-11-29 19:21:00 EST (1638231660): barometer:
>>> 30.091, consBatteryVoltage: 4.72, dateTime: 1638231660, dayET: 0.051,
>>> dayRain: 0.0, extraAlarm1: 0, extraAlarm2: 0, extraAlarm3: 0, extraAlarm4:
>>> 0, extraAlarm5: 0, extraAlarm6: 0, extraAlarm7: 0, extraAlarm8: 0,
>>> extraTemp1: 72.0, forecastIcon: 6, forecastRule: 44, inHumidity: 27.0,
>>> insideAlarm: 0, inTemp: 79.0, leafTemp1: 51.0, leafTemp2: 97.0, leafWet4:
>>> 0.0, monthET: 1.15, monthRain: 0.6, outHumidity: 74.0, outsideAlarm1: 0,
>>> outsideAlarm2: 0, outTemp: 33.7, pm1_0: 4.425, pm10_0: 6.5649999999999995,
>>> pm2_5: 4.53427, pm2_5_aqi: 18.75, pm2_5_aqi_color: 32768, radiation: 0.0,
>>> rain: 0.0, rainAlarm: 0, rainRate: 0.0, soilLeafAlarm1: 0, soilLeafAlarm2:
>>> 0, soilLeafAlarm3: 0, soilLeafAlarm4: 0, soilTemp1: 51.0, soilTemp2: 97.0,
>>> soilTemp4: 47.0, stormRain: 0.0, sunrise: 1638187560, sunset: 1638222720,
>>> txBatteryStatus: 0, usUnits: 1, UV: 0.0, windDir: 0, windGust: 0.0,
>>> windGustDir: None, windSpeed: 0.0, windSpeed10: 0.0, yearET: 24.95,
>>> yearRain: 41.65
>>>
>>> It seems that there is something wrong with the format coming into weewx
>>> from the flow. It may be confused by the other two
>>> elements "measurementId": 4100, and "type": "report_telemetry" which cause
>>> the whole thing to fail. Is it possible to have weewx ignore these elements
>>> and only process the "CO2_Value_PPM": 419 ? I'm not sure what "float" does
>>> but mayve that's a problem...?
>>> Thanks again and I'll have another look tomorrow.
>>> Cheers,
>>> Bob
>>> On Monday, November 29, 2021 at 5:38:37 PM UTC-5 vince wrote:
>>>
>>>> On Monday, November 29, 2021 at 2:05:05 PM UTC-8 [email protected] wrote:
>>>>
>>>>> I removed the function and it looks better. Last debug going into
>>>>> mqtt_publish:
>>>>>
>>>>> 11/29/2021, 4:17:17 PMnode: mqtt_payload
>>>>> <http://localhost:1880/#>application/18/device/2cf7f12122500013/rx
>>>>> : msg.payload : string[87]
>>>>> string[87]
>>>>> { "CO2_Value_PPM": 399, "measurementId": 4100, "type":
>>>>> "report_telemetry" }
>>>>> <http://localhost:1880/#>
>>>>>
>>>>> However, weewx still doesn't seem to like it. I'll try changing topics
>>>>> to "mytopic" and see what happens.
>>>>>
>>>>
>>>> Sigh - just set the topic in weewx.conf to whatever you are publishing
>>>> via node-red, and reset weewx.
>>>> Until you do that, it's not going to work.
>>>>
>>>> It does not matter what topic you publish to, just keep your naming
>>>> consistent and theoretically relevant so you can figure it out a year from
>>>> now when you want to decipher what the heck you did :-)
>>>>
>>>>
--
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/e1dbacea-da03-4d0c-9ba5-f4653d937b1dn%40googlegroups.com.