Air Purifier 3H

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.

Merci @Dimide je regarde ça dès lundi :wink:

1 « J'aime »

Bravo à la personne ayant compiler tout ça… Mon purificateur est pilotable via Jeedom désormais.

Je ne suis pas développeur, peux être que ce type de méthode n’est pas applicable/automatisable pour être ajouter au Plugin mais @lunarok pourrait peut être s’en inspirer pour intégrer rapidement ce dispositifs attendus de beaucoup dans une prochaine mise à jour.

En tout cas merci encore pour cette astuce et merci à Lunarok pour son plugin :wink:

Bonne journée à toutes et à tous.

J’ai bien suivi le guide pour installer non pas un air purifier mais un fanp11, c’est le même principe.

Pour la commande on/off pas de souci, ça fonctionne.

Par contre j’ai un problème pour la commande d’informations Power que j’ai paramétrée comme ça

En haut de page dans un bandeau rouge j’ai :

Echec de la requête HTTP : http://192.168.XX.XX/fanp11.json cURL error : Failed to connect to 192.168.XX.XX port 80: Connection refused

Une idée ? l’IP c’est bien celle du ventilateur qu’il faut indiquer ?

Merci pour votre aide.