flyte / mqtt-io

Expose GPIO modules (Raspberry Pi, Beaglebone, PCF8754, PiFace2 etc.) and digital sensors (LM75 etc.) to an MQTT server for remote control and monitoring.
MIT License
460 stars 157 forks source link

Crash using gpiod #350

Open rtfmjoey opened 4 months ago

rtfmjoey commented 4 months ago

Describe the bug Followed the documentation to install mqtt-io and configured module:

gpio_modules:
  - name: c2
    module: gpiod
    chip: /dev/gpiochip1

Starting mqtt-io results in the following error:

root@odroidc2:~# python3 -m mqtt_io config.yml
2024-02-26 11:55:45 mqtt_io.__main__ [ERROR] MqttIo crashed!
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/__main__.py", line 107, in main
    mqtt_gpio.run()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 1269, in run
    self._init_gpio_modules()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 244, in _init_gpio_modules
    self.gpio_modules[gpio_config["name"]] = _init_module(
                                             ^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 128, in _init_module
    return module_class(module_config)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/modules/gpio/__init__.py", line 106, in __init__
    self.setup_module()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/modules/gpio/gpiod.py", line 35, in setup_module
    self.chip = gpiod.chip(self.config["chip"])
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'module' object is not callable
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/__main__.py", line 115, in <module>
    main()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/__main__.py", line 107, in main
    mqtt_gpio.run()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 1269, in run
    self._init_gpio_modules()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 244, in _init_gpio_modules
    self.gpio_modules[gpio_config["name"]] = _init_module(
                                             ^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 128, in _init_module
    return module_class(module_config)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/modules/gpio/__init__.py", line 106, in __init__
    self.setup_module()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/modules/gpio/gpiod.py", line 35, in setup_module
    self.chip = gpiod.chip(self.config["chip"])
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'module' object is not callable

Expected behavior mqtt-io starts normally

Error messages and traceback

root@odroidc2:~# python3 -m mqtt_io config.yml
2024-02-26 11:55:45 mqtt_io.__main__ [ERROR] MqttIo crashed!
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/__main__.py", line 107, in main
    mqtt_gpio.run()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 1269, in run
    self._init_gpio_modules()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 244, in _init_gpio_modules
    self.gpio_modules[gpio_config["name"]] = _init_module(
                                             ^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 128, in _init_module
    return module_class(module_config)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/modules/gpio/__init__.py", line 106, in __init__
    self.setup_module()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/modules/gpio/gpiod.py", line 35, in setup_module
    self.chip = gpiod.chip(self.config["chip"])
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'module' object is not callable
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/__main__.py", line 115, in <module>
    main()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/__main__.py", line 107, in main
    mqtt_gpio.run()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 1269, in run
    self._init_gpio_modules()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 244, in _init_gpio_modules
    self.gpio_modules[gpio_config["name"]] = _init_module(
                                             ^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/server.py", line 128, in _init_module
    return module_class(module_config)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/modules/gpio/__init__.py", line 106, in __init__
    self.setup_module()
  File "/usr/local/lib/python3.11/dist-packages/mqtt_io/modules/gpio/gpiod.py", line 35, in setup_module
    self.chip = gpiod.chip(self.config["chip"])
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'module' object is not callable

Config

mqtt:
  host: 192.168.10.30
  topic_prefix: odroid_meterkast
  ha_discovery:
    enabled: yes
    name: odroid_meterkast

gpio_modules:
  - name: c2
    module: gpiod
    chip: /dev/gpiochip1

digital_inputs:
  - name: watermeter_pulse1
    module: c2
    pin: 78

Hardware Odroid C2, trying to use simple in/outputs

System:

CromFr commented 1 month ago

I believe mqtt-io depends on an old version of gpiod. Running pip install "gpiod<2.0.0" solved this issue for me