Ankündigung

Einklappen
Keine Ankündigung bisher.

Google Calendar - update für "neue" GoogleAPI

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    lexxmm wie ist hier der Stand? Hast Du es mit den alten Credentials hinbekommen?
    Die Fehlermeldung beim Schließen des Fensters findest Du in der Ecke oben rechts im Hauptfenster der Konfigurationsseite.

    Google hat das alte JavaScript für die Authorisierung Ende März außer Betrieb genommen. Für client_ids, die vor dem 29.7.22 erstellt wurden, kann der Code noch genutzt werden, wenn man bei der Anfrage einen beliebigen „plugin_name“ angibt. Wenn Du eine alte client_id und ein altes client_secret hast, aber das refresh_token fehlt, dann kannst Du in Version 3.3.1 (Master) in der ./lib/base/config.js am Ende von Zeile 176 ein Komma setzen und danach folgende Zeile einfügen:
    Code:
    plugin_name: 'smartVISU'
    , so dass der Bezug des Tokens hoffentlich wieder klappt. In der Develop-Version ist dies in Zeile 190.

    Für einen Test wäre ich dankbar!

    Gruß
    Wolfram

    Kommentar


      ilex z1marco lexxmm
      aus anderen Gründen musste ich mir nun doch mal ein Google-Konto erstellen. Da habe ich den Authentifizierungsprozess gleich mal getestet. Hier eine Zusammenfassung:
      1. Vollständig vorhandene Credentials
        Wenn aus einer vorherigen smartVISU-Version funktionierende Credentials (client_id, client_secret und refresh_token) vorhanden sind, kann man diese einfach mit einem Text-Editor in die config.ini übernehmen und braucht dann keine neue Authentifizierung durchzuführen. Man kann diese Credentials auch für mehrere Geräte nutzen.
        .
      2. Neue Authentifizierung mit eigener Domain
        Der OAuth Client akzeptiert als "authorisierte Javascript-Quelle" neben "http://localhost" nur Adressen mit offiziellen Domain-Endungen, also keine internen IP-Adressen (dazu siehe Punkt 3). Hat man also einen Reverse Proxy am Start und kann eine eigene Domain angeben, die auf den smartVISU-Server führt, ist die Authentifizierung einfach. Man muss dazu nur die ./lib/base/config.js wie oben beschrieben um den plugin_name erweitern. Dann funktioniert der Bezug des refresh_tokens über Google oauth wieder. Wer auf dem smartVISU-Server einen Browser starten und die Visu auf http://localhost aufrufen kann, ist ebenfalls fein raus, wenn dies als "authorisierte Javascript-Quelle" eingetragen ist.
        .
      3. Neue Authentifizierung mit IP-Adresse
        Weil Google keine privaten IP-Adressen als "authorisierte Javascript-Quelle" akzeptiert, verwendet das Konfigurationsskript den DNS-Dienst "nip.io" und fordert dazu auf, z.B. "192.168.1.27.nip.io" in das Feld einzutragen. nip.io sollte eigentlich auf die interne IP-Adresse umleiten, aber Sicherheitsmechanismen des Routers verhindern dies. Abhilfe schafft ein Eintrag in die hosts-Datei (unter Windows "%windir%/System32/drivers/etc/hosts"), wobei die Beispiel-IP durch die des smartVISU-Servers zu ersetzen ist:
        Code:
        192.168.1.27   192.168.1.27.nip.io
        Wer eine Fritzbox hat, kann stattdessen unter Heimnetz > Netzwerk > Netzwerkeinstellungen (Tab) die Domain "nip.io" in die Liste der Ausnahmen zum DNS-Rebind-Schutz eintragen. Davon profitieren dann alle Geräte im Netzwerk.
        Zudem muss die o.g. Erweiterung um den plugin_name in der config.js UND zusätzlich in der ./pages/base/config.google.html in Zeile 53 eingetragen werden.
      Wichtig für die Punkte 2 und 3 ist noch, dass das eigene Google-Konto im Abschnitt "OAuth-Zustimmungsbildschirm" als Testnutzer eingetragen ist. Sonst bekommt man nur eine Fehlermeldung, dass das Projekt noch nicht freigegeben ist.

      Der Test des Kalenders erfolgt am besten, indem man folgende URL aufruft:
      Code:
      <DeineIP>/smartVISU/lib/calendar/service/googleV3.php?debug=1
      Wenn hier keine Fehler ausgegeben werden und mindestens ein gültiger Kalender-Eintrag gezeigt wird, dann ist alles in Ordnung. Fehlende Kalendereinträge in der Visu haben dann andere Ursachen, z.B. falsche Parametrierung der Kalender-Widgets oder fehlerhafte Eingaben im Konfigurationsfeld "Kalender" für die Kalendernamen.

      Die genannten Änderungen sind bereits im develop branch. Die Schritt-für-Schritt-Anleitung auf der Konfig-Seite aktualisiere ich dann noch.

      Gruß
      Wolfram
      Zuletzt geändert von wvhn; 22.04.2025, 22:35. Grund: Lösung für Fritzbox ergänzt

      Kommentar


        Danke für Deine Mühe!!! Ich hatte mir zwischenzeitlich wie folgt geholfen: alte Verwendung googleV3.php (inkl. Zugangsdaten) und calendar.php was so halb funktioniert. Gern würde ich es jetzt noch einmal richtig machen...in welche config.ini müssen die Zugangsdaten und wie genau?

        Gruss, Michael

        Kommentar


          Moin Michael,

          es gibt nur eine config.ini für smartVISU und die liegt im Hauptverzeichnis von smartVISU (i.d.R /var/www/html/smartVISU). Folgende Schlüssel musst Du in die config.ini der aktuellen Installation übertragen:
          Code:
          calendar_google_client_id = ""
          calendar_google_client_secret = ""
          calendar_google_refresh_token = ""
          die Zugangsdaten werden jeweils zwischen die Anführungszeichen gesetzt.

          Gruß
          Wolfram

          Kommentar


            Hallo zusammen,

            ich wollte heute den Google Kalender einbinden. Soweit klappt alles wie beschrieben. Allerdings bekomme ich nach Durchlaufen/durchklicken des Authorisierungsfensters den Fehler: "idpiframeinitialization failed."
            Der Kalender wird nicht in der config.ini angelegt.
            Ich kann das zwar manuell tun aber ohne token bringt es natürlich nichts, und den kann ich dem json. File nicht entnehmen.
            Was mir aufgefallen ist: Die Testuser Freigabe kann ich erst nach Erstellen der Webanmeldung machen. Ich denke das spielt keine Rolle aber ansonsten funktioniert es genauso wie im HowTo beschrieben ist.

            Der Fehler bei Aufrum der index Seite lautet: "HTTP request failed! HTTP1.1: 400 Bad request. Unable to retrieve access token."

            Kommentar


              Welche Version von smartVISU verwendest Du? v3.4 sollte es mindestens sein.
              Gibt es weitere Info zu dem Fehler "idpiframeinitialization failed."​? Wenn man diesen googelt, gibt es einige Lösungshinweise.

              Gruß
              Wolfram

              EDIT: habe gerade den Anmeldeprozess durchlaufen - allerdings mit localhost. Da ich gerade keinen Testserver habe, kann ich die Autherntifizierung mit IP-Adresse nicht testen. nip.io existiert aber noch und sollte so funktionieren. Siehe Punkt 3 im Post 272.
              Zuletzt geändert von wvhn; 16.03.2025, 23:51.

              Kommentar


                Hi Wolfram,

                ich verwende die aktuelle Version, 3.5. Die Lösungshinweise habe ich auch gefunden, verstehe sie ehrlich gesagt aber nicht. Die eine, die etwas von 3rd party cockies schreibt hat nicht geholfen.
                Die Dinge aus deinen Post 272 habe ich alle durchgeführt, leider ohne Veränderung. Bin tatsächlich etwas ratlos. Vielleicht hilft noch die Information dass der Dialog nicht schliesst nachdem ich das Google-PopUp-Fenster abgeschlossen habe.

                Kommentar


                  Wie lautet denn die Fehlermeldung genau? Falls der Fehler „idpiframeinitialization failed."​ auftritt, liefert das Skript den Grund mit. Der Fehler sollte auch im roten Dreieck oben links angezeigt werden.
                  Gibt es Meldungen in der Entwicklerkonsole des Browsers?

                  Gruß
                  Wolfram

                  Kommentar


                    Hi Wolfram,

                    konnte heute erst testen. Die Entwicklerconsole sieht so aus:

                    grafik.png

                    Da waren weitere Dinge drin aber ich habe die Sicherheitseinstellungen runter geschraubt und die Meldungen waren weg. Problem bleibt aber bestehen. ​

                    Die Fehlermeldungen sind diese:

                    grafik.png

                    grafik.png

                    Das sind dir beiden Fehlermeldungen
                    Angehängte Dateien
                    Zuletzt geändert von himself; 19.03.2025, 14:23.

                    Kommentar


                      In ./Pages/base/config.google.html ist in Zeile 56 folgender Code:
                      Code:
                      function(resp) {
                          if (resp.error)
                              // possible errors: idpiframe_initialization_failed (with subtype), popup_closed_by_user, popup_blocked_by_browser, access_denied, immediate_failed
                              params.window.postMessage({ subject: 'googleauth', error: { code: resp.error, message: resp.error_subtype } }, params.origin);
                      ​
                      Den könntest Du mal erweitern zu
                      Code:
                      function(resp) {
                          if (resp.error){
                              // possible errors: idpiframe_initialization_failed (with subtype), popup_closed_by_user, popup_blocked_by_browser, access_denied, immediate_failed
                              console.log('googleAuthError:', resp);
                              params.window.postMessage({ subject: 'googleauth', error: { code: resp.error, message: resp.error_subtype } }, params.origin);​
                          }
                      Achte dabei auf die zusätzlichen geschweiften Klammern um den Code für die if-Anweisung. In der Konsole sollte dann hoffentlich das Objekt für die Antwort angezeigt werden. Wenn Du das öffnen kannst, sollten weitere Details zu dem Fehler angezeigt werden.

                      Lässt sich das Objekt nicht öffnen (weil der iFrame schon geschlossen ist), dann kannst Du 'resp' in der console.log-Zeile durch 'resp.error_subtype' ersetzen. Möglicherweise ist das aber ein Relikt aus der alten Bibliothek und es muss jetzt 'resp.details‘ heißen. Sorry für die Konjunktive, aber ich kann das gerade nicht selbst testen.

                      Die Google API Referenz sagt zu dem Fehler folgendes:
                      idpiframe_initialization_failed: Failed to read the 'localStorage' property from 'Window'
                      Dieser Fehler tritt auf, wenn Drittanbieter-Cookies und die Datenspeicherung nicht aktiviert sind in Ihrem Browser. Diese Optionen sind für die Google Log-in-Bibliothek erforderlich. Weitere Info finden Sie unter Drittanbieter-Cookies und Datenspeicherung Hinweis :In Ihrer eigenen App sollten Sie die Nutzer auffordern, Drittanbieter-Cookies und Datenspeicherung zu aktivieren, oder eine Ausnahme für accounts.google.com hinzuzufügen.

                      idpiframe_initialization_failed: Not a valid origin for the client
                      Dieser Fehler tritt auf, wenn die registrierte Domain nicht mit der Domain übereinstimmt, auf dem die Webseite gehostet wird. Achten Sie darauf, dass der von Ihnen registrierte Ursprung mit der URL übereinstimmt im Browser.
                      Gruß
                      Wolfram

                      Kommentar


                        Hi Wolfram,

                        habe den Code eingefügt. Jetzt kann ich die Autorisierung nicht mehr starten. Die Console sagt folgendes:

                        HTML-Code:
                        index.php?page=config:88 [root.html] first init of driver
                        io_smarthomeng.js:213 [io.smarthomeng] opening websocket on ws://192.168.178.27:2424
                        animation.js:39 [animation.prepare]
                        io_smarthomeng.js:347 [io.smarthomeng] web socket not ready: {"cmd":"monitor","items":[]}
                        base.js:1044 [notify.info] id = 1: Configuration - Die Konfiguration wurde erfolgreich gespeichert.
                        index.php?page=config.google:61 Uncaught SyntaxError: Unexpected token 'else' (at index.php?page=config.google:61:6)
                        animation.js:46 [animation.redraw]
                        io_smarthomeng.js:343 [io.smarthomeng] sending data: {"cmd":"proto","ver":4}
                        io_smarthomeng.js:343 [io.smarthomeng] sending data: {"cmd":"identity","sw":"smartVISU","ver":"v3.5.0", "browser":"Chrome","bver":"134"}
                        io_smarthomeng.js:343 [io.smarthomeng] sending data: {"cmd":"monitor","items":[]}
                        index.php?page=config:455 global_cache: Cache directory is writeable
                        index.php?page=config:2068 pages_cache: Cache directory is writeable
                        index.php?page=config:3681 cookie_cache: Cache directory is writeable
                        io_smarthomeng.js:240 [io.smarthomeng] receiving data: {"cmd": "proto", "ver": 4.1, "server": "module.websocket", "time": "2025-03-22T09:53:06.298366"}
                        io_smarthomeng.js:240 [io.smarthomeng] receiving data: {"cmd": "item", "items": []}
                        index.php?page=config.google:73 Uncaught ReferenceError: grantOfflineAccess is not defined
                        at HTMLBodyElement.onclick (index.php?page=config.google:73:38)
                        onclick @ index.php?page=config.google:73​
                        Sieht für mich aus als ob iene Klammer oder ähnlichesa fehlt. Habe leider von html absolut keine Ahnung.

                        Gruß

                        Kommentar


                          Hast Du wie oben angegeben die geschweiften Klammern eingefügt? Im Code oben in der 2. und der 6. Zeile.

                          Die Fehlermeldung "unexpected token 'else'…" spricht dafür, dass mit den Klammern etwas schief gelaufen ist. Achtung auch beim Kopieren des Codes aus dem Post: hierbei werden häufig nicht druckbare Leerzeichen eingefügt.

                          Gruß
                          Wolfram

                          Kommentar


                            Hi Wolfram,

                            wie dich vermutlich nicht wundert hattest du recht mit der Klammer...

                            HTML-Code:
                            [io.smarthomeng] sending data:  {"cmd":"monitor","items":[]} io_smarthomeng.js:343:12
                            global_cache: Cache directory is writeable jquery-2.2.4.min.js line 2 > eval:3:12
                            pages_cache: Cache directory is writeable jquery-2.2.4.min.js line 2 > eval:3:12
                            cookie_cache: Cache directory is writeable jquery-2.2.4.min.js line 2 > eval:3:12
                            [io.smarthomeng] receiving data:  {"cmd": "item", "items": []} io_smarthomeng.js:240:12
                            [animation.redraw] animation.js:46:10
                            Feature Policy: Unbekannte Funktionalität (Feature) "identity-credentials-get" wird ignoriert. cb=gapi.loaded_0:183:73
                            Feature Policy: Unbekannte Funktionalität (Feature) "identity-credentials-get" wird ignoriert. cb=gapi.loaded_0:183:359
                            Feature Policy: Unbekannte Funktionalität (Feature) "identity-credentials-get" wird ignoriert. cb=gapi.loaded_0:183:376
                            Warnungen zu Content-Security-Policy 2
                            Diese Seite befindet sich im Kompatibilitätsmodus (Quirks). Das Seitenlayout kann beeinflusst werden. Verwenden Sie für den Standardmodus "<!DOCTYPE html>". iframe
                            Content-Security-Policy: (Report-Only-Regel) Die Einstellungen der Seite haben die Ausführung eines Scripts (script-src-elem) auf https://www.gstatic.com/_/mss/boq-identity/_/js/k=boq-identity.IdpIFrameHttp.de.mJtG8ypGaBY.es5.O/am=AAY/d=1/rs=AOaEmlHuix6irBLO7JNyRW9m1HpLxRqemg/m=base blockiert, da er gegen folgende Direktive verstößt: "script-src 'unsafe-inline' 'unsafe-eval' blob: data:" iframe
                            Für "https://accounts.google.com/o/oauth2/iframe#origin=http%3A%2F%2F192.168.178.27.nip.io&rpcToken=628304342.1009234" wurde partitionierter Cookie- oder Speicherzugriff verwendet, da es im Kontext eines Drittanbieters geladen wurde und dynamische Zustandspartitionierung aktiv ist. m=base:116:309
                            Das Öffnen mehrerer Popups wurde aufgrund fehlender Benutzeraktivierung blockiert. cb=gapi.loaded_0:170:292
                            Speicherzugriff automatisch erlaubt für Quelle "http://192.168.178.27.nip.io" auf "http://192.168.178.27".
                            googleAuthError:
                            Object { error: "idpiframe_initialization_failed", details: "You have created a new client application that uses libraries for user authentication or authorization that are deprecated. New clients must use the new libraries instead. See the [Migration Guide](https://developers.google.com/identity/gsi/web/guides/gis-migration) for more information." }
                            index.php:59:15
                            [notify.error] id = 3: Google authentication - idpiframe_initialization_failed base.js:1044:11
                            Uncaught idpiframe_initialization_failed jquery-2.2.4.min.js line 2 > eval:143:5
                                jQuery 3
                                    <anonym>
                                    dispatch
                                    handle​
                            Ich denke das ist das Problem: ou have created a new client application that uses libraries for user authentication or authorization that are deprecated. New clients must use the new libraries instead.



                            Kommentar


                              Offenbar hat Google schon wieder die Bibliotheken geändert, so dass in smartVISU die Authentifizierung nur noch mit bereits bestehenden Kalendern klappt. Das muss ich mir näher ansehen. Komme aber frühestens nächste Woche dazu.

                              Gruß
                              Wolfram

                              Kommentar


                                Hi Wolfram,

                                Danke für deinen Support ! Spiele gerne den Tester!

                                Kommentar

                                Lädt...
                                X