NEWS
Test Adapter Garmin
-
ich kann den adapter so nicht nutzen, gibt es einen workaround, oder wird da gefixt? sonst ist das ding unbrauchbar geworden
@MassiveAttack bitte mal die GitHub version testen
-
@MassiveAttack bitte mal die GitHub version testen
@tombox
Es kommen zwar 2 warnings, aber der Adapter läuft und liefert aktuelle Datengarmin.0 2026-01-09 19:01:23.242 warn Token refresh failed: <!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid signature for signature method HMAC-SHA1</p><p><b>Description</b> The request has not been applied to the target resource because it lacks valid authentication credentials for that resource.</p><hr class="line" /><h3>Garmin Connect API Server</h3></body></html> garmin.0 2026-01-09 19:01:20.068 warn This instance has 18091 objects, the limit for this instance is set to 5000. -
@tombox
Es kommen zwar 2 warnings, aber der Adapter läuft und liefert aktuelle Datengarmin.0 2026-01-09 19:01:23.242 warn Token refresh failed: <!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid signature for signature method HMAC-SHA1</p><p><b>Description</b> The request has not been applied to the target resource because it lacks valid authentication credentials for that resource.</p><hr class="line" /><h3>Garmin Connect API Server</h3></body></html> garmin.0 2026-01-09 19:01:20.068 warn This instance has 18091 objects, the limit for this instance is set to 5000.@MassiveAttack sollte jetzt auch weg sein
-
@tombox
Danke. Läuft hier auch wieder.
Siehst du eine Chance einen wie auch immer gearteten Filter in den Adapter zu bekommen?
20644 objects ist halt ziemlich viel für ein paar nützliche Datenpunkte. -
@MassiveAttack sollte jetzt auch weg sein
die token refresh warning kommt noch immer
garmin.0 2026-01-10 11:22:51.898 warn Token refresh failed: <!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid signature for signature method HMAC-SHA1</p><p><b>Description</b> The request has not been applied to the target resource because it lacks valid authentication credentials for that resource.</p><hr class="line" /><h3>Garmin Connect API Server</h3></body></html>Nach einem Neustart kommen diese Meldungen
garmin.0 2026-01-10 11:33:49.406 warn No OAuth1 token available, performing full login garmin.0 2026-01-10 11:33:49.334 warn This instance has 18193 objects, the limit for this instance is set to 5000. -
Ich habe den Adapter neu installiert (GitHub), leider komme ich nicht über die Anmeldung hinweg, weil Garmin einen Sicherheitscode sendet (neuer Browser, kein Cookie?). Diese Code kann ich aber nirgendwo eingeben, das ist ja nicht MFA, oder?
-
@tombox
Danke. Läuft hier auch wieder.
Siehst du eine Chance einen wie auch immer gearteten Filter in den Adapter zu bekommen?
20644 objects ist halt ziemlich viel für ein paar nützliche Datenpunkte.@bommel_030 was wäre denn ein einfacher filter bräuchte eine Beschreibung damit ki das einbauen kann
-
Ich habe den Adapter neu installiert (GitHub), leider komme ich nicht über die Anmeldung hinweg, weil Garmin einen Sicherheitscode sendet (neuer Browser, kein Cookie?). Diese Code kann ich aber nirgendwo eingeben, das ist ja nicht MFA, oder?
-
@tombox Das ist aber nicht MFA, oder? Ich habe den Sicherheitscode eingegeben und es hat nicht funktioniert. Dieser Sicherheitscode ändert sich ja jedes mal und ist nur 30min gültig.
Das ist die zweistufige Authentifizierung, die ich leider nicht mehr deaktivieren kann ;-( -
die token refresh warning kommt noch immer
garmin.0 2026-01-10 11:22:51.898 warn Token refresh failed: <!doctype html><html lang="en"><head><title>HTTP Status 401 – Unauthorized</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 401 – Unauthorized</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Message</b> Invalid signature for signature method HMAC-SHA1</p><p><b>Description</b> The request has not been applied to the target resource because it lacks valid authentication credentials for that resource.</p><hr class="line" /><h3>Garmin Connect API Server</h3></body></html>Nach einem Neustart kommen diese Meldungen
garmin.0 2026-01-10 11:33:49.406 warn No OAuth1 token available, performing full login garmin.0 2026-01-10 11:33:49.334 warn This instance has 18193 objects, the limit for this instance is set to 5000.@MassiveAttack nochmal installieren
-
@tombox Das ist aber nicht MFA, oder? Ich habe den Sicherheitscode eingegeben und es hat nicht funktioniert. Dieser Sicherheitscode ändert sich ja jedes mal und ist nur 30min gültig.
Das ist die zweistufige Authentifizierung, die ich leider nicht mehr deaktivieren kann ;-( -
@tombox Ich habe den Adapter komplett gelöscht und aus Github neu installiert. Benutzername und Passwort eingegeben. Kurz danach kam wieder eine email von Garmin mit den SIcherheitscode:
garmin.0 2026-01-10 21:15:14.393 error Login failed garmin.0 2026-01-10 21:15:14.393 error Login failed - no ticket garmin.0 2026-01-10 21:15:14.393 debug HTML: garmin.0 2026-01-10 21:15:14.393 error Login failed. Check username and password. garmin.0 2026-01-10 21:15:14.392 debug Response title: garmin.0 2026-01-10 21:15:13.144 debug Submitting login... garmin.0 2026-01-10 21:15:12.876 debug Getting CSRF token... garmin.0 2026-01-10 21:15:12.649 debug Setting SSO cookies... garmin.0 2026-01-10 21:15:12.607 info Starting SSO login... garmin.0 2026-01-10 21:15:12.606 info No token found, performing login... garmin.0 2026-01-10 21:15:12.461 info starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin#e9aaac016f02cd9c4f9fe06e5b2a3e75d26b3c44) in /opt/iobroker/node_modules/iobroker.garmin, node: v20.19.6, js-controller: 7.0.7 -
@tombox Ich habe den Adapter komplett gelöscht und aus Github neu installiert. Benutzername und Passwort eingegeben. Kurz danach kam wieder eine email von Garmin mit den SIcherheitscode:
garmin.0 2026-01-10 21:15:14.393 error Login failed garmin.0 2026-01-10 21:15:14.393 error Login failed - no ticket garmin.0 2026-01-10 21:15:14.393 debug HTML: garmin.0 2026-01-10 21:15:14.393 error Login failed. Check username and password. garmin.0 2026-01-10 21:15:14.392 debug Response title: garmin.0 2026-01-10 21:15:13.144 debug Submitting login... garmin.0 2026-01-10 21:15:12.876 debug Getting CSRF token... garmin.0 2026-01-10 21:15:12.649 debug Setting SSO cookies... garmin.0 2026-01-10 21:15:12.607 info Starting SSO login... garmin.0 2026-01-10 21:15:12.606 info No token found, performing login... garmin.0 2026-01-10 21:15:12.461 info starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin#e9aaac016f02cd9c4f9fe06e5b2a3e75d26b3c44) in /opt/iobroker/node_modules/iobroker.garmin, node: v20.19.6, js-controller: 7.0.7@Clown007 sagte in Test Adapter Garmin:
node: v20.19.6
Auf nodejs@22 bringen... Wird langsam Zeit weiterzuziehen.
iob nodejs-updateFertig.
-
@Clown007 sagte in Test Adapter Garmin:
node: v20.19.6
Auf nodejs@22 bringen... Wird langsam Zeit weiterzuziehen.
iob nodejs-updateFertig.
@Thomas-Braun
Danke für den Hinweis, ändert aber nichts an dem Problem:
(die mail mit dem Sicherheitscode habe ich auch wieder bekommen)garmin.0 2026-01-10 21:32:23.568 error Login failed garmin.0 2026-01-10 21:32:23.568 error Login failed - no ticket garmin.0 2026-01-10 21:32:23.568 debug HTML: garmin.0 2026-01-10 21:32:23.568 error Login failed. Check username and password. garmin.0 2026-01-10 21:32:23.568 debug Response title: garmin.0 2026-01-10 21:32:22.323 debug Submitting login... garmin.0 2026-01-10 21:32:22.007 debug Getting CSRF token... garmin.0 2026-01-10 21:32:21.313 debug Setting SSO cookies... garmin.0 2026-01-10 21:32:21.270 info Starting SSO login... garmin.0 2026-01-10 21:32:21.270 info No token found, performing login... garmin.0 2026-01-10 21:32:21.069 info starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin#e9aaac016f02cd9c4f9fe06e5b2a3e75d26b3c44) in /opt/iobroker/node_modules/iobroker.garmin, node: v22.21.0, js-controller: 7.0.7``` -
@Thomas-Braun
Danke für den Hinweis, ändert aber nichts an dem Problem:
(die mail mit dem Sicherheitscode habe ich auch wieder bekommen)garmin.0 2026-01-10 21:32:23.568 error Login failed garmin.0 2026-01-10 21:32:23.568 error Login failed - no ticket garmin.0 2026-01-10 21:32:23.568 debug HTML: garmin.0 2026-01-10 21:32:23.568 error Login failed. Check username and password. garmin.0 2026-01-10 21:32:23.568 debug Response title: garmin.0 2026-01-10 21:32:22.323 debug Submitting login... garmin.0 2026-01-10 21:32:22.007 debug Getting CSRF token... garmin.0 2026-01-10 21:32:21.313 debug Setting SSO cookies... garmin.0 2026-01-10 21:32:21.270 info Starting SSO login... garmin.0 2026-01-10 21:32:21.270 info No token found, performing login... garmin.0 2026-01-10 21:32:21.069 info starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin#e9aaac016f02cd9c4f9fe06e5b2a3e75d26b3c44) in /opt/iobroker/node_modules/iobroker.garmin, node: v22.21.0, js-controller: 7.0.7```@Clown007 sagte in Test Adapter Garmin:
ändert aber nichts an dem Problem:
Das habe ich auch nicht behauptet oder erwartet.
-
@Thomas-Braun
Danke für den Hinweis, ändert aber nichts an dem Problem:
(die mail mit dem Sicherheitscode habe ich auch wieder bekommen)garmin.0 2026-01-10 21:32:23.568 error Login failed garmin.0 2026-01-10 21:32:23.568 error Login failed - no ticket garmin.0 2026-01-10 21:32:23.568 debug HTML: garmin.0 2026-01-10 21:32:23.568 error Login failed. Check username and password. garmin.0 2026-01-10 21:32:23.568 debug Response title: garmin.0 2026-01-10 21:32:22.323 debug Submitting login... garmin.0 2026-01-10 21:32:22.007 debug Getting CSRF token... garmin.0 2026-01-10 21:32:21.313 debug Setting SSO cookies... garmin.0 2026-01-10 21:32:21.270 info Starting SSO login... garmin.0 2026-01-10 21:32:21.270 info No token found, performing login... garmin.0 2026-01-10 21:32:21.069 info starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin#e9aaac016f02cd9c4f9fe06e5b2a3e75d26b3c44) in /opt/iobroker/node_modules/iobroker.garmin, node: v22.21.0, js-controller: 7.0.7``` -
@tombox Noch mal installiert und dann den Sicherheitscode bei MFA eingegeben;
garmin.0 2026-01-10 23:21:50.960 error Login failed garmin.0 2026-01-10 23:21:50.960 error OAuth2 token exchange failed garmin.0 2026-01-10 23:21:50.960 error OAuth2 request failed: 401 Request failed with status code 401 garmin.0 2026-01-10 23:21:50.816 debug Exchanging for OAuth2 token... garmin.0 2026-01-10 23:21:50.816 debug OAuth1 Token: OK garmin.0 2026-01-10 23:21:50.816 debug "oauth_token=a2d59379-a1e3-4a5d-b801-254e7610610b&oauth_token_secret=juIPzbGaeio0ria5HHiPlM32sNoo3nJm24Y&mfa_token=MFA-2253-sttzCWaUmDSjtXuOvAdfM7p2ffg02vkzthvegRfHllybqR66ES-cas&mfa_expiration_timestamp=2027-01-10 22:21:49.000" garmin.0 2026-01-10 23:21:50.816 debug OAuth1 Status: 200 garmin.0 2026-01-10 23:21:50.224 debug {"consumer_key":"fc3e99d2-118c-44b8-8ae3-03370dde24c0","consumer_secret":"E08WAR897WEy2knn7aFBrvegVAf0AFdWBBF"} garmin.0 2026-01-10 23:21:50.223 debug Fetched OAuth consumer from S3 garmin.0 2026-01-10 23:21:49.659 debug Getting OAuth1 token... garmin.0 2026-01-10 23:21:49.659 info MFA verification successful garmin.0 2026-01-10 23:21:49.655 debug MFA Response title: Success garmin.0 2026-01-10 23:21:49.655 debug "<!DOCTYPE html>\n<html class=\"no-js\">\n\t<head>\n\t\t<title>Success</title>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge;\" />\n\t\t<meta name=\"description\" content=\"\">\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t\t<meta http-equiv=\"cleartype\" content=\"on\">\n\t\t<script type=\"text/javascript\" src=\"/sso/js/jquery/3.7.1/jquery.min.js?20210319\"></script>\n\t\t<script type=\"text/javascript\">jQuery.noConflict();</script>\n\t\t<script type=\"text/javascript\" src=\"/sso/js/json2.js\"></script>\n\t\t<script type=\"text/javascript\" src=\"/sso/js/consoleUtils.js?20210319\"></script>\n\t\t<script type=\"text/javascript\" src=\"/sso/js/postmessage.js?20210319\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tvar redirectAfterAccountLoginUrl \t = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n\t\t\tvar redirectAfterAccountCreationUrl = \"\";\n\t\t\tvar consumeServiceTicket \t = \"true\";\n\t\t\tvar service_url \t = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n\t\t\tvar parent_url \t = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n\t\t\tvar response_url \t = \"https:\\/\\/sso.garmin.com\\/sso\\/embed?ticket=ST-243938-bluwhpefsfVehSkICaMj-cas\";\n\t\t\tvar logintoken \t = \"xTCEa3i5tL\";\n\t\t\tvar socialLogin \t = \"\";\n\t\t\tvar performMFACheck = \"\";\n\n\t\t\t// Decode url if it's encoded unnecessarily (which is happening when SSO GAuth logins redisplay the login page due to session timeouts.)\n\t\t\tif (response_url.indexOf('%3A%2F%2F') != -1) {\n\t\t\t\tresponse_url = decodeURIComponent(response_url);\n\t\t\t}\n\t\t\tresponse_url = response_url.replace(new RegExp(\"&\", 'g'),\"&\");\n\n\t\t\tvar service_ticket = response_url.substring(response_url.indexOf('ticket=') + 7, response_url.length);\n\n\t\t\tif (redirectAfterAccountLoginUrl) {\n\t\t\t\tconsoleInfo('casEmbedSuccess.html: redirectAfterAccountLoginUrl: [' + redirectAfterAccountLoginUrl + ']');\n\t\t\t}\n\t\t\tconsoleInfo('casEmbedSuccess.html: consumeServiceTicket: [' + consumeServiceTicket + ']');\n\t\t\tconsoleInfo('casEmbedSuccess.html: service_url: [' + service_url + ']');\n\t\t\tconsoleInfo('casEmbedSuccess.html: parent_url: [' + parent_url + ']');\n\t\t\tconsoleInfo('casEmbedSuccess.html: response_url: [' + response_url + ']');\n\t\t\tconsoleInfo('casEmbedSuccess.html: service_ticket: [' + service_ticket + ']');\n\t\t\tif (logintoken) {\n\t\t\t\tconsoleInfo('casEmbedSuccess.html: logintoken: [' + logintoken + ']');\n\t\t\t}\n\t\t\tif (socialLogin) {\n\t\t\t\tconsoleInfo('casEmbedSuccess.html: socialLogin: [' + socialLogin + ']');\n\t\t\t}\n\n\t\t\tfunction send(msg) {\n\t\t\t\tconsoleInfo('casEmbedSuccess.html: send(): Calling XD.postMessage(msg:[' + JSON.stringify(msg) + '], target_url:[' + parent_url + '])...');\n\t\t\t\tXD.postMessage(msg, parent_url, parent);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfunction redirect(target){\n\t\t\t\tvar embedWidget = \"true\";\n\t\t\t\tif (embedWidget != 'true') {\n\t\t\t\t\tif (logintoken || socialLogin) {\n\t\t\t\t\t\t// Tell parent to close opened Gauth lite box.\n\t\t\t\t\t\tsend({'closeLiteBox':'1'});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Tell parent to resize Gauth widget's height to just that of the loading icon.\n\t\t\t\t\t\tsend({'gauthHeight':jQuery(\"#GAuth-component\").height()});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (window.opener != null && window.opener.parent && window.opener.parent.frameElement) {\n\t\t\t\t\tconsoleInfo('casEmbedSuccess.html: frameElement detected: [' + window.opener.parent.frameElement + ']');\n\t\t\t\t\tvar iframeParent = window.opener.parent;\n\t\t\t\t\tiframeParent.location.href = target;\n\t\t\t\t\twindow.close();\n\t\t\t\t} else {\n\t\t\t\t\t// If the \"redirectAfterAccountLoginUrl\" GAuth config parameter was specified,\n\t\t\t\t\t// a full page refresh upon logon was requested, so redirect the parent window upon login.\n\t\t\t\t\tif (redirectAfterAccountLoginUrl || redirectAfterAccountCreationUrl || (socialLogin && socialLogin === 'true') || (performMFACheck && performMFACheck === 'true')) {\n\n\t\t\t\t\t\tif (embedWidget != 'true') {\n\t\t\t\t\t\t\tsend({'status':'SUCCESS', 'successDetails':'Login Successful'});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Redirect parent of login iframe to requested service URL with ?ST=<Service Ticket ID> appended,\n\t\t\t\t\t\t// so the webapp can validate the service ticket and log the user on to the webapp.\n\t\t\t\t\t\tconsoleInfo('casEmbedSuccess.html: Calling parent.location.href = [' + response_url + '];...');\n\t\t\t\t\t\ttop.location.href = response_url;\n\n\t\t\t\t\t// Else if GAuth was configured not to consume the service ticket, send the service ticket and service url.\n\t\t\t\t\t// It's then up to the parent page to hide the GAuth widget and validate the service ticket.\n\t\t\t\t\t} else if (consumeServiceTicket == 'false') {\n\n\t\t\t\t\t\tsend({'status':'SUCCESS', 'successDetails':'Login Successful', 'serviceTicket':service_ticket, 'serviceUrl':service_url});\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else consume the service ticket and log the user into the parent webapp, by making a JSONP request to the response url.\n\t\t\t\t\t\t// This service ticket request to the parent webapp will return a small amount of JSON that we\n\t\t\t\t\t\t// can send in the success event to the parent page to notify them of successful logon\n\t\t\t\t\t\t// It's then up to the parent page to hide the GAuth widget and do whatever it wants.\n\t\t\t\t\t\tconsoleInfo('casEmbedSuccess.html: Loading ajax jsonp URL: [' + response_url + ']');\n\t\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\t\ttype: \"REDIRECT\",\n\t\t\t\t\t\t\turl: response_url,\n\t\t\t\t\t\t\tdataType: 'jsonp',\n\t\t\t\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\t\t\t\tconsoleError('casEmbedSuccess.html: Error loading ajax jsonp URL: [' + response_url + ']! Error: ' + error);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsuccess: function( data, status, xhr ) {\n\t\t\t\t\t\t\t\tconsoleInfo('casEmbedSuccess.html: success loading ajax jsonp url. data: [' + data + ']');\n\t\t\t\t\t\t\t\tvar userdata = data;\n\t\t\t\t\t\t\t\tif (typeof(userdata) === 'string') {\n\t\t\t\t\t\t\t\t\tuserdata = JSON.parse(data);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconsoleInfo('casGenericRedirect.jsp: customerId: [' + userdata.customerId\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], username: [' + userdata.username\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], rememberMe: [' + userdata.rememberMe\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], password: [' + userdata.password\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], email: [' + userdata.email\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], displayName: [' + userdata.displayName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], firstName: [' + userdata.firstName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], lastName: [' + userdata.lastName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], localePreference: [' + userdata.localePreference\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], addressLine1: [' + userdata.addressLine1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], addressLine2: [' + userdata.addressLine2\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], cityName: [' + userdata.cityName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], state: [' + userdata.state\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], postalCode: [' + userdata.postalCode\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], country: [' + userdata.country\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], passwordChangeRequired: [' + userdata.passwordChangeRequired\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], lastLogin: [' + userdata.lastLogin\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], erpCustomerNumber: [' + userdata.erpCustomerNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ ']');\n\t\t\t\t\t\t\t\tsend({'status' : 'SUCCESS',\n\t\t\t\t\t\t\t\t\t\t\t'successDetails' : 'Login Successful',\n\t\t\t\t\t\t\t\t\t\t\t'customerId' : userdata.customerId,\n\t\t\t\t\t\t\t\t\t\t\t'username' : userdata.username,\n\t\t\t\t\t\t\t\t\t\t\t'rememberMe' : userdata.rememberMe,\n\t\t\t\t\t\t\t\t\t\t\t'password' : userdata.password,\n\t\t\t\t\t\t\t\t\t\t\t'email' : userdata.email,\n\t\t\t\t\t\t\t\t\t\t\t'displayName' : userdata.displayName,\n\t\t\t\t\t\t\t\t\t\t\t'firstName' : userdata.firstName,\n\t\t\t\t\t\t\t\t\t\t\t'lastName' : userdata.lastName,\n\t\t\t\t\t\t\t\t\t\t\t'localePreference' : userdata.localePreference,\n\t\t\t\t\t\t\t\t\t\t\t'addressLine1' : userdata.addressLine1,\n\t\t\t\t\t\t\t\t\t\t\t'addressLine2' : userdata.addressLine2,\n\t\t\t\t\t\t\t\t\t\t\t'cityName' : userdata.cityName,\n\t\t\t\t\t\t\t\t\t\t\t'state' : userdata.state,\n\t\t\t\t\t\t\t\t\t\t\t'postalCode' : userdata.postalCode,\n\t\t\t\t\t\t\t\t\t\t\t'country' : userdata.country,\n\t\t\t\t\t\t\t\t\t\t\t'passwordChangeRequired' : userdata.passwordChangeRequired,\n\t\t\t\t\t\t\t\t\t\t\t'lastLogin' : userdata.lastLogin,\n\t\t\t\t\t\t\t\t\t\t\t'erpCustomerNumber' : userdata.erpCustomerNumber\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</script>\n\t</head>\n\t<body>\n\t\t<div id=\"GAuth-component\">\n\t\t\t<img src='/sso/images/ajax-loader.gif' class=\"loaderImage\"/>\n\t\t</div>\n\t\t<script type=\"text/javascript\">\n\t\t\tjQuery(document).ready(function(){\n\t\t\t\tvar service = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n\t\t\t\tconsoleInfo(\"casEmbedSuccess.html: ready, calling redirect('\" + service + \"')...\");\n\t\t\t\tredirect(service);\n\t\t\t});\n\t\t</script>\n\t<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML=\"window.__CF$cv$params={r:'9bbf91cbe912124d',t:'MTc2ODA4MzcwOS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);\";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>\n</html>\n" garmin.0 2026-01-10 23:21:49.655 debug MFA resume response: 200 garmin.0 2026-01-10 23:21:48.036 info Resuming MFA session... garmin.0 2026-01-10 23:21:47.992 info Starting SSO login... garmin.0 2026-01-10 23:21:47.992 info No token found, performing login... garmin.0 2026-01-10 23:21:47.854 info starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin#dc6358fd578bc1f8b4c500c02d32a06366a491f6) in /opt/iobroker/node_modules/iobroker.garmin, node: v22.21.0, js-controller: 7.0.7 garmin.0 2026-01-10 23:21:45.532 debug States connected to redis: 127.0.0.1:9000 garmin.0 2026-01-10 23:21:45.411 debug States create User PubSub Client garmin.0 2026-01-10 23:21:45.410 debug States create System PubSub Client garmin.0 2026-01-10 23:21:45.368 debug Redis States: Use Redis connection: 127.0.0.1:9000 garmin.0 2026-01-10 23:21:45.286 debug Objects connected to redis: 127.0.0.1:9001 garmin.0 2026-01-10 23:21:45.285 debug Objects client initialize lua scripts garmin.0 2026-01-10 23:21:45.091 debug Objects create User PubSub Client garmin.0 2026-01-10 23:21:45.091 debug Objects create System PubSub Client garmin.0 2026-01-10 23:21:45.090 debug Objects client ready ... initialize now garmin.0 2026-01-10 23:21:45.028 debug Redis Objects: Use Redis connection: 127.0.0.1:9001 garmin.0 2026-01-10 23:21:41.160 info terminating garmin.0 2026-01-10 23:21:40.660 info Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason garmin.0 2026-01-10 23:21:40.660 info terminating garmin.0 2026-01-10 23:21:40.659 info Got terminate signal TERMINATE_YOURSELF -
@tombox Noch mal installiert und dann den Sicherheitscode bei MFA eingegeben;
garmin.0 2026-01-10 23:21:50.960 error Login failed garmin.0 2026-01-10 23:21:50.960 error OAuth2 token exchange failed garmin.0 2026-01-10 23:21:50.960 error OAuth2 request failed: 401 Request failed with status code 401 garmin.0 2026-01-10 23:21:50.816 debug Exchanging for OAuth2 token... garmin.0 2026-01-10 23:21:50.816 debug OAuth1 Token: OK garmin.0 2026-01-10 23:21:50.816 debug "oauth_token=a2d59379-a1e3-4a5d-b801-254e7610610b&oauth_token_secret=juIPzbGaeio0ria5HHiPlM32sNoo3nJm24Y&mfa_token=MFA-2253-sttzCWaUmDSjtXuOvAdfM7p2ffg02vkzthvegRfHllybqR66ES-cas&mfa_expiration_timestamp=2027-01-10 22:21:49.000" garmin.0 2026-01-10 23:21:50.816 debug OAuth1 Status: 200 garmin.0 2026-01-10 23:21:50.224 debug {"consumer_key":"fc3e99d2-118c-44b8-8ae3-03370dde24c0","consumer_secret":"E08WAR897WEy2knn7aFBrvegVAf0AFdWBBF"} garmin.0 2026-01-10 23:21:50.223 debug Fetched OAuth consumer from S3 garmin.0 2026-01-10 23:21:49.659 debug Getting OAuth1 token... garmin.0 2026-01-10 23:21:49.659 info MFA verification successful garmin.0 2026-01-10 23:21:49.655 debug MFA Response title: Success garmin.0 2026-01-10 23:21:49.655 debug "<!DOCTYPE html>\n<html class=\"no-js\">\n\t<head>\n\t\t<title>Success</title>\n\t\t<meta charset=\"utf-8\">\n\t\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge;\" />\n\t\t<meta name=\"description\" content=\"\">\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t\t<meta http-equiv=\"cleartype\" content=\"on\">\n\t\t<script type=\"text/javascript\" src=\"/sso/js/jquery/3.7.1/jquery.min.js?20210319\"></script>\n\t\t<script type=\"text/javascript\">jQuery.noConflict();</script>\n\t\t<script type=\"text/javascript\" src=\"/sso/js/json2.js\"></script>\n\t\t<script type=\"text/javascript\" src=\"/sso/js/consoleUtils.js?20210319\"></script>\n\t\t<script type=\"text/javascript\" src=\"/sso/js/postmessage.js?20210319\"></script>\n\t\t<script type=\"text/javascript\">\n\t\t\tvar redirectAfterAccountLoginUrl \t = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n\t\t\tvar redirectAfterAccountCreationUrl = \"\";\n\t\t\tvar consumeServiceTicket \t = \"true\";\n\t\t\tvar service_url \t = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n\t\t\tvar parent_url \t = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n\t\t\tvar response_url \t = \"https:\\/\\/sso.garmin.com\\/sso\\/embed?ticket=ST-243938-bluwhpefsfVehSkICaMj-cas\";\n\t\t\tvar logintoken \t = \"xTCEa3i5tL\";\n\t\t\tvar socialLogin \t = \"\";\n\t\t\tvar performMFACheck = \"\";\n\n\t\t\t// Decode url if it's encoded unnecessarily (which is happening when SSO GAuth logins redisplay the login page due to session timeouts.)\n\t\t\tif (response_url.indexOf('%3A%2F%2F') != -1) {\n\t\t\t\tresponse_url = decodeURIComponent(response_url);\n\t\t\t}\n\t\t\tresponse_url = response_url.replace(new RegExp(\"&\", 'g'),\"&\");\n\n\t\t\tvar service_ticket = response_url.substring(response_url.indexOf('ticket=') + 7, response_url.length);\n\n\t\t\tif (redirectAfterAccountLoginUrl) {\n\t\t\t\tconsoleInfo('casEmbedSuccess.html: redirectAfterAccountLoginUrl: [' + redirectAfterAccountLoginUrl + ']');\n\t\t\t}\n\t\t\tconsoleInfo('casEmbedSuccess.html: consumeServiceTicket: [' + consumeServiceTicket + ']');\n\t\t\tconsoleInfo('casEmbedSuccess.html: service_url: [' + service_url + ']');\n\t\t\tconsoleInfo('casEmbedSuccess.html: parent_url: [' + parent_url + ']');\n\t\t\tconsoleInfo('casEmbedSuccess.html: response_url: [' + response_url + ']');\n\t\t\tconsoleInfo('casEmbedSuccess.html: service_ticket: [' + service_ticket + ']');\n\t\t\tif (logintoken) {\n\t\t\t\tconsoleInfo('casEmbedSuccess.html: logintoken: [' + logintoken + ']');\n\t\t\t}\n\t\t\tif (socialLogin) {\n\t\t\t\tconsoleInfo('casEmbedSuccess.html: socialLogin: [' + socialLogin + ']');\n\t\t\t}\n\n\t\t\tfunction send(msg) {\n\t\t\t\tconsoleInfo('casEmbedSuccess.html: send(): Calling XD.postMessage(msg:[' + JSON.stringify(msg) + '], target_url:[' + parent_url + '])...');\n\t\t\t\tXD.postMessage(msg, parent_url, parent);\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tfunction redirect(target){\n\t\t\t\tvar embedWidget = \"true\";\n\t\t\t\tif (embedWidget != 'true') {\n\t\t\t\t\tif (logintoken || socialLogin) {\n\t\t\t\t\t\t// Tell parent to close opened Gauth lite box.\n\t\t\t\t\t\tsend({'closeLiteBox':'1'});\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Tell parent to resize Gauth widget's height to just that of the loading icon.\n\t\t\t\t\t\tsend({'gauthHeight':jQuery(\"#GAuth-component\").height()});\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (window.opener != null && window.opener.parent && window.opener.parent.frameElement) {\n\t\t\t\t\tconsoleInfo('casEmbedSuccess.html: frameElement detected: [' + window.opener.parent.frameElement + ']');\n\t\t\t\t\tvar iframeParent = window.opener.parent;\n\t\t\t\t\tiframeParent.location.href = target;\n\t\t\t\t\twindow.close();\n\t\t\t\t} else {\n\t\t\t\t\t// If the \"redirectAfterAccountLoginUrl\" GAuth config parameter was specified,\n\t\t\t\t\t// a full page refresh upon logon was requested, so redirect the parent window upon login.\n\t\t\t\t\tif (redirectAfterAccountLoginUrl || redirectAfterAccountCreationUrl || (socialLogin && socialLogin === 'true') || (performMFACheck && performMFACheck === 'true')) {\n\n\t\t\t\t\t\tif (embedWidget != 'true') {\n\t\t\t\t\t\t\tsend({'status':'SUCCESS', 'successDetails':'Login Successful'});\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Redirect parent of login iframe to requested service URL with ?ST=<Service Ticket ID> appended,\n\t\t\t\t\t\t// so the webapp can validate the service ticket and log the user on to the webapp.\n\t\t\t\t\t\tconsoleInfo('casEmbedSuccess.html: Calling parent.location.href = [' + response_url + '];...');\n\t\t\t\t\t\ttop.location.href = response_url;\n\n\t\t\t\t\t// Else if GAuth was configured not to consume the service ticket, send the service ticket and service url.\n\t\t\t\t\t// It's then up to the parent page to hide the GAuth widget and validate the service ticket.\n\t\t\t\t\t} else if (consumeServiceTicket == 'false') {\n\n\t\t\t\t\t\tsend({'status':'SUCCESS', 'successDetails':'Login Successful', 'serviceTicket':service_ticket, 'serviceUrl':service_url});\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Else consume the service ticket and log the user into the parent webapp, by making a JSONP request to the response url.\n\t\t\t\t\t\t// This service ticket request to the parent webapp will return a small amount of JSON that we\n\t\t\t\t\t\t// can send in the success event to the parent page to notify them of successful logon\n\t\t\t\t\t\t// It's then up to the parent page to hide the GAuth widget and do whatever it wants.\n\t\t\t\t\t\tconsoleInfo('casEmbedSuccess.html: Loading ajax jsonp URL: [' + response_url + ']');\n\t\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\t\ttype: \"REDIRECT\",\n\t\t\t\t\t\t\turl: response_url,\n\t\t\t\t\t\t\tdataType: 'jsonp',\n\t\t\t\t\t\t\terror: function(xhr, status, error) {\n\t\t\t\t\t\t\t\tconsoleError('casEmbedSuccess.html: Error loading ajax jsonp URL: [' + response_url + ']! Error: ' + error);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsuccess: function( data, status, xhr ) {\n\t\t\t\t\t\t\t\tconsoleInfo('casEmbedSuccess.html: success loading ajax jsonp url. data: [' + data + ']');\n\t\t\t\t\t\t\t\tvar userdata = data;\n\t\t\t\t\t\t\t\tif (typeof(userdata) === 'string') {\n\t\t\t\t\t\t\t\t\tuserdata = JSON.parse(data);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconsoleInfo('casGenericRedirect.jsp: customerId: [' + userdata.customerId\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], username: [' + userdata.username\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], rememberMe: [' + userdata.rememberMe\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], password: [' + userdata.password\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], email: [' + userdata.email\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], displayName: [' + userdata.displayName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], firstName: [' + userdata.firstName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], lastName: [' + userdata.lastName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], localePreference: [' + userdata.localePreference\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], addressLine1: [' + userdata.addressLine1\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], addressLine2: [' + userdata.addressLine2\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], cityName: [' + userdata.cityName\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], state: [' + userdata.state\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], postalCode: [' + userdata.postalCode\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], country: [' + userdata.country\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], passwordChangeRequired: [' + userdata.passwordChangeRequired\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], lastLogin: [' + userdata.lastLogin\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ '], erpCustomerNumber: [' + userdata.erpCustomerNumber\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ ']');\n\t\t\t\t\t\t\t\tsend({'status' : 'SUCCESS',\n\t\t\t\t\t\t\t\t\t\t\t'successDetails' : 'Login Successful',\n\t\t\t\t\t\t\t\t\t\t\t'customerId' : userdata.customerId,\n\t\t\t\t\t\t\t\t\t\t\t'username' : userdata.username,\n\t\t\t\t\t\t\t\t\t\t\t'rememberMe' : userdata.rememberMe,\n\t\t\t\t\t\t\t\t\t\t\t'password' : userdata.password,\n\t\t\t\t\t\t\t\t\t\t\t'email' : userdata.email,\n\t\t\t\t\t\t\t\t\t\t\t'displayName' : userdata.displayName,\n\t\t\t\t\t\t\t\t\t\t\t'firstName' : userdata.firstName,\n\t\t\t\t\t\t\t\t\t\t\t'lastName' : userdata.lastName,\n\t\t\t\t\t\t\t\t\t\t\t'localePreference' : userdata.localePreference,\n\t\t\t\t\t\t\t\t\t\t\t'addressLine1' : userdata.addressLine1,\n\t\t\t\t\t\t\t\t\t\t\t'addressLine2' : userdata.addressLine2,\n\t\t\t\t\t\t\t\t\t\t\t'cityName' : userdata.cityName,\n\t\t\t\t\t\t\t\t\t\t\t'state' : userdata.state,\n\t\t\t\t\t\t\t\t\t\t\t'postalCode' : userdata.postalCode,\n\t\t\t\t\t\t\t\t\t\t\t'country' : userdata.country,\n\t\t\t\t\t\t\t\t\t\t\t'passwordChangeRequired' : userdata.passwordChangeRequired,\n\t\t\t\t\t\t\t\t\t\t\t'lastLogin' : userdata.lastLogin,\n\t\t\t\t\t\t\t\t\t\t\t'erpCustomerNumber' : userdata.erpCustomerNumber\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t</script>\n\t</head>\n\t<body>\n\t\t<div id=\"GAuth-component\">\n\t\t\t<img src='/sso/images/ajax-loader.gif' class=\"loaderImage\"/>\n\t\t</div>\n\t\t<script type=\"text/javascript\">\n\t\t\tjQuery(document).ready(function(){\n\t\t\t\tvar service = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n\t\t\t\tconsoleInfo(\"casEmbedSuccess.html: ready, calling redirect('\" + service + \"')...\");\n\t\t\t\tredirect(service);\n\t\t\t});\n\t\t</script>\n\t<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML=\"window.__CF$cv$params={r:'9bbf91cbe912124d',t:'MTc2ODA4MzcwOS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);\";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>\n</html>\n" garmin.0 2026-01-10 23:21:49.655 debug MFA resume response: 200 garmin.0 2026-01-10 23:21:48.036 info Resuming MFA session... garmin.0 2026-01-10 23:21:47.992 info Starting SSO login... garmin.0 2026-01-10 23:21:47.992 info No token found, performing login... garmin.0 2026-01-10 23:21:47.854 info starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin#dc6358fd578bc1f8b4c500c02d32a06366a491f6) in /opt/iobroker/node_modules/iobroker.garmin, node: v22.21.0, js-controller: 7.0.7 garmin.0 2026-01-10 23:21:45.532 debug States connected to redis: 127.0.0.1:9000 garmin.0 2026-01-10 23:21:45.411 debug States create User PubSub Client garmin.0 2026-01-10 23:21:45.410 debug States create System PubSub Client garmin.0 2026-01-10 23:21:45.368 debug Redis States: Use Redis connection: 127.0.0.1:9000 garmin.0 2026-01-10 23:21:45.286 debug Objects connected to redis: 127.0.0.1:9001 garmin.0 2026-01-10 23:21:45.285 debug Objects client initialize lua scripts garmin.0 2026-01-10 23:21:45.091 debug Objects create User PubSub Client garmin.0 2026-01-10 23:21:45.091 debug Objects create System PubSub Client garmin.0 2026-01-10 23:21:45.090 debug Objects client ready ... initialize now garmin.0 2026-01-10 23:21:45.028 debug Redis Objects: Use Redis connection: 127.0.0.1:9001 garmin.0 2026-01-10 23:21:41.160 info terminating garmin.0 2026-01-10 23:21:40.660 info Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason garmin.0 2026-01-10 23:21:40.660 info terminating garmin.0 2026-01-10 23:21:40.659 info Got terminate signal TERMINATE_YOURSELF -
@tombox Leider gleiches verhalten. Ist es denn korrekt, den Sicherheitscode bei MFA ein zu tragen?
garmin.0 2026-01-11 20:07:28.217 error Login failed garmin.0 2026-01-11 20:07:28.215 error OAuth2 token exchange failed garmin.0 2026-01-11 20:07:28.215 error OAuth2 request failed: 401 Request failed with status code 401 garmin.0 2026-01-11 20:07:28.056 debug body: mfa_token=MFA-2666-d2lkc3YaB0wvxWh73SLfVqHgPvXiHHMzowVD1qKeQquelRZcBZ-cas garmin.0 2026-01-11 20:07:28.056 debug authHeader: {"Authorization":"OAuth oauth_consumer_key=\"fc3e99d2-118c-44b8-8ae3-03370dde24c0\", oauth_nonce=\"20WzdBPvvPp3CTYj0cjVSSrR4sMrQvLN\", oauth_signature=\"qAXGOYB%2F0oL5uSQjiOZQ0rouClA%3D\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"1768158448\", oauth_token=\"a2d59379-a1e3-4a5d-b801-254e7610610b\", oauth_version=\"1.0\""} garmin.0 2026-01-11 20:07:28.056 debug oauth1Token: {"oauth_token":"a2d59379-a1e3-4a5d-b801-254e7610610b","oauth_token_secret":"juIPzbGaeio0ria5HHiPlM32sNoo3nJm24Y","mfa_token":"MFA-2666-d2lkc3YaB0wvxWh73SLfVqHgPvXiHHMzowVD1qKeQquelRZcBZ-cas"} garmin.0 2026-01-11 20:07:28.056 debug Exchanging for OAuth2 token... garmin.0 2026-01-11 20:07:28.055 debug OAuth1 Token: OK garmin.0 2026-01-11 20:07:28.055 debug "oauth_token=a2d59379-a1e3-4a5d-b801-254e7610610b&oauth_token_secret=juIPzbGaeio0ria5HHiPlM32sNoo3nJm24Y&mfa_token=MFA-2666-d2lkc3YaB0wvxWh73SLfVqHgPvXiHHMzowVD1qKeQquelRZcBZ-cas&mfa_expiration_timestamp=2027-01-11 19:07:26.000" garmin.0 2026-01-11 20:07:28.055 debug OAuth1 Status: 200 garmin.0 2026-01-11 20:07:27.355 debug {"consumer_key":"fc3e99d2-118c-44b8-8ae3-03370dde24c0","consumer_secret":"E08WAR897WEy2knn7aFBrvegVAf0AFdWBBF"} garmin.0 2026-01-11 20:07:27.355 debug Fetched OAuth consumer from S3 garmin.0 2026-01-11 20:07:26.837 debug Getting OAuth1 token... garmin.0 2026-01-11 20:07:26.837 debug Ticket: ST-251421-CywKdEdqNVV2IDHe6gO7-cas garmin.0 2026-01-11 20:07:26.837 info MFA verification successful garmin.0 2026-01-11 20:07:26.833 debug MFA Response title: Success -
@bommel_030 was wäre denn ein einfacher filter bräuchte eine Beschreibung damit ki das einbauen kann
@tombox sagte in Test Adapter Garmin:
@bommel_030 was wäre denn ein einfacher filter bräuchte eine Beschreibung damit ki das einbauen kann
Also wenn ich ehrlich bin, am einfachsten wäre es, wenn man die interessanten Datenpunkte auswählen/eingeben könnte.
Von den gut 20k Datenpunkten die der Adapter liefert sind für mich ca. 25 interessant.
Es gibt zwar einige Ordner die man auf ne Blacklist setzen könnte, aber die Datenpunkte sind so quer über die Ordner verteilt, da würde noch ne Menge "Müll" verbleiben.