Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter Garmin

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    16
    1
    1.4k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    803

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Test Adapter Garmin

Geplant Angeheftet Gesperrt Verschoben Tester
196 Beiträge 21 Kommentatoren 36.1k Aufrufe 21 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • C Clown007

    @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```
    T Offline
    T Offline
    tombox
    schrieb am zuletzt editiert von
    #170

    @Clown007 nochmal installieren

    C 1 Antwort Letzte Antwort
    0
    • T tombox

      @Clown007 nochmal installieren

      C Offline
      C Offline
      Clown007
      schrieb am zuletzt editiert von
      #171

      @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(\"&amp;\", '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
      
      T 1 Antwort Letzte Antwort
      0
      • C Clown007

        @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(\"&amp;\", '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
        
        T Offline
        T Offline
        tombox
        schrieb am zuletzt editiert von
        #172

        @Clown007 nochmal installieren und testen

        C 1 Antwort Letzte Antwort
        0
        • T tombox

          @Clown007 nochmal installieren und testen

          C Offline
          C Offline
          Clown007
          schrieb am zuletzt editiert von Clown007
          #173

          @tombox Leider gleiches verhalten.

          
          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
          
          T 1 Antwort Letzte Antwort
          0
          • T tombox

            @bommel_030 was wäre denn ein einfacher filter bräuchte eine Beschreibung damit ki das einbauen kann

            B Nicht stören
            B Nicht stören
            bommel_030
            schrieb am zuletzt editiert von
            #174

            @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.

            T 1 Antwort Letzte Antwort
            0
            • B bommel_030

              @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.

              T Offline
              T Offline
              tombox
              schrieb am zuletzt editiert von
              #175

              @bommel_030 ki hat was eingebaut einfach mal probieren

              B 1 Antwort Letzte Antwort
              0
              • C Clown007

                @tombox Leider gleiches verhalten.

                
                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
                
                T Offline
                T Offline
                tombox
                schrieb am zuletzt editiert von
                #176

                @Clown007 ja du kannst nochmal alles unter Objekt bei auth löschen und den mfa code und dann warten bis ein neuer kommt

                C 1 Antwort Letzte Antwort
                0
                • T tombox

                  @bommel_030 ki hat was eingebaut einfach mal probieren

                  B Nicht stören
                  B Nicht stören
                  bommel_030
                  schrieb am zuletzt editiert von
                  #177

                  @tombox
                  Danke, aber so ganz rund läuft es noch nicht. Ich habe die Instanz gestoppt, alle Datenpunkte gelöscht und 22 Datenpunkte in der Instanz eingetragen. Die Datenpunkte werden auch weiter abgerufen und aktualisiert.
                  Zusätzlich werden aber noch zig weitere abgerufen und ich kann nicht nachvollziehen warum.
                  Nach meinem Verständnis sollten nur noch die 22 eingetragenen auftauchen. Nach dem Löschen und Neustart des Adapter bin ich nicht wie erwartet von 20.000 auf 22 Datenpunkte runter, sondern "nur" auf 8.000 Datenpunkte.
                  Im Ordner "hydration" tauchen z.B. nur die angegebenen Datenpunkte auf. Im Ordner "weight" werden noch weitere, nicht eingetragene angelegt. Alles was im Screenshot den Link zum Alias hat ist auch in der Instanz eingetragen. Alle anderen sollten nicht auftauchen.
                  74439961-577e-4880-b950-ce978fb37ace-image.png

                  T 1 Antwort Letzte Antwort
                  0
                  • T tombox

                    @Clown007 ja du kannst nochmal alles unter Objekt bei auth löschen und den mfa code und dann warten bis ein neuer kommt

                    C Offline
                    C Offline
                    Clown007
                    schrieb am zuletzt editiert von
                    #178

                    @tombox Habe ich gemacht, Code kam sofort von Garmin, eingetragen, .... leider keine Veränderung. Adapter kann sich nicht verbinden, aber ich habe keine Einträge (trotz debug) unter Protokolle?

                    2026-01-12 14:05:46.727  - info: garmin.0 (393639) No token found, performing login...
                    2026-01-12 14:05:46.727  - info: garmin.0 (393639) Starting SSO login...
                    2026-01-12 14:05:46.770  - debug: garmin.0 (393639) Setting SSO cookies...
                    2026-01-12 14:05:47.424  - debug: garmin.0 (393639) SSO cookies response: 200
                    2026-01-12 14:05:47.424  - debug: garmin.0 (393639) "<html>\n\t<head>\n\t    <title>GAuth Embedded Version</title>\n\t    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge;\" />\n\t    <style type=\"text/css\">\n\t    \t#gauth-widget {border: none !important;}\n\t    </style>\n\t</head>\n\t<body>\n\t\t<script type=\"text/javascript\" src=\"/sso/js/jquery/3.7.1/jquery.min.js?20210319\"></script>\n\n<div>\n\t<pre>\n\t<span>ERROR: clientId parameter must be specified!!!</span>\n\n\t<span >Usage: https://sso.garmin.com/sso/embed?clientId=&lt;clientId&gt;&amp;locale=&lt;locale&gt;...</span>\n\n\tRequest parameter configuration options:\n\n\tNAME                           REQ  VALUES                                                   DESCRIPTION\n\t------------------             ---  -------------------------------------------------------  ---------------------------------------------------------------------------------------------------\n\tclientId                       Yes  \"MY_GARMIN\"/\"BUY_GARMIN\"/\"FLY_GARMIN\"/                   Client identifier for your web application\n\t                                    \"RMA\"/\"GarminConnect\"/\"OpenCaching\"/etc\n\tlocale                         Yes  \"en\", \"bg\", \"cs\", \"da\", \"de\", \"es\", \"el\", \"fr\", \"hr\",    User's current locale, to display the GAuth login widget internationalized properly.\n\t                                    \"in\", \"it\", \"iw\", \"hu\", \"ms\", \"nb\", \"nl\", \"no\", \"pl\",    (All the currently supported locales are listed in the Values section.)\n\t                                    \"pt\", \"pt_BR\", \"ru\", \"sk\", \"sl\", \"fi\", \"sv\", \"tr\",\n\t                                    \"uk\", \"th\", \"ja\", \"ko\", \"zh_TW\", \"zh\", \"vi_VN\"\n\tcssUrl                          No  Absolute URL to custom CSS file.                         Use custom CSS styling for the GAuth login widget.\n\treauth                          No  true/false (Default value is false)                      Specify true if you want to ensure that the GAuth login widget shows up,\n\t                                                                                             even if the SSO infrastructure remembers the user and would immediately log them in.\n\t                                                                                             This is useful if you know a user is logged on, but want a different user to be allowed to logon.\n\tinitialFocus                    No  true/false (Default value is true)                       If you don't want the GAuth login widget to autofocus in it's \"Email or Username\" field upon initial loading,\n\t                                                                                             then specify this option and set it to false.\n\trememberMeShown                 No  true/false (Default value is false)                      Whether the \"Remember Me\" check box is shown in the GAuth login widget.\n\trememberMeChecked               No  true/false (Default value is false)                      Whether the \"Remember Me\" check box feature is checked by default.\n\tcreateAccountShown              No  true/false (Default value is true)                       Whether the \"Don't have an account? Create One\" link is shown in the GAuth login widget.\n\tsocialEnabled                   No  true/false (Default value is false)                       If set to false, do not show any social sign in elements or allow social sign ins.\n\tlockToEmailAddress              No  Email address to pre-load and lock.                      If specified, the specified email address will be pre-loaded in the main \"Email\" field in the SSO login form,\n\t                                                                                             as well as in in the \"Email Address\" field in the \"Forgot Password?\" password reset form,\n\t                                                                                             and both fields will be disabled so they can't be changed.\n\t                                                                                             (If for some reason you want to force re-authentications for a known customer account, you can make use of this option.)\n\topenCreateAccount               No  true/false (Default value is false)                      If set to true, immediately display the the account creation screen.\n\tdisplayNameShown                No  true/false (Default value is false)                      If set to true, show the \"Display Name\" field on the account creation screen, to allow the user\n\t                                                                                             to set their central MyGarmin display name upon account creation.\n\tglobalOptInShown                No  true/false (Default value is false)                      Whether the \"Global Opt-In\" check box is shown on the create account & create social account screens.\n\t                                                                                             If set to true these screens will show a \"Sign Up For Email\" check box with accompanying text\n\t                                                                                             \"I would also like to receive email about promotions and new products.\"\n\t                                                                                             If checked, the Customer 2.0 account that is created will have it's global opt-in flag set to true,\n\t                                                                                             and Garmin email communications will be allowed.\n\tglobalOptInChecked              No  true/false (Default value is false)                      Whether the \"Global Opt-In\" check box is checked by default.\n\tconsumeServiceTicket            No  true/false (Default value is true)                       IF you don't specify a redirectAfterAccountLoginUrl AND you set this to false, the GAuth login widget\n\t                                                                                             will NOT consume the service ticket assigned and will not seamlessly log you into your webapp.\n\t                                                                                             It will send a SUCCESS JavaScript event with the service ticket and service url you can take\n\t                                                                                             and explicitly validate against the SSO infrastructure yourself.\n\t                                                                                             (By using casClient's SingleSignOnUtils.authenticateServiceTicket() utility method,\n\t                                                                                             or calling web service customerWebServices_v1.2 AccountManagementService.authenticateServiceTicket().)\n\tmobile                          No  true/false (Default value is false)                      Setting to true will cause mobile friendly views to be shown instead of the tradition screens.\n\ttermsOfUseUrl                   No  Absolute URL to your custom terms of use URL.            If not specified, defaults to http://www.garmin.com/terms\n\tprivacyStatementUrl             No  Absolute URL to your custom privacy statement URL.       If not specified, defaults to http://www.garmin.com/privacy\n\tproductSupportUrl               No  Absolute URL to your custom product support URL.         If not specified, defaults to http://www.garmin.com/us/support/contact\n\tgenerateExtraServiceTicket      No  true/false (Default value is false)                      If set to true, generate an extra unconsumed service ticket.\n\t\t                                                                                     (The service ticket validation response will include the extra service ticket.)\n\tgenerateTwoExtraServiceTickets  No  true/false (Default value is false)                      If set to true, generate two extra unconsumed service tickets.\n\t\t\t\t\t\t\t\t\t \t\t\t     (The service ticket validation response will include the extra service tickets.)\n\tgenerateNoServiceTicket         No  true/false (Default value is false)                      If you don't want SSO to generate a service ticket at all when logging in to the GAuth login widget.\n                                                                                                     (Useful when allowing logins to static sites that are not SSO enabled and can't consume the service ticket.)\n\tconnectLegalTerms               No  true/false (Default value is false)                      Whether to show the connectLegalTerms on the create account page\n\tshowTermsOfUse                  No  true/false (Default value is false)                      Whether to show the showTermsOfUse on the create account page\n\tshowPrivacyPolicy               No  true/false (Default value is false)                      Whether to show the showPrivacyPolicy on the create account page\n\tshowConnectLegalAge             No  true/false (Default value is false)                      Whether to show the showConnectLegalAge on the create account page\n\tlocationPromptShown             No  true/false (Default value is false)                      If set to true, ask the customer during account creation to verify their country of residence.\n\tshowPassword                    No  true/false (Default value is true)                       If set to false, mobile version for createAccount and login screens would hide the password\n\tuseCustomHeader                 No  true/false (Default value is false)                      If set to true, the \"Sign in\" text will be replaced by custom text. Contact CDS team to set the i18n text for your client id.\n\tmfaRequired                     No  true/false (Default value is false)                      Require multi factor authentication for all authenticating users.\n\tperformMFACheck                 No  true/false (Default value is false)                      If set to true, ask the logged in user to pass a multi factor authentication check. (Only valid for an already logged in user.)\n\trememberMyBrowserShown          No  true/false (Default value is false)                      Whether the \"Remember My Browser\" check box is shown in the GAuth login widget MFA verification screen.\n\trememberMyBrowserChecked        No  true/false (Default value is false)                      Whether the \"Remember My Browser\" check box feature is checked by default.\n\tconsentTypeIds\t\t\t\t\tNo\tconsent_types ids\t\t \t\t\t\t\t\t\t\t multiple consent types ids can be passed as consentTypeIds=type1&consentTypeIds=type2\n\t</pre>\n</div>\n\n\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:'9bccde0befe8d933',t:'MTc2ODIyMzE0Ny4wMDAwMDA='};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"
                    2026-01-12 14:05:47.425  - debug: garmin.0 (393639) Getting CSRF token...
                    2026-01-12 14:05:47.795  - debug: garmin.0 (393639) CSRF response: 200
                    2026-01-12 14:05:47.795  - debug: garmin.0 (393639) "<!DOCTYPE html>\n<html lang=\"en\" class=\"no-js\">\n    <head>\n        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n        <meta name=\"viewport\" content=\"width=device-width\" />\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge;\" />\n        <title>GARMIN Authentication Application</title>\n        <link href=\"/sso/css/GAuth.css?20210406\" rel=\"stylesheet\" type=\"text/css\" media=\"all\" />\n\n\t    <link rel=\"stylesheet\" href=\"\"/>\n\n        <script type=\"text/javascript\" src=\"/sso/js/jquery/3.7.1/jquery.min.js?20210319\"></script>\n        <script type=\"text/javascript\">jQuery.noConflict();</script>\n\t\t<script type=\"text/javascript\" src=\"/sso/js/jquery-validate/1.16.0/jquery.validate.min.js?20210319\"></script>\n        <script type=\"text/javascript\" src=\"/sso/js/jsUtils.js?20210406\"></script>\n        <script type=\"text/javascript\" src=\"/sso/js/json2.js\"></script>\n        <script type=\"text/javascript\" src=\"/sso/js/consoleUtils.js?20210319\"></script>\n        <script type=\"text/javascript\" src=\"/sso/js/postmessage.js?20210319\"></script>\n        <script type=\"text/javascript\" src=\"/sso/js/popupWindow.js\"></script>\n        <script type=\"text/javascript\" src=\"/sso/js/base.js?20231020\"></script>\n\t\t<script type=\"text/javascript\" src=\"/sso/js/gigyaUtils.js?20210319\"></script>\n        <script type=\"text/javascript\" src=\"/sso/js/login.js?20211102\"></script>\n        <script type=\"text/javascript\" src=\"/sso/js/reCaptchaUtil.js?20230706\"></script>\n\n        <script>\n            var recaptchaSiteKey = null;\n            var reCaptchaURL = \"\\\\\\/sso\\\\\\/reCaptcha?id=gauth-widget\\u0026embedWidget=true\\u0026gauthHost=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed\\u0026service=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed\\u0026source=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed\\u0026redirectAfterAccountLoginUrl=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed\\u0026redirectAfterAccountCreationUrl=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed\";\n            var isRecaptchaEnabled = null;\n            var recaptchaToken = null;            \n        </script>\n        <script type=\"text/javascript\">\n            var parent_url      = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n            var status \t\t\t= \"\";\n\t\t\tvar result          = \"\";\n\t\t\tvar clientId\t\t= '';\n\t\t\tvar embedWidget \t= true;\n\t\t\tvar isUsernameDefined = (false == true) || (false == true);\n\n            // Gigya callback to SocialSignInController for brand new social network users redirects to this page\n            // to popup Create or Link Social Account page, but has a possibly mangled source parameter\n            // where \"?\" is set as \"<QM>\", so translate it back to \"?\" here.\n            parent_url = parent_url.replace('<QM>', '?');\n            var parent_scheme   = parent_url.substring(0, parent_url.indexOf(\"://\"));\n            var parent_hostname = parent_url.substring(parent_scheme.length + 3, parent_url.length);\n            if (parent_hostname.indexOf(\"/\") != -1) {\n                parent_hostname = parent_hostname.substring(0, parent_hostname.indexOf(\"/\"));\n            }\n            var parentHost      \t   = parent_scheme + \"://\" + parent_hostname;\n\t\t\tvar createAccountConfigURL = '\\/sso\\/createNewAccount?id%3Dgauth-widget%26embedWidget%3Dtrue%26gauthHost%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed%26service%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed%26source%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed%26redirectAfterAccountLoginUrl%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed%26redirectAfterAccountCreationUrl%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed';\n            var socialConfigURL        = 'https://sso.garmin.com/sso/socialSignIn?id%3Dgauth-widget%26embedWidget%3Dtrue%26gauthHost%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed%26service%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed%26source%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed%26redirectAfterAccountLoginUrl%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed%26redirectAfterAccountCreationUrl%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed';\n            var gigyaURL               = \"https://cdns.gigya.com/js/gigya.js?apiKey=2_R3ZGY8Bqlwwk3_63knoD9wA_m-Y19mAgW61bF_s5k9gymYnMEAtMrJiF5MjF-U7B\";\n\n            if (createAccountConfigURL.indexOf('%253A%252F%252F') != -1) {\n            \tcreateAccountConfigURL = decodeURIComponent(createAccountConfigURL);\n            }\n            consoleInfo('signin.html embedWidget: true, createAccountConfigURL: \\/sso\\/createNewAccount?id%3Dgauth-widget%26embedWidget%3Dtrue%26gauthHost%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed%26service%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed%26source%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed%26redirectAfterAccountLoginUrl%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed%26redirectAfterAccountCreationUrl%3Dhttps%3A%252F%252Fsso.garmin.com%252Fsso%252Fembed, socialEnabled: true, gigyaSupported: true, socialConfigURL(): https://sso.garmin.com/sso/socialSignIn?id%3Dgauth-widget%26embedWidget%3Dtrue%26gauthHost%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed%26service%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed%26source%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed%26redirectAfterAccountLoginUrl%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed%26redirectAfterAccountCreationUrl%3Dhttps%3A%2F%2Fsso.garmin.com%2Fsso%2Fembed');\n\n            if (socialConfigURL.indexOf('%3A%2F%2F') != -1) {\n            \tsocialConfigURL = decodeURIComponent(socialConfigURL);\n            }\n\n            if( status != null && status != ''){\n            \tsend({'status':status});\n            }\n\n            jQuery(document).ready( function(){\n\n\n                consoleInfo(\"signin.html: setting field validation rules...\");\n\n                jQuery(\"#username\").rules(\"add\",{\n                    required: true,\n                    messages: {\n                        required:  \"Email is required.\"\n                }});\n\n                jQuery(\"#password\").rules(\"add\", {\n                    required: true,\n                    messages: {\n                        required:  \"Password is required.\"\n                    }\n                });\n\n                consoleInfo(\"signin.html: done setting field validation rules...\");\n\n            });\n\n            XD.receiveMessage(function(m){\n                consoleInfo(\"signin.html: \" + m.data + \" received on \" + window.location.host);\n                 if (m && m.data) {\n                     var md = m.data;\n                     if (typeof(md) === 'string') {\n                         md = JSON.parse(m.data);\n                     }\n                     if (md.setUsername) {\n                         consoleInfo(\"signin.html: Setting username \\\"\" + md.username + \"\\\"...\");\n                         jQuery(\"#signInWithDiffLink\").click(); // Ensure the normal login form is shown.\n                         jQuery(\"#username\").val(md.username);\n                         jQuery(\"#password\").focus();\n                     }\n                 }\n             }, parentHost);\n        </script>\n    </head>\n    <body>\n\n        <!-- begin GAuth component -->\n        <div id=\"GAuth-component\">\n            <!-- begin login component-->\n            <div id=\"login-component\" class=\"blueForm-basic\">\n               <input type=\"hidden\" id=\"queryString\" value=\"id=gauth-widget&amp;embedWidget=true&amp;gauthHost=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed&amp;service=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed&amp;source=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed&amp;redirectAfterAccountLoginUrl=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed&amp;redirectAfterAccountCreationUrl=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed\" />\n\t     \t   <input type=\"hidden\" id=\"contextPath\" value=\"/sso\" />\n                <!-- begin login form -->\n                <div id=\"login-state-default\">\n                    <h2>Sign In</h2>\n\n                    <form method=\"post\" id=\"login-form\">\n\n                        <div class=\"form-alert\">\n\t\t\t\t\t\t\t\n                            \n                            \n                            \n                            \n                            \n                            \n\n                            <div id=\"username-error\" style=\"display:none;\"></div>\n                            <div id=\"password-error\" style=\"display:none;\"></div>\n                        </div>\n                        <div class=\"textfield\">\n\t\t\t\t\t\t\t<label for=\"username\">Email</label>\n                           \t\t<!-- If the lockToEmailAddress parameter is specified then we want to mark the field as readonly,\n                           \t\tpreload the email address, and disable the other input so that null isn't sent to the server. We'll\n                           \t\talso style the field to have a darker grey background and disable the mouse pointer\n                           \t\t -->\n\t\t\t\t\t\t\t    \n\t\t\t\t\t\t\t\t<!-- If the lockToEmailAddress parameter is NOT specified then keep the existing functionality and disable the readonly input field\n\t\t\t\t\t\t\t     -->\n\t\t\t\t\t\t\t    <input class=\"login_email\" name=\"username\" id=\"username\" value=\"\" type=\"email\" spellcheck=\"false\" autocorrect=\"off\" autocapitalize=\"off\"/>\n\n                        </div>\n\n                        <div class=\"textfield\">\n                            <label for=\"password\">Password</label>\n                            <a id=\"loginforgotpassword\" class=\"login-forgot-password\" style=\"cursor:pointer\">(Forgot?)</a>\n                            <input type=\"password\" name=\"password\" id=\"password\" spellcheck=\"false\" autocorrect=\"off\" autocapitalize=\"off\" />\n                             <strong id=\"capslock-warning\" class=\"information\" title=\"Caps lock is on.\" style=\"display: none;\">Caps lock is on.</strong>\n\t\t\t\t\t    </div>\n                        <input type=\"hidden\" name=\"embed\" value=\"true\"/>\n                        <input type=\"hidden\" name=\"_csrf\" value=\"2ADC7D4E7750F79EC5AAF96E34E327C360853E43183D7AFD6E250FF59F6690E4D05AB50FC2F39C661B592A8FDB6F91132370\" />\n                        <button type=\"submit\" id=\"login-btn-signin\" class=\"btn1\" accesskey=\"l\">Sign In</button>\n                        \n\n\n                        <!-- The existence of the \"rememberme\" parameter at all will remember the user! -->\n                        \n\n                    </form>\n                </div>\n                <!-- end login form -->\n\n                <!-- begin Create Account message -->\n\t            <div id=\"login-create-account\">\n\t                \n\t            </div>\n\t            <!-- end Create Account message -->\n\n\t            <!-- begin Social Sign In component -->\n\t            <div id=\"SSI-component\">\n                    \n\n\t\t\t\t\t\n\t            </div>\n\t            <!-- end Social Sign In component -->\n                <div class=\"clearfix\"></div> <!-- Ensure that GAuth-component div's height is computed correctly. -->\n            </div>\n            <!-- end login component-->\n\n\t\t</div>\n\t\t<!-- end GAuth component -->\n\n        <script type=\"text/javascript\">\n            jQuery(document).ready(function(){\n            \tresizePageOnLoad(jQuery(\"#GAuth-component\").height());\n\n\t\t        if(isUsernameDefined == true){\n\t\t            // If the user's login just failed, redisplay the email/username specified, and focus them in the password field.\n\t\t            jQuery(\"#password\").focus();\n\t\t        } else if(false == true && result != \"PASSWORD_RESET_RESULT\"){\n                    // Otherwise focus them in the username field of the login dialog.\n                    jQuery(\"#username\").focus();\n                }\n\n                // Scroll to top of iframe to fix problem where Firefox 3.0-3.6 browsers initially show top of iframe cutoff.\n                location.href=\"#\";\n\n                if(!embedWidget){\n                \tjQuery('.createAccountLink').click(function(){\n\t                    send({'openLiteBox':'createAccountLink', 'popupUrl': createAccountConfigURL, 'popupTitle':'Create An Account', 'clientId':clientId});\n\t                });\n                }\n            });\n        </script>\n    <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:'9bccde0f9d32051f',t:'MTc2ODIyMzE0Ny4wMDAwMDA='};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"
                    2026-01-12 14:05:47.796  - debug: garmin.0 (393639) Submitting login...
                    2026-01-12 14:05:49.247  - debug: garmin.0 (393639) Login response: 200
                    2026-01-12 14:05:49.247  - debug: garmin.0 (393639) "<!DOCTYPE html>\n<html lang=\"en\" class=\"no-js\">\n\n<head>\n    <script type=\"text/javascript\" src=\"/sso/js/jquery/3.7.1/jquery.min.js?20210319\"></script>\n    <script type=\"text/javascript\">jQuery.noConflict();</script>\n    <script type=\"text/javascript\" src=\"/sso/js/jquery-validate/1.16.0/jquery.validate.min.js?20210319\"></script>\n    <script type=\"text/javascript\" src=\"/sso/js/base.js?20231020\"></script>\n    <script type=\"text/javascript\" src=\"/sso/js/jsUtils.js?20210406\"></script>\n    <script type=\"text/javascript\" src=\"/sso/js/json2.js\"></script>\n    <script type=\"text/javascript\" src=\"/sso/js/postmessage.js?20210319\"></script>\n    <script type=\"text/javascript\" src=\"/sso/js/consoleUtils.js?20210319\"></script>\n    <script type=\"text/javascript\" src=\"/sso/js/setupMfaRequiredView.js?20210319\"></script>\n    <script type=\"text/javascript\" src=\"/sso/js/enterMfaCode.js?20230127\"></script>\n    <script type=\"text/javascript\">\n        var embedWidget = \"true\";\n        if (embedWidget == \"\") {\n            embedWidget = \"\";\n        }\n        embedWidget = (embedWidget == \"true\");\n        var parent_url = \"https:\\/\\/sso.garmin.com\\/sso\\/embed\";\n        window.onload = function() {\n            ifrememberMyBrowserChecked();\n        };\n\n        jQuery(document).ready( function() {\n            if (!embedWidget) {\n                send({'gauthHeight': jQuery(\"#GAuth-component\").height()});\n            }\n            jQuery(\"#mfa-verification-code-submit\").click(function(){\n                if (!validateMfaCodeAndPrivacyConsents()){\n                    return false;\n                }\n                jQuery('#submit-mfa-verification-code-form').submit();\n                return false;\n            });\n        });\n        var customerGuid = \"56f68a44-3317-47f6-8f27-7198decaa168\";\n        var mfaMethod = \"email\";\n        var locale = \"\";\n        var clientId = \"\";\n        var codeSentTo = \"br*****@gmail.com\";\n    </script>\n    <meta charset=\"utf-8\">\n    <title>Enter MFA code for login</title>\n    <meta name=\"description\" content=\"\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <meta http-equiv=\"cleartype\" content=\"on\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge;\" />\n    <link href=\"/sso/css/GAuth.css?20170505\" rel=\"stylesheet\" type=\"text/css\" media=\"all\" />\n    <link rel=\"stylesheet\" href=\"\" />\n</head>\n\n<body>\n    <div id=\"GAuth-component\">\n        <h2 id=\"enter-mfa-code-h2\">Enter security code</h2>\n        <input type=\"hidden\" id=\"queryString\" value=\"id=gauth-widget&amp;embedWidget=true&amp;gauthHost=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed&amp;service=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed&amp;source=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed&amp;redirectAfterAccountLoginUrl=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed&amp;redirectAfterAccountCreationUrl=https:%2F%2Fsso.garmin.com%2Fsso%2Fembed\" />\n        <input type=\"hidden\" id=\"contextPath\" value=\"/sso\" />\n\n        <div id=\"login-component\" class=\"blueForm-basic\">\n            <div id=\"login-state-verifymfa\">\n                <td>\n                    \n                    <span >Code sent to <b>br*****@gmail.com</b></span>\n                </td>\n                <form id=\"submit-mfa-verification-code-form\" name=\"submit-mfa-verification-code-form\" method=\"post\" novalidate=\"novalidate\">\n                    <div class=\"blueForm-v2\">\n                        <div class=\"form-alert\">\n                            <div id=\"genericError\" class=\"error\" hidden>An unexpected error has occurred.</div>\n                            <div id=\"codeSentAttention\" class=\"attention\" hidden>A new code has been sent. You can request another code in 30 seconds.</div>\n                            \n                            \n                            <div id=\"maxLimit\" class=\"error\" hidden=\"hidden\">You have reached the maximum amount of codes requested. Please use a code you&#39;ve received or wait 24 hours and try again.</div>\n                            \n                        </div>\n                        <div class=\"formTextField\">\n                            <div class=\"mfaFormLabel\">\n                                <label>\n                                    <span>Security code</span>\n                                    <br/>\n                                    <input type=\"number\" pattern=\"[0-9]*\" inputmode=\"numeric\" maxlength=\"6\" id=\"mfa-code\" name=\"mfa-code\" autofocus oninput=\"validateMfaCodeAndPrivacyConsents()\"/>\n                                </label>\n                            </div>\n                        </div>\n                        <br><br>\n                        <div>\n                            <a href=\"https://support.garmin.com/en-US/?faq=uGHS8ZqOIhA0usBzBMdJu7\" target=\"_blank\" id=\"havingTrouble\">Get help</a><br>\n                        </div>\n                        <div id=\"requestNewCodeWrapper\" class=\"requestNewCode\">\n                            <a href=\"#\" id=\"newCode\">Request a new code</a>\n                        </div>\n                        \n                        \n                        <br>\n                            \n                        <br/>\n                        <button type=\"submit\" id=\"mfa-verification-code-submit\" class=\"btn1\">Next</button>\n                    </div>\n                    <input type=\"hidden\" name=\"embed\"            value=\"true\"/>\n                    <input type=\"hidden\" name=\"_csrf\"            value=\"6FDA52D5917AD7A3FFBA01B3F780CDA975A18834062CA73F39DE58CDA7CDB9701B8F67D0BD88834D380E20A37347F597A579\" />\n                    <input type=\"hidden\" name=\"fromPage\"            value=\"setupEnterMfaCode\"/>\n                    <br/>\n                </form>\n            </div>\n            <div class=\"clearfix\"></div> <!-- Ensure that GAuth-component div's height is computed correctly. -->\n        </div>\n    </div>\n    <script type=\"text/javascript\">\n        resizePageOnLoad(jQuery(\"#GAuth-component\").height());\n    </script>\n<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:'9bccde199c485053',t:'MTc2ODIyMzE0OS4wMDAwMDA='};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>"
                    2026-01-12 14:05:49.247  - debug: garmin.0 (393639) Response title: Enter MFA code for login
                    2026-01-12 14:05:49.247  - info: garmin.0 (393639) MFA required. Saving session...
                    2026-01-12 14:05:49.251  - info: garmin.0 (393639) Please enter MFA code in the settings. The session is saved for 5 minutes.
                    2026-01-12 14:05:49.251  - error: garmin.0 (393639) Login failed - no ticket
                    2026-01-12 14:05:49.251  - error: garmin.0 (393639) Login failed
                    2026-01-12 14:06:30.904  - info: host.iobroker stopInstance system.adapter.garmin.0 (force=false, process=true)
                    2026-01-12 14:06:31.009  - info: garmin.0 (393639) Got terminate signal TERMINATE_YOURSELF
                    2026-01-12 14:06:31.009  - info: garmin.0 (393639) terminating
                    2026-01-12 14:06:31.010  - info: garmin.0 (393639) Terminated (ADAPTER_REQUESTED_TERMINATION): Without reason
                    2026-01-12 14:06:31.237  - info: host.iobroker stopInstance system.adapter.garmin.0 send kill signal
                    2026-01-12 14:06:31.511  - info: garmin.0 (393639) terminating
                    2026-01-12 14:06:31.626  - info: host.iobroker instance system.adapter.garmin.0 terminated with code 11 (ADAPTER_REQUESTED_TERMINATION)
                    2026-01-12 14:06:34.861  - info: host.iobroker instance system.adapter.garmin.0 in version "0.2.1" (non-npm: TA2k/ioBroker.garmin#157b732b6799ba0327989b6e9d744e238c91d93b) started with pid 393654
                    2026-01-12 14:06:35.351  - debug: garmin.0 (393654) Redis Objects: Use Redis connection: 127.0.0.1:9001
                    2026-01-12 14:06:35.528  - debug: garmin.0 (393654) Objects client ready ... initialize now
                    2026-01-12 14:06:35.529  - debug: garmin.0 (393654) Objects create System PubSub Client
                    2026-01-12 14:06:35.529  - debug: garmin.0 (393654) Objects create User PubSub Client
                    2026-01-12 14:06:35.880  - debug: garmin.0 (393654) Objects client initialize lua scripts
                    2026-01-12 14:06:35.882  - debug: garmin.0 (393654) Objects connected to redis: 127.0.0.1:9001
                    2026-01-12 14:06:35.964  - debug: garmin.0 (393654) Redis States: Use Redis connection: 127.0.0.1:9000
                    2026-01-12 14:06:36.006  - debug: garmin.0 (393654) States create System PubSub Client
                    2026-01-12 14:06:36.007  - debug: garmin.0 (393654) States create User PubSub Client
                    2026-01-12 14:06:36.317  - debug: garmin.0 (393654) States connected to redis: 127.0.0.1:9000
                    2026-01-12 14:06:38.584  - info: garmin.0 (393654) starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin#157b732b6799ba0327989b6e9d744e238c91d93b) in /opt/iobroker/node_modules/iobroker.garmin, node: v22.21.0, js-controller: 7.0.7
                    2026-01-12 14:06:38.645  - info: garmin.0 (393654) No token found, performing login...
                    2026-01-12 14:06:38.646  - info: garmin.0 (393654) Starting SSO login...
                    2026-01-12 14:06:38.689  - info: garmin.0 (393654) Resuming MFA session...
                    2026-01-12 14:06:40.147  - debug: garmin.0 (393654) MFA resume response: 200
                    2026-01-12 14:06:40.148  - debug: garmin.0 (393654) "<!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-295764-qinkIxnY7bRZavhVEzFF-cas\";\n\t\t\tvar logintoken                   \t  = \"NUgqbZheMn\";\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(\"&amp;\", '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:'9bccdf542efff56c',t:'MTc2ODIyMzIwMC4wMDAwMDA='};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"
                    2026-01-12 14:06:40.148  - debug: garmin.0 (393654) MFA Response title: Success
                    2026-01-12 14:06:40.150  - info: garmin.0 (393654) MFA verification successful
                    2026-01-12 14:06:40.150  - debug: garmin.0 (393654) Ticket: ST-295764-qinkIxnY7bRZavhVEzFF-cas
                    2026-01-12 14:06:40.150  - debug: garmin.0 (393654) Getting OAuth1 token...
                    2026-01-12 14:06:40.660  - debug: garmin.0 (393654) Fetched OAuth consumer from S3
                    2026-01-12 14:06:40.660  - debug: garmin.0 (393654) {"consumer_key":"fc3e99d2-118c-44b8-8ae3-03370dde24c0","consumer_secret":"E08WAR897WEy2knn7aFBrvegVAf0AFdWBBF"}
                    2026-01-12 14:06:41.511  - debug: garmin.0 (393654) OAuth1 Status: 200
                    2026-01-12 14:06:41.511  - debug: garmin.0 (393654) "oauth_token=a2d59379-a1e3-4a5d-b801-254e7610610b&oauth_token_secret=juIPzbGaeio0ria5HHiPlM32sNoo3nJm24Y&mfa_token=MFA-4945-HCURUt7GLOwWAnU3J9eVvYnEcdfX7cO6IVFKKUr2IRFQzZxITK-cas&mfa_expiration_timestamp=2027-01-12 13:06:39.000"
                    2026-01-12 14:06:41.511  - debug: garmin.0 (393654) OAuth1 Token: OK
                    2026-01-12 14:06:41.511  - debug: garmin.0 (393654) Exchanging for OAuth2 token...
                    2026-01-12 14:06:41.511  - debug: garmin.0 (393654) oauth1Token: {"oauth_token":"a2d59379-a1e3-4a5d-b801-254e7610610b","oauth_token_secret":"juIPzbGaeio0ria5HHiPlM32sNoo3nJm24Y","mfa_token":"MFA-4945-HCURUt7GLOwWAnU3J9eVvYnEcdfX7cO6IVFKKUr2IRFQzZxITK-cas"}
                    2026-01-12 14:06:41.512  - debug: garmin.0 (393654) authHeader: {"Authorization":"OAuth oauth_consumer_key=\"fc3e99d2-118c-44b8-8ae3-03370dde24c0\", oauth_nonce=\"bZ9xGtWFTXCAuCRiIRyIYNGJhmaNDbHh\", oauth_signature=\"cbpoQE1IQ2NlLJ5s2fueYRHspM8%3D\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"1768223201\", oauth_token=\"a2d59379-a1e3-4a5d-b801-254e7610610b\", oauth_version=\"1.0\""}
                    2026-01-12 14:06:41.512  - debug: garmin.0 (393654) body: mfa_token=MFA-4945-HCURUt7GLOwWAnU3J9eVvYnEcdfX7cO6IVFKKUr2IRFQzZxITK-cas
                    2026-01-12 14:06:41.663  - error: garmin.0 (393654) OAuth2 request failed: 401 Request failed with status code 401
                    2026-01-12 14:06:41.663  - error: garmin.0 (393654) OAuth2 token exchange failed
                    2026-01-12 14:06:41.665  - error: garmin.0 (393654) Login failed
                    garmin.0: Nicht mit Gerät oder Service verbunden
                    
                    
                    1 Antwort Letzte Antwort
                    0
                    • B bommel_030

                      @tombox
                      Danke, aber so ganz rund läuft es noch nicht. Ich habe die Instanz gestoppt, alle Datenpunkte gelöscht und 22 Datenpunkte in der Instanz eingetragen. Die Datenpunkte werden auch weiter abgerufen und aktualisiert.
                      Zusätzlich werden aber noch zig weitere abgerufen und ich kann nicht nachvollziehen warum.
                      Nach meinem Verständnis sollten nur noch die 22 eingetragenen auftauchen. Nach dem Löschen und Neustart des Adapter bin ich nicht wie erwartet von 20.000 auf 22 Datenpunkte runter, sondern "nur" auf 8.000 Datenpunkte.
                      Im Ordner "hydration" tauchen z.B. nur die angegebenen Datenpunkte auf. Im Ordner "weight" werden noch weitere, nicht eingetragene angelegt. Alles was im Screenshot den Link zum Alias hat ist auch in der Instanz eingetragen. Alle anderen sollten nicht auftauchen.
                      74439961-577e-4880-b950-ce978fb37ace-image.png

                      T Offline
                      T Offline
                      tombox
                      schrieb am zuletzt editiert von
                      #179

                      @bommel_030 es gibt jetzt zwei filter listen
                      @clown007 ich habe nochmal logs hinzugefügt

                      B C 2 Antworten Letzte Antwort
                      0
                      • T tombox

                        @bommel_030 es gibt jetzt zwei filter listen
                        @clown007 ich habe nochmal logs hinzugefügt

                        B Nicht stören
                        B Nicht stören
                        bommel_030
                        schrieb am zuletzt editiert von
                        #180

                        @tombox
                        hm, das läuft auch noch nicht rund...
                        Beim Filter exakter Datenpunkt wird

                        hydration.valueInML
                        

                        nicht angenommen,

                        valueInML
                        

                        hingegen schon.
                        Dieser Datenpunkt ist noch eineindeutig. Bei

                        dailysleep.dailySleepDTO.sleepScores.overall.value
                        

                        wird das dann schon schwieriger, da

                        value
                        

                        sehr oft verwendet wird. Ich fände es besser wenn der "Pfad" des Datenpunktes mit verwendet wird.
                        Leider werden weiterhin auch noch ca. 5.000 weitere Datenpunkte angelegt. Es dürften eigentlich nur die 2 im Screenshot dargestellten Punkte auftauchen(der Info Teil natürlich auch).
                        Die unteren drei Ordner sind leer, die oberen sind voll.
                        81973551-546f-47cd-9e7e-35e9f1c84bec-image.png

                        T 1 Antwort Letzte Antwort
                        0
                        • T tombox

                          @bommel_030 es gibt jetzt zwei filter listen
                          @clown007 ich habe nochmal logs hinzugefügt

                          C Offline
                          C Offline
                          Clown007
                          schrieb am zuletzt editiert von
                          #181

                          @tombox sagte in Test Adapter Garmin:

                          @bommel_030 es gibt jetzt zwei filter listen
                          @clown007 ich habe nochmal logs hinzugefügt

                          
                          2026-01-12 23:33:48.476  - debug: garmin.0 (397261) MFA Response title: Success
                          2026-01-12 23:33:48.479  - info: garmin.0 (397261) MFA verification successful
                          2026-01-12 23:33:48.479  - debug: garmin.0 (397261) Ticket: ST-281134-Xxm0wB32BcpLHh2g17lg-cas
                          2026-01-12 23:33:48.479  - debug: garmin.0 (397261) Getting OAuth1 token...
                          2026-01-12 23:33:48.997  - debug: garmin.0 (397261) Fetched OAuth consumer from S3
                          2026-01-12 23:33:48.997  - debug: garmin.0 (397261) {"consumer_key":"fc3e99d2-118c-44b8-8ae3-03370dde24c0","consumer_secret":"E08WAR897WEy2knn7aFBrvegVAf0AFdWBBF"}
                          2026-01-12 23:33:49.580  - debug: garmin.0 (397261) OAuth1 Status: 200
                          2026-01-12 23:33:49.580  - debug: garmin.0 (397261) "oauth_token=a2d59379-a1e3-4a5d-b801-254e7610610b&oauth_token_secret=juIPzbGaeio0ria5HHiPlM32sNoo3nJm24Y&mfa_token=MFA-4166-q3IY01WZYBweJdrndrdGlfCXRWD1ZGt0avp04rB6lv5neXme1t-cas&mfa_expiration_timestamp=2027-01-12 22:33:48.000"
                          2026-01-12 23:33:49.581  - debug: garmin.0 (397261) OAuth1 Token: OK
                          2026-01-12 23:33:49.581  - debug: garmin.0 (397261) Exchanging for OAuth2 token...
                          2026-01-12 23:33:49.581  - debug: garmin.0 (397261) oauth1Token: {"oauth_token":"a2d59379-a1e3-4a5d-b801-254e7610610b","oauth_token_secret":"juIPzbGaeio0ria5HHiPlM32sNoo3nJm24Y","mfa_token":"MFA-4166-q3IY01WZYBweJdrndrdGlfCXRWD1ZGt0avp04rB6lv5neXme1t-cas"}
                          2026-01-12 23:33:49.581  - debug: garmin.0 (397261) authHeader: {"Authorization":"OAuth oauth_consumer_key=\"fc3e99d2-118c-44b8-8ae3-03370dde24c0\", oauth_nonce=\"WxShBZnGaUyc32QElolln2EqSHiqXWyA\", oauth_signature=\"ltG5oYAELBFPzDJpdF1LtEz43I0%3D\", oauth_signature_method=\"HMAC-SHA1\", oauth_timestamp=\"1768257229\", oauth_token=\"a2d59379-a1e3-4a5d-b801-254e7610610b\", oauth_version=\"1.0\""}
                          2026-01-12 23:33:49.581  - debug: garmin.0 (397261) body: mfa_token=MFA-4166-q3IY01WZYBweJdrndrdGlfCXRWD1ZGt0avp04rB6lv5neXme1t-cas
                          2026-01-12 23:33:49.725  - error: garmin.0 (397261) OAuth2 request failed: 401 Request failed with status code 401
                          2026-01-12 23:33:49.725  - error: garmin.0 (397261) OAuth2 error response: "<!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>"
                          2026-01-12 23:33:49.725  - error: garmin.0 (397261) OAuth2 token exchange failed
                          2026-01-12 23:33:49.725  - info: garmin.0 (397261) Clearing MFA session and token for fresh login...
                          2026-01-12 23:33:49.730  - error: garmin.0 (397261) Login failed
                          
                          

                          Ich hatte beim ersten mal eine falsche MFA eingegeben das gab klar eine Fehlermeldung. Für mich sieht es so als ob der Hashing Algorithmus nicht akzeptiert wird: " Invalid signature for signature method HMAC-SHA1"

                          Wenn Du mehr vom log benötiogst, gib mir einfach eine kurze Info

                          1 Antwort Letzte Antwort
                          0
                          • B bommel_030

                            @tombox
                            hm, das läuft auch noch nicht rund...
                            Beim Filter exakter Datenpunkt wird

                            hydration.valueInML
                            

                            nicht angenommen,

                            valueInML
                            

                            hingegen schon.
                            Dieser Datenpunkt ist noch eineindeutig. Bei

                            dailysleep.dailySleepDTO.sleepScores.overall.value
                            

                            wird das dann schon schwieriger, da

                            value
                            

                            sehr oft verwendet wird. Ich fände es besser wenn der "Pfad" des Datenpunktes mit verwendet wird.
                            Leider werden weiterhin auch noch ca. 5.000 weitere Datenpunkte angelegt. Es dürften eigentlich nur die 2 im Screenshot dargestellten Punkte auftauchen(der Info Teil natürlich auch).
                            Die unteren drei Ordner sind leer, die oberen sind voll.
                            81973551-546f-47cd-9e7e-35e9f1c84bec-image.png

                            T Offline
                            T Offline
                            tombox
                            schrieb am zuletzt editiert von tombox
                            #182

                            @bommel_030 @clown007
                            wurde nochmal aktualisiert

                            B C 2 Antworten Letzte Antwort
                            0
                            • T tombox

                              @bommel_030 @clown007
                              wurde nochmal aktualisiert

                              B Nicht stören
                              B Nicht stören
                              bommel_030
                              schrieb am zuletzt editiert von
                              #183

                              @tombox

                              1. Kann es sein, dass Groß-/Kleinschreibung interessant ist?
                                Ich habe die exakten Datenpunkte aus dem alten Baum kopiert.
                              weight.dateWeightList01.bmi, weight.dateWeightList01.bodyFat, weight.dateWeightList01.weight, weight.dateWeightList01.boneMass, weight.dateWeightList01.muscleMass,weight.dateWeightList01.bodyWater, usersummary.totalSteps, usersummary.dailyStepGoal, usersummary.floorsAscended, usersummary.totalDistanceMeters, usersummary.bodyBatteryMostRecentValue, usersummary.bodyBatteryChargedValue, usersummary.bodyBatteryDrainedValue, usersummary.maxHeartRate, usersummary.restingHeartRate, dailysleep.dailySleepDTO.sleepScores.overall.value, usersummary.latestSpo2, dailystress.avgStressLevel, trainingstatus.mostRecentVO2Max.generic.vo2MaxValue, hydration.valueInML, hydration.sweatLossInML, hydration.goalInML
                              

                              Im Log gibt er die alle komplett klein geschrieben aus.

                              Exact allowlist active: weight.dateweightlist01.bmi, weight.dateweightlist01.bodyfat, weight.dateweightlist01.weight, weight.dateweightlist01.bonemass, weight.dateweightlist01.musclemass, weight.dateweightlist01.bodywater, usersummary.totalsteps, usersummary.dailystepgoal, usersummary.floorsascended, usersummary.totaldistancemeters, usersummary.bodybatterymostrecentvalue, usersummary.bodybatterychargedvalue, usersummary.bodybatterydrainedvalue, usersummary.maxheartrate, usersummary.restingheartrate, dailysleep.dailysleepdto.sleepscores.overall.value, usersummary.latestspo2, dailystress.avgstresslevel, trainingstatus.mostrecentvo2max.generic.vo2maxvalue, hydration.valueinml, hydration.sweatlossinml, hydration.goalinml
                              

                              Im Objektbaum taucht kein einziger Datenpunkt aus der allowlist auf.

                              1. Die ersten 4 Ordner werden trotzdem angelegt obwohl sie das eigentlich nicht sollten. Sind allein schon über 2.500 Datenpunkte.
                                5aef00e2-fc9f-4e8b-a35c-6e04861f5917-image.png

                              Trotzdem nochmals danke für deine Arbeit. Mit der neuen LogIn übersteht die Instanz bei mir auch einen Neustart des ioBrokers.

                              T 1 Antwort Letzte Antwort
                              0
                              • B bommel_030

                                @tombox

                                1. Kann es sein, dass Groß-/Kleinschreibung interessant ist?
                                  Ich habe die exakten Datenpunkte aus dem alten Baum kopiert.
                                weight.dateWeightList01.bmi, weight.dateWeightList01.bodyFat, weight.dateWeightList01.weight, weight.dateWeightList01.boneMass, weight.dateWeightList01.muscleMass,weight.dateWeightList01.bodyWater, usersummary.totalSteps, usersummary.dailyStepGoal, usersummary.floorsAscended, usersummary.totalDistanceMeters, usersummary.bodyBatteryMostRecentValue, usersummary.bodyBatteryChargedValue, usersummary.bodyBatteryDrainedValue, usersummary.maxHeartRate, usersummary.restingHeartRate, dailysleep.dailySleepDTO.sleepScores.overall.value, usersummary.latestSpo2, dailystress.avgStressLevel, trainingstatus.mostRecentVO2Max.generic.vo2MaxValue, hydration.valueInML, hydration.sweatLossInML, hydration.goalInML
                                

                                Im Log gibt er die alle komplett klein geschrieben aus.

                                Exact allowlist active: weight.dateweightlist01.bmi, weight.dateweightlist01.bodyfat, weight.dateweightlist01.weight, weight.dateweightlist01.bonemass, weight.dateweightlist01.musclemass, weight.dateweightlist01.bodywater, usersummary.totalsteps, usersummary.dailystepgoal, usersummary.floorsascended, usersummary.totaldistancemeters, usersummary.bodybatterymostrecentvalue, usersummary.bodybatterychargedvalue, usersummary.bodybatterydrainedvalue, usersummary.maxheartrate, usersummary.restingheartrate, dailysleep.dailysleepdto.sleepscores.overall.value, usersummary.latestspo2, dailystress.avgstresslevel, trainingstatus.mostrecentvo2max.generic.vo2maxvalue, hydration.valueinml, hydration.sweatlossinml, hydration.goalinml
                                

                                Im Objektbaum taucht kein einziger Datenpunkt aus der allowlist auf.

                                1. Die ersten 4 Ordner werden trotzdem angelegt obwohl sie das eigentlich nicht sollten. Sind allein schon über 2.500 Datenpunkte.
                                  5aef00e2-fc9f-4e8b-a35c-6e04861f5917-image.png

                                Trotzdem nochmals danke für deine Arbeit. Mit der neuen LogIn übersteht die Instanz bei mir auch einen Neustart des ioBrokers.

                                T Offline
                                T Offline
                                tombox
                                schrieb am zuletzt editiert von
                                #184

                                @bommel_030 KI hat eine dritte liste hinzugefügt und mehr debug logs weil wenn du die Ordner löscht sollten sie nicht mit Datenpunkt wieder angelegt werden

                                B 1 Antwort Letzte Antwort
                                0
                                • T tombox

                                  @bommel_030 @clown007
                                  wurde nochmal aktualisiert

                                  C Offline
                                  C Offline
                                  Clown007
                                  schrieb am zuletzt editiert von
                                  #185

                                  @tombox Danke, Danke.
                                  Jetzt hat es problemlos geklappt!

                                  Das ist ja ein super Support!

                                  1 Antwort Letzte Antwort
                                  0
                                  • T tombox

                                    @bommel_030 KI hat eine dritte liste hinzugefügt und mehr debug logs weil wenn du die Ordner löscht sollten sie nicht mit Datenpunkt wieder angelegt werden

                                    B Nicht stören
                                    B Nicht stören
                                    bommel_030
                                    schrieb am zuletzt editiert von
                                    #186

                                    @tombox sagte in Test Adapter Garmin:

                                    @bommel_030 KI hat eine dritte liste hinzugefügt und mehr debug logs weil wenn du die Ordner löscht sollten sie nicht mit Datenpunkt wieder angelegt werden

                                    Hab wieder über die Katze installiert, aber eine dritte Liste taucht nicht auf?!?
                                    Ergebnis der Datenpunkte wie gehabt. Die Ordner auth und info sind eigentlich verständlich. Mit dem ordner devices habe ich grundsätzlich auch kein Problem.
                                    Wenn ich mir das logfile ansehe filtert er nicht nach dem exakten Datenpunkt, sondern nur nach dem ersten Teil, also z.B. hydration. Damit kann er die Datenpunkte nicht parsen.
                                    Im Ordner dailystress sollte nach der allowlist 1 Datenpunkt auftauchen. Exakt dieser eine taucht nicht auf, hunderte andere trotzdem. Würde aber immerhin erklären warum er den Ordner anlegt.
                                    Warum er aber den Ordner activities anlegt verstehe ich nicht, das taucht in der allolist definitiv nicht auf.
                                    Gekürztes Log anbei (das komplette würde den Rahmen sprengen, aber für hydration und activities ist der interessante Teil dabei).

                                    garmin.0 2026-01-13 21:10:12.937	debug	Parsing activities with filtered data: [{"userRoles":["SCOPE_GOLF_API_READ","SCOPE_DI_OAUTH_2_DEVICE_REVOCATION_WRITE","SCOPE_DI_OAUTH_2_CREATE_DI_USER","SCOPE_ATP_READ","SCOPE_DIVE_API_WRITE","SCOPE_COMMUNITY_COURSE_ADMIN_READ","SCOPE_DIVE_API_READ","SCOPE_DI_OAUTH_2_CLIENT_READ","SCOPE_CONNECT_WRITE","SCOPE_COMMUNITY_COURSE_WRITE","SCOPE_CONNECT_MCT_DAILY_LOG_READ","SCOPE_CONNECT_API_CREATE_UPDATE_USER","SCOPE_MESSAGE_GENERATION_READ","SCOPE_DI_OAUTH_2_CLIENT_REVOCATION_ADMIN","SCOPE_CONNECT_WEB_TEMPLATE_RENDER","SCOPE_OMT_SUBSCRIP
                                    garmin.0 2026-01-13 21:10:12.936	debug	[{"activityId":21535275938,"activityName":"Berlin Gehen","startTimeLocal":"2026-01-13 17:28:04","startTimeGMT":"2026-01-13 16:28:04","activityType":{"typeId":9,"typeKey":"walking","parentTypeId":17,"isHidden":false,"restricted":false,"trimmable":true},"eventType":
                                    garmin.0 2026-01-13 20:55:08.666	debug	No data left after allowlist filter for hydration
                                    garmin.0 2026-01-13 20:55:08.666	debug	{"userId":2400759,"calendarDate":"2026-01-13","valueInML":0,"goalInML":3022,"dailyAverageinML":null,"lastEntryTimestampLocal":"2026-01-13T17:28:04.0","sweatLossInML":222,"activityIntakeInML":0}
                                    garmin.0 2026-01-13 20:55:08.157	info	Found 3 devices
                                    garmin.0 2026-01-13 20:55:07.469	info	Exact allowlist active: hydration.valueinml, hydration.sweatlossinml, hydration.goalinml, trainingstatus.mostrecentvo2max.generic.vo2maxvalue, dailystress.avgstresslevel, usersummary.latestspo2, dailysleep.dailysleepdto.sleepscores.overall.value, usersummary.restingheartrate, usersummary.maxheartrate, usersummary.bodybatterydrainedvalue, usersummary.bodybatterychargedvalue, usersummary.bodybatterymostrecentvalue, usersummary.totaldistancemeters, usersummary.floorsascended, usersummary.dailystepgoal, usersummary.totalsteps, weight.dateweightlist01.bodywater, weight.dateweightlist01.musclemass, weight.dateweightlist01.bonemass, weight.dateweightlist01.weight, weight.dateweightlist01.bodyfat, weight.dateweightlist01.bmi
                                    garmin.0 2026-01-13 20:55:07.461	info	starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin) in /opt/iobroker/node_modules/iobroker.garmin, node: v22.21.0, js-controller: 7.1.0
                                    
                                    T 1 Antwort Letzte Antwort
                                    0
                                    • B bommel_030

                                      @tombox sagte in Test Adapter Garmin:

                                      @bommel_030 KI hat eine dritte liste hinzugefügt und mehr debug logs weil wenn du die Ordner löscht sollten sie nicht mit Datenpunkt wieder angelegt werden

                                      Hab wieder über die Katze installiert, aber eine dritte Liste taucht nicht auf?!?
                                      Ergebnis der Datenpunkte wie gehabt. Die Ordner auth und info sind eigentlich verständlich. Mit dem ordner devices habe ich grundsätzlich auch kein Problem.
                                      Wenn ich mir das logfile ansehe filtert er nicht nach dem exakten Datenpunkt, sondern nur nach dem ersten Teil, also z.B. hydration. Damit kann er die Datenpunkte nicht parsen.
                                      Im Ordner dailystress sollte nach der allowlist 1 Datenpunkt auftauchen. Exakt dieser eine taucht nicht auf, hunderte andere trotzdem. Würde aber immerhin erklären warum er den Ordner anlegt.
                                      Warum er aber den Ordner activities anlegt verstehe ich nicht, das taucht in der allolist definitiv nicht auf.
                                      Gekürztes Log anbei (das komplette würde den Rahmen sprengen, aber für hydration und activities ist der interessante Teil dabei).

                                      garmin.0 2026-01-13 21:10:12.937	debug	Parsing activities with filtered data: [{"userRoles":["SCOPE_GOLF_API_READ","SCOPE_DI_OAUTH_2_DEVICE_REVOCATION_WRITE","SCOPE_DI_OAUTH_2_CREATE_DI_USER","SCOPE_ATP_READ","SCOPE_DIVE_API_WRITE","SCOPE_COMMUNITY_COURSE_ADMIN_READ","SCOPE_DIVE_API_READ","SCOPE_DI_OAUTH_2_CLIENT_READ","SCOPE_CONNECT_WRITE","SCOPE_COMMUNITY_COURSE_WRITE","SCOPE_CONNECT_MCT_DAILY_LOG_READ","SCOPE_CONNECT_API_CREATE_UPDATE_USER","SCOPE_MESSAGE_GENERATION_READ","SCOPE_DI_OAUTH_2_CLIENT_REVOCATION_ADMIN","SCOPE_CONNECT_WEB_TEMPLATE_RENDER","SCOPE_OMT_SUBSCRIP
                                      garmin.0 2026-01-13 21:10:12.936	debug	[{"activityId":21535275938,"activityName":"Berlin Gehen","startTimeLocal":"2026-01-13 17:28:04","startTimeGMT":"2026-01-13 16:28:04","activityType":{"typeId":9,"typeKey":"walking","parentTypeId":17,"isHidden":false,"restricted":false,"trimmable":true},"eventType":
                                      garmin.0 2026-01-13 20:55:08.666	debug	No data left after allowlist filter for hydration
                                      garmin.0 2026-01-13 20:55:08.666	debug	{"userId":2400759,"calendarDate":"2026-01-13","valueInML":0,"goalInML":3022,"dailyAverageinML":null,"lastEntryTimestampLocal":"2026-01-13T17:28:04.0","sweatLossInML":222,"activityIntakeInML":0}
                                      garmin.0 2026-01-13 20:55:08.157	info	Found 3 devices
                                      garmin.0 2026-01-13 20:55:07.469	info	Exact allowlist active: hydration.valueinml, hydration.sweatlossinml, hydration.goalinml, trainingstatus.mostrecentvo2max.generic.vo2maxvalue, dailystress.avgstresslevel, usersummary.latestspo2, dailysleep.dailysleepdto.sleepscores.overall.value, usersummary.restingheartrate, usersummary.maxheartrate, usersummary.bodybatterydrainedvalue, usersummary.bodybatterychargedvalue, usersummary.bodybatterymostrecentvalue, usersummary.totaldistancemeters, usersummary.floorsascended, usersummary.dailystepgoal, usersummary.totalsteps, weight.dateweightlist01.bodywater, weight.dateweightlist01.musclemass, weight.dateweightlist01.bonemass, weight.dateweightlist01.weight, weight.dateweightlist01.bodyfat, weight.dateweightlist01.bmi
                                      garmin.0 2026-01-13 20:55:07.461	info	starting. Version 0.2.1 (non-npm: TA2k/ioBroker.garmin) in /opt/iobroker/node_modules/iobroker.garmin, node: v22.21.0, js-controller: 7.1.0
                                      
                                      T Offline
                                      T Offline
                                      tombox
                                      schrieb am zuletzt editiert von
                                      #187

                                      @bommel_030 ist jetzt drin

                                      B 1 Antwort Letzte Antwort
                                      0
                                      • T tombox

                                        @bommel_030 ist jetzt drin

                                        B Nicht stören
                                        B Nicht stören
                                        bommel_030
                                        schrieb am zuletzt editiert von
                                        #188

                                        @tombox
                                        Jetzt mit dritter Liste, aber leider gleichem Ergebnis. Diesmal nur mit hydration.goalinml in der allowlist.
                                        ac14a29a-532f-4180-91aa-f7239f6b2c25-image.png

                                        Die grünen Ordner sind ok, der gelbe sollte nicht da sein, stört aber nicht, die beiden magenta sollten nicht auftauchen.
                                        Der erlaubte hydration taucht leider gar nicht auf.
                                        b826d4ba-74fe-4941-b208-c05be3d01b2d-image.png
                                        debug.log

                                        T 1 Antwort Letzte Antwort
                                        0
                                        • B bommel_030

                                          @tombox
                                          Jetzt mit dritter Liste, aber leider gleichem Ergebnis. Diesmal nur mit hydration.goalinml in der allowlist.
                                          ac14a29a-532f-4180-91aa-f7239f6b2c25-image.png

                                          Die grünen Ordner sind ok, der gelbe sollte nicht da sein, stört aber nicht, die beiden magenta sollten nicht auftauchen.
                                          Der erlaubte hydration taucht leider gar nicht auf.
                                          b826d4ba-74fe-4941-b208-c05be3d01b2d-image.png
                                          debug.log

                                          T Offline
                                          T Offline
                                          tombox
                                          schrieb am zuletzt editiert von
                                          #189

                                          @bommel_030 nochmal testen

                                          B 1 Antwort Letzte Antwort
                                          0
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          490

                                          Online

                                          32.6k

                                          Benutzer

                                          82.0k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe