Connexion impossible sur le plugin Connexoon API SOMFY

Bonjour, le tag « plugin-connexoon » sur ce plugin n’existe pas il s’agit du plugin en Beta de Connexoon de benjamin pevrot @benjamin.prevot

Ce plugin Jeedom permet de piloter les volets roulants à partir de la box [Connexoon de Somfy]. Il utilise l’API mise à disposition ici https://developer.somfy.com/.

Comme indiqué dans la documentation du plugin, j’ai crée une application sur le site de développeur de SOMFY. Je récupère bien mes 2 clés de connexion. Mais quand je vais dans le plugin et que je cherche à autoriser le plugin à se connecter au serveur Somfy, je pense que l’autorisation auth2 échoue (j’ai essayé avec l’url Local et l’url dns).

Dans la fenêtre popup d’identification de Somfy ca me met :

en retour quand on valide

et réponse dans la fenetre
{« error »:« redirect_uri_mismatch »,« error_description »:« The redirect URI provided does not match registered URI(s). »}

Pour les Logs du plugin en debug

[2020-10-02 09:41:59][INFO] : Début d'activation du plugin
[2020-10-02 09:42:00][INFO] : Info sur le démon : {"launchable_message":"","launchable":"nok","state":"nok","log":"nok","auto":0}
[2020-10-02 09:42:14][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:14][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:14][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:14][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:14][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:14][ERROR] : [Somfy] GET - https://api.somfy.com/api/v1/site -  Number of tries exceeded
[2020-10-02 09:42:31][DEBUG] : [benjaminprevotConnexoon] Synchronize devices
[2020-10-02 09:42:31][DEBUG] : [Somfy] Get sites list
[2020-10-02 09:42:31][DEBUG] : [Somfy] Call https://api.somfy.com/api/v1/site - try 5
[2020-10-02 09:42:31][DEBUG] : [HTTP] GET - https://api.somfy.com/api/v1/site - Status: 401 - Body:
[2020-10-02 09:42:31][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:31][DEBUG] : [Somfy] Call https://api.somfy.com/api/v1/site - try 4
[2020-10-02 09:42:31][DEBUG] : [HTTP] GET - https://api.somfy.com/api/v1/site - Status: 401 - Body:
[2020-10-02 09:42:31][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:31][DEBUG] : [Somfy] Call https://api.somfy.com/api/v1/site - try 3
[2020-10-02 09:42:32][DEBUG] : [HTTP] GET - https://api.somfy.com/api/v1/site - Status: 401 - Body:
[2020-10-02 09:42:32][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:32][DEBUG] : [Somfy] Call https://api.somfy.com/api/v1/site - try 2
[2020-10-02 09:42:32][DEBUG] : [HTTP] GET - https://api.somfy.com/api/v1/site - Status: 401 - Body:
[2020-10-02 09:42:32][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:32][DEBUG] : [Somfy] Call https://api.somfy.com/api/v1/site - try 1
[2020-10-02 09:42:32][DEBUG] : [HTTP] GET - https://api.somfy.com/api/v1/site - Status: 401 - Body:
[2020-10-02 09:42:32][WARNING] : [Somfy] Code received 401 - retry
[2020-10-02 09:42:32][DEBUG] : [Somfy] Call https://api.somfy.com/api/v1/site - try 0
[2020-10-02 09:42:32][ERROR] : [Somfy] GET - https://api.somfy.com/api/v1/site -  Number of tries exceeded

Jeedom 4.0.61
Debian 10.5

Petit update je viens de regarder le code pour trouver pourquoi ca n’envoyé pas la bonne url et sur la partie authentification pour la function getToken et getAuthUrl

 # ->param('redirect_uri', $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . '/index.php?v=d&plugin=' . Connexoon::ID . '&modal=callback')

en remplaçant la première partie pour avoir le https cela fonctionne, je récupère bien le Token et la synchronisation ce fait et je récupère mon équipement :slight_smile:

Par contre je ne peux pas renommer l’équipement ni les commandes. On ne peut donc pas changer les parametres types des commandes. Et je pense qu’il manque le retour d’état du positionnement du volet on a que l’action sur le positionnement qui est en action / others. Mais on peut piloter le volet.

Les génériques des commandes ne sont pas remplis il faudrait les rajouter dans la function addCommand.

Pour le widget par contre les commandes se superpose sur le dashboard

Une mise à jour du plugin a été faite ce matin mais la connexion n’a pas été corrigée. Quelqu’un à une idée de savoir comment on pourrait contacter le développeur du plugin Benjamin prévot ?

Autre remarque une fois qu’un équipement est crée on ne peut pas le supprimer.

Tout simplement comme cela @benjamin.prevot

MERci je viens de lui envoyer un message sur sa boite. @iPapy pourrais tu mettre le tag du plugin dans le titre stp je n’ai pas trouvé comment faire ?

Comme le plugin est encore en beta le tag n’existe pas c’est donc normal que tu n’y arrive pas et pour créer un tag plugin-connexoon il faut qu’il présente son plugin

Bonjour,

Je viens de prendre connaissance de cette discussion :slight_smile:

En effet, le plugin est encore en version Beta, je n’ai donc pas démarré les démarches pour le présenter.

Concernant la partie authentification, c’est étrange, le code indiqué doit justement détecter comment Jeedom est accédé.

Par exemple, si j’accède à l’interface via http://localhost, l’URL de retour générée sera http://localhost/index.php?.

Si l’URL de l’interface est https://192.168.1.10, l’URL de retour générée sera https://192.168.1.10/index.php?.

Je n’ai pas constaté de problème de mon côté, 2 autres utilisateurs m’ont également contacté pour le plugin et n’ont pas eu ce souci.

Il faudrait peut-être vérifier que que l’URL dans le portail Somfy est identique pour accéder à l’interface.

Pour toutes les fonctionnalités listées manquantes, j’avoue avoir fait au plus simple pour l’instant :wink:

Je pourrai travailler dessus en fonction des retours.

Merci d’avoir fait des tests :wink:

J’ai mis le code que cela génère dans mon premier message, on voit bien qu’il ne prends pas le https dans le cas d’une connexion en dns ce qui est mon cas.
J’ai remplacé dans le code pour que cela fonctionne ceci

->param('redirect_uri', $_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['SERVER_NAME'] . '/index.php?v=d&plugin=' . Connexoon::ID . '&modal=callback')

par

->param('redirect_uri', network::getNetworkAccess('external') . '/index.php?v=d&plugin=' . Connexoon::ID . '&modal=callback')

Pour les équipements crées on devrait pouvoir modifier le nom, supprimer celui-ci
Pour la création des commandes il faudrait aussi qu’elle soit totalement éditable (ajout, suppression, modification)
Remplir les génériques à la création des commandes tu pourrais faire cela pour le slider, open, close, stop avec

							
$benjaminprevotConnexoon->setDisplay('generic_type', 'FLAP_SLIDER');

$benjaminprevotConnexoon->setDisplay('icon', '<i class="fa fa-arrow-up"></i>');
$benjaminprevotConnexoon->setDisplay('generic_type', 'FLAP_UP');

$benjaminprevotConnexoon->setDisplay('icon', '<i class="fa fa-arrow-down"></i>');
$benjaminprevotConnexoon->setDisplay('generic_type', 'FLAP_DOWN');
						
$benjaminprevotConnexoon->setDisplay('icon', '<i class="fa fa-stop"></i>');
$benjaminprevotConnexoon->setDisplay('generic_type', 'FLAP_STOP');

Pour la commande Etat du volet elle n’est pas crée. Le générique serait $benjaminprevotConnexoon->setDisplay(‹ generic_type ›, ‹ FLAP_STATE ›);

Waouh, merci pour toutes ces précisions, je ne connais pas toutes ces fonctionnalités :+1:

J’ai d’ailleurs quelques problèmes pour trouver ce niveau de détails dans la documentation ; j’ai peut-être mal cherché :frowning:

Si tu as des liens précisant toutes ces « subtilités », je suis preneur :wink:

Je regarde pour faire les modifications dès que possible, j’espère courant de semaine prochaine au plus tard.

En tout cas, merci beaucoup.

Le mieux est de s’inspirer de plugin qui font bien les créations de commande car je ne sais pas si il y a une documentation qui indique tous les génériques possible, …
LA seule que je connais est celle la https://doc.jeedom.com/fr_FR/dev/tutorial_plugin

Bonjour,

J’ai testé ta solution pour l’authentification mais elle ne fonctionne pas pour moi.

Pour être sûr que l’URL de callback est bonne, j’ai pensé ajouter une zone avec cette URL qu’il suffit de recopier dans la console de dev Somfy (dans l’écran de config de mon plugin).

Si ça te va, je pushe la modification et tu pourrais faire le test en copiant cette valeur ?

Je vais faire quelques recherches pour tes autres remarques.

Merci

Bizarre, tu es sur quelle version de Jeedom / Debian ? Tu as bien configuré la partie réseau de ton Jeedom car cela prends les informations à ce niveaux, la fonction marche pour internal ou external

mais ok pour faire des tests

Voici mes versions :

  • Jeedom : 3.3.53
  • Debian : 10.4

Concernant les accès, je n’accède à la box Jeedom que depuis mon réseau interne.

Je viens de pousser une nouvelle version beta.

To be continued… :wink:

C’est pour cette raison je pense que cela ne fonctionne pas chez toi car cette fonction utilise cette partie. dans to ncas si tu as que le local de rempli ca doit etre network::getNetworkAccess(‹ internal ›)

Tout à fait.

C’est pour ça que je n’ai pas utilisé network::getNetworkAccess(…), car il faut que l’URL de callback soit celle correspondant à l’accès en cours de l’utilisateur.

D’où l’ajout de la callback à renseigner dans l’admin du plugin pour éviter les problèmes lors de la configuration.

ok je test ca demain une fois que je recois la mise à jour

1 « J'aime »

Merci beaucoup :wink:

J’en ai profité pour ajouter les generic types.

si on peut supprimer l’équipement existant pour relancer une synchro et avoir les nouvelles commandes ?

Une synchro des équipements permettra de mettre à jour les valeurs

1 « J'aime »

Bonjour,
C’est un peu obscur pour moi l’url de retour à renseigner sur app somfy.
J’ai essayé plusieurs formes sans réussir.
L’adresse externe de ma jeedom est : https://xxxxxxx.dns5.jeedom.com/index.php
est ce que c’est ça qu’il faut mettre ?
Comme en plus on a un retour d’erreur [Somfy] GET - https://api.somfy.com/api/v1/site - Number of tries exceeded je vais attendre d’avoir à nouveau le droit d’appeler l’api.
Je suppose que tant que Token exist n’est pas ok ce n’est pas la peine de synchroniser ?
Cordialement
Heddy