lheijst / weewx-rtldavis

weewx driver that captures data from software-defined radio using the rtldavis software.
GNU General Public License v3.0
14 stars 5 forks source link

Driver appears not to be parsing valid packets #20

Open Hydro-guy opened 1 year ago

Hydro-guy commented 1 year ago

Raspberry pi 3B+, current 32 bit OS, weewx 4.10.2 Davis Vue. Step 5 works without errors - once channel detected packets received every 3 seconds. when run with weewx get the following error every 150 seconds "Caught WeeWxIOError: rtldavis process stalled"

Mar 2 10:56:50 raspberrypi weewx[2529] INFO weewx.engine: Main loop exiting. Shutting engine down. Mar 2 10:56:50 raspberrypi weewx[2529] INFO user.rtldavis: shutdown process /home/pi/work/bin/rtldavis -tf US -tr 1 Mar 2 10:56:50 raspberrypi weewx[2529] INFO user.rtldavis: rtldavis with pid 2537 killed Mar 2 10:56:50 raspberrypi weewx[2529] CRITICAL main: Caught WeeWxIOError: rtldavis process stalled Mar 2 10:56:50 raspberrypi weewx[2529] CRITICAL main: **** Waiting 60 seconds then retrying... Mar 2 10:57:50 raspberrypi weewx[2529] INFO main: retrying...

I dont see anything other than the packet itself - no parsed output even with debug_parse set to 3.

Mar 2 10:56:47 raspberrypi weewx[2529] DEBUG user.rtldavis: info: 10:56:47.891320 5800C8FF7200EAE9 35 0 0 0 0 msg.ID=0 Mar 2 10:56:47 raspberrypi weewx[2529] DEBUG user.rtldavis: chan: 10:56:47.891797 Hop: {ChannelIdx:50 ChannelFreq:927506862 FreqError:0 Transmitter:0} mylog.txt

Any idea at all what this could be? I've tried both installing manually and with vince skahan's automated script - always get same error. I did post to weewx/user but did not get any response. All I can think of is that the driver is not recognizing this as a packet received - which is why it times out - the lack of any debug info seems to lead to this conclusion. Any help you could give would be most appreciated.

kb9ten commented 1 year ago

I had the same problem, it would happen when the battery was low. the regex IDENTIFIER in line 513 of rtldavis.py is ignoring packets if they are outside of 0-7 like what happens when the battery is low.

I don't know how to do a pull request, but I fixed it by changing line 513 from: IDENTIFIER = re.compile("^\d\d:\d\d:\d\d.[\d]{6} [0-9A-F][0-7][0-9A-F]{14}") to: IDENTIFIER = re.compile("^\d\d:\d\d:\d\d.[\d]{6} [0-9A-F]{16}")

Example from my syslog: recognized data: DEBUG user.rtldavis: data: 22:10:59.039987 8100D7331B002BD2 2040 0 0 0 0 msg.ID=1 unrecognized data: DEBUG user.rtldavis: info: 22:11:09.540988 8900D7331B002690 2044 0 0 0 0 msg.ID=1 the 81 is message 8, transmitter ID 1 with good battery (binary 10000001) the 89 is message 8, transmitter ID 1 with low battery (binary 10001001)