Thank you, vince, for your reply. It's very helpful. The OS I'm running is "Linux 6.12.34+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.12.34-1+rpt1~bookworm (2025-06-26) aarch64 GNU/Linux" according to raspinfo.
It's connected to the local network via Ethernet. There's a monitor connected via HDMI. On USB, it has the Acurite weather station (model 01536), a Microsoft Intellimouse, a Macally Small USB Wired Keyboard that reports itself as "GASIA USB KB V11" and a CyberPower CP1500PFCLCD UPS. Perhaps I should try removing some devices or switching the kbd/mouse to see if makes a difference. I will try the python USB test code you mention and maybe I'll try to modify the acurite driver to hardwire the device ids just as a test. Thank you again, --Jim-- On Friday, July 18, 2025 at 1:06:14 PM UTC-4 vince wrote: > What precise os are you running on the pi ? What exactly is connected > to the pi and how ? > > I might add that plugging/unplugging stuff in can 'really' confuse a pi. > Suggest you power down, unplug the station, power up, and plug the station > in and then don't touch things connected to USB. > > (disclaimer - not an acurite user but....) > > The acurite driver doesn't seem to accept an option telling it which /dev > device to use, so I'm wondering whether a udev rule does/doesn't even help, > but regardless take a look around line 920 or so in the driver > /usr/share/weewx/weewx/drivers/acurite.py and perhaps add some more > debugging info there before it returns None > > The driver uses the usb python module to figure out what's connected to > the usb busses. I found a script in > https://stackoverflow.com/questions/8110310/simple-way-to-query-connected-usb-devices-info-in-python > > that should return the same info the driver is parsing. I've appended the > 'code updated for python3' answer from that person below, with the last two > lines added below for readability in its output. > > import re > import subprocess > device_re = > re.compile(b"Bus\s+(?P<bus>\d+)\s+Device\s+(?P<device>\d+).+ID\s(?P<id>\w+:\w+)\s(?P<tag>.+)$", > > re.I) > df = subprocess.check_output("lsusb") > devices = [] > for i in df.split(b'\n'): > if i: > info = device_re.match(i) > if info: > dinfo = info.groupdict() > dinfo['device'] = '/dev/bus/usb/%s/%s' % (dinfo.pop('bus'), > dinfo.pop('device')) > devices.append(dinfo) > > for dev in devices: > print(dev) > > Just as an example - my pi4 returns: > {'id': b'1d6b:0003', 'tag': b'Linux Foundation 3.0 root hub', 'device': > "/dev/bus/usb/b'002'/b'001'"} > {'id': b'067b:2303', 'tag': b'Prolific Technology, Inc. PL2303 Serial Port > / Mobile Action MA-8910P', 'device': "/dev/bus/usb/b'001'/b'003'"} > {'id': b'2109:3431', 'tag': b'VIA Labs, Inc. Hub', 'device': > "/dev/bus/usb/b'001'/b'002'"} > {'id': b'1d6b:0002', 'tag': b'Linux Foundation 2.0 root hub', 'device': > "/dev/bus/usb/b'001'/b'001'"} > > and lsusb returns: > Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub > Bus 001 Device 003: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial > Port / Mobile Action MA-8910P > Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub > Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub > > So they match, FWIW, although dmesg returns a value that is offset by one > (count from zero vs. count from one inconsistency maybe) > usb 1-1.2: pl2303 converter now attached to ttyUSB0 > > So for me on a Vantage which 'does' support the port=/dev/whatever option, > I fortunately can just say /dev/ttyUSB0. Acurite doesn't seem to be so > flexible unfortunately. > > The acurite driver commentary and lots of weewx threads here suggest > acurite hardware can get funky when powered up/down too, but I'm not an > acurite user so I can't say more there. See the driver commentary for more > info than my brain can parse this morning. > > Hope this helps. > > On Friday, July 18, 2025 at 7:54:01 AM UTC-7 James J Dempsey wrote: > >> Peter Quinn (p q) suggests that maybe the problem with weewx not finding >> the Acurite station might be permissions. >> >> That's a great suggestion, but I don't think it is permissions. >> >> I have added user weewx to all the groups I'm in: >> dialout,cdrom,sudo,audio,video,plugdev,games,users,input,render,netdev,spi,i2c,gpio >> >> and weewx (just to be sure). >> I also tried running weewx from the command line as root with the same >> result of not finding the device. >> >> I'm starting to think it's a problem of USB device numbering w.r.t. >> whatever strategy weewx is using vs. the Raspberry Pi 5. >> >> It makes me ask the question: Is anyone out there using an Acurite >> station with weewx on a Raspberry Pi 5 successfully? (I would expect the >> answer is yes, but I want to be sure.) >> >> More details follow: >> >> To try to understand this, I ran weewx under strace. >> >> Currently, lsusb shows: (I've been trying different ports) >> Bus 003 Device 003: ID 045e:001e Microsoft Corp. IntelliMouse Explorer >> >> Bus 003 Device 002: ID 24c0:0003 Chaney Instrument Model 01036 weather >> center >> >> Here is some strace output. >> >> openat(AT_FDCWD, "/sys/bus/usb/devices/usb4/descriptors", >> O_RDONLY|O_CLOEXEC) = 9 >> read(9, >> "\22\1\0\3\t\0\3\tk\35\3\0\22\6\3\2\1\1\t\2\37\0\1\1\0\340\0\t\4\0\0\1"..., >> 256) = 49 >> close(9) = 0 >> recvfrom(7, NULL, 0, MSG_PEEK|MSG_TRUNC, NULL, NULL) = -1 EAGAIN >> (Resource temporarily unavailable) >> mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, >> 0) = 0x7ffece280000 >> getpid() = 2492 >> >> This next line is where it puts this in the log: >> Jul 15 20:01:12 capecod weewxd[2969]: DEBUG weewx.drivers.acurite: Found >> station at bus= device= >> (where bus= and device= indicate it hasn't found the port of the acurite >> properly) >> >> sendto(3, "<15>weewxd[2492]: DEBUG weewx.dr"..., 77, 0, NULL, 0) = 77 >> >> Then it tries to open /dev/bus/usb/003/002 which seems like it maybe (?) >> matches the lsusb output above. However, when I cat >> /sys/bus/usb/devices/3-2/product the result is "Microsoft IntelliMouse® >> Explorer" which seems wrong. If it's opening the wrong usb device, it's >> not surprise it isn't working. >> >> openat(AT_FDCWD, "/dev/bus/usb/003/002", O_RDWR|O_CLOEXEC) = 9 >> >> Then it tries to do a bunch of ioctls on that device, most of which seem >> to fail. >> >> ioctl(9, USBDEVFS_GET_CAPABILITIES, 0x1a4cdb84) = 0 >> ioctl(9, USBDEVFS_GETDRIVER, 0x7fffd72b96b0) = -1 ENODATA (No data >> available) >> ioctl(9, USBDEVFS_IOCTL, 0x7fffd72b96a0) = -1 ENODATA (No data available) >> ioctl(9, USBDEVFS_SETCONFIGURATION, 0x7fffd72b960c) = -1 EPROTO (Protocol >> error) >> ioctl(9, USBDEVFS_CLAIMINTERFACE, 0x7fffd72b95d4) = 0 >> openat(AT_FDCWD, "/sys/bus/usb/devices/3-1/bConfigurationValue", >> O_RDONLY|O_CLOEXEC) = 10 >> read(10, "1\n", 19) = 2 >> close(10) = 0 >> ioctl(9, USBDEVFS_SETINTERFACE, 0x7fffd72b95b0) = -1 EPROTO (Protocol >> error) >> timerfd_settime(6, TFD_TIMER_ABSTIME, {it_interval={tv_sec=0, >> tv_nsec=0}, it_value={tv_sec=200, tv_nsec=288749571}}, NULL) = 0 >> ioctl(9, USBDEVFS_SUBMITURB, 0x1a49efd0) = 0 >> read(5, "\1\0\0\0\0\0\0\0", 8) = 8 >> ppoll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=9, >> events=POLLOUT}], 3, {tv_sec=60, tv_nsec=0}, NULL, 0) = 1 ([{fd=9, >> revents=POLLOUT}], left {tv_sec=59, tv_nsec=997897751}) >> ioctl(9, USBDEVFS_REAPURBNDELAY, 0x7fffd72b95b0) = 0 >> timerfd_settime(6, 0, {it_interval={tv_sec=0, tv_nsec=0}, >> it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0 >> ioctl(9, USBDEVFS_REAPURBNDELAY, 0x7fffd72b95b0) = -1 EAGAIN (Resource >> temporarily unavailable) >> ioctl(9, USBDEVFS_RELEASEINTERFACE, 0x7fffd72b9534) = 0 >> getpid() = 2492 >> sendto(3, "<11>weewxd[2492]: ERROR weewx.dr"..., 117, 0, NULL, 0) = 117 >> clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, {tv_sec=229, >> tv_nsec=291213340}, >> >> It feels to me like it's somehow getting confused about the >> bus/device/port numbers. >> >> Not sure how to proceed. I would have thought that lots of people would >> have already run weeewx on pi 5, so I would be surprised if this were a >> software bug. >> >> --Jim-- >> >> On Tuesday, July 15, 2025 at 4:53:52 PM UTC-4 p q wrote: >> >> The code in question is: >> >> def _find_dev(vendor_id, product_id, device_id=None): >> """Find the vendor and product ID on the USB.""" >> for bus in usb.busses(): >> for dev in bus.devices: >> if dev.idVendor == vendor_id and dev.idProduct == >> product_id: >> if device_id is None or dev.filename == device_id: >> log.debug('Found station at bus=%s device=%s' % >> (bus.dirname, dev.filename)) >> return dev >> return None >> >> So, it's failing to find your station on USB. Could it be security? Does >> the user running Weewx have permissions to read the USB? >> >> You might try to run Weewx from the command line and see what it says. If >> my guess about permissions is correct, it will run. >> >> >> >> On Tue, Jul 15, 2025 at 1:29 PM James J Dempsey wrote: >> >> I was running my Acurite station on an ODroid N2 and have switched to a >> Raspberry Pi 5. The ODroid was running 5.1.0 on Ubuntu Lite. It worked >> fine on the ODroid (for years) and I can't get it working on the Pi 5. >> >> I installed weewx 5.1.0 fresh on the Pi 5, following the weewx >> instructions for debian. I moved my config file and sqlite database from >> the old system to the new system. >> >> It appears that weewx can't find the station on the Pi 5 -- I see this in >> the log: >> >> DEBUG weewx.drivers.acurite: Found station at bus= device= >> >> I assume there should be values after the = signs. lsusb shows: >> >> Bus 003 Device 002: ID 24c0:0003 Chaney Instrument Model 01036 weather >> center >> >> and raspinfo reports: >> >> /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/2p, 480M >> |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=, 1.5M >> |__ Port 2: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, >> 1.5M >> >> I see this in dmesg output: >> [ 0.969754] usb 3-1: New USB device found, idVendor=24c0, >> idProduct=0003, bcdDevice= 0.20 >> [ 0.969758] usb 3-1: New USB device strings: Mfr=0, Product=2, >> SerialNumber=0 >> [ 0.969760] usb 3-1: Product: Chaney Instrument >> [ 0.984789] usbhid 3-1:1.0: can't add hid device: -22 >> [ 0.989868] usbhid 3-1:1.0: probe with driver usbhid failed with error >> -22 >> >> The model of the Acurite device is ostensibly 01536. Since the lsusb >> output shows 01036, I also tried setting that in the config with no >> difference. I have tried multiple USB ports. >> >> Any suggestions would be appreciated. More details appended at the end. >> >> Thank you. >> >> --Jim-- >> >> ***** Portion of weewx.conf ***** >> >> # This section is for information about the station. >> >> [Station] >> >> # Description of the station location, such as your town. >> location = "Where I live" >> >> ... >> >> # Set to type of station hardware. There must be a corresponding >> stanza >> # in this file, which includes a value for the 'driver' option. >> station_type = AcuRite >> >> ... >> >> >> ############################################################################## >> >> [AcuRite] >> # This section is for AcuRite weather stations. >> >> # The station model, e.g., 'AcuRite 01025' or 'AcuRite 02032C' >> # (I also tried AcuRite 01536) >> model = AcuRite 01036 >> >> # The driver to use: >> driver = weewx.drivers.acurite >> >> ***** Section of log file ***** >> >> Jul 15 11:50:10 capecod weewxd[3985]: DEBUG weewx.engine: Finished >> loading service weewx.engine.StdReport >> Jul 15 11:50:10 capecod weewxd[3985]: INFO __main__: Starting up weewx >> version 5.1.0 >> Jul 15 11:50:10 capecod weewxd[3985]: DEBUG weewx.engine: Station does >> not support reading the time >> Jul 15 11:50:10 capecod weewxd[3985]: INFO weewx.engine: Using binding >> 'wx_binding' to database 'weewx.sdb' >> Jul 15 11:50:10 capecod weewxd[3985]: INFO weewx.manager: Starting >> backfill of daily summaries >> Jul 15 11:50:10 capecod weewxd[3985]: INFO weewx.manager: Daily summaries >> up to date >> Jul 15 11:50:10 capecod weewxd[3985]: INFO weewx.engine: Starting main >> packet loop. >> Jul 15 11:50:10 capecod weewxd[3985]: DEBUG weewx.drivers.acurite: Found >> station at bus= device= >> Jul 15 11:50:10 capecod weewxd[3985]: ERROR weewx.drivers.acurite: Failed >> attempt 1 of 10 to get LOOP data: [Errno 5] Input/Output Error >> Jul 15 11:50:40 capecod weewxd[3985]: DEBUG weewx.drivers.acurite: Found >> station at bus= device= >> Jul 15 11:50:41 capecod weewxd[3985]: ERROR weewx.drivers.acurite: Failed >> attempt 2 of 10 to get LOOP data: [Errno 110] Operation timed out >> (this repeats for 10 attempts and then stops the service and then >> restarts) >> >> ***** Hardware / Software ***** >> >> The Acurite is model 01536 (but lsusb reports 01036). >> >> The Raspberry Pi is is a Pi 5 Model B Rev 1.1. >> >> It is running Raspbian bookworm and is up to date as of today. >> >> -- 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 visit https://groups.google.com/d/msgid/weewx-user/617b7f0b-a1d7-4ed6-88f9-f3bc12a7b498n%40googlegroups.com.
