Authentification Cozytouch échoue - "Error Page de Configuration"

Oui donc c’est bien ça … PHP8

Tu peux modifier, dans le fichier cozytouch/core/class/cozytouch.class.php la ligne 65 public function preConfig_password($value) { par public static function preConfig_password($value) {

Puis essayer de sauver ton mot de passe déjà ?

c est fait et ca sauvegarde correctement (j’ai verifié dans la DB) le nouveau mot de passe bidon est bien maintenant gfgfgf



Moué … donc là il y a beaucoup de boulot pour adapter le plugin à PHP8, je vois qu’aucune des fonctions n’a l’air défini comme ça + d’autres trucs comme ce que tu as dans le http.error

Comme le développeur ne passe plus trop ici, je doute qu’il ai la motivation pour adapter son plugin.
Si tu dois vraiment l’utiliser et comme tu viens de réinstaller, je pense que le plus sûr c’est de recommencer mais SANS passer sur PHP8 (je pense que comme beaucoup tu as mal interprété la note de migration de Jeedom en version 4.4.2) car on peut parfaitement rester sur PHP 7.4 avec la version 4.4.3 (maintenant) de Jeedom

Merci de ta reponse. C est le script d’install de jeedom qui a installé la 8.2. Je viens de re-essayer l install en ayant completement desinstallé PHP et c est la 8.2 qui est reinstallé. il n y a donc pas de solution

Bonjour,

Je me joins aux déçus du plug in CozyTouch, j’ai le même problème que bobybob69 (initiateur de ce post) avec le même log plugin (voir ci dessous)
Après saisie de l’identifiant + mot de passe puis sauvegarde, j’ai une erreur « 500 : Internal Server Error » à la synchronisation des équipements.

Log Cozytouch (mode débug)

[2024-05-12 23:27:12] INFO : JSESSIONID vide
[2024-05-12 23:27:12] DEBUG : data grant_type=password&username=GA-PRIVATEPERSON%2F&password=
[2024-05-12 23:27:12] DEBUG : call https://apis.groupe-atlantic.com/token
[2024-05-12 23:27:12] DEBUG : header : Content-Type: application/x-www-form-urlencoded
[2024-05-12 23:27:12] DEBUG : header : Authorization: Basic Q3RfMXXXBh
[2024-05-12 23:27:12] DEBUG : {« error_description »:« Missing parameters: password »,« error »:« invalid_request »}
[2024-05-12 23:27:12] DEBUG : call https://apis.groupe-atlantic.com/magellan/accounts/jwt
[2024-05-12 23:27:12] DEBUG : header : Authorization: Bearer
[2024-05-12 23:27:12] DEBUG : Problème authentification …
[2024-05-12 23:27:12] ERROR : Error page de configuration :

Log Http:

0000|[Sun May 12 21:27:12.502322 2024] [php7:warn] [pid 376] [client XX.XX.XX.XX:0] PHP Warning: trim() expects parameter 1 to be string, object given in /var/www/html/core/class/log.class.php on line 107, referer: https://XXX/index.php?v=d&p=plugin&id=cozytouch
0001|[Sun May 12 21:27:12.724360 2024] [php7:error] [pid 376] [client XX.XX.XX.XX:0] PHP Fatal error: Uncaught Error: Call to undefined function displayExeption() in /var/www/html/plugins/cozytouch/core/ajax/cozytouch.ajax.php:60\nStack trace:\n#0 {main}\n thrown in /var/www/html/plugins/cozytouch/core/ajax/cozytouch.ajax.php on line 60, referer: https://XXX/index.php?v=d&p=plugin&id=cozytouch

Plug in:

  • Version : 2023-09-27 01:23:11 (la dernière version vu qu’il n’y a plus de dev a priori )
  • première install de ce plug in, pas une mise à jour

Mot de passe:

  • Bien sauvegardé dans la BDD
  • Ne contient pas de caractère spéciaux
  • Passe sur l’appli Android Cozytouch

J’ai joint la page « Santé » de Jeedom aussi (ne tenez pas compte de l’erreur « Configuration réseau externe », Jeedom est en Docker. Et l’erreur de swap est apparue après celle de CozyTouch)

Si quelqu’un a une idée, j’en serais très reconnaissant :wink:

Bonjour,

Ça ressemble pourtant bien à une absence de login/pass d’après les logs

Es-tu sûr de bien avoir sauvé dans la partie adéquate ?

Merci de ta réponse Bison
Dans le doute, je viens de vérifier dans la base, la table ‹ config ›, mais tout y est:


Je sèche là…

Je reconnais que c’est bizarre.

Je viens de faire un petit test car moi je n’ai pas ce plugin (il est chez mes parents).

Je suis sur Jeedom 4.4.5 en Bêta là (mais bon je doute que ce soit différent en 4.4.5 Stable)

  1. Je télécharge le plugin en version stable
  2. J’active le plugin
  3. Je rentre mes identifiants et je clique sur Sauvegarder de la partie Configuration
  4. Je passe le plugin en debug et je clique sur Sauvegarder de la partie Logs et Surveillance
  5. Je clique sur « Synchroniser mes équipements » dans la partie Configuration
  6. Je rafraichi la page et ouvre le fichier de log

J’ai bien :

[2024-05-13 20:05:10] INFO  : JSESSIONID vide
[2024-05-13 20:05:10] DEBUG  : data grant_type=password&username=GA-PRIVATEPERSON%2F*MAIL*&password=*PASS**

Avec :

*MAIL* : Le mail que j'ai mis
*PASS* : Le mot de de passe que j'ai mis

Tu peux supprimer le plugin et recommencer … pour voir ce que ça donne ?

Tu peux préciser ton matériel et la version de Debian installée car pour moi il y a un problème quelque part dans ta configuration avant la version de php.
EDIT : je viens de voir ta page santé plus haut et la version de Linux est atypique. Pourquoi tu n’as pas la version Debian conseillée ?

Salut Bison,

Ok, allons y pour une désinstall, reboot Jeedom et reinstall.

… Test KO à nouveau :frowning:

Par contre, j’ai une ligne nouvelle dans le log:

Ca parle à quelqu’un ?

Ça ne me parle pas. Tu as cliqué sur synchroniser ? Il n’y a même pas les tentatives de connexion là dans tes logs.
Tu a bien pris la version stable ?

(Ou alors tu n’as pas réactivé les logs en debug puisque ça saute après la suppression du plugin).

Tu as cliqué sur synchroniser ? => oui et j’ai une erreur 500 qd je le fais (voir ci dessous)
Tu a bien pris la version stable ? => oui celle du « 2023-09-27 01:23:11 » est « stable »
(Ou alors tu n’as pas réactivé les logs en debug puisque ça saute après la suppression du plugin). => en effet, j’ai oublié de le réactiver…, voici le log ci dessous (pas très différent)


J’aimerai pouvoir logger la commande curl complète produite par le plugin

Pas de ligne de type data grant_type=password&..... ?

Si tu as confiance tu peux me donner login/pass en privé et j’essaie d’injecter ça chez moi dans le plugin pour voir ce que ça donne et pour essayer de voir si ça fonctionne ou pas et comprendre en faisant un peu de debug sinon je crains que l’on avance pas bien.

Bonjour à tous,
Je m’intéresse au plugin CozyTouch car je compte acheter un sèche serviette Sauter.
Pour le moment j’attends encore le bridge mais j’ai déjà créé mon compte.
J’ai regardé le code et ce qu’il faut bien noter si vous changez votre mot de passe sur la page configuration du plugin c’est que même en cliquant sur Enregistrer normalement c’est bien sauvegardé dans la base de données mais pour le processus de connexion le nom utilisateur et le mot de passe pris en compte sont ceux dans la classe CozyTouchApiClient et donc çà peut très bien ne pas être pris en compte tout de suite. Lors de mes premiers essais, j’ai souvent dû désactiver et réactiver le plugin pour que les nouvelles valeurs soient prises en compte.
La présence des deux boutons synchronisation et suppression des équipements sur la page configuration me gêne beaucoup et me semble source de nombreuses erreurs donc l’une des premières choses que j’ai faites c’est de réorganiser çà.


et

Je progresse doucement en me familiarisant avec le code, un des soucis dans le processus de connexion c’est que même si une des étapes échoue le code continue comme si de rien n’était et forcément toutes les suivantes échouent. Je suis en train de changer cela.
Pour le moment je récupère bien le token et sa date d’expiration (fonction getToken) et ensuite je reçoit bien un jwt (fonction getJwt) mais la troisième étape (fonction getJSessionId) échoue et je ne comprends pas pourquoi je reçoit :

curl result : HTTP/1.1 401  Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 Strict-Transport-Security: max-age=31536000 ; includeSubDomains X-XSS-Protection: 1; mode=block X-Frame-Options: DENY X-Content-Type-Options: nosniff Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Date: Tue, 14 May 2024 20:43:17 GMT Server: overkiz  {"errorCode":"AUTHENTICATION_ERROR","error":"Bad credentials"}

Je vais peut-être attendre de recevoir mon bridge pour continuer mes investigations. Mais je suis bien décidé à faire marcher ce plugin.
Je vais aussi essayer de contacter l’auteur pour voir s’il est toujours intéressé par CozyTouch (et Jeedom) et essayer de collaborer avec lui.
EDIT: j’ai aussi jeté un oeil aux widgets custom du plugin et il me semble qu’ils ne sont pas à jour par rapport aux versions récentes de Jeedom. Pour ceux chez lesquels l’authentification fonctionne, les widgets s’actualisent bien en Jeeedom 4.4 ? A mon avis là aussi il y a du travail.

1 « J'aime »

Hello vedrine,

Intéressant, pas simple de savoir pourquoi parfois ça fonctionne sans soucis du coup.

Oui, j’ai plusieurs fois expliqué dans des posts qu’il fallait enregistrer avant de synchroniser mais par contre en principe, quand c’est fait, ça marche immédiatement donc on revient au point d’avant … pourquoi parfois ce n’est pas le cas !?

En tout cas, ton remaniement est pertinent :laughing:

C’est en effet à chaque fois la même source de problème et ce JsessionID n’est pas récupérable chez quelques personnes mais pour l’heure on ne comprends pas pourquoi.

C’est peut-être lié à la date de création de compte. Les nouveaux rentre peut-être dans un process d’authentification qui aurait changé …

C’est un peu difficile d’expliquer pourquoi parfois même en enregistrant nom d’utilisateur et mot de passe ne sont pas pris en compte tout de suite mais en regardant le code je comprends bien pourquoi.
Je vais essayer de corriger ce point aussi car c’est une source de frustration chez les utilisateurs.

Ah, moi je n’avais pas compris jusque là mais c’était un peu pour ça que je voulais voir avec LordSteeve pour avoir ses identifiants et creuser en mettant logs un peu de partout :slight_smile:

Si tu gères et qu’en plus tu arrives à quelque chose alors ce sera top et ça fera à terme des posts en moins sur ce sujet :slight_smile:

Si tu t’y connais un peu en programmation objet, je peux expliquer le problème :
Dans le système Jeedom nom d’utilisateur et mot de passe sont stockés dans la base de donnée et on y accède par

config::byKey('username', 'cozytouch')
config::byKey('password', 'cozytouch')

Mais dans le plugin cozytouch tout le processus de connexion est géré par la classe CozyTouchApiClient définie dans le fichier plugins/cozytouch/3rdparty/cozytouch/client/CozyTouchApiClient.class.php et le nom d’utilisateur et le mot de passe lui sont passés dans la fonction __construct lorsqu’on crée une instance de cette classe. Et ensuite même si les valeurs en base de données changent tant que cette instance existe elle garde les anciennes valeurs comme propriétés.
Je pense que lorsque ce code a été écrit il a été adapté d’autres codes d’accès à CozyTouch sans tenir compte de toutes les particularités de Jeedom.

Oui j’avais bien vu mais je n’arrivais pas à comprendre à quelle moment cette classe était appelée pour justement récupérer les informations, pas très à l’aise avec cette façon de faire.

Tu fais comment pour voir à quelle moment elle est instanciée et que du coup elle ne récupère pas les identifiants au bon moment ?

Dans la classe CozyTouchManager la fonction getClient qui est appelée un peu partout par CozyTouchManager::getClient(); fait

        if (self::$_client == null || $_force) {
			
			self::$_client = new CozyTouchApiClient(array(
					'userId' => config::byKey('username', 'cozytouch'),
					'userPassword' => config::byKey('password', 'cozytouch'),
					'jsessionId' => config::byKey('jsessionId', 'cozytouch')
			));
		}
		return self::$_client;

et donc si le client n’est pas défini ou si force vaut true, on l’instancie en lui passant les valeurs dans la base (et donc c’est mis à jour avec les bonnes valeurs) mais s’il existe déjà on se contente de le retourner par la dernière ligne et donc les valeurs restent comme elles sont.