Storm et al.,
I have attempted to setup my node-red and weewx.conf according to your
email. I'm still getting errors which I have attached. My weewx.conf file:
##############################################################################
# Options for 'MQTTSubscribeService'
[MQTTSubscribeService]
enable = true # false
# The MQTT server.
host = 192.168.1.10 [this is the LoRa server, N-R is running on the
weewx machine 192.168.1.119. Should N-R be on the LoRa server?]
port = 1883
keepalive = 60
username = None #admin #None
password = None #admin #None
binding = loop
[[message_callback]]
type = json #REPLACE_ME
# The application/18/device/2cf7f12122500013/rx topics to subscribe to.
[[topics]]
unit_system = US
[[[application/18/device/2cf7f12122500013/rx]]]
#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]]]
The function in N-R seems to be putting out the correct data
"CO2_Value_PPM: 404" but something isn't connecting properly.
Even though N-R (on weewx machine) says it's sending the parsed data, it
seems to getting the whole data set. Should I be running
N-R on the LoRa server where the data is coming from?
Sorry for the naive questions but I'm really not a programmer (but
learning!)
Much appreciated for the help from everyone!
Cheers,
Bob
On Sunday, November 28, 2021 at 7:09:31 PM UTC-5 [email protected] wrote:
> OK, assuming (and you know what happens when one assumes) that your
> payload is:
> {
> "CO2_Value_PPM": 430
> }
>
> And yout topic is:
> application/18/device/2cf7f12122500013/rx
>
> Then this should work:
> [[topics]]
> [[[application/18/device/2cf7f12122500013/rx]]]
> [[[[CO2_Value_PPM]]]]
> name = co2
>
> If it doesn't, post the debug log.
> rich
>
>
> On Sunday, 28 November 2021 at 15:50:53 UTC-5 [email protected] wrote:
>
>> Thanks for the replies. Here is where I am.
>>
>> bg@n4mrv:~$ mosquitto_sub -t application/18/device/2cf7f12122500013/rx -h
>> 192.168.1.10 | jq .
>> {
>> "applicationID": "18",
>> "applicationName": "CO2app",
>> "deviceName": "CO2device",
>> "devEUI": "2cf7f12122500013",
>> "txInfo": {
>> "frequency": 905300000,
>> "dr": 0
>> },
>> "adr": true,
>> "fCnt": 226,
>> "fPort": 2,
>> "data": "AQQQsI8GAF5I",
>> "object": {
>> "err": 0,
>> "messages": [
>> {
>> "CO2_Value_PPM": 430,
>> "measurementId": 4100,
>> "type": "report_telemetry"
>> }
>> ],
>> "payload": "010410B08F06005E48",
>> "valid": true
>> }
>> }
>>
>>
>> I was using node-red but thought it was conflicting with something else
>> on Mosquitto-subscribe-weewx so I turned it off. I wasn't sure how to
>> connect weewx to the output of n-r.
>>
>> When setting the CO2 sensor up with emoncms (another server) a kind and
>> knowledgeable soul gave me the following code for a function in n-r:
>> ```
>> // Test to see if CO2 measurement is present in uplink // Assumption is
>> msg.payload.object.messages[] array is always present // if not then we
>> need to test in different way // why do we do this to ensure we don't send
>> rubbish to emoncms if ("CO2_Value_PPM" in msg.payload.object.messages[0]){
>> msg =
>> {payload:{"CO2_Value_PPM":msg.payload.object.messages[0].CO2_Value_PPM}};
>> return msg; }
>> ```
>> This cut down the extra data and produced something like: "CO2_Value_PPM:
>> 430" other data was omitted.
>> You may have an idea about connecting n-r.
>> Cheers,
>> Bob
>>
>> On Sunday, November 28, 2021 at 2:21:01 PM UTC-5 [email protected] wrote:
>>
>>> From the log extract, this what I see as the payload
>>>
>>> {
>>> "applicationID": "18",
>>> "applicationName": "CO2app",
>>> "deviceName": "CO2device",
>>> "devEUI": "2cf7f12122500013",
>>> "txInfo": {
>>> "frequency": 903900000,
>>> "dr": 0
>>> },
>>> "adr": true,
>>> "fCnt": 220,
>>> "fPort": 2,
>>> "data": "AQQQaJsGAAqz",
>>> "object": {
>>> "err": 0,
>>> "messages": [
>>> {
>>> "CO2_Value_PPM": 433,
>>> "measurementId": 4100,
>>> "type": "report_telemetry"
>>> }
>>> ],
>>> "payload": "010410689B06000AB3",
>>> "valid": true
>>> }
>>> }
>>>
>>> On Sunday, 28 November 2021 at 14:07:59 UTC-5 vince wrote:
>>>
>>>> Agree. Pre-process it to a format that works with weewx.
>>>>
>>>> Again, can you give us a vanilla "mosquitto_sub -t whatever -h
>>>> the_host" output so we can see what you have a little more clearly ?
>>>> Piping it to " | jq . " sometimes helps show the nesting and
>>>> structure a little better for the eyes.
>>>>
>>>> On Sunday, November 28, 2021 at 10:51:17 AM UTC-8 [email protected]
>>>> wrote:
>>>>
>>>>> Since you are using Node Red, a possible solution is to use a Change
>>>>> Node and delete the payload that you don't want to include in weewx.
>>>>>
>>>>> On Sunday, November 28, 2021 at 1:41:56 PM UTC-5 [email protected]
>>>>> wrote:
>>>>>
>>>>>> I looked more closely at the payload format and I don't think that
>>>>>> format is currently supported. specifically the 'nested array'..
>>>>>>
>>>>>> "object":{"err":0,"messages":[{"CO2_Value_PPM":433,"measurementId":4100,"type":"report_telemetry"}]
>>>>>> Busy time of the year, so not sure when I'll have time to delve into
>>>>>> a solution.
>>>>>> rich
>>>>>> On Sunday, 28 November 2021 at 12:22:22 UTC-5 [email protected]
>>>>>> wrote:
>>>>>>
>>>>>>>
>>>>>>> Bob,
>>>>>>> Since you have a lot of fields that you want to ignore, try setting
>>>>>>> the ignore flag to true at the 'topic' level. Also I don’t think you
>>>>>>> want
>>>>>>> to set contains_total. So you would end up with something like this,
>>>>>>> [[topics]]
>>>>>>> [[[application/18/device/2cf7f12122500013/rx]]]
>>>>>>> ignore = true
>>>>>>> [[[[CO2_Value_PPM]]]]
>>>>>>> name = co2
>>>>>>> ignore = false
>>>>>>>
>>>>>>> Since the data is published so infrequently, once you get the basic
>>>>>>> configuration working, you might want to look into the expires_after
>>>>>>> option. This will cache the value between publications. For additional
>>>>>>> information see,
>>>>>>> https://github.com/bellrichm/WeeWX-MQTTSubscribe/wiki/Configuring-additional-options#expires_after
>>>>>>>
>>>>>>> rich
>>>>>>>
>>>>>>> On Sunday, 28 November 2021 at 11:21:43 UTC-5 [email protected] wrote:
>>>>>>>
>>>>>>>> Thanks for coming back so soon with help Storm and Vince.
>>>>>>>> I am attaching three things in a .txt file rather than pasting in
>>>>>>>> as the format seems messy and I'm not sure how to make it easier to
>>>>>>>> read.
>>>>>>>>
>>>>>>>> 1. My modified section of weewx.conf . Among other things, there
>>>>>>>> seems to be a problem with float.
>>>>>>>>
>>>>>>>> 2. The data sent from the LoRa server when I subscribe
>>>>>>>> to applications/18/devices/2cf7f12122500013/rx (using MQTT-explorer).
>>>>>>>> Lots
>>>>>>>> of unneeded things but it contains the CO2_Value_PPM data.
>>>>>>>>
>>>>>>>> 3. A listing of weewx.log in debug mode showing the problems (I
>>>>>>>> hope). The data seems to be getting there but is not being parsed out
>>>>>>>> for
>>>>>>>> what I need.
>>>>>>>>
>>>>>>>> Hopefully this will give you an idea of what's going on. Thanks
>>>>>>>> again for your help.
>>>>>>>> Bob
>>>>>>>>
>>>>>>>> On Saturday, November 27, 2021 at 5:36:51 PM UTC-5 vince wrote:
>>>>>>>>
>>>>>>>>> My example:
>>>>>>>>>
>>>>>>>>> [MQTTSubscribeService]
>>>>>>>>> enable = True
>>>>>>>>> host = 192.168.1.171
>>>>>>>>> port = 1883
>>>>>>>>> keepalive = 60
>>>>>>>>> username = None
>>>>>>>>> password = None
>>>>>>>>> binding = loop
>>>>>>>>> [[message_callback]]
>>>>>>>>> type = json
>>>>>>>>> [[topics]]
>>>>>>>>> unit_system = US
>>>>>>>>> #
>>>>>>>>> #--- these are emitted every 5 minutes ---
>>>>>>>>> # mosquitto_sub -t BaseballRoomConditions -h nuc2
>>>>>>>>> # {"dateTime": 1621715702, "extraTemp1": 63.16,
>>>>>>>>> "extraTemp2": 63.5, "pi": 100.28}
>>>>>>>>> #
>>>>>>>>> [[[BaseballRoomConditions]]] <=== the topic to
>>>>>>>>> subscribe to
>>>>>>>>> [[[[dateTime]]]] <=== the element in that
>>>>>>>>> topic
>>>>>>>>> ignore = True <=== optionally ignore
>>>>>>>>> this item within the topic
>>>>>>>>> [[[[extraTemp1]]]]
>>>>>>>>> name = extraTemp1 <=== db element to map the
>>>>>>>>> item to
>>>>>>>>> units = degree_F <=== its units
>>>>>>>>> [[[[extraTemp2]]]]
>>>>>>>>> name = extraTemp2
>>>>>>>>> units = degree_F
>>>>>>>>> [[[[pi]]]]
>>>>>>>>> ignore = True
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Saturday, November 27, 2021 at 2:26:46 PM UTC-8
>>>>>>>>> [email protected] wrote:
>>>>>>>>>
>>>>>>>>>> I believe you need to add the topic you subscribing to in
>>>>>>>>>> [[[first/topic]]].
>>>>>>>>>>
>>>>>>>>>> Example:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ##########################################################################################
>>>>>>>>>> # Acurite-5n1 Sensors
>>>>>>>>>> # SDR # 1
>>>>>>>>>> # 433 MHz
>>>>>>>>>>
>>>>>>>>>> ##########################################################################################
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> [[[Acurite-Tower/8785/]]]
>>>>>>>>>>
>>>>>>>>>> [[[[temperature_F]]]]
>>>>>>>>>> name = extraTemp7
>>>>>>>>>> ignore = False
>>>>>>>>>> contains_total = False
>>>>>>>>>> conversion_type = float
>>>>>>>>>> units = degree_F
>>>>>>>>>>
>>>>>>>>>> On Saturday, November 27, 2021 at 5:15:24 PM UTC-5
>>>>>>>>>> [email protected] wrote:
>>>>>>>>>>
>>>>>>>>>>> Hello,
>>>>>>>>>>> I'm running a RAK7244 LoRaWAN server/gateway on a local network
>>>>>>>>>>> to which my weewx server is connected. Weeex is the latest stable
>>>>>>>>>>> on Ubuntu
>>>>>>>>>>> with extended db.
>>>>>>>>>>>
>>>>>>>>>>> A CO2 sensor is sending data to the LoRa server. I have node-red
>>>>>>>>>>> on my weewx server with a flow connecting to the RAK7244. I want
>>>>>>>>>>> to have
>>>>>>>>>>> the CO2 data put into the co2 slot that is available on the weewx
>>>>>>>>>>> db.
>>>>>>>>>>>
>>>>>>>>>>> I have installed the weewx extension Mosquitto-subscribe and
>>>>>>>>>>> attempted to configure weewx.conf as:
>>>>>>>>>>> #################################################
>>>>>>>>>>> # Options for 'MQTTSubscribeService'
>>>>>>>>>>> [MQTTSubscribeService]
>>>>>>>>>>> # This section is for the MQTTSubscribe service.
>>>>>>>>>>> # Turn the service on and off.
>>>>>>>>>>> # Default is: true
>>>>>>>>>>> # Only used by the service.
>>>>>>>>>>> enable = true # false
>>>>>>>>>>>
>>>>>>>>>>> # The MQTT server.
>>>>>>>>>>> # Default is localhost.
>>>>>>>>>>> host = localhost #192.168.1.10 #localhost
>>>>>>>>>>>
>>>>>>>>>>> # The port to connect to.
>>>>>>>>>>> # Default is 1883.
>>>>>>>>>>> port = 1883
>>>>>>>>>>>
>>>>>>>>>>> # Maximum period in seconds allowed between communications
>>>>>>>>>>> with the broker.
>>>>>>>>>>> # Default is 60.
>>>>>>>>>>> keepalive = 60
>>>>>>>>>>>
>>>>>>>>>>> # username for broker authentication.
>>>>>>>>>>> # Default is None.
>>>>>>>>>>> username = None
>>>>>>>>>>>
>>>>>>>>>>> # password for broker authentication.
>>>>>>>>>>> # Default is None.
>>>>>>>>>>> password = None
>>>>>>>>>>>
>>>>>>>>>>> # The binding, loop or archive.
>>>>>>>>>>> # Default is: loop
>>>>>>>>>>> # Only used by the service.
>>>>>>>>>>> binding = loop
>>>>>>>>>>>
>>>>>>>>>>> # The message handler to use
>>>>>>>>>>> [[message_callback]]
>>>>>>>>>>> # The format of the MQTT payload.
>>>>>>>>>>> # Currently support: individual, json, keyword
>>>>>>>>>>> # Must be specified.
>>>>>>>>>>> type = json #REPLACE_ME
>>>>>>>>>>>
>>>>>>>>>>> # The application/18/device/2cf7f12122500013/rx topics to
>>>>>>>>>>> subscribe to.
>>>>>>>>>>> [[topics]]
>>>>>>>>>>> # Units for MQTT payloads without unit value.
>>>>>>>>>>> # Valid values: US, METRIC, METRICWX
>>>>>>>>>>> # Default is: US
>>>>>>>>>>> unit_system = US
>>>>>>>>>>>
>>>>>>>>>>> [[[first/topic]]]
>>>>>>>>>>>
>>>>>>>>>>> #value sent from RAK7244
>>>>>>>>>>>
>>>>>>>>>>> [[[[CO2_Value_PPM]]]]
>>>>>>>>>>> #weewx db name
>>>>>>>>>>> name = co2
>>>>>>>>>>> ignore = false
>>>>>>>>>>> contains total = True
>>>>>>>>>>> conversion type = float
>>>>>>>>>>>
>>>>>>>>>>> #[[[SECOND/REPLACE_ME]]]
>>>>>>>>>>> ################################################
>>>>>>>>>>>
>>>>>>>>>>> The message (data) every 60 minutes coming from the node-red
>>>>>>>>>>> function is:
>>>>>>>>>>>
>>>>>>>>>>> {"CO2_Value_PPM":401}
>>>>>>>>>>>
>>>>>>>>>>> I may have too many things going here but, as I'm not a
>>>>>>>>>>> programmer, I'm stuck trying to figure out the problem. The
>>>>>>>>>>> node-red flow
>>>>>>>>>>> is connected on both ends (RAK7244-->weewx) but I don't see any
>>>>>>>>>>> data
>>>>>>>>>>> reaching the db.
>>>>>>>>>>>
>>>>>>>>>>> Thanks in advance if anyone can help on this.
>>>>>>>>>>> Cheers'
>>>>>>>>>>> Bob
>>>>>>>>>>>
>>>>>>>>>>>
--
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/f9912a50-d160-4b12-acc5-6341b619d241n%40googlegroups.com.
Nov 29 11:10:57 n4mrv weewx[117486] DEBUG user.MQTTSubscribe: (Service)
MessageCallbackProvider data-> incoming topic:
application/18/device/2cf7f12122500013/rx, QOS: 0, retain: 0, payload:
b'{"applicationID":"18","applicationName":"CO2app","deviceName":"CO2device","devEUI":"2cf7f12122500013","txInfo":{"frequency":904900000,"dr":0},"adr":true,"fCnt":247,"fPort":2,"data":"AQQQICoGAPuQ","object":{"err":0,"messages":[{"CO2_Value_PPM":404,"measurementId":4100,"type":"report_telemetry"}],"payload":"010410202A0600FB90","valid":true}}'
Nov 29 11:10:57 n4mrv weewx[117486] ERROR user.MQTTSubscribe: (Service)
MessageCallbackProvider on_message_json failed with <class
'user.MQTTSubscribe.ConversionError'> and reason Failed converting field
applicationName with value CO2app using 'lambda x: to_float(x)' with reason
could not convert string to float: 'CO2app'..
Nov 29 11:10:57 n4mrv weewx[117486] ERROR user.MQTTSubscribe: (Service) ****
MessageCallbackProvider Ignoring
topic=application/18/device/2cf7f12122500013/rx and
payload=b'{"applicationID":"18","applicationName":"CO2app","deviceName":"CO2device","devEUI":"2cf7f12122500013","txInfo":{"frequency":904900000,"dr":0},"adr":true,"fCnt":247,"fPort":2,"data":"AQQQICoGAPuQ","object":{"err":0,"messages":[{"CO2_Value_PPM":404,"measurementId":4100,"type":"report_telemetry"}],"payload":"010410202A0600FB90","valid":true}}'
Nov 29 11:10:57 n4mrv weewx[117486] 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: 'CO2app'#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 applicationName with value CO2app using 'lambda x:
to_float(x)' with reason could not convert string to float: 'CO2app'.