Plugin Panasonic cloud comfort

Bonjour,

En fait ça fait un petit moment que j’utilise plus le script et scénario et je passe par le plugin AlexaAPI qui me remonte mes clims
Par contre depuis quelques jours ça déconne… sûrement depuis les modifications côté Panasonic…

Pour le github, effectivement il n’y a plus de mise à jour depuis un moment, par contre côté HA c’est bien à jour et avec plus trucs.
J’ai d’ailleurs essayé hier :sweat_smile: sur HA en docker sur un autre Pi et effectivement tout remonte pour les clims comme les consommations…
Sur le coup je me suis dit que j’allais faire communiquer HA avec mon Jeedom, mais comme HA est en docker, c’est galère…

Si il y avait un plugin Jeedom comme sur HA ce serait le top…

Le script fonctionne encore apres modification donc tu n’es pas obligé de passer par HA mais en effet sur HA c’est bien plus complet avec les consommations estimées.

Je vais voir si je peux adapter le script HA à Jeedom dès que j’ai un peu de temps.

Voici une partie dans HA

1 « J'aime »

le mien sous Jeedom
FireShot Capture 218 - Page 5 - Chauffage - Jeedom - 192.168.1.86

1 « J'aime »

Bonjour Motyre,

Quand tu dis, « Le script fonctionne encore après modification » j’aimerai savoir de quelle modification tu parles.
Pour ma part, tout marchait bien jusqu’en Juillet 22 ( date concordante avec ce « post » .Depuis j’ai un message d’erreur quand je lance des actions du script.
Ca se passe a priori lors de l’authent : voici le message:ERREUR :pour [Climatisations][Clim Séjour]INFO : Erreur sur python #!/usr/bin/env python3 /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py -t sessions.py prenom.nom@gmail.com P@ssWord 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 99, in login self._create_token() File « /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud/session.py », line 132, in _create_token raise ResponseError(response.status_code, response.text) pcomfortcloud.session.ResponseError: Invalid response, status code: 403 - Data:

As tu une idée de ce qu’il faut modifier dans ma conf pour que ça fonctionne de nouveau ?

Par avance merci

Bonjour,

C’est normal, Panasonic à fait des modifications sur l’identification.
Il faut aller sur le github du script:

Regarder les derniers fichiers du code qui ont été modifiés dans le dossier pcomfortcloud, donc actuellement le fichier:

session.py

et copier pour remplacer celui qui est sur Jeedom dans

/var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud

Cela devrait résoudre le problème…

Merci pour le lien et la rapidité de ta réponse !
NICKEL , tout refonctionne ouff

Bonjour à tous !

Merci beaucoup pour ce partage !
j’ai réussi à domotiser ma clim, voici à quoi ça ressemble :

jai un tout petit problème néanmoins, les commandes « Info » ne se mettent pas à jour via Jeedom si change l’action via l’action liée :

la commande ne se met à jour que via le script ‹ actualiser ›.
C’est deja bien, mais ce serait encore mieux si la commande FAN mettait d’elle même à jour la variable ETAT_FAN sans avoir à solliciter l’API Panasonic avec un get.

Est ce que j’ai mal fait quelque chose ?

et encore merci pour tout le boulot olivr2s, ainsi que tout ceux qui ont participé à topic :slight_smile:

Jolie gestionnaire de la climatisation, simple et fonctionnelle.

De mon côté je travail depuis hier à piloter ma climatisation en local en MQTT sans passer par le cloud et l’API Panasonic.
C’est une solution avec un ESP32 (j’ai utilisé un ESP32 CAM qui dormait dans un tiroir), un connecteur adéquate (commandé chez RS), une programmation via ESPhome (en docker et avec Chrome) et le plugin jMQTT (déjà fortement utilisé dans mon Jeedom).

Pour le moment, j’arrive à avoir toutes les informations de la climatisations qui remontent dans Jeedom :smile:.
Par contre je bute sur l’envoi des commandes, j’ai seulement réussi à arrêter la clim… :neutral_face: :thinking:
Je dois encore travailler dessus…mais pas avant 10 jours…
Je ferais un retour dès que ce sera suffisamment opérationnel.

Ce qui remonte actuellement dans MQTT explorer…

1 « J'aime »

Voici la suite de mes essais pour avoir en local mes clims Panasonic en MQTT.
Dans mon précédant message, j’avais bien les retours d’informations mais j’arrivais pas à piloter les différentes fonctions de la clim si ce n’est de l’arrêter… :neutral_face:

Comme j’avais fais l’essai avec une vieille carte ESP32 CAM qui n’est pas dans les recommandations, j’ai fait l’essai cette fois-ci avec une carte ESP32 (az-delivery-devkit-v4) et c’est effectivement beaucoup mieux :smiley:.

J’ai bien les informations qui remontent et surtout j’arrive à piloter les différents éléments de ma clim…mais je ne sais pas si c’est par rapport au modèle de ma clim ou un autre élément mais il y a 3 fonctions qui ne remontent pas lorsque je commande la clim avec sa télécommande qui sont:
image
Seule la fonction Econavi remonte et peut être pilotée… Dans mon cas cela ne me gêne pas, c’est tout le reste qui m’intéresse.

Donc une fois toutes les fonctions contrôlées et avoir récupéré les codes des commandes action avec MQTT-explorer, j’ai créé mon template dans le plugin JMQTT pour pouvoir enfin piloter en local ma clim et ne plus devoir utiliser le cloud Panasonic. Voici le résultat:

Clim à l’arrêt

Clim en route avec quelques commandes autres que Auto

Les commandes et retour d’informations direct sans délai et les infos sont actualisées toutes les " secondes environ via MQTT. Le top et plus besoin de script à mettre à jour lorsque Panasonic fait des mises à jour ou des problèmes de connexion avec le cloud Panasonic.

Autres gros avantages:

  • la consommation de la clim en temps réel remonte (dommage que ce ne soit pas un compteur de conso en kWH)
  • une fois la carte ESP32 programmée et installée dans la clim, il est possible de faire des mises à jour OTA avec ESP Home si l’option a été activé dans le code. J’ai fait plusieurs essais avec succès comme désactiver la remontée des infos des 3 fonctions non pris en charge pour limiter la quantité de données envoyées sur MQTT.
1 « J'aime »

Franchement je trouve cela génial, avec ce systeme tu résouds les deux problemes génants comme tu las dit : la dépendance au Cloud (les serveurs panasonics sont tres souvent non disponibles) et en plus tu récupéres la consommation de l’appareil comme quand j’avais intesishome.

Ton ESP32 tu l’alimentes comment ? tu peux faire une photo de l’ESP mis en place stp ? et donner la référence de ton connecteur chez RS ? MErci

Pour l’ESP32 j’ai utilisé celui-ci:
https://www.amazon.fr/gp/product/B071P98VTG/ref=ppx_yo_dt_b_asin_title_o04_s00?ie=UTF8&psc=1

Pour le connecteur CN-CNT j’ai commandé chez Radiospares les connecteurs vides et les câbles avec broches ci-dessous:

Pour l’alimentation de l’ESP32 cela se fait par la climatisation en récupérant sur le connecteur 5V et GND
Raccordement comme sur la discussion du Github ci-dessous:

Par contre désolé, je n’ai pas de photo de l’ESP monté dans la climatisation, mais il y a un espace suffisamment grand pour le loger et avec du plastique tout autour pour éviter tout contact avec une partie métallique.

2 « J'aime »

Bonjour à tous,

Franchement super tuto et merci pour les PDF.
J’ai dû un peu adapter le tuto de @olivr2s mais ça a fonctionné nickel. (je parles de la partie via le cloud et non MQTT)
J’ai enfin pu ajouter mes clims panasonic à mon jeedom

image

Concernant la partie scénario, voici ce que j’ai trouvé pour simplifier le code. Je précise que je ne suis pas du tout développeur et que il reste encore surement beaucoup d’améliorations à apporter à ce que je propose.

$RetourInfo = cmd ::bystring($cmdinfo)->execCmd();
$str = ltrim($RetourInfo, ',');
$str2 = preg_replace('/\s\s+/', ' ',$str);

Cette partie me sert à formater la chaine de caractère reçu par la commande INFO. En effet de mon côté je reçois beaucoup d’espace inutile dans le retour de la commande INFO.

  • Le ltrim va permettre de remplacer les espaces en début et fin de ligne. (je pense finalement inutile, c’est un reliquat de test)
  • Le preg_replace me permet du supprimer tous les espaces inutiles afin d’être sur que tous les « mots » de la chaine de caractères soient séparés par un seul espace.

A ce niveau la je pense qu’on peut déjà optimiser en appliquant le preg_replace directement sur la variable $RetourInfo

$list = explode(" ",$str2);

Cette ligne me permet de ranger dans un tableau tous les mots de la chaine de caractère reçue par la commande INFO.
La valeur des champs du tableau est du coup récupérable en utilisant $list[0], $list[1], $list[2] etc etc.

cmd::byString('#[Climatisation][ClimChambreAmi][Etat Power]#')->event("$list[19]");
cmd::byString('#[Climatisation][ClimChambreAmi][Etat Consign]#')->event("$list[16]");
cmd::byString('#[Climatisation][ClimChambreAmi][TempExt]#')->event("$list[13]");
cmd::byString('#[Climatisation][ClimChambreAmi][Etat Volet H]#')->event("$list[28]");
cmd::byString('#[Climatisation][ClimChambreAmi][Etat Volet V]#')->event("$list[31]");
cmd::byString('#[Climatisation][ClimChambreAmi][Etat Mode]#')->event("$list[22]");
cmd::byString('#[Climatisation][ClimChambreAmi][Etat Eco]#')->event("$list[34]");
cmd::byString('#[Climatisation][ClimChambreAmi][TempInt]#')->event("$list[10]")

J’exploite ensuite simplement les champs du tableau.

Voilà peut être que cette petite simplification pourra vous être utile.

J’ai des questions concernant l’authentification.

Savez-vous si l’échange des informations d’authentification est bien sécurisé entre jeedom et le cloud panasonic?

Savez-vous si il y a une méthode pour ne pas renseigner le mot de passe en claire dans la partie script?

Très bonne journée et encore merci pour ce super tuto !

1 « J'aime »

Bonjour,

Est ce que ça fonctionne toujours chez vous?
Je me suis lancé dans la mise en place du pilotage des clims chez moi mais voici le retour que j’ai… :cry:

Nous sommes bien d’accord sur le fait qu’il faut écrire dans le script
#!/usr/bin/env python3
/var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py user password get 1
Et mes identifiants ne comportent aucun caractère complémentaires type ‹  › ou <>?

Merci par avance pour votre aide!

Bonjour,
J’avais mis en place cette solution de pilotage de ma clim qui fonctionnait parfaitement.
Je ne l’avais pas utilisée depuis quelque temps et aujourd’hui cela ne fonctionne plus :

Erreur pour [Espace Multimédia][Clim][INFO] : Erreur sur python #!/usr/bin/env bash /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py xxxx@xxxx.com xxxxxxx 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 ›

Merci pour votre aide.

Il faut mettre à jour le programme pour la session : GitHub - lostfields/python-panasonic-comfort-cloud: A python module for reading and changing status of panasonic climate devices through Panasonic Comfort Cloud app api

@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");