Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Stroell

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    • Profile
    • Following 0
    • Followers 0
    • Topics 1
    • Posts 1
    • Best 0
    • Groups 0

    Stroell

    @Stroell

    0
    Reputation
    5
    Profile views
    1
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    Stroell Follow

    Latest posts made by Stroell

    • Bastellösung: Polestar Ladezustand via Tibber App API

      Hallo zusammen,
      ich wollte einmal meine Bastellösung vorstellen, um den Ladezustand meines Polestars in ioBroker zu bekommen.
      Hintergrund: Polestar bietet leider keine öffentliche API um an Daten aus dem Auto zu kommen. Leider würde sich auch jeder Praktikant schämen so eine unzuverlässige App zum Steuern des Autos abzuliefern, aber das ist ein anderes Thema…

      Ich habe aber einen Workaround gefunden, um zumindest den Ladezustand in ioBroker zu bekommen. Es ist zwar ein bisschen ein gebastel, aber es funktioniert erstmal.

      Hier die Schnell-Anleitung dazu:
      Lege dir einen kostenlosen Tibber Account an (du musst keinen Vertrag dort abschließen)
      Anschließend verbindest du über Power-ups deinen Polestar
      Nun siehst du schon mal den Ladezustand deines Autos in der Tibber App – das funktioniert deutlich zuverlässiger als über die Polestar App. Lediglich ist die Anzeige um ca. 5-10 Minuten verzögert, aber das sollte in den meisten Fällen ausreichen.
      2ef29cf8-f99d-4738-ab65-0a082208f7f4-image.png

      Nun legst du dir drei Datenpunkte an einem Ort deiner Wahl in ioBroker an:
      c1341dfe-7119-4989-86f5-1b83db440dd1-image.png
      • BatteryPercent => Zustandstyp: Zahl
      • LastSeen => Zustandstyp: gemischt
      • TibberResponse => Zustandstyp: JSON
      Sollte dann so aussehen:
      3a8120f5-afef-42a2-b6d8-92cc89f37eb8-image.png

      Nun legen wir ein neues Blockly Script an und importieren den XML Code von weiter unten
      4e032e88-e015-4b56-a36c-d09329767399-image.png
      Darin müssen wir im Javascript drei Zeilen anpassen, dazu auf die drei … klicken:
      6421168d-cac8-4597-8c72-c0ee5237ea07-image.png
      Zuerst tragen wie die Mail Adresse und das Passwort von der Tibber App dort ein (Zeile 6 und 7)
      Dann in Zeile 36 den Pfad zum angelegten Zustand „TibberResponse“ ein
      5dbd0499-dc0a-49b5-9539-239295b88c08-image.png

      Nun müssen nur noch die beiden Zustände (rot) auf eure vorhin angelegten Zustände angepasst werden:
      40a37284-93eb-4265-a83e-c51e6dd5e22c-image.png

      Zum Blockly Script selbst:
      Es wird die Tibber App API alle 15 Minten angesprochen um den Batteriestatus als JSON in das Objekt „TibberResponse“ zu schreiben.
      1dce9292-18ed-4bc9-8d96-07dfb23594e5-image.png
      Sobald das Objekt „Tibber Response“ aktualisiert wurde, startet der zweite Teil des Scripts, welcher das JSON auswertet und in die beiden Objekte „LastSeen“ und „BatterPercent“ schreibt:
      22edd42d-4c3b-4d25-8763-708ca2abbacc-image.png
      Nach dem ersten Lauf sollten wir dann auch schon Daten bekommen:
      9c15ae3e-3aea-4b16-a5ea-28cfe2ebea68-image.png

      Offene / unschöne Punkte:

      • Es wird bei jedem Lauf ein neues Token abgefragt – ist vermutlich nur alle X Stunden/Tage nötig

      • Error handling

      • Einbau in Tibber Apdapter => Bitte gebt meinem Request einen 👍, damit die Lösung es vielleicht in den Adapter schafft: https://github.com/hombach/ioBroker.tibberlink/issues/67

      Viel Spaß damit!
      Stefan

      <xml xmlns="https://developers.google.com/blockly/xml">
        <variables>
          <variable id="0krM?`U3][;_IUo|n654">JSON</variable>
        </variables>
        <block type="procedures_defcustomnoreturn" id="cvWUA%d{MkpU:fE+hJMT" x="713" y="38">
          <mutation statements="false"></mutation>
          <field name="NAME">TibberRequest</field>
          <field name="SCRIPT">Ly9HZXQgVG9rZW4gZnJvbSBUaWJiZXIKdmFyIExvZ2luVXJpID0gImh0dHBzOi8vYXBwLnRpYmJlci5jb20vbG9naW4uY3JlZGVudGlhbHMiOwp2YXIgb3V0cHV0ID0gIjEiOwp2YXIgcGFyYW1zID0gewogICJAdHlwZSI6ICJsb2dpbiIsCiAgImVtYWlsIjogIm1haWxAYWRyZXNzLmRlIiwKICAncGFzc3dvcmQnOiAnMTIzNGwnfTsKCi8vVXNpbmcgdGhlIHJlcXVlc3QucG9zdCBmdW5jdGlvbiB0byBzZW5kIGEgUE9TVCByZXF1ZXN0IHdpdGggSlNPTiBkYXRhCnJlcXVlc3QucG9zdCh7CiAgdXJsOiBMb2dpblVyaSwKICBqc29uOiBwYXJhbXMKfSwgZnVuY3Rpb24oZXJyb3IsIHJlc3BvbnNlLCBib2R5KSB7CiAgaWYgKGVycm9yKSB7CiAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICB9IGVsc2UgewogICAgdmFyIFRva2VuRnJvbUxvZ2luID0gYm9keS50b2tlbjsKICAgIC8vY29uc29sZS5sb2coVG9rZW5Gcm9tTG9naW4pOwoKICAgIC8vUmVxdWVzdCBCYXR0ZXJ5IFN0YXR1cwogICAgdmFyIHVyaSA9ICJodHRwczovL2FwcC50aWJiZXIuY29tL3Y0L2dxbD9xdWVyeT17bWV7aG9tZXN7ZWxlY3RyaWNWZWhpY2xlc3tsYXN0U2VlbiUwQSUyMCBiYXR0ZXJ5e3BlcmNlbnR9fX19fSI7CiAgICB2YXIgVG9rZW4gPSBUb2tlbkZyb21Mb2dpbjsKICAgIC8vVXNpbmcgdGhlIHJlcXVlc3QucG9zdCBmdW5jdGlvbiB0byBzZW5kIGEgUE9TVCByZXF1ZXN0IHdpdGggYSBCZWFyZXIgdG9rZW4KICAgIHJlcXVlc3QucG9zdCh7CiAgICAgIHVybDogdXJpLAogICAgICBoZWFkZXJzOiB7CiAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBUb2tlbgogICAgICB9CiAgICB9LCBmdW5jdGlvbihlcnJvciwgcmVzcG9uc2UsIGJvZHkpIHsKICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgCiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy9jb25zb2xlLmxvZyhib2R5KTsKICAgICAgICBvdXRwdXQgPSBib2R5OwogICAgICAgIHNldFN0YXRlKCIwX3VzZXJkYXRhLjAuR2Vyw6R0ZS5Qb2xlc3RhcjIuVGliYmVyUmVzcG9uc2UiLCBvdXRwdXQpOwogICAgICAgIAogICAgICB9CiAgICB9KTsKICB9Cn0pOw==</field>
          <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
        </block>
        <block type="comment" id=")7kY!R5HQGVQ/a{?!rmh" x="163" y="188">
          <field name="COMMENT">JSON alle 15 Minuten abrufen</field>
          <next>
            <block type="schedule" id="T6p;,`]Ql@n#KA=PSC/3">
              <field name="SCHEDULE">*/15 * * * *</field>
              <statement name="STATEMENT">
                <block type="procedures_callcustomnoreturn" id="ULM)q!eE3|:s:V^%k4.v">
                  <mutation name="TibberRequest"></mutation>
                </block>
              </statement>
            </block>
          </next>
        </block>
        <block type="comment" id="GZfXqs{Bj2x`7ecO4lNo" x="738" y="188">
          <field name="COMMENT">JSON weiterverarbeitung. Musste ich wegen timing Problemen seperat machen</field>
          <next>
            <block type="on_ext" id="?R/S5@V=3lLi;c]r:Nlj">
              <mutation xmlns="http://www.w3.org/1999/xhtml" items="1"></mutation>
              <field name="CONDITION">any</field>
              <field name="ACK_CONDITION"></field>
              <value name="OID0">
                <shadow type="field_oid" id="C8d#Qkw`ATAJSFl#4/gX">
                  <field name="oid">0_userdata.0.Geräte.Polestar2.TibberResponse</field>
                </shadow>
              </value>
              <statement name="STATEMENT">
                <block type="variables_set" id="il0Ia7y*RBC#r}wO%J`-">
                  <field name="VAR" id="0krM?`U3][;_IUo|n654">JSON</field>
                  <value name="VALUE">
                    <block type="convert_json2object" id="vDZei)`E|E5GzbFdk?Bv">
                      <value name="VALUE">
                        <block type="get_value" id="FYKxjgZy~7$_4jCJSKDy">
                          <field name="ATTR">val</field>
                          <field name="OID">0_userdata.0.Geräte.Polestar2.TibberResponse</field>
                        </block>
                      </value>
                    </block>
                  </value>
                  <next>
                    <block type="update" id=":N/JbJW,DRKovKBpl`|g">
                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                      <field name="OID">0_userdata.0.Geräte.Polestar2.LastSeen</field>
                      <field name="WITH_DELAY">FALSE</field>
                      <value name="VALUE">
                        <block type="get_attr" id="8oR};vkIeuewGhXb`J*E">
                          <value name="PATH">
                            <shadow type="text" id="~LxVMM%-~hO,FZ*KWJ2c">
                              <field name="TEXT">data.me.homes.0.electricVehicles.0.lastSeen</field>
                            </shadow>
                          </value>
                          <value name="OBJECT">
                            <block type="variables_get" id="M!RRCj]YDJB0x}l%BA82">
                              <field name="VAR" id="0krM?`U3][;_IUo|n654">JSON</field>
                            </block>
                          </value>
                        </block>
                      </value>
                      <next>
                        <block type="update" id="vN1ku^d(C2Rd!T8;#_#-">
                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="false"></mutation>
                          <field name="OID">0_userdata.0.Geräte.Polestar2.BatteryPercent</field>
                          <field name="WITH_DELAY">FALSE</field>
                          <value name="VALUE">
                            <block type="get_attr" id="$z~-f}SPjmTB.O4V*yHQ">
                              <value name="PATH">
                                <shadow type="text" id="vzG-wgXepOC[lP22iWeb">
                                  <field name="TEXT">data.me.homes.0.electricVehicles.0.battery.percent</field>
                                </shadow>
                              </value>
                              <value name="OBJECT">
                                <block type="variables_get" id="f2he}UBE?/w;Uuw!/Kd/">
                                  <field name="VAR" id="0krM?`U3][;_IUo|n654">JSON</field>
                                </block>
                              </value>
                            </block>
                          </value>
                        </block>
                      </next>
                    </block>
                  </next>
                </block>
              </statement>
            </block>
          </next>
        </block>
      </xml>
      
      Stroell created this issue in hombach/ioBroker.tibberlink

      open Feature Request: Add battery level for connected Cars #67

      posted in Skripten / Logik
      Stroell
      Stroell
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
    The ioBroker Community 2014-2023
    logo