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

Chip has no attribute 'OPEN_BY_NAME' - Orange Pi Zero #336

Closed jon-daemon closed 7 months ago

jon-daemon commented 8 months ago

Orange Pi Zero Armbian Python 3.9.0 in irtual environment

I use a gpio pin on my board which works fine with this config:

mqtt:
  host: localhost
  port: 1883
  user: ***
  password: ***
  topic_prefix: home
  ha_discovery:
    enabled: yes

# GPIO
gpio_modules:
  - name: opi
    module: orangepi
    mode: board

I want to add a ADS1015. I'm not sure if the config is correct but I have added these lines:

sensor_modules:
  - name: adc_sensor
    module: ads1x15
    type: ADS1015
    pins: [0]

sensor_inputs:
  - name: ups_batt_voltage
    module: adc_sensor

I installed libgpiod2 python3-libgpiod and in the virtual environment I installed gpiod with pip3 install gpiod

When I start mqtt-io I get this error:

AttributeError: type object 'Chip' has no attribute 'OPEN_BY_NAME'

Where am I missing?

jon-daemon commented 8 months ago

I fixed my config using the example here, so my config is now this:

sensor_modules:
  - name: ads
    module: ads1x15
    type: ADS1015
    pins:
      - 0
      - 1
    chip_addr: 0x48

sensor_inputs:
  - name: voltage_a0
    module: ads
    type: voltage
    pin: 0
    interval: 120
    digits: 2

  - name: voltage_a1
    module: ads
    type: voltage
    pin: 1
    interval: 120
    digits: 2

I checked the code at the bottom here and I discovered that I cannot run the blinkatest.py example in my virtual environment. I get a permissions issue on these two lines:

import board
import digitalio

This code runs outside of my virtual environment but only if I use sudo.

So I reinstalled mqtt-io with sudo and tried to run with: sudo python3 -m mqtt_io mqttio/config.yml but I get this:

/usr/local/lib/python3.9/dist-packages/mqtt_io/modules/gpio/orangepi.py:63: UserWarning: Pull up/down setting are not (yet) fully supported, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
  self.io.setup(pin, direction, pull_up_down=pullup, initial=initial_int)
/usr/local/lib/python3.9/dist-packages/mqtt_io/modules/gpio/orangepi.py:63: UserWarning: Channel 7 is already in use, continuing anyway. Use GPIO.setwarnings(False) to disable warnings.
  self.io.setup(pin, direction, pull_up_down=pullup, initial=initial_int)
Traceback (most recent call last):
  File "/usr/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/usr/local/lib/python3.9/dist-packages/mqtt_io/__main__.py", line 85, in <module>
    main()
  File "/usr/local/lib/python3.9/dist-packages/mqtt_io/__main__.py", line 80, in main
    mqtt_gpio.run()
  File "/usr/local/lib/python3.9/dist-packages/mqtt_io/server.py", line 1136, in run
    self._init_sensor_modules()
  File "/usr/local/lib/python3.9/dist-packages/mqtt_io/server.py", line 244, in _init_sensor_modules
    self.sensor_modules[sens_config["name"]] = _init_module(sens_config, "sensor")
  File "/usr/local/lib/python3.9/dist-packages/mqtt_io/server.py", line 107, in _init_module
    module = import_module(
  File "/usr/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'mqtt_io.modules.sensor.ads1x15'

What's the correct way to install and run? What am I doing wrong?

jon-daemon commented 7 months ago

I found that it was a permissions issue and I describe here the fix.