Plugin Panasonic cloud comfort

@olivr2s je suis en train de passer sur la solution MQTT… que je découvre au passage…
Je récupère bien les « infos » de la clim… Par contre, les commandes actions pas trouvé…
Lorsque j’allume et j’éteins la clim, je m’attendais à avoir une publication dans un topic… rien…
Stp, est-ce que tu pourrais faire quelques captures d’écrans de ton paramètrage côté JMQTT?
Ca m’aiderait à identifier ce qu’il faut faire…
Merci d’avance…

Une autre question, tu as branché directement ton ESP32 sur la clim sans passer par un adaptateur de niveau? il me semblait que les ESP32 prennaient du 3,3V en entrée uniquement…

@olivr2s
En cherchant, j’ai fini par tomber sur la solution…
Je la met ici, si quelqu’un a le même soucis:
Les topics sont nommés en finissant soit « state » pour récupérer le statut, soit « command » pour le définir…
Typiquement
le topic « nom_device/climate/panasonic_ac/mode/state » => lit le statut de la clim ( « off », « cool », « heat », « fan_only », "dry"ou « heat_cool »)
et le topic « nom_device/climate/panasonic_ac/mode/command » => le change

idem pour les températures
« nom_device/climate/panasonic_ac/target_temperature/state »
« nom_device/climate/panasonic_ac/target_temperature/command »

Olivr2s est sur HA maintenant.

Pour la partie MQTT, les ESP32 ont maintenant un connecteur 5V donc il ne faut pas s’embeter on peux brancher directement.

Pour les Topics sinon le mieux est d’utiliser « MQTT Explorer » qui montre tout ce que l’on peut faire

Sur une de mes 3 climatisations il manque par exemple NANOE-G (la fonction NANOE-X est reconnue mais pas la G) voir ici : Is 'nanoeX' the same as 'nanoe-G'? · Issue #25 · DomiStyle/esphome-panasonic-ac · GitHub

Mais sinon c’est ultra rapide et complet.

Bonjour à tous,

Je déterre un peu, mais pour faire court, je prévois de migrer de eedomus vers Jeedom.
Ma première intégration est de mettre en place le contrôle de mes 2 PAC Panasonic.
La création des commandes de script se passe bien, jusqu’à la dernière:

#!/usr/bin/env python3
/var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py ‹ XXX@gmail.com › ‹ XXX › get 1

Erreur pour [Salon][PAC Salon][Infos PAC Salon] : Erreur sur python #!/usr/bin/env python3 /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py XXX@gmail.com XXX get 1 2>&1 valeur retournée : 126. Détails : sh: 2: /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py: Permission denied

J’ai attaqué la machine en ssh, passé la commande pour voir, même chose.
En revanche, toujours en ssh, si je fais un python <la_commande> j’ai bien un retour.
Et pour toutes les autres commandes (j’ai testé On et Off), ça semble fonctionner correctement.
J’avoue que je sèche un peu (1/ parce que les scripts c’est pas vraiment mon fort, et 2/ parce qu’en plus je suis archi débutant sur Jeedom)

Si quelqu’un a une idée je suis preneur

Et un immense merci à @olivr2s

Edit:
J’ai refait des tests, la situation a évolué mais je ne sais pas pourquoi…
Erreur pour [Salon][PAC Salon][INFO] : Erreur sur python #!/usr/bin/env python3 /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py XXX@gmail.com XXX get 1 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File « /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py », line 5, in main.main() File « /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud/main.py », line 202, in main session.login() File « /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud/session.py », line 100, in login with open(self._tokenFileName, ‹ w ›) as tokenFile: PermissionError: [Errno 13] Permission denied: ‹ /var/www/.pcomfortcloud-token ›

Edit 2:
En rajoutant dans la ligne de commande le paramètre -t pcomfortcloud-token, j’ai pu sauvegarder sans erreur et il semblerait qu’il y ait bien un retour.

Edit 3 et 4 (parce que ça commence à faire beaucoup…
Si j’active le scipt, j’ai toujours des Permission Denied sur le token, et au bout d’un moment je me mange des Too many requests (script toutes les 5min)
Et sur le scénario, mes variables sont désespérément vides. Le code s’exécute avec succès, j’ai forcé à 0 les variables, elles redeviennent vides après…Je colle mon code ici, j’ai beau relire, je ne vois pas où peut être le souci…

$cmdinfo = "#[Salon][PAC Salon][INFO]#";
$RetourInfo = cmd ::byString($cmdinfo)->execCmd();
//scinde l'info
list($val1, $val2, $val3, $val4, $val5, $val6, $val7, $val8, $val9, $val10, $val11, $val12) = explode(" ", $RetourInfo);
//mise en variable
$scenario->setData("valeurTempExt_Salon", "$val5");
$scenario->setData("valeurConsigne_Salon", "$val6");
$scenario->setData("valeurPower_Salon", "$val7");
$scenario->setData("valeurMode_Salon", "$val8");
$scenario->setData("valeurFanSpeed_Salon", "$val9");
$scenario->setData("valeurAirSwingLR_Salon", "$val10");
$scenario->setData("valeurAirSwingUD_Salon", "$val11");
$scenario->setData("valeurEco_Salon", "$val12");

$myVar = $scenario->getData('valeurTempExt_Salon');
list($val1, $val2) = explode(" : ",$myVar);
$scenario->setData("valeurTempExt_Salon", "$val2");
cmd::byString('#[Salon][PAC Salon][TempExt]#')->event("$val2");

$myVar = $scenario->getData('valeurConsigne_Salon');
list($val1, $val2) = explode(" : ",$myVar);
$scenario->setData("valeurConsigne_Salon", "$val2");
cmd::byString('#[Salon][PAC Salon][Etat Consigne]#')->event("$val2");

$myVar = $scenario->getData('valeurPower_Salon');
list($val1, $val2) = explode(" : ",$myVar);
$scenario->setData("valeurPower_Salon", "$val2");
cmd::byString('#[Salon][PAC Salon][Etat Power]#')->event("$val2");

$myVar = $scenario->getData('valeurMode_Salon');
list($val1, $val2) = explode(" : ",$myVar);
$scenario->setData("valeurMode_Salon", "$val2");
cmd::byString('#[Salon][PAC Salon][Etat Mode]#')->event("$val2");

$myVar = $scenario->getData('valeurFanSpeed_Salon');
list($val1, $val2) = explode(" : ",$myVar);
$scenario->setData("valeurFanSpeed_Salon", "$val2");
cmd::byString('#[Salon][PAC Salon][Etat Fan]#')->event("$val2");

$myVar = $scenario->getData('valeurAirSwingLR_Salon');
list($val1, $val2) = explode(" : ",$myVar);
$scenario->setData("valeurAirSwingLR_Salon", "$val2");
cmd::byString('#[Salon][PAC Salon][Etat Volet Horizontal]#')->event("$val2");

$myVar = $scenario->getData('valeurAirSwingUD_Salon');
list($val1, $val2) = explode(" : ",$myVar);
$scenario->setData("valeurAirSwingUD_Salon", "$val2");
cmd::byString('#[Salon][PAC Salon][Etat Volet Ventilation]#')->event("$val2");

$myVar = $scenario->getData('valeurEco_Salon');
list($val1, $val2) = explode(" : ",$myVar);
$scenario->setData("valeurEco_Salon", "$val2");
cmd::byString('#[Salon][PAC Salon][Etat Eco]#')->event("$val2");

Bon.
Il y a quelque chose que je ne comprends pas mais je n’arrive pas à mettre le doigt dessus, si quelqu’un pouvait m’aider ce serait cool.
J’ai fait un chmod 777 sur le fichier de token, du coup je n’ai plus d’erreur d’exécution de script et dans le log event, j’ai bien les exécutions avec le résultat.
Mais mes variables restent désespérément vides.
Le résultat de la commande INFO semble avoir un retour avec plein d’espaces.
Du coup, j’ai ajouté dans mon code (qui est dans le post au dessus):

$RetourInfo2 = preg_replace('/\s\s+/', ' ',$RetourInfo);

Et du coup, sur la ligne d’après, je la transforme en:

list($val1, $val2, $val3, $val4, $val5, $val6, $val7, $val8, $val9, $val10, $val11, $val12) = explode(" ", $RetourInfo2);

Pas d’erreur d’exécution, mais les variables sont toujours vides.
J’ai vérifié la définition des variables et leur correspondance dans la GUI, elles sont bonnes.
J’ai vérifié que le $cmdinfo était le bon, et c’est le cas.

Et dans les logs event:

0453|[2023-11-17 12:01:03][INFO] : Exécution du scénario [Gestion Chauffage][Salon][Scenario PAC Salon] déclenché par : user
0454|[2023-11-17 12:01:03][INFO] : Evènement sur la commande [Salon][PAC Salon][TempExt] valeur : °C
0455|[2023-11-17 12:01:03][INFO] : Evènement sur la commande [Salon][PAC Salon][Etat Power] valeur :
0456|[2023-11-17 12:01:03][INFO] : Evènement sur la commande [Salon][PAC Salon][Etat Mode] valeur :
0457|[2023-11-17 12:01:03][INFO] : Evènement sur la commande [Salon][PAC Salon][Etat Fan] valeur :
0458|[2023-11-17 12:01:03][INFO] : Evènement sur la commande [Salon][PAC Salon][Etat Volet Horizontal] valeur :
0459|[2023-11-17 12:01:03][INFO] : Evènement sur la commande [Salon][PAC Salon][Etat Volet Ventilation] valeur :
0460|[2023-11-17 12:01:03][INFO] : Evènement sur la commande [Salon][PAC Salon][Etat Eco] valeur :

J’ai positionné mon scénario dans un groupe, est-ce que ça a une influence?
Est-ce que mon code modifié est bon?

Si quelqu’un peut m’aider :frowning:
Je sèche totalement.

Merci!

J’ai fini par ouvrir un autre sujet dans la section scénario et mon problème est résolu, le lien vers le sujet:

Bonjour à tous,

Tout fonctionnait parfaitement jusqu’à aujourd’hui, mais depuis ce matin, j’ai l’erreur suivante :

Traceback (most recent call last):
File « /usr/local/bin/pcomfortcloud », line 8, in
sys.exit(main())
File « /usr/local/lib/python3.9/dist-packages/pcomfortcloud/main.py », line 202, in main
session.login()
File « /usr/local/lib/python3.9/dist-packages/pcomfortcloud/session.py », line 99, in login
self._create_token()
File « /usr/local/lib/python3.9/dist-packages/pcomfortcloud/session.py », line 135, in _create_token
raise ResponseError(response.status_code, response.text)
pcomfortcloud.session.ResponseError: Invalid response, status code: 429 - Data: {« code »:42901,« message »:« Too Many Requests »}`

J’avoue que j’ai un peu spammé ce weekend, notamment parce que je fais des tests pour améliorer mes scénarios.
Est ce que l’un de vous à déja rencontré le problème et trouvé une solution ?
je vais attendre 24h pour voir si cela se résoud tout seul au bout d’un certain délai …

j ai exactement le meme message d erreur alors que je ne fait pas beaucoup d appel
j espere que le programme vas etre mis a jours car pas facile de gerer ma pac et en hiver en plus.
je l ai depuis 2 jours donc peu de chance que ca revienne pour toi

C’est pour ces raisons que je suis passé en pilotage local avec un ESP32

Merci pour l’info @delirium71 ; Toujours pas revenu de mon coté… j’ai les boules parce que ça tombe au pire moment (hiver) …

Je prévoyais à terme de passer en pilotage local, mais comme le script fonctionnait plutot bien jusqu’a maintenant ; j’avais pas le courage de me lancer …
mais bon, à priori plus trop le choix, il faut y aller!

Le script marche tres bien, des fois il faut mettre à jour le fichier session suite à des modifications coté panasonics. Mais ce qui ma fait passé du coté Local c’est que plusieurs fois les serveurs Panasonics étaient en caraf pendant plusieurs jours. Donc se lever et avoir la maison froide plus possible.

yes @mortyre et pour info, sur le github du script, tout le monde a signalé le même problème …
Panasonic a du mettre en place des restrictions sur son API

Hello,

pour info, le problème a été résolu par les dev :v: :ok_hand:

Pour résoudre le problème, j’ai juste eu à faire un :

pip install pcomfortcloud --upgrade -vv

Et à titre perso, j’ai reçu mon ESP32 aujourd’hui ; je me lance dans le tuto d’ @olivr2s :wink:

j ai fait la mise a jours du fichier session et tout essayé mais pas moyen ca ne veux plus rien savoir
ca me met une erreur permission denied pour pcomfortcloud

Moi de même le simple copier coller (j ai envie de dire habituel) du fichien session dans jeexplorer ne marche pas mais le message d erreur change :

« 1. Détails : Traceback (most recent call last):
File « /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py », line 4, in
from pcomfortcloud import main
File « /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud/init.py », line 12, in
from .session import (
File « /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud/session.py », line 15, in
from .settings import PanasonicSettings
File « /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud/settings.py », line 4, in
from packaging import version
ModuleNotFoundError: No module named ‹ packaging › »

En fait, je me répond a moi même j ai changer de lien GitHub pour le copier coller :

Et maintenant ce qui est surprenant c’est que en lançant manuellement mon scénario de régulation ça marche par contre dès que ce sont des déclencheurs qui active le scénario j ai l erreur que tous le monde a actuellement ! Quelqu’un aurait il une explication ?

Vérifie que c’est bien le même exécutable qui est utilisé dans les deux cas.

A mon sens, mieux vaut mettre à jour proprement le programme plutôt que de ne mettre à jour qu’un fichier.

comment on le met proprement a jours . quand je l ai decouvert il fallait juste copier les fichier a l emplacement
pour moi plus rien ne marche

Personnellement, j’utilise la version de LostField (qui recommande d’utiliser pip pour installer le package)
contrairement à la version de Sockless-coding qui lui en effet, recommande de copier son répertoire au bon endroit.

Si tu as commencé par la methode de Sockless-coding et que ça a fonctionné, je te recommande de rester sur la même solution.

la méthode d’installation que j’avais choisi était la suivante, en ligne de commande (ssh) sur jeedom :

python3 -m pip install --upgrade pip
pip install --upgrade
pip install pcomfortcloud 
pip install pcomfortcloud  --upgrade -v

une fois installé, le package « pcomfortcloud » est disponible avec la commande suivante :

/usr/local/bin/pcomfortcloud 'toto@gmail.com' 'motdepasse' get 1

Et ensuite j’édite mes objets scripts sous Jeedom pour ajouter le chemin complet.

Cette methode est différente mais je ne pense pas qu’elle résoudra vos problèmes.
Est ce que la connexion à l’application Panasonic fonctionne ?
Si oui, identifiez formellement le mot de passe utilisé pour vérifier que c’est bien le même.

l’erreur est toujours un pb de mdp ?

je viens de trouver d ou venez le probleme. jusqu a maintenant j avais le fichier pcomfortcloud.py dans le meme repertoir que le reste alors que la il faut qu il soit dans le repertoire et le reste dans un dossier pcomfortcloud .