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. Skripten / Logik
  4. JavaScript
  5. Script: Google Shared Locations Cookie Fixer

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.0k

Script: Google Shared Locations Cookie Fixer

Geplant Angeheftet Gesperrt Verschoben JavaScript
19 Beiträge 4 Kommentatoren 132 Aufrufe 9 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.
  • David G.D Online
    David G.D Online
    David G.
    schrieb am zuletzt editiert von David G.
    #1

    Was ist das Problem?
    Wer den Adapter google-sharedlocations nutzt, kennt das Problem: Der Google-Cookie läuft regelmäßig ab, und die Instanz wird gelb.
    Man muss dann mühsam manuell einen neuen Cookie im Browser extrahieren und in den Adapter-Einstellungen einfügen.

    Dieses Script automatisiert den Prozess. Es nutzt Puppeteer (einen "headless" Browser), um die Google-Session regelmäßig zu erneuern und den Cookie bei Bedarf automatisch in den Adapter zu schreiben und diesen neu zu starten.

    Die Funktionen im Überblick:
    Automatischer Refresh: Jeden Morgen um 04:00 Uhr wird die Session über einen unsichtbaren Browser im Hintergrund verlängert.

    Auto-Heal: Verliert der Adapter die Verbindung (Connection = false), merkt das Script dies sofort, holt einen frischen Cookie und startet die Instanz neu.

    Fallback-Logik: Das Script kann den initialen Cookie direkt aus dem Adapter auslesen, falls der eigene Datenpunkt noch leer ist.

    Manuelle Kontrolle: Über zwei Buttons in den Objekten kann man jederzeit einen manuellen Refresh anstoßen oder den Cookie zum Adapter pushen.

    Zentrale Datenpunkte: Alles übersichtlich unter 0_userdata.0.google_sharedlocations_cookie_fixer.

    Voraussetzungen:
    Puppeteer: Muss in der JavaScript-Instanz als Modul eingetragen sein.

    Initialer Cookie: Einmalig muss ein gültiger Cookie (aus dem Browser-Inspektor) hinterlegt werden (entweder im Adapter oder im Script-DP).

    Das Script legt alle benötigten Datenpunkte beim ersten Start selbstständig unter 0_userdata.0 an. Es überwacht den Status des Adapters und greift ein, bevor die Standortdaten einfrieren.

    Troubleshooting:
    Auf manchen Systemen fehlen Abhängigkeiten damit puppeteer (was wie eingestellt über den Javascript Adapter von npm geladen wird) ordentlich funktioniert.

    Dies äußert sich durch Logmeldungen wie:

    javascript.0	16:46:32.019	error	
    [Cookie-Fixer] Fehler im Browser-Ablauf: Failed to launch the browser process:  Code: 127
     
    stderr:
    /home/iobroker/.cache/puppeteer/chrome/linux-143.0.7499.192/chrome-linux64/chrome: error while loading shared libraries: libnspr4.so: cannot open shared object file: No such file or directory
     
    TROUBLESHOOTING: https://pptr.dev/troubleshooting
    

    Es gibt 2 Möglichkeiten dies zu beheben.

    • 1
      Installation des puppeteer Adapters. Dieser bringt alles mit was benötigt wird.
      Die Instanz kann auch wieder entfernt werden, die benötigten Abhängigkeiten bleiben installiert.

    • 2
      Selber installieren

    sudo apt-get update && sudo apt-get install -y ca-certificates fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils
    

    Und nun das Script:

    /**
     * Script: Google Shared Locations Cookie Fixer
     * Autor: David G.
     * Version: v. 1.2
     * Datum: 19.01.2026
     * Forum: https://forum.iobroker.net/topic/83592/script-google-shared-locations-cookie-fixer
     * * Historie:
     * v. 1.0 - Erstveröffentlichung: Automatischer Refresh via Puppeteer & Recovery Logik.
     * v. 1.1 - Automatisches Setzen des Adapter-DP auf "beschreibbar" (write:true).
     * v. 1.2 - Optimierte Tarnung gegen Bot-Erkennung & gezielte Cookie-Filterung.
     */
    
    const puppeteer = require('puppeteer');
    
    // Konfiguration der Pfade
    const BASE_PATH = '0_userdata.0.google_sharedlocations_cookie_fixer';
    const ADAPTER_INSTANCE = 'google-sharedlocations.0';
    const ADAPTER_ALIVE_DP = `system.adapter.${ADAPTER_INSTANCE}.alive`;
    const ADAPTER_COOKIE_DP = `${ADAPTER_INSTANCE}.info.augmented_cookie`;
    const ADAPTER_CONN_DP = `${ADAPTER_INSTANCE}.info.connection`;
    
    /**
     * Initialisiert die benötigten Datenpunkte
     */
    async function initDPs() {
        await createStateAsync(`${BASE_PATH}.Cookie`, '', {name: 'Aktueller Google Cookie', type: 'string', role: 'text'});
        await createStateAsync(`${BASE_PATH}.LastUpdate`, '', {name: 'Letztes Update Zeitstempel', type: 'string', role: 'text'});
        await createStateAsync(`${BASE_PATH}.TriggerRefresh`, false, {name: 'Manueller Refresh Trigger', type: 'boolean', role: 'button'});
        await createStateAsync(`${BASE_PATH}.RestoreAdapter`, false, {name: 'Cookie zum Adapter kopieren & Neustart', type: 'boolean', role: 'button'});
    }
    
    /**
     * Kernfunktion: Holt einen frischen Cookie via Puppeteer
     */
    async function startRefresh() {
        let state = await getStateAsync(`${BASE_PATH}.Cookie`);
        let cookieToUse = state ? state.val : '';
    
        if (!cookieToUse || cookieToUse.length < 50) {
            const adapterAlive = await getStateAsync(ADAPTER_ALIVE_DP);
            if (adapterAlive && adapterAlive.val) {
                const adapterCookie = await getStateAsync(ADAPTER_COOKIE_DP);
                cookieToUse = adapterCookie ? adapterCookie.val : '';
            }
        }
    
        if (!cookieToUse || cookieToUse.length < 50) {
            console.warn(`[Cookie-Fixer] Abbruch: Kein gültiger Start-Cookie gefunden!`);
            return;
        }
    
        console.log('[Cookie-Fixer] Starte Browser-Refresh...');
        let browser;
    
        try {
            browser = await puppeteer.launch({
                headless: true,
                args: [
                    '--no-sandbox', 
                    '--disable-setuid-sandbox',
                    '--disable-blink-features=AutomationControlled'
                ]
            });
    
            const page = await browser.newPage();
            
            await page.evaluateOnNewDocument(() => {
                Object.defineProperty(navigator, 'webdriver', { get: () => false });
            });
    
            await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
    
            const cookieArray = cookieToUse.split(';').map(pair => {
                const parts = pair.trim().split('=');
                return parts.length >= 2 ? {
                    name: parts[0].trim(),
                    value: parts.slice(1).join('=').trim(),
                    domain: '.google.com',
                    path: '/',
                    secure: true
                } : null;
            }).filter(c => c !== null);
    
            await page.setCookie(...cookieArray);
    
            await page.goto('https://www.google.com/maps', { waitUntil: 'networkidle2', timeout: 60000 });
            await new Promise(r => setTimeout(r, 5000));
    
            const freshCookies = await page.cookies();
            const freshCookieString = freshCookies
                .filter(c => c.domain.includes('google'))
                .map(c => `${c.name}=${c.value}`)
                .join('; ');
    
            if (freshCookieString.length > 50) {
                await setStateAsync(`${BASE_PATH}.Cookie`, freshCookieString, true);
                await setStateAsync(`${BASE_PATH}.LastUpdate`, new Date().toLocaleString(), true);
                console.log('[Cookie-Fixer] ERFOLG: Cookie wurde im Hintergrund erneuert.');
                
                const conn = await getStateAsync(ADAPTER_CONN_DP);
                if (conn && !conn.val) {
                    console.log('[Cookie-Fixer] Adapter ist offline. Starte Wiederherstellung...');
                    await restoreAdapter();
                }
            } else {
                console.error('[Cookie-Fixer] Fehler: Erhaltene Cookies sind zu kurz oder ungültig.');
            }
    
        } catch (err) {
            console.error('[Cookie-Fixer] Fehler im Puppeteer-Ablauf: ' + err.message);
        } finally {
            if (browser) await browser.close();
        }
    }
    
    /**
     * Kopiert den Cookie zum Adapter und erzwingt Neustart
     */
    async function restoreAdapter() {
        const scriptCookie = await getStateAsync(`${BASE_PATH}.Cookie`);
        if (!scriptCookie || scriptCookie.val.length < 50) return;
    
        console.log('[Cookie-Fixer] Mache Datenpunkt beschreibbar und übertrage Cookie zum Adapter...');
        
        await extendObjectAsync(ADAPTER_COOKIE_DP, {common: {write: true}});
        await setStateAsync(ADAPTER_COOKIE_DP, scriptCookie.val, false);
    
        await setStateAsync(ADAPTER_ALIVE_DP, false);
        setTimeout(async () => {
            await setStateAsync(ADAPTER_ALIVE_DP, true);
            console.log('[Cookie-Fixer] Adapter wurde mit neuem Cookie neu gestartet.');
        }, 5000);
    }
    
    // --- INITIALISIERUNG & TRIGGER ---
    
    async function main() {
        await initDPs();
        console.log('[Cookie-Fixer] Initialer Check läuft...');
        await startRefresh();
    
        on({id: `${BASE_PATH}.TriggerRefresh`, val: true, ack: false}, () => {
            startRefresh();
            setState(`${BASE_PATH}.TriggerRefresh`, false, true);
        });
    
        on({id: `${BASE_PATH}.RestoreAdapter`, val: true, ack: false}, () => {
            restoreAdapter();
            setState(`${BASE_PATH}.RestoreAdapter`, false, true);
        });
    
        on({id: ADAPTER_CONN_DP, val: false, ack: true}, async (obj) => {
            const alive = await getStateAsync(ADAPTER_ALIVE_DP);
            if (alive && alive.val) {
                console.log('[Cookie-Fixer] Adapter-Verbindung verloren! Starte automatische Reparatur...');
                await startRefresh();
            }
        });
    
        schedule("0 4 * * *", startRefresh);
    }
    
    main();
    

    Zeigt eure Lovelace-Visualisierung klick
    (Auch ideal um sich Anregungen zu holen)

    Meine Tabellen für eure Visualisierung klick

    1 Antwort Letzte Antwort
    4
    • XBiTX Online
      XBiTX Online
      XBiT
      schrieb am zuletzt editiert von
      #2

      @david-g.

      läuft bei mir leider nicht sofort ->

      javascript.0	16:46:32.019	error	
      [Cookie-Fixer] Fehler im Browser-Ablauf: Failed to launch the browser process:  Code: 127
      
      stderr:
      /home/iobroker/.cache/puppeteer/chrome/linux-143.0.7499.192/chrome-linux64/chrome: error while loading shared libraries: libnspr4.so: cannot open shared object file: No such file or directory
      
      TROUBLESHOOTING: https://pptr.dev/troubleshooting
      

      Habe aber jetzt auch nicht weiter geschaut woran es liegt...

      David G.D 1 Antwort Letzte Antwort
      0
      • XBiTX XBiT

        @david-g.

        läuft bei mir leider nicht sofort ->

        javascript.0	16:46:32.019	error	
        [Cookie-Fixer] Fehler im Browser-Ablauf: Failed to launch the browser process:  Code: 127
        
        stderr:
        /home/iobroker/.cache/puppeteer/chrome/linux-143.0.7499.192/chrome-linux64/chrome: error while loading shared libraries: libnspr4.so: cannot open shared object file: No such file or directory
        
        TROUBLESHOOTING: https://pptr.dev/troubleshooting
        

        Habe aber jetzt auch nicht weiter geschaut woran es liegt...

        David G.D Online
        David G.D Online
        David G.
        schrieb am zuletzt editiert von
        #3

        @XBiT

        Hast du das erledigt?

        Voraussetzungen:
        Puppeteer: Muss in der JavaScript-Instanz als Modul eingetragen sein.

        Zeigt eure Lovelace-Visualisierung klick
        (Auch ideal um sich Anregungen zu holen)

        Meine Tabellen für eure Visualisierung klick

        B 1 Antwort Letzte Antwort
        0
        • David G.D David G.

          @XBiT

          Hast du das erledigt?

          Voraussetzungen:
          Puppeteer: Muss in der JavaScript-Instanz als Modul eingetragen sein.

          B Nicht stören
          B Nicht stören
          bommel_030
          schrieb zuletzt editiert von
          #4

          @David-G.
          Hier leider das gleiche Fehlerbild.

          David G.D 1 Antwort Letzte Antwort
          0
          • B bommel_030

            @David-G.
            Hier leider das gleiche Fehlerbild.

            David G.D Online
            David G.D Online
            David G.
            schrieb zuletzt editiert von David G.
            #5

            @bommel_030

            Dann die selbe Gegenfrage.
            Ist auf Anhieb mein erster Ansatz.

            Kann das leider nicht gegenprüfen.
            Eenn ich puppeteer in der Instanz entferne scheint es trotzdem aktiv zu bleiben.

            Zeigt eure Lovelace-Visualisierung klick
            (Auch ideal um sich Anregungen zu holen)

            Meine Tabellen für eure Visualisierung klick

            B 1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              peterfido
              schrieb zuletzt editiert von
              #6

              Ich hatte eine relativ kurze Zeit (mehrere Wochen) puppetier genutzt. Eines Tages fiel mir auf, dass die SSD der VM überraschend voll war. Der Übeltäter war ein Cache-Ordner vom puppetier. Das vielleicht mit im Auge behalten.

              Gruß

              Peterfido


              Proxmox auf Intel NUC12WSHi5
              ioBroker: Debian (VM)
              CCU: Debmatic (VM)
              Influx: Debian (VM)
              Grafana: Debian (VM)
              eBus: Debian (VM)
              Zigbee: Debian (VM) mit zigbee2mqtt

              1 Antwort Letzte Antwort
              1
              • David G.D David G.

                @bommel_030

                Dann die selbe Gegenfrage.
                Ist auf Anhieb mein erster Ansatz.

                Kann das leider nicht gegenprüfen.
                Eenn ich puppeteer in der Instanz entferne scheint es trotzdem aktiv zu bleiben.

                B Nicht stören
                B Nicht stören
                bommel_030
                schrieb zuletzt editiert von
                #7

                @David-G.
                Ja, sorry, klar, pupeteer ist als Modul eingetragen

                David G.D 1 Antwort Letzte Antwort
                0
                • B bommel_030

                  @David-G.
                  Ja, sorry, klar, pupeteer ist als Modul eingetragen

                  David G.D Online
                  David G.D Online
                  David G.
                  schrieb zuletzt editiert von David G.
                  #8

                  @bommel_030

                  Musste da auch mal die Ki fragen, hat mir aicu beim Script geholfen.
                  Diese meint:

                  Das ist ein klassisches Problem bei der Nutzung von Puppeteer in einer Linux-Umgebung (wie Debian oder Ubuntu, worauf die meisten ioBroker-Installationen basieren). Der Fehler Code: 127 bedeutet, dass der Chrome-Browser zwar installiert ist, ihm aber wichtige System-Bibliotheken fehlen, um zu starten.
                  ​In diesem Fall fehlt konkret libnspr4.so, aber meistens fehlen noch ein paar andere Pakete.
                  ....
                  ....
                  ....
                  ....

                  sudo apt install -y libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 libgbm1 libasound2 libpango-1.0-0 libcairo2
                  
                  

                  Evtl hat das bei mir der puppeteer Adapter mit installiert?

                  Edit
                  Bei mir laufen die genannten Pakete teilweise:

                  Last login: Fri Dec 26 22:30:42 2025 from 192.168.99.143
                  david@iobroker:~# for pkg in libnss3 libnspr4 libatk1.0-0 libatk-bridge2.0-0 libcups2 libdrm2 libxkbcommon0 libxcomposite1 libxdamage1 libxext6 libxfixes3 libxrandr2 libgbm1 libasound2 libpango-1.0-0 libcairo2; do
                  >   dpkg -s $pkg >/dev/null 2>&1 && echo "$pkg: installed" || echo "$pkg: MISSING";
                  > done
                  libnss3: installed
                  libnspr4: installed
                  libatk1.0-0: MISSING
                  libatk-bridge2.0-0: MISSING
                  libcups2: MISSING
                  libdrm2: installed
                  libxkbcommon0: installed
                  libxcomposite1: installed
                  libxdamage1: installed
                  libxext6: installed
                  libxfixes3: installed
                  libxrandr2: installed
                  libgbm1: installed
                  libasound2: MISSING
                  libpango-1.0-0: installed
                  libcairo2: installed
                  root@iobroker:~#
                  

                  Edit 2
                  Evfl. mal das libnspr4 nachinstallieren.
                  Das vermisst die log Meldung ja.

                  Wäre lieb wenn du oder @xbit das mal testen würdet.

                  Zeigt eure Lovelace-Visualisierung klick
                  (Auch ideal um sich Anregungen zu holen)

                  Meine Tabellen für eure Visualisierung klick

                  1 Antwort Letzte Antwort
                  0
                  • B Nicht stören
                    B Nicht stören
                    bommel_030
                    schrieb zuletzt editiert von
                    #9

                    @david-g.
                    So, ja, libnspr4 hatte ich natürlich auch schon installiert. Die danach angemahnten auch. Bis zur libatk-bridge. Die wollte wohl nicht.
                    Jetzt nochmal alles drüber und es kommt zumindest keine Fehlermeldung mehr. Mal schauen ob er den Keks später erneuert.

                    David G.D 1 Antwort Letzte Antwort
                    0
                    • B bommel_030

                      @david-g.
                      So, ja, libnspr4 hatte ich natürlich auch schon installiert. Die danach angemahnten auch. Bis zur libatk-bridge. Die wollte wohl nicht.
                      Jetzt nochmal alles drüber und es kommt zumindest keine Fehlermeldung mehr. Mal schauen ob er den Keks später erneuert.

                      David G.D Online
                      David G.D Online
                      David G.
                      schrieb zuletzt editiert von David G.
                      #10

                      @bommel_030

                      Interessant. Keine Ahnung, warum das bei mir alles drauf war.....
                      Frage mal im Thread vom puppeteer Adapter ob der das macht. Dann empfehle ich, den mit zu installieren.
                      https://forum.iobroker.net/topic/54944/puppeteer-screenshots-phantomjs-alternative/246?_=1768766081588

                      Zeigt eure Lovelace-Visualisierung klick
                      (Auch ideal um sich Anregungen zu holen)

                      Meine Tabellen für eure Visualisierung klick

                      B 1 Antwort Letzte Antwort
                      0
                      • David G.D David G.

                        @bommel_030

                        Interessant. Keine Ahnung, warum das bei mir alles drauf war.....
                        Frage mal im Thread vom puppeteer Adapter ob der das macht. Dann empfehle ich, den mit zu installieren.
                        https://forum.iobroker.net/topic/54944/puppeteer-screenshots-phantomjs-alternative/246?_=1768766081588

                        B Nicht stören
                        B Nicht stören
                        bommel_030
                        schrieb zuletzt editiert von
                        #11

                        @David-G.
                        Den puppeteer Adapter hatte ich gar nicht auf dem Schirm. Hab den einfach über die Konsole installiert.
                        Ich lass das Skript mal über Nacht laufen und geb dann Feedback.

                        David G.D 1 Antwort Letzte Antwort
                        0
                        • B bommel_030

                          @David-G.
                          Den puppeteer Adapter hatte ich gar nicht auf dem Schirm. Hab den einfach über die Konsole installiert.
                          Ich lass das Skript mal über Nacht laufen und geb dann Feedback.

                          David G.D Online
                          David G.D Online
                          David G.
                          schrieb zuletzt editiert von
                          #12

                          @bommel_030

                          Kannst es auch einfach über einen der beiden DPs ausführen die es angelegt hat (oder Script nochmal neustarten). Einer der nur den Coockie im Script aktualisiert und einer der ihn noch an shared locations sendet.

                          Zeigt eure Lovelace-Visualisierung klick
                          (Auch ideal um sich Anregungen zu holen)

                          Meine Tabellen für eure Visualisierung klick

                          1 Antwort Letzte Antwort
                          0
                          • David G.D Online
                            David G.D Online
                            David G.
                            schrieb zuletzt editiert von David G.
                            #13

                            @bommel_030 @xbit
                            Ich habe die Fehler nicht, da ich den puppeteer Adapter installiert hatte. Dieser hat bei mir die Abhängigkeiten installiert.
                            Hab es im Startpost unter troubleshooting ergänzt.

                            Zeigt eure Lovelace-Visualisierung klick
                            (Auch ideal um sich Anregungen zu holen)

                            Meine Tabellen für eure Visualisierung klick

                            1 Antwort Letzte Antwort
                            0
                            • B Nicht stören
                              B Nicht stören
                              bommel_030
                              schrieb zuletzt editiert von bommel_030
                              #14

                              @david-g.
                              OK, ich installier mal den puppeteer Adapter. Der aktuelle Stand hat nicht funktioniert. Nach 2h war der Cookie abgelaufen und es konnte kein neuer geholt werden.

                              Nachtrag...
                              Habe den anderen Adapter noch nicht installiert, aber mir mal die Cookies angeschaut. Das was dein Skript holt und das was ich aus der Entwicklerkonsole auslese sieht am Anfang anders aus.

                              Cookie aus deinem Skript:

                              SOCS=CAISNQgEEitib3FfaWRlbnRpdHlmcm9udGVuZHVpc2VydmVyXzIwMjYwMTE0LjAyX3AwGgJkZSACGgYIgMWwywY; AEC=AaJma5v4ez0cnzj
                              

                              Cookie aus der Entwicklerkonsole:

                              AEC=AaJma5sHbT0WNn1HOfWs
                              

                              Also der SOCS Teil ist in der Entwicklerkonsole von Chrome nicht drin. Könnte es daran liegen?

                              1 Antwort Letzte Antwort
                              0
                              • David G.D Online
                                David G.D Online
                                David G.
                                schrieb zuletzt editiert von David G.
                                #15

                                Meine Cookies fingen bisher immer mit

                                __Secure-3PSIDCC=AKEyXzWvTk4OruIi7N3i3hCQqj11FuNYuiQnbHvVCNAvQ3wQR5wu_Uw
                                

                                an.

                                Der Adapter benötigt auch nur einen Speziellen Teil aus dem Cookie. Da hat Garfonso mal was geändert damit man blind alles aus dem Cookie eingeben kann und der Adapter das relevante raus holt.

                                Im Browser das Cookie kannst du ja nicht 1 zu 1 mit dem aus dem Skript vergleichen, die holen sich ja jeweils eigene.

                                Die Cookie die ich mir bisher geholt habe, haben auch mit SOCS an. Das Secure...kommt dann etwas später.

                                Bei mir wurde heute Nacht ein neuer Cookie erstellt, konnte Ihn eben auch erfolgreich erneuern. Habe eben im Skript aber auch nochmal eine Anpassung gemacht. Glaube aber nicht, dass es das ist.

                                Evtl. nochmal einen frischen Cookie in den DP vom Skript einfügen.

                                Zeigt eure Lovelace-Visualisierung klick
                                (Auch ideal um sich Anregungen zu holen)

                                Meine Tabellen für eure Visualisierung klick

                                1 Antwort Letzte Antwort
                                0
                                • B Nicht stören
                                  B Nicht stören
                                  bommel_030
                                  schrieb zuletzt editiert von
                                  #16

                                  @david-g.
                                  Ich habe jetzt den Google Adapter mit einem manuellen Cookie gestartet. Verbindungstest sagt, ist ok. Dann habe ich mit dem Trigger Refresh einen Cookie vom Skript holen lassen.
                                  Wenn ich diesen Cookie dann von Hand in den Adapter kopiere sagt der Verbindungstest direkt fehlgeschlagen.
                                  Das sollte doch klappen, oder?

                                  David G.D 1 Antwort Letzte Antwort
                                  0
                                  • B bommel_030

                                    @david-g.
                                    Ich habe jetzt den Google Adapter mit einem manuellen Cookie gestartet. Verbindungstest sagt, ist ok. Dann habe ich mit dem Trigger Refresh einen Cookie vom Skript holen lassen.
                                    Wenn ich diesen Cookie dann von Hand in den Adapter kopiere sagt der Verbindungstest direkt fehlgeschlagen.
                                    Das sollte doch klappen, oder?

                                    David G.D Online
                                    David G.D Online
                                    David G.
                                    schrieb zuletzt editiert von David G.
                                    #17

                                    @bommel_030

                                    Ja, sollte es.
                                    Tut es zumindest bei mir.....

                                    Habe heute morgen eine neue Version vom Script hochgeladen.

                                    Gemini meint, dort würde das Coockie noch besser behandelt und gefoltert.
                                    Ka ob das was bei dir macht.....

                                    Edit
                                    (Hab die verschiedenen Coockie Anfänge von dir und mir mal gegoogelt und gemini damit gefüttert.
                                    Teste mal das (Kann ich gtad nicht, bin beim Zahnarzt..... 🤣) .

                                    /**
                                     * Script: Google Shared Locations Cookie Fixer
                                     * Autor: @ipod86
                                     * Version: v. 1.5 (COM-Domain Fix)
                                     * Datum: 19.01.2026
                                     * Forum: https://forum.iobroker.net/topic/83592/script-google-shared-locations-cookie-fixer
                                     * * Historie:
                                     * v. 1.4 - SOCS-Fix & Consent-Handling.
                                     * v. 1.5 - Umstellung auf .com (zwingend erforderlich für Session-Übernahme).
                                     */
                                    
                                    const puppeteer = require('puppeteer');
                                    
                                    const BASE_PATH = '0_userdata.0.google_sharedlocations_cookie_fixer';
                                    const ADAPTER_INSTANCE = 'google-sharedlocations.0';
                                    const ADAPTER_ALIVE_DP = `system.adapter.${ADAPTER_INSTANCE}.alive`;
                                    const ADAPTER_COOKIE_DP = `${ADAPTER_INSTANCE}.info.augmented_cookie`;
                                    const ADAPTER_CONN_DP = `${ADAPTER_INSTANCE}.info.connection`;
                                    
                                    async function initDPs() {
                                        await createStateAsync(`${BASE_PATH}.Cookie`, '', {name: 'Aktueller Google Cookie', type: 'string', role: 'text'});
                                        await createStateAsync(`${BASE_PATH}.LastUpdate`, '', {name: 'Letztes Update Zeitstempel', type: 'string', role: 'text'});
                                        await createStateAsync(`${BASE_PATH}.TriggerRefresh`, false, {name: 'Manueller Refresh Trigger', type: 'boolean', role: 'button'});
                                        await createStateAsync(`${BASE_PATH}.RestoreAdapter`, false, {name: 'Cookie zum Adapter kopieren & Neustart', type: 'boolean', role: 'button'});
                                    }
                                    
                                    async function startRefresh() {
                                        let state = await getStateAsync(`${BASE_PATH}.Cookie`);
                                        let cookieToUse = state ? state.val : '';
                                    
                                        if (!cookieToUse || cookieToUse.length < 50) {
                                            const adapterCookie = await getStateAsync(ADAPTER_COOKIE_DP);
                                            cookieToUse = adapterCookie ? adapterCookie.val : '';
                                        }
                                    
                                        if (!cookieToUse || cookieToUse.length < 50) {
                                            console.warn(`[Cookie-Fixer] Abbruch: Kein gültiger Start-Cookie gefunden!`);
                                            return;
                                        }
                                    
                                        console.log('[Cookie-Fixer] Starte Refresh auf google.com...');
                                        let browser;
                                    
                                        try {
                                            browser = await puppeteer.launch({
                                                headless: true,
                                                args: [
                                                    '--no-sandbox', 
                                                    '--disable-setuid-sandbox', 
                                                    '--disable-blink-features=AutomationControlled',
                                                    '--lang=en-US' // Auf US gestellt, um .com Verhalten zu erzwingen
                                                ]
                                            });
                                    
                                            const page = await browser.newPage();
                                            await page.setViewport({ width: 1280, height: 800 });
                                            await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
                                    
                                            // Cookies explizit für .com Domains setzen
                                            const rawPairs = cookieToUse.split(';');
                                            const domains = ['.google.com', 'google.com']; 
                                            
                                            for (let pair of rawPairs) {
                                                const parts = pair.trim().split('=');
                                                if (parts.length >= 2) {
                                                    const name = parts[0].trim();
                                                    const value = parts.slice(1).join('=').trim();
                                                    for (let dom of domains) {
                                                        try { 
                                                            await page.setCookie({ 
                                                                name, 
                                                                value, 
                                                                domain: dom, 
                                                                path: '/', 
                                                                secure: true,
                                                                sameSite: 'Lax'
                                                            }); 
                                                        } catch (e) {}
                                                    }
                                                }
                                            }
                                    
                                            // Schritt 1: Hauptseite .com aufrufen
                                            await page.goto('https://www.google.com', { waitUntil: 'networkidle2' });
                                            
                                            // Consent-Check (Englisch/International)
                                            try {
                                                const buttons = await page.$$('button');
                                                for (let btn of buttons) {
                                                    const text = await page.evaluate(el => el.innerText, btn);
                                                    if (text.includes('Accept all') || text.includes('I agree') || text.includes('Alle akzeptieren')) {
                                                        await btn.click();
                                                        await new Promise(r => setTimeout(r, 2000));
                                                        break;
                                                    }
                                                }
                                            } catch (e) {}
                                    
                                            // Schritt 2: Zwingend Maps .com aufrufen
                                            await page.goto('https://maps.google.com', { waitUntil: 'networkidle2' });
                                            await new Promise(r => setTimeout(r, 5000));
                                    
                                            const freshCookies = await page.cookies();
                                            
                                            // Extraktion: Wir nehmen alles von google.com
                                            const freshCookieString = freshCookies
                                                .filter(c => c.domain.includes('google.com'))
                                                .map(c => `${c.name}=${c.value}`)
                                                .join('; ');
                                    
                                            // Validierung: Enthält der Cookie die Session-ID?
                                            if (freshCookieString.length > 100 && (freshCookieString.includes('SID=') || freshCookieString.includes('Secure-3'))) {
                                                await setStateAsync(`${BASE_PATH}.Cookie`, freshCookieString, true);
                                                await setStateAsync(`${BASE_PATH}.LastUpdate`, new Date().toLocaleString(), true);
                                                console.log('[Cookie-Fixer] ERFOLG: Google.com Session-Cookie generiert.');
                                                
                                                const conn = await getStateAsync(ADAPTER_CONN_DP);
                                                if (conn && !conn.val) await restoreAdapter();
                                            } else {
                                                console.error('[Cookie-Fixer] FEHLER: Session auf google.com konnte nicht übernommen werden (SID fehlt).');
                                            }
                                    
                                        } catch (err) {
                                            console.error('[Cookie-Fixer] Fehler: ' + err.message);
                                        } finally {
                                            if (browser) await browser.close();
                                        }
                                    }
                                    
                                    async function restoreAdapter() {
                                        const scriptCookie = await getStateAsync(`${BASE_PATH}.Cookie`);
                                        if (!scriptCookie || scriptCookie.val.length < 100) return;
                                        
                                        await extendObjectAsync(ADAPTER_COOKIE_DP, {common: {write: true}});
                                        await setStateAsync(ADAPTER_COOKIE_DP, scriptCookie.val, false);
                                        
                                        await setStateAsync(ADAPTER_ALIVE_DP, false);
                                        setTimeout(() => setState(ADAPTER_ALIVE_DP, true), 5000);
                                    }
                                    
                                    async function main() {
                                        await initDPs();
                                        await startRefresh();
                                        
                                        on({id: `${BASE_PATH}.TriggerRefresh`, val: true, ack: false}, () => { 
                                            startRefresh(); 
                                            setState(`${BASE_PATH}.TriggerRefresh`, false, true); 
                                        });
                                        
                                        on({id: `${BASE_PATH}.RestoreAdapter`, val: true, ack: false}, () => { 
                                            restoreAdapter(); 
                                            setState(`${BASE_PATH}.RestoreAdapter`, false, true); 
                                        });
                                        
                                        on({id: ADAPTER_CONN_DP, val: false, ack: true}, async () => { 
                                            if ((await getStateAsync(ADAPTER_ALIVE_DP)).val) await startRefresh(); 
                                        });
                                        
                                        schedule("0 4 * * *", startRefresh);
                                    }
                                    main();
                                    
                                    

                                    Zeigt eure Lovelace-Visualisierung klick
                                    (Auch ideal um sich Anregungen zu holen)

                                    Meine Tabellen für eure Visualisierung klick

                                    1 Antwort Letzte Antwort
                                    0
                                    • XBiTX Online
                                      XBiTX Online
                                      XBiT
                                      schrieb zuletzt editiert von
                                      #18

                                      @david-g.

                                      Sorry bin zur Zeit nicht oft Online....

                                      Kurze Info mit Version 1.5 vom Script.

                                      Adapter puppeteer installiert -> Script geht ohne Fehlermeldung und holt Coockie
                                      Adapter puppeteer gestoppt -> Script geht ohne Fehlermeldung und holt Coockie
                                      Adapter puppeteer gelöscht -> Script geht ohne Fehlermeldung und holt Coockie

                                      Also Adapter hinzufügen und wieder löschen sollte reichen -> ob es später mal Probleme gibt wegen Update etc. kann ich natürlich nicht sagen.

                                      David G.D 1 Antwort Letzte Antwort
                                      0
                                      • XBiTX XBiT

                                        @david-g.

                                        Sorry bin zur Zeit nicht oft Online....

                                        Kurze Info mit Version 1.5 vom Script.

                                        Adapter puppeteer installiert -> Script geht ohne Fehlermeldung und holt Coockie
                                        Adapter puppeteer gestoppt -> Script geht ohne Fehlermeldung und holt Coockie
                                        Adapter puppeteer gelöscht -> Script geht ohne Fehlermeldung und holt Coockie

                                        Also Adapter hinzufügen und wieder löschen sollte reichen -> ob es später mal Probleme gibt wegen Update etc. kann ich natürlich nicht sagen.

                                        David G.D Online
                                        David G.D Online
                                        David G.
                                        schrieb zuletzt editiert von
                                        #19

                                        @XBiT

                                        Danke fürs testen.
                                        Klappen bei dir die gegolten Coockies denn, wenn du sie direkt im Adapter eingibst und auf testen gehst? Bei @bommel_030 gibt's ja Probleme.

                                        Zeigt eure Lovelace-Visualisierung klick
                                        (Auch ideal um sich Anregungen zu holen)

                                        Meine Tabellen für eure Visualisierung klick

                                        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

                                        770

                                        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