WeeWx not parsing windDir properly from SDR RTL_433 driver

58 views
Skip to first unread message

bdf0506

unread,
Oct 8, 2020, 4:59:07 PM10/8/20
to weewx-user
I can't get WeeWx to properly parse out WindDir from an Acurite 5n1 sensor packet using SDR. I believe this is something on the WeeWx side and not the SDR side. I see the value in there when I manually run both rtl_433 and the sdr.py program, but WeeWx refuses to parse it. It will even show in the debug log file that it is being parsed, but the loop packets can't seem to find it. Can anyone please let me know what I might be doing wrong?

Running rtl_433 command outside of WeeWx:

[root@weewx weewx]$ rtl_433 -M utc -F json
rtl_433 version 20.02-178-g0e41c92 branch master at 202010050903 inputs file rtl_tcp RTL-SDR
Use -h for usage help and see https://triq.org/ for documentation.
Trying conf file at "rtl_433.conf"...
Trying conf file at "/home/root/.config/rtl_433/rtl_433.conf"...
Trying conf file at "/usr/local/etc/rtl_433/rtl_433.conf"...
Trying conf file at "/etc/rtl_433/rtl_433.conf"...
Registered 138 out of 167 device decoding protocols [ 1-4 8 11-12 15-17 19-21 23 25-26 29-36 38-60 63 67-71 73-100 102-105 108-116 119 121 124-128 130-149 151-161 163-167 ]
Detached kernel driver
Found Rafael Micro R820T tuner
Exact sample rate is: 250000.000414 Hz
[R82XX] PLL not locked!
Sample rate set to 250000 S/s.
Tuner gain set to Auto.
Tuned to 433.920MHz.
{"time" : "2020-10-08 20:34:13", "model" : "Acurite-5n1", "subtype" : 49, "id" : 3420, "channel" : "A", "sequence_num" : 0, "battery_ok" : 1, "wind_avg_km_h" : 0.000, "wind_dir_deg" : 180.000, "rain_in" : 19.460, "mic" : "CHECKSUM"}
{"time" : "2020-10-08 20:34:13", "model" : "Acurite-5n1", "subtype" : 49, "id" : 3420, "channel" : "A", "sequence_num" : 1, "battery_ok" : 1, "wind_avg_km_h" : 0.000, "wind_dir_deg" : 180.000, "rain_in" : 19.460, "mic" : "CHECKSUM"}
{"time" : "2020-10-08 20:34:13", "model" : "Acurite-5n1", "subtype" : 49, "id" : 3420, "channel" : "A", "sequence_num" : 2, "battery_ok" : 1, "wind_avg_km_h" : 0.000, "wind_dir_deg" : 180.000, "rain_in" : 19.460, "mic" : "CHECKSUM"}

Running SDR driver by itself shows me what I want:

[root@weewx weewx]$ wee_extension --list | grep sdr
sdr               0.77      Capture data from rtl_433

[root@weewx weewx]$ PYTHONPATH=bin python bin/user/sdr.py --cmd "rtl_433 -M utc -F json"
out:[u'{"time" : "2020-10-08 20:37:52", "model" : "Acurite-5n1", "subtype" : 49, "id" : 3420, "channel" : "A", "sequence_num" : 0, "battery_ok" : 1, "wind_avg_km_h" : 0.000, "wind_dir_deg" : 180.000, "rain_in" : 19.460, "mic" : "CHECKSUM"}\n', u'{"time" : "2020-10-08 20:37:52", "model" : "Acurite-5n1", "subtype" : 49, "id" : 3420, "channel" : "A", "sequence_num" : 1, "battery_ok" : 1, "wind_avg_km_h" : 0.000, "wind_dir_deg" : 180.000, "rain_in" : 19.460, "mic" : "CHECKSUM"}\n', u'{"time" : "2020-10-08 20:37:52", "model" : "Acurite-5n1", "subtype" : 49, "id" : 3420, "channel" : "A", "sequence_num" : 2, "battery_ok" : 1, "wind_avg_km_h" : 0.000, "wind_dir_deg" : 180.000, "rain_in" : 19.460, "mic" : "CHECKSUM"}\n']
parsed: {'rain_total.0D5C.Acurite5n1PacketV2': 19.46, 'snr.0D5C.Acurite5n1PacketV2': None, 'noise.0D5C.Acurite5n1PacketV2': None, 'channel.0D5C.Acurite5n1PacketV2': u'A', 'wind_dir.0D5C.Acurite5n1PacketV2': 180.0, 'model.0D5C.Acurite5n1PacketV2': u'Acurite-5n1', 'wind_speed.0D5C.Acurite5n1PacketV2': 0.0, 'msg_type.0D5C.Acurite5n1PacketV2': 49, 'rssi.0D5C.Acurite5n1PacketV2': None, 'mod.0D5C.Acurite5n1PacketV2': None, 'battery.0D5C.Acurite5n1PacketV2': 1, 'sequence_num.0D5C.Acurite5n1PacketV2': 0, 'dateTime': 1602189472, 'freq.0D5C.Acurite5n1PacketV2': None, 'usUnits': 1, 'protocol.0D5C.Acurite5n1PacketV2': None}
parsed: {'rain_total.0D5C.Acurite5n1PacketV2': 19.46, 'snr.0D5C.Acurite5n1PacketV2': None, 'noise.0D5C.Acurite5n1PacketV2': None, 'channel.0D5C.Acurite5n1PacketV2': u'A', 'wind_dir.0D5C.Acurite5n1PacketV2': 180.0, 'model.0D5C.Acurite5n1PacketV2': u'Acurite-5n1', 'wind_speed.0D5C.Acurite5n1PacketV2': 0.0, 'msg_type.0D5C.Acurite5n1PacketV2': 49, 'rssi.0D5C.Acurite5n1PacketV2': None, 'mod.0D5C.Acurite5n1PacketV2': None, 'battery.0D5C.Acurite5n1PacketV2': 1, 'sequence_num.0D5C.Acurite5n1PacketV2': 1, 'dateTime': 1602189472, 'freq.0D5C.Acurite5n1PacketV2': None, 'usUnits': 1, 'protocol.0D5C.Acurite5n1PacketV2': None}
parsed: {'rain_total.0D5C.Acurite5n1PacketV2': 19.46, 'snr.0D5C.Acurite5n1PacketV2': None, 'noise.0D5C.Acurite5n1PacketV2': None, 'channel.0D5C.Acurite5n1PacketV2': u'A', 'wind_dir.0D5C.Acurite5n1PacketV2': 180.0, 'model.0D5C.Acurite5n1PacketV2': u'Acurite-5n1', 'wind_speed.0D5C.Acurite5n1PacketV2': 0.0, 'msg_type.0D5C.Acurite5n1PacketV2': 49, 'rssi.0D5C.Acurite5n1PacketV2': None, 'mod.0D5C.Acurite5n1PacketV2': None, 'battery.0D5C.Acurite5n1PacketV2': 1, 'sequence_num.0D5C.Acurite5n1PacketV2': 2, 'dateTime': 1602189472, 'freq.0D5C.Acurite5n1PacketV2': None, 'usUnits': 1, 'protocol.0D5C.Acurite5n1PacketV2': None}

All looks good up to this point. But then running WeeWx, it does not parse the wind_dir field.

[sudo@weewx weewx]$ sudo weewxd
LOOP:   2020-10-08 16:50:02 EDT (1602190202) beaufort: 0, dateTime: 1602190202, maxSolarRad: 383.8640062554796, outTempBatteryStatus: 1, rain: 0.0, rainRate: 0.0, rain_total: 19.46, usUnits: 1, windDir: None, windSpeed: 0.0
LOOP:   2020-10-08 16:50:02 EDT (1602190202) beaufort: 0, dateTime: 1602190202, maxSolarRad: 383.8640062554796, outTempBatteryStatus: 1, rain: 0.0, rainRate: 0.0, rain_total: 19.46, usUnits: 1, windDir: None, windSpeed: 0.0
LOOP:   2020-10-08 16:50:02 EDT (1602190202) beaufort: 0, dateTime: 1602190202, maxSolarRad: 383.8640062554796, outTempBatteryStatus: 1, rain: 0.0, rainRate: 0.0, rain_total: 19.46, usUnits: 1, windDir: None, windSpeed: 0.0
REC:    2020-10-08 16:50:00 EDT (1602190200) appTemp: 83.78578056945588, beaufort: 0, cloudbase: 2432.411212114173, dateTime: 1602190200, dewpoint: 67.85699066669764, ET: None, extraHumid1: 55.0, extraHumid2: 62.0, extraHumid3: 53.0, extraHumid4: 62.0, extraTemp1: 72.176, extraTemp2: 70.16, extraTemp3: 69.80000000000001, extraTemp4: 71.78, heatindex: 77.2, humidex: 90.70753324187874, interval: 5.0, maxSolarRad: 383.981212089455, outHumidity: 73.0, outTemp: 77.2, outTempBatteryStatus: 1.0, rain: 0.0, rainRate: 0.0, rain_total: 19.460000000000004, usUnits: 1, windchill: 77.2, windDir: None, windGust: 0.0, windGustDir: None, windrun: 0.0, windSpeed: 0.0

BUT - the debug packets do in fact show the wind_dir_deg being parsed!

Oct  8 16:50:05 weewx weewx[688] DEBUG user.sdr: lines=[''{"time" : "2020-10-08 20:50:02", "model" : "Acurite-5n1", "subtype" : 49, "id" : 3420, "channel" : "A", "sequence_num" : 0, "battery_ok" : 1, "wind_avg_km_h" : 0.000, "wind_dir_deg" : 180.000, "rain_in" : 19.460, "mic" : "CHECKSUM"}\n', '{"time" : "2020-10-08 20:50:02", "model" : "Acurite-5n1", "subtype" : 49, "id" : 3420, "channel" : "A", "sequence_num" : 1, "battery_ok" : 1, "wind_avg_km_h" : 0.000, "wind_dir_deg" : 180.000, "rain_in" : 19.460, "mic" : "CHECKSUM"}\n', '{"time" : "2020-10-08 20:50:02", "model" : "Acurite-5n1", "subtype" : 49, "id" : 3420, "channel" : "A", "sequence_num" : 2, "battery_ok" : 1, "wind_avg_km_h" : 0.000, "wind_dir_deg" : 180.000, "rain_in" : 19.460, "mic" : "CHECKSUM"}\n', '{"time" : "2020-10-08
Oct  8 16:50:05 weewx weewx[688] DEBUG user.sdr: packet={'windSpeed': 0.0, 'windDir': 180.0, 'rain_total': 19.46, 'outTempBatteryStatus': 1, 'dateTime': 1602190202, 'usUnits': 1}
Oct  8 16:50:05 weewx weewx[688] DEBUG user.sdr: packet={'windSpeed': 0.0, 'windDir': 180.0, 'rain_total': 19.46, 'outTempBatteryStatus': 1, 'dateTime': 1602190202, 'usUnits': 1}
Oct  8 16:50:05 weewx weewx[688] DEBUG user.sdr: packet={'windSpeed': 0.0, 'windDir': 180.0, 'rain_total': 19.46, 'outTempBatteryStatus': 1, 'dateTime': 1602190202, 'usUnits': 1}

Relevant WeeWx config file info which shows the sensor mappings:

[SDR]
    # This section is for the software-defined radio driver.
    
    # The driver to use
    driver = user.sdr
    log_unknown_sensors = True
    log_unmapped_sensors = True
    path = /usr/local/bin/
    cmd = rtl_433 -M utc -F json
    [[sensor_map]]
        outHumidity = humidity.0D5C.Acurite5n1PacketV2
        outTemp = temperature.0D5C.Acurite5n1PacketV2
        windSpeed = wind_speed.0D5C.Acurite5n1PacketV2
        windDir = wind_dir.0D5C.Acurite5n1PacketV2
        rain_total = rain_total.0D5C.Acurite5n1PacketV2
        outTempBatteryStatus = battery.0D5C.Acurite5n1PacketV2

Any ideas as to why WeeWx refuses to properly parse this properly in the loop packets?
Message has been deleted

gjr80

unread,
Oct 8, 2020, 5:18:19 PM10/8/20
to weewx-user
Hi,

Your windSpeed is 0 and by default WeeWX sets windDir to None when windSpeed is 0. What happens when windSpeed > 0? If you want to change this default behaviour look at the ignore_zero_wind config option under [StdWXCalcute]

Gary

gjr80

unread,
Oct 8, 2020, 5:20:34 PM10/8/20
to weewx-user
Of course I meant [StdWXCalculate] not [StdWXCalcute].

Gary

bdf0506

unread,
Oct 8, 2020, 6:01:59 PM10/8/20
to weewx-user
Ahhhhh I was overthinking it. This makes sense, and now that you said this, I looked in my archive records and I do in fact see some having a Wind Direction for when it is >0 wind speed. So overall I was beating my head against the wall for something that is a works as designed. Thanks Gary!
Reply all
Reply to author
Forward
0 new messages