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.
  • 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
                                    • T tombox

                                      @bommel_030 nochmal testen

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

                                      @tombox
                                      Sobald ich einen Filter eingebe Werte kommen keine Daten an.
                                      Die Ordner activities und dailystress erscheinen jetzt aber nicht mehr.
                                      Wenn ich den Filter rausnehme kommen wieder Daten rein....

                                      T 1 Antwort Letzte Antwort
                                      0
                                      • B bommel_030

                                        @tombox
                                        Sobald ich einen Filter eingebe Werte kommen keine Daten an.
                                        Die Ordner activities und dailystress erscheinen jetzt aber nicht mehr.
                                        Wenn ich den Filter rausnehme kommen wieder Daten rein....

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

                                        @bommel_030 bräuchte den log

                                        B 1 Antwort Letzte Antwort
                                        0
                                        • C Offline
                                          C Offline
                                          chris299
                                          schrieb am zuletzt editiert von
                                          #192

                                          @tombox funktioniert einwandfrei bei mir. aber gibt es irgendwo eine liste mit allen möglichen Datenpunkten? idealerweise mit beschreibung, was das jeweils genau ist?

                                          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

                                          491

                                          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