Page 1 sur 1

Install plugin avec venv python

Publié : 22 juin 2024, 18:47
par lost
Hello,

Tentative de mettre en place un venv python pour les plugins domoticz (afin, côté sauvegarde, que celle du répertoire domoticz continue à se suffire à elle-même, entre autres).

En plus de l'install domoticz de base, je tente cette install type wiki modifiée ainsi:

Code : Tout sélectionner

cd domoticz/plugins/
git clone https://github.com/zigbeefordomoticz/Domoticz-Zigbee.git

sudo apt install python3-pip

python -m venv domoticzPythonVenv
source domoticzPythonVenv/bin/activate
cd Domoticz-Zigbee/
pip3 install -r requirements.txt
deactivate

git config --add submodule.recurse true
git submodule update --init --recursive
(=> rien)

chmod +x plugin.py

EDIT /etc/init.d/domoticz.sh pour ajout:
export PYTHONHOME=/home/pi/domoticz/plugins/domoticzPythonVenv
Pb: Après redémarrage service domoticz pas de plugin côté matériel... Je sèche! J'espère qu'avoir le venv dans le répertoire plugins python ne gène pas (pas de plugin.py, donc ça devrait pas).

Des suggestions? Merci!

Re: Install plugin avec venv python

Publié : 23 juin 2024, 07:53
par lost
Hello,

Après qq nouveaux essais ce matin, je sèche toujours. Qq essais manuels (hors script démarrage service)ne donnent rien non plus sur des pb de droits éventuels (venv créé avec mon utilisateur sudoer normal sur un PI), vu que domoticz est démarré sous root pour pouvoir faire le bind du port https: Pas mieux, que ce soit en collant PYTHONHOME avec le path du venv avant de lancer domoticz ou même en utilisant son script d'activate (qui passe sans erreur sous root).

Bref, au final, c'est sur cette possibilité (sur laquelle j'avais l'intention de revenir quand j'aurais un peu de temps) que je me casse les dents, en tentant de remplir les pointillés des instructions rapidement présentées:
https://github.com/zigbeefordomoticz/Do ... ssues/1724

A la faveur d'un passage bookworm sur changement de carte SD ayant présenté qq signes de faiblesse il y a qq semaines, je tentais de pas mélanger install python système et dépendances Z4D, au bénéfice de la simplicité de sauvegarde et aussi car je trouve pas sain de voir pip rajouter ses versions par dessus ce que le système tire via apt... dans des répertoires système. Je n'ai jamais utilisé de venv python, mais cela a l'air fait exactement pour résoudre ce type de pb.

Re: Install plugin avec venv python

Publié : 23 juin 2024, 11:53
par lost
Bon, déjà à la base y'a un pb global python car niveau logs:

Code : Tout sélectionner

Status: PluginSystem: Failed dynamic library load, install the latest libpython3.x library that is available for your platform.
Problème, si je l'installe d'un apt-get, il la passe juste en installé manuellement mais en fait elle était déjà là. Pensant à un pb lié au venv, si je retire l'export PYTHONHOME du script de démarrage et relance le service: Pas mieux.

Côté venv, y'a plus de recherches dans pip au cas ou il faille aussi la libpthon3.11 (idem système) aussi à cet endroit car un âne a jugé bon de retirer cette fonctionnalité de base de tout gestionnaire de paquet. Ca renvoie a la recherche du site ou y'a rien qui me semble approprié.

Bref, ca marche pas!

Re: Install plugin avec venv python

Publié : 23 juin 2024, 12:49
par lost
La piste PYTHONPATH semble plus prometteuse après un nouvel essai sur le PI de test (sans le matos), mais il semble que le path du venv ne suffise pas car alors le plugin ne charge pas (et derrière, pas mal de pb côté domoticz qui plante) avec au moins ce path et erreurs affichés qui mettent sur la piste:

Code : Tout sélectionner

2024-06-23 17:02:42.742  Error: Zi-Stick: (Zigate) failed to load 'plugin.py', Python Path used was '/home/domo/domoticz/plugins/Domoticz-Zigbee/:/home/domo/domoticz/plugins/domoticzPythonVenv:/usr/lib/python311.zip:/usr/lib/python3.11:/usr/lib/python3.11/lib-dynload:/usr/local/lib/python3.11/dist-packages:/usr/lib/python3/dist-packages:/usr/lib/python3.11/dist-packages'.
2024-06-23 17:02:42.764  Status: PluginSystem: 1 plugins started.
2024-06-23 17:02:42.874  Error: Zi-Stick: Traceback (most recent call last):
2024-06-23 17:02:42.874  Error: Zi-Stick:   File "/home/domo/domoticz/plugins/Domoticz-Zigbee/plugin.py", line 112, in <module>
2024-06-23 17:02:42.874  Error: Zi-Stick:     import z4d_certified_devices
2024-06-23 17:02:42.874  Error: Zi-Stick: ModuleNotFoundError: No module named 'z4d_certified_devices'
Bref, avec le seul path venv ajouté on ne trouve pas z4d_certified_devices qui est 2 répertoires en dessous.

Si dans /etc/init.d/domoticz.sh on mets les deux, donnant chez moi (avec un python 3.11 sous bookworm):

Code : Tout sélectionner

export PYTHONPATH="/home/domo/domoticz/plugins/domoticzPythonVenv/:/home/domo/domoticz/plugins/domoticzPythonVenv/lib/python3.11/site-packages"
Niveau démarrage plugin ca se passe mieux:

Code : Tout sélectionner

2024-06-25 15:53:57.001  Status: Zi-Stick: Initialized version 7.1, author 'pipiche38'
2024-06-25 15:53:57.010  Status: Zi-Stick: Welcome to Zigbee for Domoticz (Z4D) plugin.
2024-06-25 15:53:57.010  Status: Zi-Stick: Z4D requires python3.8 or above and you are running 3.11
2024-06-25 15:53:57.011  Zi-Stick: Z4D loading PluginConf
2024-06-25 15:53:57.013  Zi-Stick: Loading PluginConf -  from Domoticz sqlite Db
2024-06-25 15:53:57.014  Zi-Stick: /home/domo/domoticz/plugins/Domoticz-Zigbee/Conf/PluginConf-47.json timestamp is 1718366420.0
2024-06-25 15:53:57.014  Zi-Stick: Dz PluginConf is older than Json Dz: 0 Json: 1718366420.0
2024-06-25 15:53:57.016  Status: Zi-Stick: PluginAnalytics set to 1
2024-06-25 15:53:57.016  Status: Zi-Stick: channel set to 20
2024-06-25 15:53:57.016  Status: Zi-Stick: TXpower_set set to 20
2024-06-25 15:53:57.016  Status: Zi-Stick: filename set to /home/domo/domoticz/plugins/Domoticz-Zigbee/Conf/PluginConf-47.json
2024-06-25 15:53:57.016  Status: Zi-Stick: pluginHome set to /home/domo/domoticz/plugins/Domoticz-Zigbee
2024-06-25 15:53:57.016  Status: Zi-Stick: homedirectory set to /home/domo/domoticz/plugins/Domoticz-Zigbee
2024-06-25 15:53:57.016  Status: Zi-Stick: pluginData set to /home/domo/domoticz/plugins/Domoticz-Zigbee/Data
2024-06-25 15:53:57.016  Status: Zi-Stick: pluginConfig set to /home/domo/domoticz/plugins/Domoticz-Zigbee/Conf
2024-06-25 15:53:57.016  Status: Zi-Stick: pluginOTAFirmware set to /home/domo/domoticz/plugins/Domoticz-Zigbee/OTAFirmware
2024-06-25 15:53:57.016  Status: Zi-Stick: pluginReports set to /home/domo/domoticz/plugins/Domoticz-Zigbee/Reports
2024-06-25 15:53:57.016  Status: Zi-Stick: pluginWWW set to /home/domo/domoticz/plugins/Domoticz-Zigbee/www
2024-06-25 15:53:57.016  Status: Zi-Stick: pluginLogs set to /home/domo/domoticz/plugins/Domoticz-Zigbee/Logs
2024-06-25 15:53:57.017  Status: Zi-Stick: ControllerInRawMode set to True
2024-06-25 15:53:57.017  Status: Zi-Stick: expJsonDatabase set to 0
2024-06-25 15:53:57.017  Status: Zi-Stick: ControllerInRawMode set to True
2024-06-25 15:53:57.202  Status: Zi-Stick: Checking Python modules /home/domo/domoticz/plugins/Domoticz-Zigbee/requirements.txt
2024-06-25 15:53:57.255  Zi-Stick: Installing plugin custom page /home/domo/domoticz/www/templates/Zi-Stick.html 
2024-06-25 15:53:57.257  Zi-Stick: start_logging_thread
2024-06-25 15:53:57.258  Zi-Stick: logging_thread - listening
2024-06-25 15:53:57.259  Status: Zi-Stick: Please watch plugin log into /home/domo/domoticz/plugins/Domoticz-Zigbee/Logs/PluginZigbee_47.log
2024-06-25 15:53:57.281  Status: Zi-Stick: Z4D starting with stable7-7.1.012
2024-06-25 15:53:57.292  Status: [web:8080] Incoming connection from: 127.0.0.1
2024-06-25 15:53:57.321  Status: Zi-Stick: Z4D loads ZCL Cluster definitions
2024-06-25 15:53:57.403  Status: Zi-Stick: Z4D loaded 16 configuration from legacy database.
2024-06-25 15:53:57.405  Status: Zi-Stick: Z4D loads 16 configuration from the local certified Db.
2024-06-25 15:53:57.895  Status: Zi-Stick: Z4D loads 578 Certified devices from repository.
2024-06-25 15:53:57.896  Status: Zi-Stick: Z4D loading database
2024-06-25 15:53:58.015  Status: Zi-Stick: Z4D loads 4 entries from /home/domo/domoticz/plugins/Domoticz-Zigbee/Data/DeviceList-47.txt
2024-06-25 15:53:58.035  Status: Zi-Stick: Z4D configured to use transport mode: ZigpyEZSP
2024-06-25 15:54:00.988  Status: Zi-Stick: Z4D starting EZSP
2024-06-25 15:54:00.992  Status: Zi-Stick: Z4D starts WebUI
2024-06-25 15:54:01.033  Status: Zi-Stick: Web backend for Web User Interface started on port: 9440
2024-06-25 15:54:01.397  Status: Zi-Stick: Plugin looks to upgrade the Certified Device package
2024-06-25 15:54:02.637  Status: Zi-Stick: ++ Enables boost power mode and the alternate transmitter output.
2024-06-25 15:54:02.639  Status: Zi-Stick: ++ Started radio ezsp port: /dev/ttyUSB11
2024-06-25 15:54:02.640  Status: Zi-Stick: ++ Use of Zigpy Persistent Db
2024-06-25 15:54:04.272  Error: Zi-Stick: Error at startup [Errno 2] could not open port /dev/ttyUSB11: [Errno 2] No such file or directory: '/dev/ttyUSB11'
A la fin, il trouve pas le ttyUSB du coordinateur ce qui est normal sur le PI de test...

La question que je me pose, c'est la ligne "Plugin looks to upgrade the Certified Device package". Pas certain que ca file dans le venv.

Bref, ça progresse mais si qqun d'un peu plus calé en python pouvait me confirmer que ce que je fais semble correct? Sinon, je me doutais que j'aurais à faire les upgrade plugins manuellement afin de pouvoir activer le venv avant d'upgrader les requirements (AMHA, dans l'UI il va tout remettre dans les répertoires globaux/système), mais si au démarrage il va déjà chercher des choses automatiquement cela va poser pb je pense?