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. Bastellösung: Polestar Ladezustand via Tibber App API

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Bastellösung: Polestar Ladezustand via Tibber App API

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
32 Beiträge 9 Kommentatoren 42.2k 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.
  • S Stephan74

    @gantenbein
    Hi !
    Fuunktioniert die Lösung bei dir noch ?
    Bei mir ist seit gestern Funkstille.
    Im Status steht folgendes:
    {"errors":[{"message":"This operation has been blocked as a potential Cross-Site Request Forgery (CSRF). Please either specify a 'content-type' header (with a type that is not one of application/x-www-form-urlencoded, multipart/form-data, text/plain) or provide a non-empty value for one of the following headers: x-apollo-operation-name, apollo-require-preflight\n","extensions":{"code":"BAD_REQUEST","stacktrace":["BadRequestError: This operation has been blocked as a potential Cross-Site Request Forgery (CSRF). Please either specify a 'content-type' header (with a type that is not one of application/x-www-form-urlencoded, multipart/form-data, text/plain) or provide a non-empty value for one of the following headers: x-apollo-operation-name, apollo-require-preflight",""," at new GraphQLErrorWithCode (file:///app/node_modules/@apollo/server/dist/esm/internalErrorClasses.js:7:9)"," at new BadRequestError (file:///app/node_modules/@apollo/server/dist/esm/internalErrorClasses.js:75:9)"," at preventCsrf (file:///app/node_modules/@apollo/server/dist/esm/preventCsrf.js:29:11)"," at ApolloServer.executeHTTPGraphQLRequest (file:///app/node_modules/@apollo/server/dist/esm/ApolloServer.js:507:17)"," at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"]}}]}

    G Offline
    G Offline
    Gantenbein
    schrieb am zuletzt editiert von
    #9

    @stephan74
    Hi,

    nein die Lösung ist derzeit nicht mehr funktionsfähig.
    Polestar hat wohl die API angepasst und das hatte Änderungen bei Tibber zur Folge. Der Fakt wird im Polestar-Forum diskutiert, derzeit scheint aber niemand eine Lösung zu haben.
    Meine Kenntnisse genügen leider nicht um das Skript anzupassen. Ich muss warten bis jemand ein copy&paste Lösung für Tibber, oder besser den Polestarserver zur Verfügung stellt.

    G 1 Antwort Letzte Antwort
    0
    • G Gantenbein

      @stephan74
      Hi,

      nein die Lösung ist derzeit nicht mehr funktionsfähig.
      Polestar hat wohl die API angepasst und das hatte Änderungen bei Tibber zur Folge. Der Fakt wird im Polestar-Forum diskutiert, derzeit scheint aber niemand eine Lösung zu haben.
      Meine Kenntnisse genügen leider nicht um das Skript anzupassen. Ich muss warten bis jemand ein copy&paste Lösung für Tibber, oder besser den Polestarserver zur Verfügung stellt.

      G Offline
      G Offline
      garagenbier78
      schrieb am zuletzt editiert von garagenbier78
      #10

      @gantenbein Bei mir funktionierts mit folgender Änderung in der Funktion wieder:

       httpGet(uri, { bearerAuth: tokenFromLogin, timeout : 5000, headers: {'content-type' : 'application/json' }}, (error, response) => {
                  if (!error) {
                      //log(response.statusCode);
                      // log(response.data);  // uncomment for debug purposes
                      //log(response.headers); // uncomment for debug purposes
                      output = response.data;
      
                      setState( dpJsonResponse, output);
                  } else {
                      log(error, 'error');
                  }
              });    
      

      Tibber scheint jetzt keine "leeren" Header mehr zu akzeptieren, daher die Änderung in der ersten Zeile.
      Hab gleich noch den Timeout erhöht, da die 2000ms bei mir auch immer mal wieder zu Fehlern im Log geführt haben.

      G 1 Antwort Letzte Antwort
      0
      • G garagenbier78

        @gantenbein Bei mir funktionierts mit folgender Änderung in der Funktion wieder:

         httpGet(uri, { bearerAuth: tokenFromLogin, timeout : 5000, headers: {'content-type' : 'application/json' }}, (error, response) => {
                    if (!error) {
                        //log(response.statusCode);
                        // log(response.data);  // uncomment for debug purposes
                        //log(response.headers); // uncomment for debug purposes
                        output = response.data;
        
                        setState( dpJsonResponse, output);
                    } else {
                        log(error, 'error');
                    }
                });    
        

        Tibber scheint jetzt keine "leeren" Header mehr zu akzeptieren, daher die Änderung in der ersten Zeile.
        Hab gleich noch den Timeout erhöht, da die 2000ms bei mir auch immer mal wieder zu Fehlern im Log geführt haben.

        G Offline
        G Offline
        Gantenbein
        schrieb am zuletzt editiert von Gantenbein
        #11

        @garagenbier78
        Super, danke dir - mit der kleinen Änderung läuft es wieder! Der SoC (batterypercent) ist wieder aktuell.

        Allerdings hat sich die Bedeutung von "lastseen" geändert. Zuvor war es der Zeitpunkt der letzten Meldung Auto->Server, jetzt ist es einfach der Zeitpunkt der Datenabfrage - also eher ein "lastcall". Der in der Tibber-App angezeigte Zeitstempel ist aber korrekt, wird aber wohl vom Script nicht mehr richtig ausgelesen. Das ist insofern schade, weil man nun bei Kommunikationsstörungen nicht mehr weiß ob der SoC ein aktueller oder veralteter Wert ist.

        Habe bei mir übrigens das Timeout auf 8000ms erhöht, erst dann kommt sicher die Verbindung zustande. Bei kleineren Werten (weniger als 7tms) hat es immer 'mal wieder gehakt.

        S 1 Antwort Letzte Antwort
        0
        • G Gantenbein

          @garagenbier78
          Super, danke dir - mit der kleinen Änderung läuft es wieder! Der SoC (batterypercent) ist wieder aktuell.

          Allerdings hat sich die Bedeutung von "lastseen" geändert. Zuvor war es der Zeitpunkt der letzten Meldung Auto->Server, jetzt ist es einfach der Zeitpunkt der Datenabfrage - also eher ein "lastcall". Der in der Tibber-App angezeigte Zeitstempel ist aber korrekt, wird aber wohl vom Script nicht mehr richtig ausgelesen. Das ist insofern schade, weil man nun bei Kommunikationsstörungen nicht mehr weiß ob der SoC ein aktueller oder veralteter Wert ist.

          Habe bei mir übrigens das Timeout auf 8000ms erhöht, erst dann kommt sicher die Verbindung zustande. Bei kleineren Werten (weniger als 7tms) hat es immer 'mal wieder gehakt.

          S Offline
          S Offline
          Stephan74
          schrieb am zuletzt editiert von
          #12

          @gantenbein Hallo !
          Könnt ihr eventuell den ganzen Request hier einstellen, damit ich das in Blockly importieren kann.
          Ich bin nämlich was diese Programmierung ein "DAU".
          Kann nur Siemens S5 oder S7 programmieren.....

          G 1 Antwort Letzte Antwort
          0
          • S Stephan74

            @gantenbein Hallo !
            Könnt ihr eventuell den ganzen Request hier einstellen, damit ich das in Blockly importieren kann.
            Ich bin nämlich was diese Programmierung ein "DAU".
            Kann nur Siemens S5 oder S7 programmieren.....

            G Offline
            G Offline
            Gantenbein
            schrieb am zuletzt editiert von Gantenbein
            #13

            @stephan74

            Du musst nur die eine Zeile ändern wie von @garagenbier78 gepostet.
            Also den httpget um "timeout : 5000, headers: {'content-type' : 'application/json' }" ergänzen - das war's schon.

            S 1 Antwort Letzte Antwort
            0
            • G Gantenbein

              @stephan74

              Du musst nur die eine Zeile ändern wie von @garagenbier78 gepostet.
              Also den httpget um "timeout : 5000, headers: {'content-type' : 'application/json' }" ergänzen - das war's schon.

              S Offline
              S Offline
              Stephan74
              schrieb am zuletzt editiert von
              #14

              @gantenbein Super ! Vielen Dank !
              Kleine Änderung große Auswirkung.
              Dank eurer Lösung funktioniert das alles wieder einwandfrei.

              G 1 Antwort Letzte Antwort
              0
              • S Stephan74

                @gantenbein Super ! Vielen Dank !
                Kleine Änderung große Auswirkung.
                Dank eurer Lösung funktioniert das alles wieder einwandfrei.

                G Offline
                G Offline
                Gantenbein
                schrieb am zuletzt editiert von
                #15

                @stephan74
                ... mit Ausnahme von "lastSeen" - die Defintion hat Tibber selbst geändert ohne eine Ersatzgröße ein zu führen.

                1 Antwort Letzte Antwort
                0
                • S Offline
                  S Offline
                  Stephan74
                  schrieb am zuletzt editiert von
                  #16

                  Hallo zusammen !
                  Funktioniert bei Euch die Abfrage noch ?
                  Tibber hat wohl mal wieder die App aktualisiert und jetzt läuft bei mit mal wieder nichts mehr...

                  1 Antwort Letzte Antwort
                  0
                  • FernetMentaF Online
                    FernetMentaF Online
                    FernetMenta
                    Developer
                    schrieb am zuletzt editiert von
                    #17

                    Warum benutzt du nicht einfach das: https://github.com/andysmithfal/polestar.js

                    1 Antwort Letzte Antwort
                    0
                    • Mirko HufnagelM Offline
                      Mirko HufnagelM Offline
                      Mirko Hufnagel
                      schrieb am zuletzt editiert von
                      #18

                      Kann man - aber ich hab das gleiche Problem. Und ich kann auch erklären warum ich es z.B. ebenfalls über Tibber mache. Es ist halt unglaublich viel praktischer so, wenn man mehr als ein Auto hat und sonst halt mehrere Adapter nur für den Batterieladestand benötigt, und mehr will man ja sowieso nicht auslesen (zumindest ich nicht).

                      1 Antwort Letzte Antwort
                      0
                      • FernetMentaF Online
                        FernetMentaF Online
                        FernetMenta
                        Developer
                        schrieb am zuletzt editiert von
                        #19

                        polestar.js ist kein Adapter, es ist ein JS Modul, für das man noch nicht einmal 10 Zeilen Code benötigt. Es hat den großen Vorteil, dass es funktioniert :)

                        1 Antwort Letzte Antwort
                        0
                        • S Offline
                          S Offline
                          Stephan74
                          schrieb am zuletzt editiert von
                          #20

                          Danke für den Link.
                          Ich werde das mal heute Abend versuchen das in meinen Iobroker zu importieren und zum Laufen zu bringen.

                          1 Antwort Letzte Antwort
                          0
                          • S Offline
                            S Offline
                            Stephan74
                            schrieb am zuletzt editiert von
                            #21

                            Hallo zusammen,
                            Vielleicht bin ich einfach zu doof um das Script in ioBroker zu integrieren.
                            Habe jetzt mal das polestar.js script im ioBroker angelegt, aber wie gehts jetzt weiter ?
                            Wenn ich das Script starte kommen nur haufenweise Fehlermeldungen.

                            1 Antwort Letzte Antwort
                            0
                            • FernetMentaF Online
                              FernetMentaF Online
                              FernetMenta
                              Developer
                              schrieb am zuletzt editiert von
                              #22

                              Du hast das aber schon bei den zusätzlichen npm modulen eingetragen?

                              image.png

                              1 Antwort Letzte Antwort
                              0
                              • FernetMentaF Online
                                FernetMentaF Online
                                FernetMenta
                                Developer
                                schrieb am zuletzt editiert von
                                #23

                                Dann einfach ein Script wie dieses anlegen und laufen lassen:

                                const Polestar = require("@andysmithfal/polestar.js")
                                
                                const polestar = new Polestar("xxx", "xxx")
                                
                                async function getData(){
                                    await polestar.login()
                                    await polestar.setVehicle()
                                
                                    console.log(await polestar.getBattery())
                                    console.log(await polestar.getOdometer())
                                    console.log(await polestar.getHealthData())
                                }
                                
                                getData();
                                
                                1 Antwort Letzte Antwort
                                0
                                • S Offline
                                  S Offline
                                  Stephan74
                                  schrieb am zuletzt editiert von
                                  #24

                                  Hi;
                                  Nein das habe ich nicht so gemacht. Werde das aber weiter probieren.
                                  Danke !
                                  Ich werde ich aber morgen sicher wieder melden weil ich dann noch zusätzliche Hilfe brauche.

                                  1 Antwort Letzte Antwort
                                  0
                                  • S Offline
                                    S Offline
                                    Stephan74
                                    schrieb am zuletzt editiert von
                                    #25

                                    Hallo zusammen;
                                    ich habe jetzt alles integriert und lese die Werte alle 5 Minuten aus.
                                    Das hat jetzt soweit funktioniert. Aber wie kriege ich die Variablen aus der Java-Console in ioBroker-Variablen gespeichert ??

                                    1 Antwort Letzte Antwort
                                    0
                                    • FernetMentaF Online
                                      FernetMentaF Online
                                      FernetMenta
                                      Developer
                                      schrieb am zuletzt editiert von FernetMenta
                                      #26
                                      const Polestar = require("@andysmithfal/polestar.js")
                                      
                                      const polestar = new Polestar("xxx", "xxx");
                                      
                                      async function getData(){
                                          await polestar.login();
                                          await polestar.setVehicle();
                                      
                                      
                                          let battery = await polestar.getBattery();
                                          await setStateAsync("0_userdata.0.test", battery.batteryChargeLevelPercentage, true);
                                      }
                                      
                                      getData();
                                      
                                      1 Antwort Letzte Antwort
                                      0
                                      • S Offline
                                        S Offline
                                        Stephan74
                                        schrieb am zuletzt editiert von
                                        #27

                                        Oha !
                                        Das ging aber flott.
                                        Mache mich mal gleich dran. Vielleicht kapiere ich irgendwann wie Javascript funktioniert....

                                        T 1 Antwort Letzte Antwort
                                        0
                                        • S Offline
                                          S Offline
                                          Stephan74
                                          schrieb am zuletzt editiert von
                                          #28

                                          Super!
                                          Vielen Dank das funktioniert mit meinen selbst erstellten Variablen wunderbar.
                                          Wieder einen DAU glücklich gemacht !!
                                          So wie es aussieht habe ich mal wieder grundlegendes zu JS gelernt.
                                          Probiere gleich mal aus ob ich es schaffe noch ein paar andere Werte die mit dem Script ausgelesen werden in meine ioBroker-Variablen zu überführen.

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


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          430

                                          Online

                                          32.6k

                                          Benutzer

                                          82.3k

                                          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