Air Purifier 3H

Merci :slight_smile:
Pour valider le tuto j’ai réinstallé un Jeedom (Core v4) sur une machine virtuelle pour être sur de ne pas me tromper.

Bonsoir Privas,

Super tuto et super boulot, tu es un vrais chef tout fonctionne à merveille.
Merci infiniment.

Pour préciser à tous, installation faite sur mon Raspberry 3B+ avec jeedom Core V4 en utilisation pour ma domotique tout fonctionne parfaitement.
Encore merci beaucoup pour l’excellent travail.

1 « J'aime »

Merci pour le tuto, fonctionnel ! Ca fera parfaitement l’affaire sans attendre une mise à jour du plugin Mihome :slight_smile:

Perso, installé sur ma debian en VM sur proxmox.
Pour taper sur le json j’ai utilisé directement localhost dans l’url.

EDIT : bon après quelques jours, le pb c’est que le script balance de nombreuses erreurs chaque jour à chaque fois que l’appareil n’est pas trouvé sur le réseau, allez savoir pquoi mais ca arrive une 40aine de fois par jour. Je vais déjà baisser la fréquence de rafraichissement mais à voir pour intégrer un truc plus malin. En tout cas ça dépanne en attendant l’ajout sur le plugin xiaomi (ou un plugin miio ? :slight_smile:

2 « J'aime »

Très intéressant !
J’essaie de mon coté mais au moment où j’écris la commande
« sudo pip3 install python-miio »
J’ai comme réponse :" python-miio requires Python ‹ >=3.6 › but the running Python is 3.5.3"

Je dois installer une version supérieur de Python ? Je ne risque pas de rendre incompatible d’autres plugins ?

Bonjour Thor,

Tu peux essayer mais lance une sauvegarde avant ! :wink:

Hello Privas,
Merci pour ton tuto, il mérite un post à part : tout semble marcher au poil ici !

Thor, j’avais le même soucis que toi, je m’en suis sorti en installant python3.9 en altinstall dans le usr/bin.
Voici les commandes qui différaient des tuto d’install python que j’ai trouvé sur le net, peut être que ca aidera quelqu’un !

> Pour installer python dans usr/bin plutot que usr/local/bin
./configure --enable-optimizations --with-ensurepip=install --prefix=/usr

> Pour ne pas écraser ton python de base
sudo make altinstall

> Une fois l'alternative installé
python -m pip install --upgrade pip
python -m pip install python-miio

1 « J'aime »

Bonjour @privas
Il m’arrive très souvent d’avoir ce genre d’erreur. Aurais tu une petite idée
Ps: tout fonctionne très bien pourtant

Merveilleux @privas ! Ok pour moi sur v3.3.54 :slight_smile:

Bonjour,
Je découvre avec plaisir que le fil que j’ai initié a trouvé une bonne âme pour partager une solution. Merci beaucoup à elle, j’étais personnellement loin de pouvoir bâtir une telle solution.
Je suis presque au bout, mais bute sur le problème suivant : la commande sudo miiocli --output json airpurifiermiot --ip xxxxx --token xxxxxx status > /var/www/html/purifier.json
tombe en erreur
-bash: /var/www/html/purifier.json: Permission non accordée
Je l’ai testée sans la redirection de l’output, ça marche.
Je l’ai testée en dirigeant l’output vers un fichier chez moi, mais j’obtiens toujours l’erreur.
Quelqu’un a-t-il une idée de l’origine du problème ?

J’ai trouvé tout de même un fichier purifier.json dans le dossier html dont voici le contenu :

Traceback (most recent call last):
File « /usr/local/bin/miiocli », line 11, in
sys.exit(create_cli())
File « /usr/local/lib/python3.6/site-packages/miio/cli.py », line 45, in create_cli
return cli(auto_envvar_prefix=« MIIO »)
File « /usr/local/lib/python3.6/site-packages/miio/click_common.py », line 59, in call
return self.main(*args, **kwargs)
File « /usr/local/lib/python3.6/site-packages/click/core.py », line 760, in main
_verify_python3_env()
File « /usr/local/lib/python3.6/site-packages/click/_unicodefun.py », line 130, in _verify_python3_env
" mitigation steps.{}".format(extra)
RuntimeError: Click will abort further execution because Python 3 was configured to use ASCII as encoding for the environment. Consult https://click.palletsprojects.com/python3/ for mitigation steps.

This system supports the C.UTF-8 locale which is recommended. You might be able to resolve your issue by exporting the following environment variables:

export LC_ALL=C.UTF-8
export LANG=C.UTF-8

Je ne sais pas où et comment pratiquer les exports préconisés ci-dessus. En attendant, j’ai créé moi-même le fichier json en copiant/collant la sortie de la commande.

J’ai trouvé une solution d’attente pour ceux qui sont concernés :
Pour la commande « Refresh » et toutes les commandes de type « Action », faire précéder l’appel à miiocli des deux commandes préconisées dans la trace de l’erreur à savoir

export LC_ALL=C.UTF-8
export LANG=C.UTF-8

Me voilà enfin avec un Air Purifier 3H opérationnel sous Jeedom.

Mille mercis, Benjamin, pour ton travail et ton partage. :slight_smile: :+1:

Hello,
J’avais le même soucis que toi.
Etrangement je n’ai plus le message d’erreur après avoir migré OS vers debian 10 qui vient avec python 3.7 en utilisant la même sauvegarde de Jeedom.
En espérant que ca règle ton problème aussi.

1 « J'aime »

Bonsoir et merci de ta réponse.
Je suis également sous buster et les erreurs sont récurrentes.

@labraud Pourrais tu montrer une capture, je t’avoue ne pas comprendre ce que tu préconises pour ne plus avoir d’erreur ?

Tu observeras les deux commandes export qui précèdent l’appel à miiocli. C’est ce que j’ai ajouté devant toutes les commandes du script qui appellent miiocli.

Je n’avais pas le problème de langue mais l’erreur que tu rencontrais avant (json invalide ou indécodable). L’erreur revient que lorsque le purificateur n’est pas branché. Est ce que ton routeur a des absences ou que le purificateur n’est pas branché h24?

Merci @labraud c’est un peu plus clair pour moi :crossed_fingers:
Oui en effet ce n’est pas un problème de langage que j’ai, mais de communication.
Je pense que je vais faire un reset de mon routeur. Car en effet il m’arrive d’avoir des coupures de WiFi et je crois que ça doit venir de là. En effet. Merci @Dimide

Re @remidetoulon

Après y avoir pensé un moment et même si je débute en debian (/script) je pense avoir trouvé la solution pour ton problème de communication avec un « if » via le code ci dessous pour la commande refresh :

ping -c1 -W1 -q adresseIPAirPurifier &&  sudo miiocli --output json airpurifiermiot --ip adresseIPAirPurifier --token tokenairpurifier status > /var/www/html/purifier.json || 

Il faudra bien sur remplacer l’adresse IP & le token.
En gros ton jeedom fera un ping sur l’adresse IP du purifier, si il peut atteindre l’host il lancera la commande miiocli sinon il fera rien et utilisera les infos du précédent JSON.
Ce code est améliorable si tu veux par exemple gérer autrement l’erreur de connection (exemple parser un json avec des champs perso contenant « Erreur Comm » ou autre).
J’ai testé ca m’a l’air de marcher chez moi.

Bon courage

Edit : le code ne s’affichait pas

Merci beaucoup @Dimide c’est une excellente idée. Je vais essayer.

1 « J'aime »

Bonjour @Dimide
J’ai mis la commande comme conseillé, mais lorsque le ping est nul j’ai quand même l’erreur.
Je viens de relire ton post pour voir si je l’avais fait convenablement et je viens de m’apercevoir que tu me préconise un « if » . Ou dois-je le mettre ce if ? Comment dois-je m’y prendre ?

Hello,
De ce que je comprends du langage il faut le " || " en fin d’expression pour faire le si.

Je comprends que la syntaxe est :
« ping ip && commande si retour de ping || commande si pas de retour de ping ici rien ».
Je me suis inspiré de ça : networking - Checking host availability by using ping in bash scripts - Stack Overflow

J’avais testé la commande de la sorte :
ping -c1 -W1 -q adresseIPAirPurifier && echo 1 > /var/www/html/purifier.json || echo 0 > /var/www/html/purifier.json
Pour avoir un 1 quand il était accessible et un 0 quand il n’était pas accessible et ca semblait marcher.
Je vais réessayer ce weekend.