Plugin Panasonic cloud comfort

Bonjour,

j’ai fais plusieurs recherches et je n’ai pas trouvé de solutions pour ajouter le contrôle à distance des mes climatisations Panasonic dans Jeedom.
Elles sont équipées de boitier CZ-TACG1 qui permet de les contrôler avec un smartphone via l’application Panasonic cloud comfort.

J’ai trouvé sur Github un module en Python qui permet le contôle:

Et un second Github de la même chose mais fait sur HomeAssistant:

Je ne possède pas suffisamment de connaissances pour faire un plugin, mais si ça peut intéresser quelqu’un de faire le plugin pour Jeedom

Au final, j’ai utilisé le code Python du premier lien Github que j’avais trouvé.

  • Utilisation du Plugin Script pour créer un Script Clim avec les actions des différentes fonctions et les infos pour les valeurs.
  • Utilisations d’un scénario pour traiter les informations récupérées par le script et les mettre dans des variables avec mise à jour des infos.
  • Utilisation des quelques widgets et codes CSS pour la mise en forme (Pas de virtuel, directement la mise en forme du Script)

Et voici le résultat:
image

Tout fonctionne bien et les valeurs sont mises à jour à chaque commande.
J’avais mis un Cron pour actualiser la tuile, mais comme de temps en temps le cloud de Panasonic n’est pas accessible, j’ai désactivé le Cron pour ne plus avoir de messages d’erreur et j’ai rajouté un bouton pour Actualiser le tout manuellement.

Si j’ai le temps, je ferais peut être des icônes pour avoir un visuel des différents états de la clim.

2 « J'aime »

Bonjour Olivr2s,
je viens de lire votre article et je suis super intéressé par le script que vous avez adapté.
j’ai un tri-split Panasonic et l’app Panasonic (hyper capricieuse et austère) et je souhaiterai les piloter et/ou au moins avoir les retour d’état.
pourriez-vous me décrire l’adaptation du script que vous avez fait ?
merci d’avance

@Caralex
J’ai trouvé du temps et je viens de faire des PDF avec des annotations pour expliquer quoi faire.
Les PDF sont des captures d’écrans de mon Jeedom, mais le texte est sélectionnable pour pouvoir faire un copier coller des différents codes et éviter de tout taper

Il y a par ordre en PDF → Jeexplorer, Script, Scénario, Variables
Jeexplorer - Jeedom.pdf (150,1 Ko) Scénario Conversion Infos Clim - Jeedom.pdf (1,6 Mo) Script - Jeedom.pdf (529,5 Ko) Variables clim - Jeedom.pdf (63,4 Ko)

J’espère que c’est suffisamment claire et que ça te permettra de piloter tes clims

1 « J'aime »

Bonjour olivr2s,
Je n 'avais pas vu ta réponse. un grand merci à toi. Je fais essayer de le mettre en place ce week end en suivant toutes tes indications et je te ferai un retour.
je suis quand même super étonné qu’il n’y ai pas plus de sujets sur le pilotage de la climatisation pour les climatiseurs déjà équipés d’un module wifi.
Mon autre clim est une Toshiba, je vais essayer de trouver de l’info pour la piloter via son api, si elle existe.

Olivr2s,
Je bloque sur la création du script, jeedom ne m’autorise pas la sauvegarde des commandes de script et m’affiche un message m’indiquant qu’il n’autorise pas les requêtes vides.
SI je demande à sauvegarder depuis l’onglet équipement jeedom m’indique qu’une commande portant déjà ce nom existe déjà !
aurais tu une petite idée ?
Sinon toutes tes explications jusque la sont très clair, hormis le copier/coller des cellules de requête qui n’est pas copiable à cause de la police de caractères. du coup j’ai écrit toutes les commandes dans un word que je pourrais joindre à ton post au cas ou un autre membre serait intéressé.

Bonjour @Caralex,
Avant de sauvegarder les commandes du script, as-tu créé et copié les fichiers du github en gardant bien le même chemin et nom de dossier dans Script/data

oui j’ai suivi scrupuleusement l’ordre que tu indiquais, téléchargement, création du dossier et copie des sources avant d’attaquer ton deuxième pdf sur la création du script.
finalement je suis parti jardiner pour prendre un peu l’air, et à ma reconnexion sur Jeedom le script était sauvegardé, sans erreur, il manquait juste les 5 dernières commandes depuis la commande ‹ ‹ Actualiser › › de ton fichier. Je viens de rajouter les lignes manquantes, plus de problème d’enregistrement, il est du coup complet et identique au tiens.
je passe sur le troisième pdf mais la ca parait plus coriace :slight_smile:

ok, bonne continuation en espérant que cela passera du premier coups :wink:

Bonjour @olivr2s

Merci pour toutes les informations de ce post.

Je viens d’avoir un boitier wifi de type CZ-TACG1 pour ma climatisation en console murale PANASONIC.

J’ai récupéré le Github. Fait le script en modifiant le lancement pour que cela fonctionne chez moi.

Si je lance la commande pour récupérer les informations :
pcomfortcloud.py ‹ user › ‹ password › get 1

Je récupère bien les informations sous ce format (donc ma connexion est OK et le script aussi) :
temperatureInside : 22 temperatureOutside : 6 temperature : 21.5 power : On mode : Heat fanSpeed : Auto airSwingHorizontal : Mid airSwingVertical : Down eco : Quiet nanoe : On

Je pense que c’est ensuite que ca bloque sur l’assignation des informations de valeurs dans les variables par le scénario. JE n’arrive pas à mettre les valeurs dans les variables.

J’ai modifié le scénario mais ca doit bloquer

$cmdinfo = "#[bureau][clim-bureau-cloud][INFO]#";
//retour commande infos avec le GET : 'climatisation bureau' (037fxxxxxxx) id : 037fxxxxxx parameters temperatureInside : 22 temperatureOutside : 7 temperature : 21.5 power : On mode : Heat fanSpeed : Auto airSwingHorizontal : Mid airSwingVertical : Down eco : Quiet nanoe : On
$RetourInfo = cmd ::bystring($cmdinfo)->execCmd();
//Scinde l'information recu
list($val1, $val2, $val3, $val4, $val5, $val6, $val7, $val8, $val9, $val10, $val11, $val12) = explode(" ", $RetourInfo);
//mise en variable
$scenario->setData("ValeurTempInt_Bureau", "$val1");
$scenario->setData("ValeurTempExt_Bureau", "$val2");
$scenario->setData("ValeurConsigne_Bureau", "$val3");
$scenario->setData("ValeurPower_Bureau", "$val4");
$scenario->setData("ValeurMode_Bureau", "$val5");
$scenario->setData("ValeurFanSpeed_Bureau", "$val6");
$scenario->setData("ValeurAirSwingLR_Bureau", "$val7");
$scenario->setData("ValeurAirSwingUD_Bureau", "$val8");
$scenario->setData("ValeurEco_Bureau", "$val9");
$scenario->setData("ValeurNano_Bureau", "$val10");

$myvar = $scenario->getData('valeurTempInt_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurTempInt_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud][TempInt]#')->event("$val2");

$myvar = $scenario->getData('valeurTempExt_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurTempExt_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud][TempExt]#')->event("$val2");
              
$myvar = $scenario->getData('valeurConsigne_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurConsigne_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud]TempConsigne]#')->event("$val2");
              
$myvar = $scenario->getData('valeurPower_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurPower_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud][Etat Power]#')->event("$val2");
              
$myvar = $scenario->getData('valeurMode_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurMode_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud][Etat Mode]#')->event("$val2");
              
$myvar = $scenario->getData('valeurFanSpeed_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurFanSpeed_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud][Etat Fan]#')->event("$val2");             

$myvar = $scenario->getData('valeurAirSwingLR_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurAirSwingLR_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud][Etat Volet H]#')->event("$val2");
              
$myvar = $scenario->getData('valeurAirSwingUD_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurAirSwingUD_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud][Etat Volet V]#')->event("$val2");

$myvar = $scenario->getData('valeurEco_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurEco_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud][Etat Eco]#')->event("$val2");

$myvar = $scenario->getData('valeurNano_Bureau');
list($val1, $val2) = explode(" : ", $myvar);
$scenario->setData("ValeurNano_Bureau", "$val2");
cmd::byString('#[bureau][clim-bureau-cloud][Nanoe]#')->event("$val2");

Je bloque donc sur la récupération des valeurs de cette chaine de caractère, si tu peux m’aider merci d’avance.

Bonjour,

déjà, le script fonctionne car tu arrives à avoir les infos brutes et c’est déjà bien.
Comme j’utilise mes clims qu’en été, je viens de me rendre compte que de mon côté j’ai une erreur de communication, mais ça c’est de mon côté…

As-tu créé les variables en plus du scénario avec des valeurs à 0 pour voir si après en exécutant le scénario, les variables changent, ou en regardant dans le log du scénario après exécution.

oui j’ai crée les variables avec les noms de mon scenarios mais elles ne se remplissent pas elle se vide si je met une valeur donc problème de récupération des valeurs dans le scénario. Donc j’arrive grâce au script a lancer des actions sans aucun problème mais je n’arrive pas à récupérer indépendamment dans des variables les valeurs unitaire de type information.

Pourrais tu expliquer plus en détail le scenario bloc code que je comprenne comment il traite la récupération des informations. Si je comprends comment faire, je pourrais adapter ptt le scenario pour que le split des datas extraite du GET soit ok.
Peux ton mettre des lectures intermédiaires pour voir comment il traite la chaine de caractère pas à pas pour essayer de debuguer ?

NB : j’ai remarque que si j’exécute le script cela me déconnecte dans l’application smartphone. Gestion d’un seul Token ?

Effectivement, il y a la gestion d’un seul token, c’est pour ça que l’appli sur le téléphone est déconnecté lors de l’utilisation du script.
Le code doit:

  • Récupérer les informations brutes de l’API est la stocker dans une variable temporaire.
  • Découper et lister dans plusieurs variables temporaires les groupes de mot qui sont séparé par un espace (" ")
  • Affecter à des variables chaque groupe de mot récupéré dans la liste
  • Lire la première variable et découper en liste de variables temporaire les mots séparés par espace : espace (" : ")
  • Affecter à une variable que le second mot de la liste (donc si il y avait « TempExt : 26 », on ne gardera que 26)
  • Envoyer à la commande info correspondante dans le script la valeur de la variable.
  • Et on refait le découpage de second groupe de mot pour chaque variables

Par contre je viens de voir que dans ton code tu récupère pour les variables $val1, puis 2, puis 3… alors que les premières informations ne sont pas utiles. Si tu regardes dans mon code, j’affecte aux variables les infos $val5 à $val12. C’est possible que ce soit ça. La température intérieure et le mode ecoNano ne remontent pas bien si je me souvient bien et je ne sais pas pourquoi.

essayes déjà avec ça

$scenario->setData("ValeurTempExt_Bureau", "$val5");
$scenario->setData("ValeurConsigne_Bureau", "$val6");
$scenario->setData("ValeurPower_Bureau", "$val7");
$scenario->setData("ValeurMode_Bureau", "$val8");
$scenario->setData("ValeurFanSpeed_Bureau", "$val9");
$scenario->setData("ValeurAirSwingLR_Bureau", "$val10");
$scenario->setData("ValeurAirSwingUD_Bureau", "$val11");
$scenario->setData("ValeurEco_Bureau", "$val12");

ok merci pour le retour
bon ce qui ne marchait pas c’est la première ligne qui split la totalité du GET a cause d’un retour chariot pas pris en compte. J’ai modifié et adapté le bloc code pour récupérer la température intérieure et le nanoe dont je me sert. Je récupère bien les bonnes valeurs :slight_smile:

NB : Manque sur ce CZ-TACG1

  • Un seul Token qui te désactive sur l’app et qui t’oblige a te loguer
  • Pas d’application WEB on a ca sur AirZone, Intesishome, …
  • Et pas de remontée de consommation d’énergie sur l’API Cloud je trouve ca dommage pour une passerelle du fabricant alors que je l’ai avec la passerelle IntesisHome.
  • Par contre j’ai le mode NANOE et ECONAVI qui remonte que je n’avais pas sur Intesishome

une mise à jour du fichier token est disponible qui regle le probleme de Token de ces derniers jours

J’ai eu le cas hier et il faut de temps en temps regarder si il y a eu une mise à jour dans le Github

c’est le code session.py qui a été mis à jour il y a 4 jours

yep j’ai vu ca et corriger merci

Tu as trouvé, c’est super alors :+1:t2:

Hello j’ai de nouveau l’erreur

Erreur pour [salon][Clim salon][INFO] : Erreur sur python #/bin/bash sudo /usr/bin/python3 /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py mail.com password get 2 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: 401 - Data: {"message":"New version app has been published","code":4106}

j’ai rechargé le dernier fichier sessions.py ca a l’air de fonctionner

Bonjour,

Depuis quelque jours j’ai un soucis d’execution…
La connexion marche car un get 1 => renvoi bien les info
par contre les commandes On / Off (Set -p On 1) me renvoi ce msg d’erreur…

Erreur sur python /var/www/html/plugins/script/data/pcomfortcloud/pcomfortcloud.py xxxxx@xxxxx.fr xxxpwdxxx set -p On 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: IOError: [Errno 13] Permission denied: ‹ /var/www/.pcomfortcloud-token ›

Est-ce que quelqu’un rencontre le même genre de problème???