jardiamj / BYOWS_RPi

weeWX Driver for Build Your Own Weather Station for Raspberry Pi
GNU General Public License v3.0
7 stars 7 forks source link

GPIO library no longer supported? #14

Closed jonorthwash closed 5 months ago

jonorthwash commented 5 months ago

When I try to start weewx with the BYOWS extension enabled, it crashes and the kernel complains about GPIO (doesn't seem to matter which GPIO pin I set for the anemometer; here it's 24, but I've tried others with otherwise identical results):

Apr 02 16:02:59 radiopi systemd[1]: Started weewx.service - WeeWX.
Apr 02 16:02:59 radiopi sudo[1744]: pam_unix(sudo:session): session closed for user root
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Initializing weewxd version 5.0.2
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Command line: /usr/share/weewx/weewxd.py /etc/weewx/weewx.conf
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Using Python 3.11.2 (main, Mar 13 2023, 12:18:29) [GCC 12.2.0]
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Located at /usr/bin/python3
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Platform Linux-6.6.20+rpt-rpi-v8-aarch64-with-glibc2.36
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Locale: 'en_GB.UTF-8'
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Entry path: /usr/share/weewx/weewxd.py
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: WEEWX_ROOT: /etc/weewx
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Configuration file: /etc/weewx/weewx.conf
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: User module: /etc/weewx/bin/user
Apr 02 16:03:00 radiopi weewxd[1748]: INFO __main__: Debug: 0
Apr 02 16:03:00 radiopi weewxd[1748]: INFO weewx.engine: Loading station type BYOWS (user.byows_rpi)
Apr 02 16:03:00 radiopi weewxd[1748]: INFO user.byows_rpi: using driver BYOWS
Apr 02 16:03:00 radiopi weewxd[1748]: INFO user.byows_rpi: driver version is 0.51
Apr 02 16:03:00 radiopi weewxd[1748]: 2024-04-02 16:03:00 xCreatePipe: Can't set permissions (436) for //.lgd-nfy0, No such file or directory
Apr 02 16:03:00 radiopi weewxd[1748]: /usr/lib/python3/dist-packages/gpiozero/devices.py:295: PinFactoryFallback: Falling back from lgpio: [Errno 2] No such file or directory: '.lgd-nfy-3'
Apr 02 16:03:00 radiopi weewxd[1748]:   warnings.warn(
Apr 02 16:03:00 radiopi weewxd[1748]: ERROR weewx.engine: Import of driver failed: Failed to add edge detection (<class 'RuntimeError'>)
Apr 02 16:03:00 radiopi kernel: export_store: invalid GPIO 24
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****  Traceback (most recent call last):
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/share/weewx/weewx/engine.py", line 115, in setupStation
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.console = loader_function(config_dict, self)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/etc/weewx/bin/user/byows_rpi.py", line 44, in loader
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      return ByowsRpi(**config_dict[DRIVER_NAME])
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/etc/weewx/bin/user/byows_rpi.py", line 72, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.station = ByowsRpiStation(**params)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                     ^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/etc/weewx/bin/user/byows_rpi.py", line 103, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.wind_gauge = WindGauge(
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                        ^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/etc/weewx/bin/user/byows_rpi.py", line 238, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.wind_speed_sensor = Button(anem_pin)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                               ^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/devices.py", line 103, in __call__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self = super().__call__(*args, **kwargs)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/input_devices.py", line 412, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      super().__init__(
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/mixins.py", line 417, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      super().__init__(*args, **kwargs)
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/input_devices.py", line 168, in __init__
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self.pin.when_changed = self._pin_changed
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      ^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/pins/__init__.py", line 471, in <lambda>
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      lambda self, value: self._set_when_changed(value),
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/pins/pi.py", line 636, in _set_when_changed
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      self._enable_event_detect()
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****    File "/usr/lib/python3/dist-packages/gpiozero/pins/rpigpio.py", line 220, in _enable_event_detect
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****      GPIO.add_event_detect(
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL weewx.engine:     ****  RuntimeError: Failed to add edge detection
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL __main__: Unable to load driver: Failed to add edge detection
Apr 02 16:03:00 radiopi weewxd[1748]: CRITICAL __main__:     ****  Exiting...
Apr 02 16:03:00 radiopi systemd[1]: weewx.service: Main process exited, code=exited, status=4/NOPERMISSION
Apr 02 16:03:00 radiopi systemd[1]: weewx.service: Failed with result 'exit-code'.

The discussion on the edge-detection error here and other things I've gleaned from around the internet suggest that the gpiozero python library is no longer supported.

Or perhaps I'm doing something else wrong?

jonorthwash commented 5 months ago

Okay, based on https://github.com/gpiozero/gpiozero/issues/1131 and https://github.com/gpiozero/gpiozero/issues/1136 I was able to solve this in the following way:

Add

Environment="GPIOZERO_PIN_FACTORY=lgpio"
Environment="LG_WD=/tmp"

To the [Service] section of /etc/systemd/system/multi-user.target.wants/weewx.service.