NEWS
Test Adapter google-sharedlocations2
-
@Krys sagte in Test Adapter google-sharedlocations2:
meinst du Places? Das habe ich mir noch nicht genauer angeschaut und habe da noch keinen Ansatz.
War mit der bisherigen Lösung über den Adapter von Garfonso mehr als zufrieden.Die beiden Features sind halt weitgehend identisch. Bei beiden hast du eine Position mit einem Radius. Der Hauptunterschied ist die Art der Datenpunkte, die erzeugt werden. Bei den fences im Adapter hast du quasi nur einen true/false Wert. Bei places hast du für jeden Nutzer ne ganze Reihe inklusive einen, wo steht wo der Nutzer gerade ist und auch für die Places einen, wo steht, wie viele Nutzer bzw. welche Nutzer gerade da sind.
Wenn man mehrere Geolocation-Dienste nutzt, ist places sicher besser, weil es man es von mehreren Adaptern befüllen kann. Die Places Unterstützung ist auch nur ein send-To. Fences ist dafür etwas mehr Code im Adapter und besonders der Config.
@Garfonso Ok, scheinbar bin ich zu hohl dafür. Mit owntracks bekomme ich es nicht hin, mit iOS Kurzbefehlen auch nicht. Ich bleibe bei deinem alten Adapter und hoffe, dass er erhalten bleibt. Dort kann ich per Blockly auch die Standorte abfragen, das passt schon so.
-
So, heute umgestellt, hat auf Anhieb geklappt.
Musste in meinen Skripten überall nur eine "2" einbauen (ausgoogle-sharedlocations.0.eingoogle-sharedlocations2.0.machen) und es läuft wie gewohnt -
So, heute umgestellt, hat auf Anhieb geklappt.
Musste in meinen Skripten überall nur eine "2" einbauen (ausgoogle-sharedlocations.0.eingoogle-sharedlocations2.0.machen) und es läuft wie gewohnt@BananaJoe sagte in Test Adapter google-sharedlocations2:
So, heute umgestellt, hat auf Anhieb geklappt.
Musste in meinen Skripten überall nur eine "2" einbauen (ausgoogle-sharedlocations.0.eingoogle-sharedlocations2.0.machen) und es läuft wie gewohntuserhat sich noch zuusersverändert.@Krys sagte in Test Adapter google-sharedlocations2:
@Garfonso Ok, scheinbar bin ich zu hohl dafür. Mit owntracks bekomme ich es nicht hin, mit iOS Kurzbefehlen auch nicht. Ich bleibe bei deinem alten Adapter und hoffe, dass er erhalten bleibt. Dort kann ich per Blockly auch die Standorte abfragen, das passt schon so.
Was genau bekommst du nicht hin? Places ist doch "einfach" ein Adapter in ioBroker...?
-
@garfonso
Seit dem ich den Adapter installiert bekomme ich regelmäßig eine Mail mit der Sicherheitsfrage ob ich mich wirklich eingeloggt habe.
Er meint von einem Windows Rechner aus.Hat das noch jemend?
Edit
Gtad im Code vom Adapter geschaut, gibt sich als Windows aus, dann wird es wirklich davon kommen.
Dabei hab ich gesehen, dass du die Fences und Places eingebaut hast. Super. -
@BananaJoe sagte in Test Adapter google-sharedlocations2:
So, heute umgestellt, hat auf Anhieb geklappt.
Musste in meinen Skripten überall nur eine "2" einbauen (ausgoogle-sharedlocations.0.eingoogle-sharedlocations2.0.machen) und es läuft wie gewohntuserhat sich noch zuusersverändert.@Krys sagte in Test Adapter google-sharedlocations2:
@Garfonso Ok, scheinbar bin ich zu hohl dafür. Mit owntracks bekomme ich es nicht hin, mit iOS Kurzbefehlen auch nicht. Ich bleibe bei deinem alten Adapter und hoffe, dass er erhalten bleibt. Dort kann ich per Blockly auch die Standorte abfragen, das passt schon so.
Was genau bekommst du nicht hin? Places ist doch "einfach" ein Adapter in ioBroker...?
@Garfonso sagte in Test Adapter google-sharedlocations2:
user hat sich noch zu users verändert.
Gut das du das geschrieben hast ... Danke!
-
@garfonso
Seit dem ich den Adapter installiert bekomme ich regelmäßig eine Mail mit der Sicherheitsfrage ob ich mich wirklich eingeloggt habe.
Er meint von einem Windows Rechner aus.Hat das noch jemend?
Edit
Gtad im Code vom Adapter geschaut, gibt sich als Windows aus, dann wird es wirklich davon kommen.
Dabei hab ich gesehen, dass du die Fences und Places eingebaut hast. Super. -
@David-G. sagte in Test Adapter google-sharedlocations2:
Hat das noch jemend?
Ja, hab ich auch mehrere bekommen.
@Garfonso sagte in Test Adapter google-sharedlocations2:
Ja, hab ich auch mehrere bekommen.
Man kann puppeteer ja einen Arbeitsordner mitgeben, um Session fortsetzen zu können.Evtl bekommt man es damit hin dass nicht jede Anmeldung als neues Gerät erkannt wird. Oder hast du es extra so gemacht, dass sicher ein login mit Passwort erscheint?
Edit.
Evtl nur mit Pw einloggen wenn das Coockie abgelaufen ist. Zum Ordner laut Gemini:Ja, das ist sogar eine sehr gute Idee! Bei Puppeteer nennt sich das userDataDir.
Wenn du diesen Ordner angibst, speichert Chrome dort das gesamte Browser-Profil – inklusive Cookies, Cache und vor allem den Session-Status. Beim nächsten Start greift Puppeteer auf diesen Ordner zu. Google sieht dann keinen "völlig neuen" Browser, was die Wahrscheinlichkeit massiv erhöht, dass du eingeloggt bleibst oder keine erneute 2FA-Abfrage kommt.
So baust du es in deine Cookie.ts ein
Du musst die puppeteer.launch-Optionen in der Methode loginToGetNewCookies anpassen.
1. Pfad definieren
Zuerst solltest du einen Pfad festlegen. Da es ein ioBroker-Adapter ist, bietet sich ein Ordner im Adapter-Verzeichnis an:const path = require('path'); // Im ioBroker-Kontext sinnvoll: ein Ordner im Instanz-Verzeichnis const dataDir = path.join(utils.getAbsoluteDefaultDataDir(), 'google-sharedlocations2-profile');- Den Launch-Befehl anpassen
Ändere den Block in deiner loginToGetNewCookies wie folgt ab:
this.browser = await puppeteer.launch({ headless: true, userDataDir: './google_profile', // Hier wird die Session gespeichert args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-blink-features=AutomationControlled' ], ignoreDefaultArgs: ['--enable-automation'], });Warum das für dein Script wichtig ist:
Vermeidung von 2FA: Wenn du dich einmal erfolgreich eingeloggt hast (vielleicht indem du headless: false kurzzeitig zum Testen nutzt), erkennt Google das "Gerät" beim nächsten Mal wieder.
Cookie-Persistenz: Selbst wenn das Script abstürzt, sind die Cookies noch im userDataDir gespeichert und müssen nicht jedes Mal neu per Tipp-Simulation erzeugt werden.
Glaubwürdigkeit: Ein Browser mit Historie und Cache wirkt für die Google-Sicherheitsalgorithmen weniger wie ein bösartiger Bot.EDIT 2
Mein Script nutzt die Option eines Cookie-Refresh. Evtl kann der Adapter erstmal versuchen, sich mit dem per User und Pw abgerufenen Coockie zu verbinden und dieses zu aktualisieren, und das nächste mal dann mit diesem usw. Wenn das nicht klappt neu einloggen mit user und pw. - Den Launch-Befehl anpassen
-
@Garfonso sagte in Test Adapter google-sharedlocations2:
Ja, hab ich auch mehrere bekommen.
Man kann puppeteer ja einen Arbeitsordner mitgeben, um Session fortsetzen zu können.Evtl bekommt man es damit hin dass nicht jede Anmeldung als neues Gerät erkannt wird. Oder hast du es extra so gemacht, dass sicher ein login mit Passwort erscheint?
Edit.
Evtl nur mit Pw einloggen wenn das Coockie abgelaufen ist. Zum Ordner laut Gemini:Ja, das ist sogar eine sehr gute Idee! Bei Puppeteer nennt sich das userDataDir.
Wenn du diesen Ordner angibst, speichert Chrome dort das gesamte Browser-Profil – inklusive Cookies, Cache und vor allem den Session-Status. Beim nächsten Start greift Puppeteer auf diesen Ordner zu. Google sieht dann keinen "völlig neuen" Browser, was die Wahrscheinlichkeit massiv erhöht, dass du eingeloggt bleibst oder keine erneute 2FA-Abfrage kommt.
So baust du es in deine Cookie.ts ein
Du musst die puppeteer.launch-Optionen in der Methode loginToGetNewCookies anpassen.
1. Pfad definieren
Zuerst solltest du einen Pfad festlegen. Da es ein ioBroker-Adapter ist, bietet sich ein Ordner im Adapter-Verzeichnis an:const path = require('path'); // Im ioBroker-Kontext sinnvoll: ein Ordner im Instanz-Verzeichnis const dataDir = path.join(utils.getAbsoluteDefaultDataDir(), 'google-sharedlocations2-profile');- Den Launch-Befehl anpassen
Ändere den Block in deiner loginToGetNewCookies wie folgt ab:
this.browser = await puppeteer.launch({ headless: true, userDataDir: './google_profile', // Hier wird die Session gespeichert args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-blink-features=AutomationControlled' ], ignoreDefaultArgs: ['--enable-automation'], });Warum das für dein Script wichtig ist:
Vermeidung von 2FA: Wenn du dich einmal erfolgreich eingeloggt hast (vielleicht indem du headless: false kurzzeitig zum Testen nutzt), erkennt Google das "Gerät" beim nächsten Mal wieder.
Cookie-Persistenz: Selbst wenn das Script abstürzt, sind die Cookies noch im userDataDir gespeichert und müssen nicht jedes Mal neu per Tipp-Simulation erzeugt werden.
Glaubwürdigkeit: Ein Browser mit Historie und Cache wirkt für die Google-Sicherheitsalgorithmen weniger wie ein bösartiger Bot.EDIT 2
Mein Script nutzt die Option eines Cookie-Refresh. Evtl kann der Adapter erstmal versuchen, sich mit dem per User und Pw abgerufenen Coockie zu verbinden und dieses zu aktualisieren, und das nächste mal dann mit diesem usw. Wenn das nicht klappt neu einloggen mit user und pw.Äh.. ja.. das mit dem Cookie-Refresh hatte ich eigentlich auch vor. Habe ich irgendwie vergessen zu implementieren. :-)
Data-Dir hab ich jetzt auch mal hinzugefügt.Auf npm / Github sollte eine 0.2.0 mit den Sachen erscheinen. Intern hat sich nochmal einiges geändert. Bei mir läufts gerade ein "refresh im Browser" hab ich aber noch nicht testen können (weiß grad nicht genau, wie, vielleicht muss ich da noch einen state für basteln oder so kopfkratz). Aber nach dem Login knallt chrome Daten in den Ordern.
- Den Launch-Befehl anpassen
-
Äh.. ja.. das mit dem Cookie-Refresh hatte ich eigentlich auch vor. Habe ich irgendwie vergessen zu implementieren. :-)
Data-Dir hab ich jetzt auch mal hinzugefügt.Auf npm / Github sollte eine 0.2.0 mit den Sachen erscheinen. Intern hat sich nochmal einiges geändert. Bei mir läufts gerade ein "refresh im Browser" hab ich aber noch nicht testen können (weiß grad nicht genau, wie, vielleicht muss ich da noch einen state für basteln oder so kopfkratz). Aber nach dem Login knallt chrome Daten in den Ordern.
Wird grün und holt Daten.
Eine Frage.
Ich sende die Koordinaten mit einem Blockly an Places, da ich dort schon User habe die anders benannt sind.Wenn ich mit dem Adapter die Daten an Places sende wird mein Log voll gehauen. Bei meinem Blockly kommt nichts. Liegt nicht am Parralelbetrieb,das Blockly ist deaktiviert.
places.0 2026-02-04 06:22:46.950 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770182327339,"address":"","date":"2026-02-04 06:18:47","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:22:46.950 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:22:46.856 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182551298,"address":"","date":"2026-02-04 06:22:31","atHome":true,"distance":8,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:21:46.382 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770182327339,"address":"","date":"2026-02-04 06:18:47","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:21:46.382 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:21:46.334 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182391556,"address":"","date":"2026-02-04 06:19:51","atHome":true,"distance":4,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:21:46.334 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:20:45.903 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770182327339,"address":"","date":"2026-02-04 06:18:47","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:20:45.903 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:20:45.796 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182391556,"address":"","date":"2026-02-04 06:19:51","atHome":true,"distance":4,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:19:45.236 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770182327339,"address":"","date":"2026-02-04 06:18:47","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:19:45.188 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182316430,"address":"","date":"2026-02-04 06:18:36","atHome":true,"distance":4,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:19:45.188 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:18:44.768 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770181996417,"address":"","date":"2026-02-04 06:13:16","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:18:44.768 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:18:44.675 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182316430,"address":"","date":"2026-02-04 06:18:36","atHome":true,"distance":4,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:17:43.814 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770181996417,"address":"","date":"2026-02-04 06:13:16","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:17:43.814 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:17:43.722 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182251214,"address":"","date":"2026-02-04 06:17:31","atHome":true,"distance":7,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} -
Wird grün und holt Daten.
Eine Frage.
Ich sende die Koordinaten mit einem Blockly an Places, da ich dort schon User habe die anders benannt sind.Wenn ich mit dem Adapter die Daten an Places sende wird mein Log voll gehauen. Bei meinem Blockly kommt nichts. Liegt nicht am Parralelbetrieb,das Blockly ist deaktiviert.
places.0 2026-02-04 06:22:46.950 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770182327339,"address":"","date":"2026-02-04 06:18:47","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:22:46.950 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:22:46.856 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182551298,"address":"","date":"2026-02-04 06:22:31","atHome":true,"distance":8,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:21:46.382 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770182327339,"address":"","date":"2026-02-04 06:18:47","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:21:46.382 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:21:46.334 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182391556,"address":"","date":"2026-02-04 06:19:51","atHome":true,"distance":4,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:21:46.334 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:20:45.903 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770182327339,"address":"","date":"2026-02-04 06:18:47","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:20:45.903 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:20:45.796 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182391556,"address":"","date":"2026-02-04 06:19:51","atHome":true,"distance":4,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:19:45.236 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770182327339,"address":"","date":"2026-02-04 06:18:47","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:19:45.188 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182316430,"address":"","date":"2026-02-04 06:18:36","atHome":true,"distance":4,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:19:45.188 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:18:44.768 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770181996417,"address":"","date":"2026-02-04 06:13:16","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:18:44.768 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:18:44.675 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182316430,"address":"","date":"2026-02-04 06:18:36","atHome":true,"distance":4,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:17:43.814 info Processed message, returning result: {"user":"Ann-Christin","latitude":51.1234567,"longitude":9.6543210,"timestamp":1770181996417,"address":"","date":"2026-02-04 06:13:16","atHome":true,"distance":6,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""} places.0 2026-02-04 06:17:43.814 warn Found a newer place for this user: skipping update places.0 2026-02-04 06:17:43.722 info Processed message, returning result: {"user":"David G.","latitude":51.1234000,"longitude":9.6543000,"timestamp":1770182251214,"address":"","date":"2026-02-04 06:17:31","atHome":true,"distance":7,"name":"Home","elevation":0,"routeDistance":"","routeDuration":"","routeDurationWithTraffic":""}@David-G. sagte in Test Adapter google-sharedlocations2:
Wenn ich mit dem Adapter die Daten an Places sende wird mein Log voll gehauen. Bei meinem Blockly kommt nichts. Liegt nicht am Parralelbetrieb,das Blockly ist deaktiviert.
Ja, wenn du die Timestamps vergleichst, sieht man, wo es herkommt. Ich setze überall den timestamp, den Google mitliefert. Der scheint durchaus mal länger gleich zu bleiben. Passt ja auch, wenn man manuell guckt, steht da ja auch manchmal "vor x Minuten" oder so. Ist halt kein Realtime. Wenn die Position aber schon älter ist als das Abrufinterval, dann ist der timestamp der Position gleich und das teilt Places da mit.
Theoretisch müsste ich den timestamp prüfen und das update ausfallen lassen, wenn der sich nicht geändert hat.
In deinem blockly setzt du vermutlich da einfach den aktuellen Zeitpunkt. IIRC hat das der alte Adapter auch gemacht. Aber eigentlich muss places ja kein Update machen, wenn es eh keine neue Position gibt.