Pironman5 max not finding gpiochip

after a reboot for an update the lights and fans stopped working. I checked, and the pironman5 service had failed.

I tried to start it manually but it could not find the gpiochip. I added a link to point the gpiochip4 to the actual gpio chip at gpiochip15, but it still failed to access it. I went through a couple show commands to see if the mapping worked. Here’s the output i got:

root@raspi516max:~# sudo pironman5 start
[INFO]
[INFO] ############################################################
[INFO] Pironman5 Start
[INFO] Pironman5 version: 1.3.18
[INFO] Variant: Pironman 5 Max V2
[INFO] Config:
[INFO] {
[INFO] “system”: {
[INFO] “data_interval”: 1,
[INFO] “database_retention_days”: 30,
[INFO] “temperature_unit”: “C”,
[INFO] “enable_history”: true,
[INFO] “oled_enable”: true,
[INFO] “oled_rotation”: 0,
[INFO] “oled_sleep_timeout”: 10,
[INFO] “oled_pages”: [“mix”, “performance”, “ips”, “disk”],
[INFO] “rgb_enable”: true,
[INFO] “rgb_color”: “#0a1aff”,
[INFO] “rgb_brightness”: 100,
[INFO] “rgb_style”: “breathing”,
[INFO] “rgb_speed”: 50,
[INFO] “rgb_led_count”: 4,
[INFO] “rgb_led_count_min”: 4,
[INFO] “gpio_fan_pin”: 6,
[INFO] “gpio_fan_mode”: 0,
[INFO] “gpio_fan_led”: “follow”,
[INFO] “gpio_fan_led_pin”: 5,
[INFO] “debug_level”: “INFO”
[INFO] }
[INFO] }
[INFO] Device info:
[INFO] {
[INFO] “name”: “Pironman 5 Max”,
[INFO] “id”: “pironman5-max”,
[INFO] “peripherals”: [
[INFO] “gpio_fan_led”,
[INFO] “clear_history”,
[INFO] “network”,
[INFO] “history”,
[INFO] “oled_page_performance”,
[INFO] “mac_address”,
[INFO] “debug_level”,
[INFO] “delete_log_file”,
[INFO] “memory”,
[INFO] “temperature_unit”,
[INFO] “gpio_fan_state”,
[INFO] “pwm_fan_speed”,
[INFO] “oled_page_mix”,
[INFO] “oled_page_ips”,
[INFO] “reboot”,
[INFO] “ws2812”,
[INFO] “oled_page_disk”,
[INFO] “oled_sleep”,
[INFO] “storage”,
[INFO] “gpio_fan_mode”,
[INFO] “restart_service”,
[INFO] “gpu_temperature”,
[INFO] “shutdown”,
[INFO] “ip_address”,
[INFO] “oled”,
[INFO] “pi5_power_button”,
[INFO] “log”,
[INFO] “cpu”,
[INFO] “cpu_temperature”
[INFO] ],
[INFO] “version”: “1.3.18”,
[INFO] “app_name”: “pironman5”,
[INFO] “config_path”: “/opt/pironman5/config.json”
[INFO] }
[INFO] PM_Auto version: 2.0.5
[INFO] PM_Dashboard version: 2.0.3
Traceback (most recent call last):
File “/usr/local/bin/pironman5”, line 6, in
sys.exit(_cli.main())
^^^^^^^^^^^
File “/opt/pironman5/venv/lib/python3.11/site-packages/pironman5/_cli.py”, line 874, in main
pironman5 = Pironman5(config_path=config_path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/pironman5/venv/lib/python3.11/site-packages/pironman5/pironman5.py”, line 117, in init
self.pm_auto = PMAuto(self.config[‘system’],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/pironman5/venv/lib/python3.11/site-packages/pm_auto/pm_auto.py”, line 53, in init
self.addons = Addons(
^^^^^^^
File “/opt/pironman5/venv/lib/python3.11/site-packages/pm_auto/addons/init.py”, line 59, in init
addons = get_addons(peripherals)
^^^^^^^^^^^^^^^^^^^^^^^
File “/opt/pironman5/venv/lib/python3.11/site-packages/pm_auto/addons/init.py”, line 37, in get_addons
from .ws2812 import WS2812Addon
File “/opt/pironman5/venv/lib/python3.11/site-packages/pm_auto/addons/ws2812.py”, line 6, in
import board
File “/opt/pironman5/venv/lib/python3.11/site-packages/board.py”, line 45, in
from adafruit_blinka.board.raspberrypi.raspi_5 import *
File “/opt/pironman5/venv/lib/python3.11/site-packages/adafruit_blinka/board/raspberrypi/raspi_5.py”, line 6, in
from adafruit_blinka.microcontroller.bcm2712 import pin
File “/opt/pironman5/venv/lib/python3.11/site-packages/adafruit_blinka/microcontroller/bcm2712/pin.py”, line 7, in
from adafruit_blinka.microcontroller.generic_linux.lgpio_pin import Pin
File “/opt/pironman5/venv/lib/python3.11/site-packages/adafruit_blinka/microcontroller/generic_linux/lgpio_pin.py”, line 31, in
CHIP = _get_gpiochip()
^^^^^^^^^^^^^^^
File “/opt/pironman5/venv/lib/python3.11/site-packages/adafruit_blinka/microcontroller/generic_linux/lgpio_pin.py”, line 26, in _get_gpiochip
return lgpio.gpiochip_open(int(dev.name[-1]))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/lgpio.py”, line 645, in gpiochip_open
return _u2i(handle)
^^^^^^^^^^^^
File “/usr/lib/python3/dist-packages/lgpio.py”, line 458, in _u2i
raise error(error_text(v))
lgpio.error: ‘can not open gpiochip’
root@raspi516max:~# ls /dev/gpio* -al
crw-rw----+ 1 root gpio 254, 11 Aug 24 19:06 /dev/gpiochip11
crw-rw----+ 1 root gpio 254, 12 Aug 24 19:06 /dev/gpiochip12
crw-rw----+ 1 root gpio 254, 13 Aug 24 19:06 /dev/gpiochip13
crw-rw----+ 1 root gpio 254, 14 Aug 24 19:06 /dev/gpiochip14
crw-rw----+ 1 root gpio 254, 15 Aug 24 19:06 /dev/gpiochip15
lrwxrwxrwx 1 root root 10 Aug 24 19:06 /dev/gpiochip4 → gpiochip15
crw-rw---- 1 root gpio 511, 0 Aug 24 18:37 /dev/gpiomem0
crw-rw---- 1 root gpio 238, 0 Aug 24 18:37 /dev/gpiomem1
crw-rw---- 1 root gpio 237, 0 Aug 24 18:37 /dev/gpiomem2
crw-rw---- 1 root gpio 236, 0 Aug 24 18:37 /dev/gpiomem3
crw-rw---- 1 root gpio 235, 0 Aug 24 18:37 /dev/gpiomem4
root@raspi516max:~# gpioinfo /dev/gpiochip4
gpiochip15 - 54 lines:
line 0: “ID_SDA” unused input active-high
line 1: “ID_SCL” unused input active-high
line 2: “GPIO2” unused input active-high
line 3: “GPIO3” unused input active-high
line 4: “GPIO4” unused input active-high
line 5: “GPIO5” unused input active-high
line 6: “GPIO6” unused input active-high
line 7: “GPIO7” “spi0 CS1” output active-low [used]
line 8: “GPIO8” “spi0 CS0” output active-low [used]
line 9: “GPIO9” unused input active-high
line 10: “GPIO10” unused input active-high
line 11: “GPIO11” unused input active-high
line 12: “GPIO12” unused input active-high
line 13: “GPIO13” “ir-receiver@d” input active-low [used]
line 14: “GPIO14” unused input active-high
line 15: “GPIO15” unused input active-high
line 16: “GPIO16” unused input active-high
line 17: “GPIO17” unused input active-high
line 18: “GPIO18” unused input active-high
line 19: “GPIO19” unused input active-high
line 20: “GPIO20” unused input active-high
line 21: “GPIO21” unused input active-high
line 22: “GPIO22” unused input active-high
line 23: “GPIO23” unused input active-high
line 24: “GPIO24” unused input active-high
line 25: “GPIO25” unused input active-high
line 26: “GPIO26” unused input active-high
line 27: “GPIO27” unused input active-high
line 28: “PCIE_RP1_WAKE” unused output active-high
line 29: “FAN_TACH” unused input active-high
line 30: “HOST_SDA” unused input active-high
line 31: “HOST_SCL” unused input active-high
line 32: “ETH_RST_N” “phy-reset” output active-low [used]
line 33: “-” unused input active-high
line 34: “CD0_IO0_MICCLK” “cam0_reg” output active-high [used]
line 35: “CD0_IO0_MICDAT0” unused input active-high
line 36: “RP1_PCIE_CLKREQ_N” unused input active-high
line 37: “-” unused input active-high
line 38: “CD0_SDA” unused input active-high
line 39: “CD0_SCL” unused input active-high
line 40: “CD1_SDA” unused input active-high
line 41: “CD1_SCL” unused input active-high
line 42: “USB_VBUS_EN” unused output active-high
line 43: “USB_OC_N” unused input active-high
line 44: “RP1_STAT_LED” “PWR” output active-low [used]
line 45: “FAN_PWM” unused output active-high
line 46: “CD1_IO0_MICCLK” “cam1_reg” output active-high [used]
line 47: “2712_WAKE” unused input active-high
line 48: “CD1_IO1_MICDAT1” unused input active-high
line 49: “EN_MAX_USB_CUR” unused output active-high
line 50: “-” unused input active-high
line 51: “-” unused input active-high
line 52: “-” unused input active-high
line 53: “-” unused input active-high
root@raspi516max:~#


Any suggestion for getting this working again?

We are sorry to hear that your Pironman 5 Max lights and fans stopped working after an update, with the service failing to find the gpiochip.

From your logs, we can see that you created a symbolic link pointing gpiochip4 to gpiochip15, but the service still failed. The error lgpio.error: ‘can not open gpiochip’ typically indicates either a kernel mismatch or that the GPIO chip numbers have changed after an update.

Before we proceed with further troubleshooting, could you please let us know which command you used to update the system? There is an important distinction:

apt full-upgrade – This updates to the official stable release. This is the recommended and safe way to update.

rpi-update – This updates the Raspberry Pi kernel and firmware to the latest beta (testing) version, which is not fully tested and is not recommended for production use.

If you used rpi-update, the beta kernel may have caused incompatibility with the GPIO driver, which would explain the changed gpiochip numbers. In some cases, a system reinstall may be required to recover.

To help us confirm the current kernel version, please run the following command and share the output with us:

uname -a

Additionally, please also provide:

Output of ls /dev/gpiochip* to see the current GPIO chip device numbers.

Service logs from sudo journalctl -u pironman5 -n 50.

With this information, we will be able to determine whether you are running a beta kernel and advise on the best next steps — whether that means reverting to the stable kernel or reinstalling the system.

We appreciate your cooperation and patience.

lugoman@raspi516max:~ $ uname -a
Linux raspi516max 6.12.96+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.12.96-1+rpt1 (2026-07-24) aarch64 GNU/Linux
lugoman@raspi516max:~ $ ls /dev/gpiochip*
/dev/gpiochip11 /dev/gpiochip12 /dev/gpiochip13 /dev/gpiochip14 /dev/gpiochip15 /dev/gpiochip4
lugoman@raspi516max:~ $ sudo journalctl -u pironman5 -n 50
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] “gpio_fan_state”,
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] “debug_level”,
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] “gpu_temperature”
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] ],
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] “version”: “1.3.18”,
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] “app_name”: “pironman5”,
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] “config_path”: “/opt/pironman5/config.json”
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] }
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] PM_Auto version: 2.0.5
Aug 24 19:07:04 raspi516max pironman5[4619]: [INFO] PM_Dashboard version: 2.0.3
Aug 24 19:07:04 raspi516max pironman5[4619]: Traceback (most recent call last):
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/usr/local/bin/pironman5”, line 6, in
Aug 24 19:07:04 raspi516max pironman5[4619]: sys.exit(_cli.main())
Aug 24 19:07:04 raspi516max pironman5[4619]: ^^^^^^^^^^^
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/pironman5/_cli.py”, line 874, in main
Aug 24 19:07:04 raspi516max pironman5[4619]: pironman5 = Pironman5(config_path=config_path)
Aug 24 19:07:04 raspi516max pironman5[4619]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/pironman5/pironman5.py”, line 117, in init
Aug 24 19:07:04 raspi516max pironman5[4619]: self.pm_auto = PMAuto(self.config[‘system’],
Aug 24 19:07:04 raspi516max pironman5[4619]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/pm_auto/pm_auto.py”, line 53, in init
Aug 24 19:07:04 raspi516max pironman5[4619]: self.addons = Addons(
Aug 24 19:07:04 raspi516max pironman5[4619]: ^^^^^^^
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/pm_auto/addons/init.py”, line 59, in init
Aug 24 19:07:04 raspi516max pironman5[4619]: addons = get_addons(peripherals)
Aug 24 19:07:04 raspi516max pironman5[4619]: ^^^^^^^^^^^^^^^^^^^^^^^
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/pm_auto/addons/init.py”, line 37, in get_addons
Aug 24 19:07:04 raspi516max pironman5[4619]: from .ws2812 import WS2812Addon
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/pm_auto/addons/ws2812.py”, line 6, in
Aug 24 19:07:04 raspi516max pironman5[4619]: import board
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/board.py”, line 45, in
Aug 24 19:07:04 raspi516max pironman5[4619]: from adafruit_blinka.board.raspberrypi.raspi_5 import *
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/adafruit_blinka/board/raspberrypi/raspi_5.py”, line 6, in
Aug 24 19:07:04 raspi516max pironman5[4619]: from adafruit_blinka.microcontroller.bcm2712 import pin
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/adafruit_blinka/microcontroller/bcm2712/pin.py”, line 7, in
Aug 24 19:07:04 raspi516max pironman5[4619]: from adafruit_blinka.microcontroller.generic_linux.lgpio_pin import Pin
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/adafruit_blinka/microcontroller/generic_linux/lgpio_pin.py”, li>
Aug 24 19:07:04 raspi516max pironman5[4619]: CHIP = _get_gpiochip()
Aug 24 19:07:04 raspi516max pironman5[4619]: ^^^^^^^^^^^^^^^
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/opt/pironman5/venv/lib/python3.11/site-packages/adafruit_blinka/microcontroller/generic_linux/lgpio_pin.py”, li>
Aug 24 19:07:04 raspi516max pironman5[4619]: return lgpio.gpiochip_open(int(dev.name[-1]))
Aug 24 19:07:04 raspi516max pironman5[4619]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/usr/lib/python3/dist-packages/lgpio.py”, line 645, in gpiochip_open
Aug 24 19:07:04 raspi516max pironman5[4619]: return _u2i(handle)
Aug 24 19:07:04 raspi516max pironman5[4619]: ^^^^^^^^^^^^
Aug 24 19:07:04 raspi516max pironman5[4619]: File “/usr/lib/python3/dist-packages/lgpio.py”, line 458, in _u2i
Aug 24 19:07:04 raspi516max pironman5[4619]: raise error(error_text(v))
Aug 24 19:07:04 raspi516max pironman5[4619]: lgpio.error: ‘can not open gpiochip’
Aug 24 19:07:04 raspi516max systemd[1]: pironman5.service: Main process exited, code=exited, status=1/FAILURE
Aug 24 19:07:04 raspi516max systemd[1]: pironman5.service: Failed with result ‘exit-code’.
lugoman@raspi516max:~ $