Après restauration de sauvegarde jeedom, impossible de refresh token ou de créer un nouveau token

Hello à tous !
Déjà la base :


J’ai déjà utilisé le plugin avec succès jusquà un gros plantage de mon installation sur une mise à jour de Container manager de mon NAS, ce qui a corrompu ma base de donnée Jeedom… bref, j’ai dû supprimer tout mon jeedom, réinstaller et recharger ma dernière sauvegarde.

Après réinstallation, un seul plugin me pose problème : celui de plugin-smartthings.

J’ai tenté de créé un nouveau jeton, avec plus ou moins de champs d’application.
Mais chaque fois que je clique sur « Connexion », j’obtiens : « Erreur lors de la récupération du jeton. »

Les logs sont les suivants :

[2025-07-10 11:05:05] DEBUG  : update : Démarrage du cron */5 * * * *
[2025-07-10 11:05:05] DEBUG  : getHealth : début
[2025-07-10 11:05:05] DEBUG  : sendRequest - URL : https://api.smartthings.com/v1/devices//health METHODE : GET
[2025-07-10 11:05:06] DEBUG  : sendRequest - CODE : 401 RESPONSE : <html> <head><title>401 Authorization Required</title></head> <body> <center><h1>401 Authorization Required</h1></center> <hr><center>openresty</center> </body> </html>
[2025-07-10 11:05:06] DEBUG  : getHealth : fin
[2025-07-10 11:05:06] DEBUG  : refresh : début Mon domicile
[2025-07-10 11:05:06] DEBUG  : Attention : Le token est expiré, renouvellement de ce dernier
[2025-07-10 11:05:06] DEBUG  : refreshToken début
[2025-07-10 11:05:06] DEBUG  : tokenData response:  {"url":"https:\/\/api.smartthings.com\/oauth\/token","content_type":"application\/json","http_code":401,"header_size":593,"request_size":261,"filetime":-1,"ssl_verify_result":0,"redirect_count":0,"total_time":0.369655,"namelookup_time":0.047631,"connect_time":0.083787,"pretransfer_time":0.324462,"size_upload":122,"size_download":0,"speed_download":0,"speed_upload":330,"download_content_length":0,"upload_content_length":122,"starttransfer_time":0.324467,"redirect_time":0,"redirect_url":"","primary_ip":"52.208.196.110","certinfo":[],"primary_port":443,"local_ip":"192.168.0.242","local_port":34474,"http_version":3,"protocol":2,"ssl_verifyresult":0,"scheme":"HTTPS","appconnect_time_us":324270,"connect_time_us":83787,"namelookup_time_us":47631,"pretransfer_time_us":324462,"redirect_time_us":0,"starttransfer_time_us":324467,"total_time_us":369655,"effective_method":"POST"}
[2025-07-10 11:05:06] DEBUG  : refreshTokenErreur lors de l'obtention des jetons.
[2025-07-10 11:05:06] DEBUG  : refreshToken fin
[2025-07-10 11:05:06] DEBUG  : sendRequest - URL : https://api.smartthings.com/v1/locations/53261b55-0322-4cd2-b550-dcbbb0d4be55 METHODE : GET
[2025-07-10 11:05:06] DEBUG  : sendRequest - CODE : 401 RESPONSE : <html> <head><title>401 Authorization Required</title></head> <body> <center><h1>401 Authorization Required</h1></center> <hr><center>openresty</center> </body> </html>
[2025-07-10 11:05:06] DEBUG  : refresh : fin
[2025-07-10 11:05:06] INFO  : update : rafraîchissement du widget
[2025-07-10 11:05:06] INFO  : update : Fin du cron équipement Mon domicile en 1.01 secondes
[2025-07-10 11:05:06] DEBUG  : getHealth : début
[2025-07-10 11:05:06] DEBUG  : sendRequest - URL : https://api.smartthings.com/v1/devices/XXXXXX-8dab-1f30-7b85-4ca5d71d4ce5/health METHODE : GET
[2025-07-10 11:05:07] DEBUG  : sendRequest - CODE : 401 RESPONSE : <html> <head><title>401 Authorization Required</title></head> <body> <center><h1>401 Authorization Required</h1></center> <hr><center>openresty</center> </body> </html>
[2025-07-10 11:05:07] DEBUG  : getHealth : fin
[2025-07-10 11:05:07] DEBUG  : refresh : début Lave-linge
[2025-07-10 11:05:07] DEBUG  : Attention : Le token est expiré, renouvellement de ce dernier
[2025-07-10 11:05:07] DEBUG  : refreshToken début
[2025-07-10 11:05:07] DEBUG  : tokenData response:  {"url":"https:\/\/api.smartthings.com\/oauth\/token","content_type":"application\/json","http_code":401,"header_size":593,"request_size":261,"filetime":-1,"ssl_verify_result":0,"redirect_count":0,"total_time":0.292747,"namelookup_time":0.038894,"connect_time":0.073789,"pretransfer_time":0.2432,"size_upload":122,"size_download":0,"speed_download":0,"speed_upload":416,"download_content_length":0,"upload_content_length":122,"starttransfer_time":0.243207,"redirect_time":0,"redirect_url":"","primary_ip":"18.203.131.145","certinfo":[],"primary_port":443,"local_ip":"192.168.0.242","local_port":45104,"http_version":3,"protocol":2,"ssl_verifyresult":0,"scheme":"HTTPS","appconnect_time_us":243039,"connect_time_us":73789,"namelookup_time_us":38894,"pretransfer_time_us":243200,"redirect_time_us":0,"starttransfer_time_us":243207,"total_time_us":292747,"effective_method":"POST"}
[2025-07-10 11:05:07] DEBUG  : refreshTokenErreur lors de l'obtention des jetons.
[2025-07-10 11:05:07] DEBUG  : refreshToken fin
[2025-07-10 11:05:07] DEBUG  : sendRequest - URL : https://api.smartthings.com/v1/devices/XXXXXX-8dab-1f30-7b85-4ca5d71d4ce5/status METHODE : GET
[2025-07-10 11:05:07] DEBUG  : sendRequest - CODE : 401 RESPONSE : <html> <head><title>401 Authorization Required</title></head> <body> <center><h1>401 Authorization Required</h1></center> <hr><center>openresty</center> </body> </html>
[2025-07-10 11:05:07] DEBUG  : refresh : fin
[2025-07-10 11:05:07] INFO  : update : Fin du cron équipement Lave-linge en 0.84 secondes
[2025-07-10 11:05:07] DEBUG  : update : fin
[2025-07-10 11:05:57] DEBUG  : Début checkAndCreateApp
[2025-07-10 11:05:57] DEBUG  : Étape 1
[2025-07-10 11:05:57] DEBUG  : sendRequest - URL : https://api.smartthings.com/v1/apps METHODE : GET
[2025-07-10 11:05:57] DEBUG  : sendRequest - CODE : 200 RESPONSE : {"items":[],"_links":{}}
[2025-07-10 11:05:57] DEBUG  : checkAndCreateApp 1 $foundApp= $sameApp=
[2025-07-10 11:05:57] DEBUG  : checkAndCreateApp 2 $foundApp=
[2025-07-10 11:05:57] DEBUG  : checkAndCreateApp smartapp n'existe pas
[2025-07-10 11:05:57] DEBUG  : checkAndCreateApp body {"appName":"jeedom_plugin_smartthings1752138357","displayName":"jeedom_plugin_smartthings","description":"SmartApp API_ONLY for Jeedom plugin.","appType":"API_ONLY","singleInstance":false,"classifications":["CONNECTED_SERVICE","AUTOMATION"],"iconImage":{"url":"https://github.com/Flobul/Jeedom-SmartThings/raw/master/plugin_info/smartthings_icon.png"},"oauth":{"clientName":"my_jeedom","scope":["r:locations:*","w:customcapability","x:rules:*","r:customcapability","w:rules:*","w:installedapps:*","r:installedapps:*","r:audiovideo:images","r:schedules","w:deviceprofiles","r:rules:*","x:devices:*","l:devices","w:locations:*","x:locations:*","r:channels:*","r:deviceprofiles","w:audiovideo:images","w:invitations","l:installedapps","r:audiovideo:clips","r:scenes:*","w:schedules","x:notifications:*","r:audiovideo:streams","x:scenes:*","w:channels:*","r:invitations","w:audiovideo:streams","r:drivers:*","r:devices:*","w:devices:*","w:drivers:*","l:scenes","r:apps:*","w:apps:*","w:audiovideo:clips"],"redirectUris":["https://XXXXXX.familyds.com/plugins/smartthings/core/php/callback.php?apikey=0WJSpNmw5aJDD2jYFZCgGvQl5hRdTC0ojKFnI7Ru8AvBf1Avk6FSie5RMjt9uCtl"]},"apiOnly":{"targetUrl":"https://XXXXXX.familyds.com/plugins/smartthings/core/php/callback.php?apikey=0WJSpNmw5aJDD2jYFZCgGvQl5hRdTC0ojKFnI7Ru8AvBf1Avk6FSie5RMjt9uCtl"}}
[2025-07-10 11:05:57] DEBUG  : sendRequest - URL : https://api.smartthings.com/v1/apps METHODE : POST
[2025-07-10 11:05:58] DEBUG  : sendRequest - CODE : 422 RESPONSE : {"requestId":"XXXXXX708727397041","error":{"code":"ConstraintViolationError","message":"The request is malformed.","details":[{"code":"NotValidValue","target":"oauthScope[w:customcapability]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:audiovideo:images]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:deviceprofiles]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:channels:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:audiovideo:images]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:invitations]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:audiovideo:clips]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:audiovideo:streams]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:channels:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:invitations]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:audiovideo:streams]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:drivers:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:drivers:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:apps:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:apps:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:audiovideo:clips]","message":"Invalid scope definition.","details":[]}]}}
[2025-07-10 11:05:58] DEBUG  : La requête vers https://api.smartthings.com/v1/apps a retourné un code d'erreur 422 résultat = {"requestId":"XXXXXX708727397041","error":{"code":"ConstraintViolationError","message":"The request is malformed.","details":[{"code":"NotValidValue","target":"oauthScope[w:customcapability]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:audiovideo:images]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:deviceprofiles]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:channels:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:audiovideo:images]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:invitations]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:audiovideo:clips]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:audiovideo:streams]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:channels:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:invitations]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:audiovideo:streams]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:drivers:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:drivers:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[r:apps:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:apps:*]","message":"Invalid scope definition.","details":[]},{"code":"NotValidValue","target":"oauthScope[w:audiovideo:clips]","message":"Invalid scope definition.","details":[]}]}}
[2025-07-10 11:05:58] DEBUG  : Le serveur a compris le type de contenu de la requête et la syntaxe de la requête est correcte, mais  le serveur n'a pas été en mesure de réaliser les instructions demandées.
[2025-07-10 11:05:58] DEBUG  : checkAndCreateApp $createApp false
[2025-07-10 11:05:58] DEBUG  : checkAndCreateApp 3 $foundApp=
[2025-07-10 11:05:58] DEBUG  : ┌────────── Callback
[2025-07-10 11:05:58] DEBUG  : │ apikey = 0WJSpNmw5aJDD2jYFZCgGvQl5hRdTC0ojKFnI7Ru8AvBf1Avk6FSie5RMjt9uCtl
[2025-07-10 11:05:58] DEBUG  : │ headers = {"Host":"XXXXXX.familyds.com","X-Real-IP":"XX.19.91.220","X-Forwarded-Proto":"https","Connection":"close","Content-Length":"252","Content-Type":"application\/json","Accept":"application\/json","Authorization":"Signature keyId=\"\/pl\/euwest1\/09-0d-a0-13-76-b0-7c-b7-ec-2f-cc-91-10-c1-3c-d7-8e-15-c6-21\",signature=\"XXXXXXX+MQh92+J\/8qmhoUEyLZMgxUPx5UqyY2WblnP0BZsfAxvV98VqZSzpO8Mq3PLLqJ0tmf91hp7dIXsm+P6HXEvQG7LW1Te0YVEokgJWGJs6eJnU3gMTxD6plpkpj+ZyVNfUFd+p+EpinD1mXb0g967mYzeICHYLwuP5Upuxfhx0nPmCkSRJ+ss8P1IYO\/N51ACpyY6QlPzAzliXcUgTnmqv8xeyiFch+URhjnqJRMAh19SE\/z4rGwfXaj1nnir52Co9LvamOmP9aWSa9pHm5BLvkPzNukr1pftOeAsrYaCmkWL5l\/h0mfOeyFvOmb8gx3Q4A5BMvJEQ==\",headers=\"(request-target) digest date\",algorithm=\"rsa-sha256\"","Digest":"SHA256=XXXXXXX\/FpWrLIUWjm\/YQYSoPgDOpiIaWtI0=","Date":"Thu, 10 Jul 2025 09:05:58 UTC","X-ST-CORRELATION":"XXXXXX708727397041","X-B3-TraceId":"9fe6138b806f52e5","X-B3-SpanId":"c4c57a4f8cd62cb2","X-B3-ParentSpanId":"9fe6138b806f52e5","X-B3-Sampled":"1","user-agent":"AHC\/2.1"}
[2025-07-10 11:05:58] DEBUG  : │ Données POST = {"messageType":"CONFIRMATION","confirmationData":{"appId":"XXXXXX-210b-4843-a296-87d29cc02d45","confirmationUrl":"https://api.smartthings.com/apps/XXXXXX-210b-4843-a296-87d29cc02d45/confirm-registration?token=XXXXXX-6b89-425f-a8c1-be2502770510"}}
[2025-07-10 11:05:58] DEBUG  : │ keyId = /pl/euwest1/09-0d-a0-13-76-b0-7c-b7-ec-2f-cc-91-10-c1-3c-d7-8e-15-c6-21
[2025-07-10 11:05:58] DEBUG  : │ data = {"messageType":"CONFIRMATION","confirmationData":{"appId":"XXXXXX-210b-4843-a296-87d29cc02d45","confirmationUrl":"https:\/\/api.smartthings.com\/apps\/XXXXXX-210b-4843-a296-87d29cc02d45\/confirm-registration?token=XXXXXX-6b89-425f-a8c1-be2502770510"}}
[2025-07-10 11:05:58] DEBUG  : │ appId = XXXXXX-210b-4843-a296-87d29cc02d45
[2025-07-10 11:05:58] DEBUG  : │ confirmationData = {"appId":"XXXXXX-210b-4843-a296-87d29cc02d45","confirmationUrl":"https:\/\/api.smartthings.com\/apps\/XXXXXX-210b-4843-a296-87d29cc02d45\/confirm-registration?token=XXXXXX-6b89-425f-a8c1-be2502770510"}
[2025-07-10 11:05:58] DEBUG  : │ lifecycle/messageType = CONFIRMATION
[2025-07-10 11:05:58] DEBUG  : Étape 3
[2025-07-10 11:05:58] DEBUG  : │ data['confirmationData']['confirmationUrl'] https://api.smartthings.com/apps/XXXXXX-210b-4843-a296-87d29cc02d45/confirm-registration?token=XXXXXX-6b89-425f-a8c1-be2502770510
[2025-07-10 11:05:59] DEBUG  : error {"requestId":"XXXXXX126278857473","error":{"code":"ForbiddenError","message":"Access forbidden to this app.","details":[]}} {"url":"https:\/\/api.smartthings.com\/apps\/XXXXXX-210b-4843-a296-87d29cc02d45\/confirm-registration?token=XXXXXX-6b89-425f-a8c1-be2502770510","content_type":"application\/json","http_code":403,"header_size":222,"request_size":306,"filetime":-1,"ssl_verify_result":0,"redirect_count":0,"total_time":0.18752,"namelookup_time":0.028189,"connect_time":0.061373,"pretransfer_time":0.129115,"size_upload":0,"size_download":136,"speed_download":725,"speed_upload":0,"download_content_length":-1,"upload_content_length":0,"starttransfer_time":0.187354,"redirect_time":0,"redirect_url":"","primary_ip":"34.242.55.161","certinfo":[],"primary_port":443,"local_ip":"192.168.0.242","local_port":39146,"http_version":2,"protocol":2,"ssl_verifyresult":0,"scheme":"HTTPS","appconnect_time_us":129001,"connect_time_us":61373,"namelookup_time_us":28189,"pretransfer_time_us":129115,"redirect_time_us":0,"starttransfer_time_us":187354,"total_time_us":187520,"effective_method":"GET"}
[2025-07-10 11:05:59] DEBUG  : │ targetUrl = {"requestId":"XXXXXX126278857473","error":{"code":"ForbiddenError","message":"Access forbidden to this app.","details":[]}}
[2025-07-10 11:06:03] DEBUG  : update : Démarrage du cron */5 * * * *
[2025-07-10 11:06:03] DEBUG  : update : fin

Merci de votre aide !


Informations Jeedom

Core : 4.4.19 (master)
DNS Jeedom : non

Plugin : SmartThings
Version : 2025-05-14 01:08:33 (beta)

Bonjour.
As-tu bien créé le jeton pat avec les droits indiqués dans la doc ?

Oui, j’ai d’abord essayé un jeton avec :

r:installedapps:*,r:locations:*,l:installedapps,x:devices:*,l:devices,w:locations:*,r:devices:*,w:devices:*,x:locations:*,w:installedapps:*,r:apps:*,w:apps:*

Puis j’ai réessayé avec tout car ma configuration précédente fonctionnait avec tout :

r:locations:*,w:customcapability,x:rules:*,r:customcapability,w:rules:*,w:installedapps:*,r:installedapps:*,r:audiovideo:images,r:schedules,w:deviceprofiles,r:rules:*,x:devices:*,l:devices,w:locations:*,x:locations:*,r:channels:*,r:deviceprofiles,w:audiovideo:images,w:invitations,l:installedapps,r:audiovideo:clips,r:scenes:*,w:schedules,x:notifications:*,r:audiovideo:streams,x:scenes:*,w:channels:*,r:invitations,w:audiovideo:streams,r:drivers:*,r:devices:*,w:devices:*,w:drivers:*,l:scenes,r:apps:*,w:apps:*,w:audiovideo:clips

En remplacçant les virgules par un espace aussi

Et si tu entres :

r:hubs:* r:locations:* r:rules:* r:scenes:* x:devices:* w:rules:* w:locations:* w:devices:* r:devices:* x:locations:* x:scenes:*

Ca alors, ça a fonctionné !!
Merci beaucoup !

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.