Rendre le plugin XiaomiHome fonctionnel sous Debian 12

Bonjour,

Sans rentrer dans des modifications importantes et surement pas la meilleure facon de faire, voici les étapes que j’ai réalisées pour rendre le plugin opérationnel sous Debian 12 bookworn

Correction des dépendances

Lancer l’installation classique des dépendances depuis jeedom

lancer les dépendances via ligne de commande :

root@jeedom:/var/www/html/plugins/xiaomihome/resources# ./install_force.sh

Si vous avez des erreurs du style

error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

le plus simple c’est de les installer via la commande proposée python3-xyz

apt-get install python3-pyudev
apt-get install python3-requests
apt-get install python3-future
apt-get install python3-construct

Correction dans le code :

Dans le fichier plugins\xiaomihome\resources\xiaomihomed\jeedom\jeedom.py

Ligne 23 : remplacer l'import existant par **from collections.abc import Mapping**
Lignes 130 131 : remplacer Collection.Mapping par Mapping 

			*if ( isinstance(v1, Mapping) and*
*				 isinstance(v2, Mapping) ):*
*				self.merge_dict(v1, v2)*

ca devrait fonctionner :slight_smile:

2 « J'aime »

Merci pour ce workaround

Bonjour,

Bravo et merci pour cette initiative qui nous permet de retrouver ce plugin sous Debian 12.

Si je peux me permettre, et pour compléter ton post, voici à mon avis les seules modifications à apporter dans le code du plugin pour qu’il fonctionne en Debian 12 :

Les dépendances du plugin doivent être installées normalement.

Plugin xiaomihome base version 2022-06-06 01:02:25
Dans le fichier plugins\xiaomihome\core\class\xiaomihome.class.php:

  1. Remplacer Ligne 194
 $xiaomihome_path = realpath(dirname(__FILE__) . '/../../resources/xiaomihomed');

par cette Ligne

    $DAEMON_PATH = realpath(__DIR__ . '/../../resources/xiaomihomed/xiaomihomed.py');
  1. Remplacer Ligne 195
$cmd = '/usr/bin/python3 ' . $xiaomihome_path . '/xiaomihomed.py';

Par cette Ligne

$cmd = system::getCmdPython3(__CLASS__) . $DAEMON_PATH;

Dans le fichier plugins\xiaomihome\resources\xiaomihomed\jeedom\jeedom.py

EDIT du 13/01/2025
Afin d’éviter les fuites mémoires, une nouvelle version de ce fichier a été proposée (merci @Mips) et se trouve dans le plugin-template de Jeedom.

  1. La modification consiste à remplacer la TOTALITE du fichier \jeedom.py.

Pour cela:

Dans le fichier plugins\xiaomihome\desktop\js\xiaomihome.js

  1. Remplacer Ligne 424
jeedom.eqLogic.builSelectCmd({

Par cette Ligne

jeedom.eqLogic.buildSelectCmd({
5 « J'aime »

Bonjour,

je viens d’appliquer les modifications et le démon a directement démarré merci !

Bonjour
Petite question pour ceux qui on passé le plugin xiaomi en debian 12
Fait t il toujours des fuite mémoire ou debian 12 a résolu ce problème que je rencontre sur debian 11 "relance du demon pour récupérer de la memoire "

Ya t’il une possibilité de pousser les fichiers modifiés pour le rendre compatible debian 12 directement via un pr pour que le dev valide les changements dans le plugin ?
Merci

Non il ne faut pas écrire le path vers python3 en dur sinon ca ne fonctionne plus sous debian 11!
Il faut utiliser system::getCmdPython3(__CLASS__) (si les dépendances sont bien installées via packages.json du core)

2 « J'aime »

Bonjour,

en résumé, avec Debian 12, Jeedom 4.4.17 (python venv à partir de 4.4.7), et le plugin-xiaomihome en version 2022-06-06 :

Réglages > Système > Editeur de fichiers :

/plugins/xiaomihome

Dossier Ligne remplacer par
/resources/xiaomihomed/jeedom/jeedom.py 23 import collections from collections.abc import Mapping
/resources/xiaomihomed/jeedom/jeedom.py 130-131 collections.Mapping Mapping
/core/class/xiaomihome.class.php 194 dirname(__FILE__) __DIR__
/core/class/xiaomihome.class.php 195 '/usr/bin/python3 ' system::getCmdPython3(__CLASS__)
/desktop/js/xiaomihome.js 424 buil build

akenad :slight_smile:

5 « J'aime »

Merci @Mips,

Je ne connaissais pas cette nouvelle instruction du core.
J’ai modifié mes propositions d’update en conséquence.

2 « J'aime »

merci @akenad

C’est surtout @Mips qu’il faut remercier pour le python venv dans le core jeedom.

akenad :slight_smile:

2 « J'aime »

alors merci @Mips

Bonjour a tous,

Un grand merci a vous deux @Mips et @akenad

Etant seulement en train de faire le basculement en Debian 11 de mes 2 Jeedom principaux ces derniers jours avant l’hiver.
Je suis en train en parallèle d’anticiper et de tester le passage d’un nouveau Jeedom sur VM en Debian 12 et j’utilise le plugin xiaomi home pour tout mes modules xiaomi soit pret de 60 modules.

Bonne soirée
Philippe

1 « J'aime »

Oui vous avez raison, Il faut rendre à César ce qui appartient à César:+1:

Bonjour,
après plusieurs essais, j’ai bien un plugin et son démon qui semblent fonctionner (environnement de test avec uniquement ce plugin sous Debian 12 et Pi5).
Pour mémoire ou aide ou modif de la solution :
avec la première soluce de @fishton le log remonte une erreur "No module named ‹ serial › " dans jeedom.py
avec les modifs proposées par @akenad je perds l’affichage des boutons dépendances et démon.
c’est a priori les modifs de @Eridani78 qui ont fonctionné, à une différence près dans jeedom.py où j’ai conservé deux lignes pour les deux isinstance. ce n’est pas volontaire, j’ai « simplement » effacé les deux termes ‹ collections ›.
merci beaucoup :slight_smile:

edit: j’oublie d’indiquer que j’avais fait les manips d’installation python3 proposées en haut de topic.

Bonjour,

les modifs que j’ai indiqués sont ni plus ni moins une synthèse dans un tableau des modifs proposées par Eridani78.

akenad :slight_smile:

1 « J'aime »

je ne suis pas dev, je ne comprends pas tout ce que les changements occasionnent. je vois en lisant les solutions qu’il y a des différences, comme la modification de termes en DAEMON PATH de Eridani que tu ne reprends pas et la suppression en bout de ligne de /xiaomied.py qui n’est pas proposée. mais je peux comprendre que c’était induit dans ta proposition et parfaitement compréhensible pour un dev.
merci pour le temps que vous y passez.

le retour : le log remonte une erreur liée à Python d’après mes recherches, mais c’est un « terme » qui a pourtant été changé :
module ‹ collections › has no attribute ‹ Mapping ›
de ce que j’ai compris, c’est from collections.abc import Mapping qui doit être utilisé et ça tombe bien c’est justement proposé en correction. que j’ai faite. y aurait-il un autre endroit où cette modification doit être faite ?
je précise que mis à part remplir le log d’au moins une entrée par minute, ça n’empêche pas le fonctionnement de ce que j’en vois.

Bonsoir,

Vous suivez à la lettre les modifications que j’ai proposées point par point dans le message #3 de ce post et vous ne devriez pas avoir d"erreur Python de remontée.

j’ai dû refaire les modifs sur jeedom.py que j’avais déjà faites.
je remarque également que le plugin ne prend pas en compte le niveau de log que je lui demande, là il s’est remplit en lignes DEBUG (quand j’ai relancé le démon après édition du fichier) alors qu’il est sur Aucun.
bref ça semble fonctionner comme il veut, merci encore.