Home assistant Appdaemon / RasPi4 & I2C

Bonjour,
Pouvez-vous m’aider : Je cherche à faire causer HA sur raspi 4 avec quelques composants i2c.

J’ai utilisé HAssOS i2c config.
J’ai bien les i2c-0, i2c-1, i2c-10 et i2c-22 in /dev.
Donc normalement OK pour cette étape.

Etape suivante : je crée un script AppDaemon pour ouvrir SMBus.
Sans oublier l’ajout du package dans la config AppDaemon :

system_packages:
  - py3-smbus
python_packages: []
init_commands: []
log_level: info

Voici le script simpliste :

import appdaemon.plugins.hass.hassapi as hass
import smbus

class I2CDEV:
    def __init__(self, i2c_bus=1, addr=0x40):
        self.bus = smbus.SMBus(i2c_bus);
        self.addr = addr

    def read(self,address):
        data = self.bus.read_i2c_block_data(self.addr, address, 2)
        return ((data[0] * 256 ) + data[1])

class i2cTest(hass.Hass):
    def initialize(self):
        self.i2cDev = I2CDEV(i2c_bus=1,addr=0x43)
        self.adapi = self.get_ad_api()
        self.adapi.run_in(self.lireMesure, 20)
        
    def lireMesure(self, kwargs):
        config = self.i2cDev.read(0)
        self.log("config:  0x{:02x}".format(config))

Et voici le résultat :

2024-03-20 14:48:09.903133 WARNING i2cTest: ------------------------------------------------------------
2024-03-20 14:48:09.903587 WARNING i2cTest: Unexpected error running initialize() for i2cTest
2024-03-20 14:48:09.903963 WARNING i2cTest: ------------------------------------------------------------
2024-03-20 14:48:09.908173 WARNING i2cTest: Traceback (most recent call last):
  File "/usr/lib/python3.11/site-packages/appdaemon/app_management.py", line 162, in initialize_app
    await utils.run_in_executor(self, init)
  File "/usr/lib/python3.11/site-packages/appdaemon/utils.py", line 304, in run_in_executor
    response = future.result()
               ^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/apps/i2cTest.py", line 17, in initialize
    self.i2cDev = I2CDEV(i2c_bus=1,addr=0x43)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/apps/i2cTest.py", line 6, in __init__
    self.bus = smbus.SMBus(i2c_bus);
               ^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 1] Operation not permitted

2024-03-20 14:48:09.908631 WARNING i2cTest: ------------------------------------------------------------

Pourquoi PermissionError ???

Manquerait-il un user dans un group ?

Par ailleurs j’ai fait l’essai d’un addon sur le même principe et cet addon fonctionne :

I2C test starting...
Create INA219 instance ...
 ... created
config:  0xeef

Donc ce n’est pas un problème SMBus mais d’autorisation d’accès de SMBus dans AppDaemon.

Pouvez-vous m’aider ?

   .YO.

Ma configuration

version core-2024.3.1
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.2
os_name Linux
os_version 6.1.73-haos-raspi
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1475
Downloaded Repositories 4
HACS Data ok
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 12.1
update_channel stable
supervisor_version supervisor-2024.03.0
agent_version 1.6.0
docker_version 24.0.7
disk_total 28.5 GB
disk_used 5.8 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Advanced SSH & Web Terminal (17.2.0), File editor (5.8.0), Samba share (12.3.1), Mosquitto broker (6.4.0), Zigbee2MQTT (1.36.0-1), AppDaemon (0.16.4), Samba Backup (5.2.0), I2C Test (1.0.7)
Dashboards
dashboards 2
resources 0
views 4
mode storage
Recorder
oldest_recorder_run 10 mars 2024 à 03:28
current_recorder_run 19 mars 2024 à 19:11
estimated_db_size 290.20 MiB
database_engine sqlite
database_version 3.44.2
___

Salut,

Regarde ça

A mon avis appdaemon ne fonctionne pas en mode privilège … donc pas d’accès au bus

A mon avis appdaemon ne fonctionne pas en mode privilège … donc pas d’accès au bus

Oui sans en connaitre la raison, j’en étais à la même conclusion.
Et je me suis donc dirigé vers un add-on plutot qu’un appdaemon.

Par contre smbus2 n’étant pas disponible dans les paquets Alpine, je me suis rabattu sur py3-smbus.

Et 2nd point : dès que je veux faire une boucle pour lire les capteurs de manière périodique, l’addon ne semble plus fonctionner. Ou alors en tous cas, il ne sort plus aucun log.

Aurais-tu une idée ?

     .YO.

Je me réponds à moi-même.
L’addon fonctionne bien. Les logs arrivent beaucoup plus lentement dans le journal…
Je continue donc avec l’addon.

Merci Pulpy-Luke

1 « J'aime »