Chers Utilisateurs,

Une maintenance de votre box TaHoma est prévue ce Mercredi 23 Octobre 2024.

Vous pourrez réaliser la mise à jour de votre box à partir du Mercredi 23 Octobre 2024, milieu de journée. Pendant la mise à jour, vos équipements, vos scénarios et votre fonction "ma sécurité" restent disponibles. Cependant, aucune modification ne sera possible et il se peut que votre interface soit indisponible pendant quelques minutes.

Les services TaHoma seront de nouveau opérationnels Mardi en fin de journée.

L’équipe des Yellow’s SOMFY  

Question en attente de réponse

Autre mode d'authentification aux API ?

Bonjour,

Je commence à utiliser les API "developer.somfy.com" et j'aurais deux questions :

La question principale concerne le mode d'authentification. La méthode documentée "Authorization Code Grant" est adaptée pour des applications WEB (classiques ou single page) ou appli mobiles, mais pas vraiment pour des appels depuis un serveur sans utilisateur interactif (je pense bien sûr à une box ou un serveur domotique).

Existe-t-il une autre méthode (flow Oauth2) déjà implémentée mais pas encore documentée ou bien est-ce en projet ? Un flow "Password Credentials" ou "Client Credentials" serait beaucoup plus adapté à des échanges serveur – serveur.

L'autre question est : Le site et la documentation n'évoluent pas beaucoup depuis près d'un an. Quant est-il de la stratégie de cette ouverture ?

Est-ce que cette API n'intéresse personne ou est-ce que Somfy n'a plus de ressource à y consacrer ?

Merci de votre réponse.
Cordialement

Gerard C.
Gerard C.

Gerard C.

Niveau
1
143 / 750
points
  • Partager cette question

    Réponses

    Thibaut E.
    Thibaut E.

    Thibaut E.

    Niveau
    1
    437 / 750
    points

    Hello,

    Dans le cas d'une application serveur, tu peux très bien utiliser Oauth2. Il suffit de générer une application pour ton serveur, garder le client id et client secret, demander un token et le rafraîchir quand il arrive à expiration.

    Gerard C.
    Gerard C.

    Gerard C.

    Niveau
    1
    143 / 750
    points

    Bonjour,

    Merci Thibaut, ça fait plaisir d'avoir une réponse !
    Mais elle ne résout pas mon problème, j'aurais bien aimé qu'il existe un autre "flow" Oauth2.
    J'ai bien fait comme indiqué dans la doc et réussi à utiliser cette API, mais je suis gêné par l'intervention humaine obligatoire pour accorder les droits, qu'il faut qui plus est renouveler tous les 14 jours, durée d'expiration du "renew token".

    J'imaginais aussi qu'un employé de Somfy réponde à cette question, mais je crois que je me trompe de canal dans ce forum…

    J'ai aussi posé une question sur le formulaire de contact de l'API (https://developer.somfy.com/contact) car j'ai un doute sur la pérennité de cette API étant donné son manque d'évolution : aucune réponse. Ce n'est pas très professionnel.

    Me voilà finalement assez déçu.

    Thibaut E.
    Thibaut E.

    Thibaut E.

    Niveau
    1
    437 / 750
    points

    Il faut savoir que le support derrière l'API se résume à une personne.
    Pour ton soucis, si ton application serveur est pour juste une personne (toi), tu peux très bien générer une première fois ton token et tous les soirs le renouveler, ou bien vérifier la validiter du token à chaque requête, ou encore le changer en cas d'erreur après un appel.
    Par contre, il faut savoir que leur API est très instable.
    On en parle ici: https://forum.somfy.fr/questions/2040037-probleme-connexoon-api

    Gerard C.
    Gerard C.

    Gerard C.

    Niveau
    1
    143 / 750
    points

    Bonjour,

    Merci pour la précision sur le support et le lien. Je viens de poster un message sur ce thread.

    Sinon, pour les tests dont je parlais j'utilise justement ta librairie somfy-open-api !

    Pour mon souci de login, le problème est qu'avec les tests que j'ai faits, le token ne peut plus se renouveler après environs 2 semaines, puisque le refresh_token expire après 14 jours comme indiqué dans la doc Somfy. Donc il faut refaire un login manuel.

    C'est un peu lourd, et ça ne me convient pas. C'est pourquoi je demandais si un autre flow Oauth2 était supporté.

    Thibaut E.
    Thibaut E.

    Thibaut E.

    Niveau
    1
    437 / 750
    points

    Ravi de voir que tu utilises ma librairie. En ce qui concerne le refresh du token, il est fait automatiquemnt, tu n'as pas à t'en occuper: https://github.com/tetienne/somfy-open-api/blob/d9189e0c4...

    Gerard C.
    Gerard C.

    Gerard C.

    Niveau
    1
    143 / 750
    points

    Pour le renew, oui, merci. J'étais déjà allé voir dans le code et approfondi l'utilisation de la librairie requests_oauthlib.

    Seulement, cet auth-renew est basé sur le renew_token obtenu au moment du login. Et comme dit dans mon message, celui-ci expire après 14 jours.
    Je ne vois vraiment pas comment tu peux dire que ça marche tout seul sur la durée…

    En ce moment, pour un projet j'utilise une API authentifiée par OAuth2, et le mode d'authent est grant_type=client_credentials plus adapté de mon point de vue entre serveurs car il ne requiert pas un process via un navigateur (contrairement à l'API Somfy basée sur un grant_type=authorization_code).

    Si ça marche pour toi, je me dis que je suis passé à côté de quelque chose. Il faut que je reconsidère ça depuis le départ.

    Merci encore.

    Thibaut E.
    Thibaut E.

    Thibaut E.

    Niveau
    1
    437 / 750
    points

    Le renouvellement se fait automatiquement par la librairie grâce au champs "expires_in" que retourne Somfy lors de l'obtention du token.
    Tu peux le voir ici https://github.com/oauthlib/oauthlib/blob/ca57b0bcae83549...
    et ici https://github.com/requests/requests-oauthlib/blob/master...

    pymfy utilise ce mécanisme pour qu'il n'y est pas d'intervention manuelle justement.

    Bon ça c'est la thérorie, car en pratique les serveurs de Somfy sont très souvent KO et il est pas rare de se voir retourner une 500.

    Gerard C.
    Gerard C.

    Gerard C.

    Niveau
    1
    143 / 750
    points

    Hem hem, je crois qu'on tourne en rond… Je tente un peu différemment d'exposer ce qui se passe.

    Le renew automatique utilise pour ce faire le token "renew_token" émis par le serveur au moment du login initial.
    Or, ce renew_token expire après 14 jours, donc la librairie requests-oauthlib échoue après deux semaines de fonctionnement OK (je me suis loggué qu'une fois, le token Somfy API valide 1 h a bien été renouvelé plein de fois avec le renew_token, et puis au bout de 14 jours, il y a une erreur).

    Je referais des tests en capturant les logs s'il faut plus de détails, mais ceci est le comportement normal de la norme. Sauf, encore une fois, si je fais complètement fausse route…
    Quand j'aurais un moment, je regarde. Mais pour l'instant, travaux… :)

    Merci encore !

    Bonjour Gérard,

    Ce que Thibaut essaie de dire et il a raison c'est qu'au rafraîchissement de vos tokens, le refresh_token est rafraîchi également. Le nouveau refresh-token est donc valable 14 jours à nouveau. Ainsi, si on rafraîchi les tokens suffisamment régulièrement, la fenêtre est glissante et vous n'avez pas besoin de vous ré-authentifier sur la page d'authentification. Il faut pour ça que votre système remplace bien le refresh token par le nouveau à chaque rafraîchissement.

    Désolé si j'ai manqué votre prise de contact sur le portail.

    Bonne journée.

    Gerard C.
    Gerard C.

    Gerard C.

    Niveau
    1
    143 / 750
    points

    Bonjour Lou,

    Merci pour la réponse.

    Je parlais de tourner en rond dans nos explications car elles portaient plus sur le protocole et la librairie elle-même, alors que j'avais l'impression que le renew_token n'était pas re-généré côté API Somfy…

    Depuis, j'ai refait des tests, et ça marche bien, il faut en effet ne pas laisser s'écouler plus de 14 j entre deux appels.

    Pour ce qui est de la question initiale sur le flot "Authorization Code Grant", je crois qu'on va en rester là, tant pis si ce n'est pas idéal pour la première utilisation. Il y a plus gênant :).

    Haut de page