Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Adapter: bmw zum Auslesen von BMW's ConnectedDrive Daten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Adapter: bmw zum Auslesen von BMW's ConnectedDrive Daten

    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Stefan Hanke @Strobelix last edited by

      @strobelix

      ...funktioniert einwandfrei, perfekt, VIELEN DANK !!!
      😊👍

      1 Reply Last reply Reply Quote 0
      • S
        Strobelix @fastfoot last edited by Strobelix

        @fastfoot
        Der nächste Schritt wäre natürlich das Blockly mit Variablen zu füllen, damit man die Daten seines BMW nur 1x eintragen muss. Aber ich wollte euch das so schnell es geht zur Verfügung stellen.

        Danach könnte man (nach einer Funktionsauslösung) natürlich den Remotestatus abfragen, ob der Befehl auch verarbeitet wurde.
        Aber das im nächsten Schritt

        Aber mir was es jetzt wichtig die fehlenden Funktionen einzubauen, denn die Standheizung bei meinem Hybrid ist natürlich erst perfekt, wenn ich sie per ioBroker mitnutzen kann

        1 Reply Last reply Reply Quote 1
        • F
          fastfoot @bahnuhr last edited by

          @bahnuhr Danke Dir, ich war seit der Ersteinrichtung vor Jahren nicht mehr im Portal, da hätte ich nicht gesucht

          1 Reply Last reply Reply Quote 0
          • bahnuhr
            bahnuhr Forum Testing Most Active last edited by bahnuhr

            So, ich habe das Blockly mal umgeschrieben in JS.
            (mit JS komm ich einfach besser zurecht).

            Vorteil:
            Am Anfang habe ich die Variablen definiert (also nur 1 x Eingabe)
            Doppelte Zeilen habe ich in eine Funktion gepackt. Weiterhin mehrere Befehle in 1 Zeile (macht das ganze kürzer)
            Bei mir laufen die Var. alle unter javascript (kann man aber ändern).
            Zusätzlich habe ich log, sayit und telegram eingefügt.

            Zuerst die Var. anlegen mit:

            // BMW -------------------------------------------------------------------------------------------------------------
            createState('javascript.0.Geräte.BMW.Auto_auf', {type: 'boolean',name: 'Auto auf',read: true,write: true,role: 'button', desc: 'manuell', def: false});
            createState('javascript.0.Geräte.BMW.Auto_zu', {type: 'boolean',name: 'Auto zu',read: true,write: true,role: 'button', desc: 'manuell', def: false});
            createState('javascript.0.Geräte.BMW.Hupe', {type: 'boolean',name: 'Starte Hupe',read: true,write: true,role: 'button', desc: 'manuell', def: false});
            createState('javascript.0.Geräte.BMW.Lichthupe', {type: 'boolean',name: 'Starte Lichthupe',read: true,write: true,role: 'button', desc: 'manuell', def: false});
            createState('javascript.0.Geräte.BMW.Klima', {type: 'boolean',name: 'Starte Klima',read: true,write: true,role: 'button', desc: 'manuell', def: false});
            createState('javascript.0.Geräte.BMW.Token', '',{type: 'string',name: 'BMW Token',read: true,write: true,role: 'per Script'});
            createState('javascript.0.Geräte.BMW.neuer_Token', {type: 'boolean',name: 'BMW neuer Token',read: true,write: true,role: 'button', desc: 'manuell', def: false});
            

            Und dann das eigentliche Script:

            
            // BMW Remote Steuerung
            // Im Forum hat "strobelix" ein Blockly Script eingestellt:
            // https://forum.iobroker.net/topic/7457/adapter-bmw-zum-auslesen-von-bmw-s-connecteddrive-daten/184
            // Dieses habe ich umgeschrieben auf Javascript
            //
            // @bahnuhr, 01_2021
            
            
            // Variablen
               var user = "abc"       // Connected Drive: Username
               var pass = "xacxa"                 // Connected Drive: Passwort
               var Antwort = "aaa"                   // Connected Drive: Sicherheitsantwort
               var VIN = "WBA5D1xxxxxxx"           // VIN vom BMW
               var Obj_Token = "javascript.0.Geräte.BMW.Token"
               var https = require("https"), request = require("request"), T_log = "", T_say = "", T_tele = ""
            
            
            
            // ******************************************************************************************************************************************
            // Taster gedrückt
            // ******************************************************************************************************************************************
                   on({id: "javascript.0.Geräte.BMW.Lichthupe", change: "ne", val: true}, function() { remote_Lichthupe(); T_log = "Auslöser Taster BMW: Starte Lichthupe"; T_say = "ok, beim BMW wird die Lichthupe angeschaltet!"; T_tele = "Beim BMW wird die Lichthupe angeschaltet!"; Taster_weiter(T_log, T_say, T_tele); }); 
                   on({id: "javascript.0.Geräte.BMW.Hupe", change: "ne", val: true}, function() { remote_Hupe(); T_log = "Auslöser Taster BMW: Starte Hupe"; T_say = "ok, beim BMW wird die Hupe angeschaltet!"; T_tele = "Beim BMW wird die Hupe angeschaltet!"; Taster_weiter(T_log, T_say, T_tele); }); 
                   on({id: "javascript.0.Geräte.BMW.Auto_auf", change: "ne", val: true}, function() { remote_Auto_auf(); T_log = "Auslöser Taster BMW: Auto_auf"; T_say = "ok, BMW wird geöffnet!"; T_tele = "BMW wird geöffnet!"; Taster_weiter(T_log, T_say, T_tele); }); 
                   on({id: "javascript.0.Geräte.BMW.Auto_auf", change: "ne", val: true}, function() { remote_Auto_zu(); T_log = "Auslöser Taster BMW: Auto_zu"; T_say = "ok, BMW wird verschlossen!"; T_tele = "BMW wird verschlossen!"; Taster_weiter(T_log, T_say, T_tele); }); 
                   on({id: "javascript.0.Geräte.BMW.Klima", change: "ne", val: true}, function() { remote_Klima(); log("Auslöser Taster BMW: Starte Klima"); Surface_Lautstaerke(50);
                   setState('sayit.3.tts.text', 'opt/iobroker/iobroker-data/files/vis.0/mp3/tos-computer-03.mp3'); setTimeout(function() { setState('sayit.4.tts.text', "ok, beim BMW wird die Klima eingeschaltet!") }, 2000);
                   var Temp = getState("hm-rpc.0.LEQ1221393.1.TEMPERATURE").val;  // Temp vom Kombisensor
                   sendTo('telegram', {user: 'Dieter',text: "BMW: Temperatur= " + Temp.toFixed(1) + " °C, \nKlima wurde <b>eingeschaltet !</b>", parse_mode: 'HTML'}); 
               }); 
               function Taster_weiter(T_log, T_say, T_tele) { 
                   log(T_log); Surface_Lautstaerke(50); setState('sayit.3.tts.text', 'opt/iobroker/iobroker-data/files/vis.0/mp3/tos-computer-03.mp3');
                   setTimeout(function() { setState('sayit.4.tts.text', T_say) }, 2000); sendTo('telegram', {user: 'Dieter',text: T_tele, parse_mode: 'HTML'}); 
               }
            
            
            // ******************************************************************************************************************************************
            // Remote
            // ******************************************************************************************************************************************
            // Remote Befehle
               function remote_Lichthupe() { var details = { 'serviceType': 'LIGHT_FLASH' }; remote_ausfuehren(details); }                             // Remote: Lichthupe
               function remote_Hupe() { var details = { 'serviceType': 'HORN_BLOW' }; remote_ausfuehren(details); }                                    // Remote: Hupe
               function remote_Auto_auf() { var details = { 'serviceType': 'DOOR_UNLOCK', 'bmwSkAnswer': Antwort }; remote_ausfuehren(details); }      // Remote: Auto_auf
               function remote_Auto_zu() { var details = { 'serviceType': 'DOOR_LOCK' }; remote_ausfuehren(details); }                                 // Remote: Auto_zu
               function remote_Klima() { var details = { 'serviceType': 'CLIMATE_NOW' }; remote_ausfuehren(details); }                                 // Remote: Klimatisieren
            // Remote ausführen
               function remote_ausfuehren(details) {
                   var formBody = [];
                   for (var property in details) { var encodedKey = encodeURIComponent(property); var encodedValue = encodeURIComponent(details[property]); formBody.push(encodedKey + "=" + encodedValue); }
                   formBody = formBody.join("&");
                   var options = { url: 'https://b2vapi.bmwgroup.com/webapi/v1/user/vehicles/' + VIN + '/executeService', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, auth: { bearer: (getState(Obj_Token).val)}, body: formBody };
                   function callback(error, response, body) { var result = JSON.parse(body); log(result) }
                   request.post(options, callback);
               }
            
            // ******************************************************************************************************************************************
            // Token
            // ******************************************************************************************************************************************
            // neuer Token holen
               function hole_Token() {
                   var details = { 'username': user, 'password': pass, 'grant_type': 'password', 'scope':'authenticate_user vehicle_data remote_services' };
                   var formBody = [];
                   for (var property in details) { var encodedKey = encodeURIComponent(property); var encodedValue = encodeURIComponent(details[property]); formBody.push(encodedKey + "=" + encodedValue); }
                   formBody = formBody.join("&");
                   var options = { url: 'https://b2vapi.bmwgroup.com/gcdm/oauth/token', headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': 'Basic ZDc2NmI1MzctYTY1NC00Y2JkLWEzZGMtMGNhNTY3MmQ3ZjhkOjE1ZjY5N2Y2LWE1ZDUtNGNhZC05OWQ5LTNhMTViYzdmMzk3Mw==', 'Credentials': 'nQv6CqtxJuXWP74xf3CJwUEP:1zDHx6un4cDjybLENN3kyfumX2kEYigWPcQpdvDRpIBk7rOJ'}, body: formBody };
                   function callback(error, response, body) { var result = JSON.parse(body); setState(Obj_Token, ('' + result.access_token)); log("BMW - neuer Token geholt: " + result.access_token); }
                   request.post(options, callback);
               }
            schedule('4 */1 * * *', function () {    // jede Stunde neuer Token holen
               hole_Token();
            });
            
            

            Jeder der will, kann es gerne benutzen.
            mfg
            Dieter

            M S E 3 Replies Last reply Reply Quote 1
            • M
              mameier1234 @bahnuhr last edited by

              @bahnuhr

              Supergeil.. vom ersten BMW Adapter war ich auch immer ein bisschen enttäuscht, da man ja nix steuern konnte ... Aber so .. Hut ab !!!

              Läuft bei mir auf Anhieb,

              Beim Zusperren bleiben die Spiegel ausgefahren ?

              Und die BMW-Api ist ja echt superschnell 🙂

              bahnuhr 1 Reply Last reply Reply Quote 0
              • bahnuhr
                bahnuhr Forum Testing Most Active last edited by

                @Strobelix
                Ne Frage zu deinem blockly.

                Warum holst du den Token jede Stunde ?
                Wäre es nicht einfacher/sinnvoller diesen nur zu holen wenn man ihn braucht

                mfg
                Dieter

                1 Reply Last reply Reply Quote 0
                • bahnuhr
                  bahnuhr Forum Testing Most Active @mameier1234 last edited by

                  @mameier1234 sagte in Adapter: bmw zum Auslesen von BMW's ConnectedDrive Daten:

                  Beim Zusperren bleiben die Spiegel ausgefahren ?

                  Bei mir werden die Spiegel eingefahren wenn ich länger auf zu klicke und halte.

                  Scheint per api nicht zu funktionieren.

                  M 1 Reply Last reply Reply Quote 0
                  • M
                    mameier1234 @bahnuhr last edited by

                    @bahnuhr

                    Aufsperren geht einwandfrei (ich sehe das Auto...) Auto blinkt, Spiegel fahren auf....

                    Aber in der BMW App bleibt der Status auf "Verriegelt" ....

                    Wenn ich dann in der BMW App verriegele, sehe ich aber , dass diesmal der Blinker nicht blinkt , Status in der App ist immer noch Verriegelt und im Verlauf steht: Verriegeln erfolgreich. Wenn ich dann mit dem Schlüssel ganz normal kurz auf Abschließen klicke, blinkt er, die Spiegel fahren ein...

                    S 1 Reply Last reply Reply Quote 0
                    • S
                      Strobelix @mameier1234 last edited by

                      @mameier1234

                      Also die Spiegel klappen bei mir per App oder Api grundsätzlich nicht ein. Keine Ahnung warum.

                      @bahnuhr
                      Der Token ist 3600sekunden gültig, daher hole ich ihn stündlich ab.
                      Natürlich reicht das auch „bei Bedarf“, ich weiss aber nicht was die Api macht, wenn man mehrere Befehle in kurzer Zeit abgibt und dazu jedesmal einen neuen Token holt

                      1 Reply Last reply Reply Quote 0
                      • S
                        Strobelix @bahnuhr last edited by

                        @bahnuhr
                        Ok das ist natürlich wesentlich filigraner 👍🏻

                        S 1 Reply Last reply Reply Quote 0
                        • S
                          Strobelix @Strobelix last edited by

                          Für alle die sich in Blockly "mehr zu Hause" fühlen als in reinem JS, habe ich das hier noch mal verschönert.
                          Alles in einem Blocklyscript, die Zugangsdaten können jetzt direkt im Blockly eingegeben werden und das ist auch nur noch einmalig notwendig.
                          Alle Befehlsfunktionen habe ich zusammengefasst. So ist es aufgeräumter und übersichtlicher.

                          Hier das "neue" Blockly:

                          <xml xmlns="https://developers.google.com/blockly/xml">
                            <variables>
                              <variable id="XN3*GfIfi@/dz;VqG=f1">Benutzername</variable>
                              <variable id="X_?!znf}q.nyV^o^2X|{">Befehl</variable>
                              <variable id="g!GS3XBhRJ-^i*r~I#(M">Passwort</variable>
                              <variable id="vHSyM|o)Q*AP{F}^8j?A">VIN</variable>
                              <variable id="`M`m=udEPjZ8%NR9[7#t">Sicherheitsantwort</variable>
                            </variables>
                            <block type="variables_set" id="25.7NsDbuJp,f,+kg9f}" x="-12" y="-412">
                              <field name="VAR" id="XN3*GfIfi@/dz;VqG=f1">Benutzername</field>
                              <value name="VALUE">
                                <block type="text" id="|ogs8P81w~dvfv9YO/LK">
                                  <field name="TEXT">Mailadresse</field>
                                </block>
                              </value>
                              <next>
                                <block type="variables_set" id="A7ExvCH7vJ[i97`qN$cV">
                                  <field name="VAR" id="g!GS3XBhRJ-^i*r~I#(M">Passwort</field>
                                  <value name="VALUE">
                                    <block type="text" id="Xt:`irNXz.ndzQ0dO1uf">
                                      <field name="TEXT">Passwort</field>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="variables_set" id="PU9tEGVF_V-G-8Lkef[m">
                                      <field name="VAR" id="vHSyM|o)Q*AP{F}^8j?A">VIN</field>
                                      <value name="VALUE">
                                        <block type="text" id="Z=AR.p~z^o~8W%tTE%Dq">
                                          <field name="TEXT">WBAT.....</field>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="variables_set" id="@j5.B|TqXRajXjYa]f=f">
                                          <field name="VAR" id="`M`m=udEPjZ8%NR9[7#t">Sicherheitsantwort</field>
                                          <value name="VALUE">
                                            <block type="text" id="m#{+]bm?9QK;w(!7).2d">
                                              <field name="TEXT">Antwort aus dem Web Portal</field>
                                            </block>
                                          </value>
                                          <next>
                                            <block type="procedures_callnoreturn" id="nRnV$Y]d`-z^9MAw8Y.o">
                                              <mutation name="Datenpunkte erstellen"></mutation>
                                              <next>
                                                <block type="procedures_callcustomnoreturn" id="sCCxQw~6kxo3.d^m)Pp-">
                                                  <mutation name="Token abfragen"></mutation>
                                                  <next>
                                                    <block type="on" id="Lb,dTP]LKtW1;deq|Qoj">
                                                      <field name="OID">0_userdata.0.BMW.NeuerToken</field>
                                                      <field name="CONDITION">any</field>
                                                      <field name="ACK_CONDITION">false</field>
                                                      <statement name="STATEMENT">
                                                        <block type="controls_if" id="u9vRH6uvBpbtNi5Eb$re">
                                                          <value name="IF0">
                                                            <block type="on_source" id="[ZV_ZO^d$dk~r;SHUx@7">
                                                              <field name="ATTR">state.val</field>
                                                            </block>
                                                          </value>
                                                          <statement name="DO0">
                                                            <block type="procedures_callcustomnoreturn" id="iMM#y=#E0[lqAuF{O#,A">
                                                              <mutation name="Token abfragen"></mutation>
                                                            </block>
                                                          </statement>
                                                        </block>
                                                      </statement>
                                                      <next>
                                                        <block type="schedule" id="6.1-pU|?K[LZXvgI}cvN">
                                                          <field name="SCHEDULE">*/60 * * * *</field>
                                                          <statement name="STATEMENT">
                                                            <block type="procedures_callcustomnoreturn" id="S_QWZ%P:XPQ1H8HWO%9)">
                                                              <mutation name="Token abfragen"></mutation>
                                                            </block>
                                                          </statement>
                                                        </block>
                                                      </next>
                                                    </block>
                                                  </next>
                                                </block>
                                              </next>
                                            </block>
                                          </next>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                            <block type="procedures_defcustomnoreturn" id="C|Hc:`b-c/c[Tgs1y:IM" x="513" y="-413">
                              <mutation statements="false">
                                <arg name="Befehl" varid="X_?!znf}q.nyV^o^2X|{"></arg>
                              </mutation>
                              <field name="NAME">Befehl</field>
                              <field name="SCRIPT">dmFyIGh0dHBzID0gcmVxdWlyZSgiaHR0cHMiKTsKdmFyIHJlcXVlc3QgPSByZXF1aXJlKCJyZXF1ZXN0Iik7CnZhciBkZXRhaWxzID0gewogICAgJ3NlcnZpY2VUeXBlJzogQmVmZWhsLAogICAgJ2Jtd1NrQW5zd2VyJzogU2ljaGVyaGVpdHNhbnR3b3J0Cn07CiAKdmFyIGZvcm1Cb2R5ID0gW107CmZvciAodmFyIHByb3BlcnR5IGluIGRldGFpbHMpIHsKICB2YXIgZW5jb2RlZEtleSA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wZXJ0eSk7CiAgdmFyIGVuY29kZWRWYWx1ZSA9IGVuY29kZVVSSUNvbXBvbmVudChkZXRhaWxzW3Byb3BlcnR5XSk7CiAgZm9ybUJvZHkucHVzaChlbmNvZGVkS2V5ICsgIj0iICsgZW5jb2RlZFZhbHVlKTsKfQpmb3JtQm9keSA9IGZvcm1Cb2R5LmpvaW4oIiYiKTsKCgogdmFyIG9wdGlvbnMgPSB7CiAgdXJsOiAnaHR0cHM6Ly9iMnZhcGkuYm13Z3JvdXAuY29tL3dlYmFwaS92MS91c2VyL3ZlaGljbGVzLycrVklOKycvZXhlY3V0ZVNlcnZpY2UnLAogIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCd9LAogIGF1dGg6IHsKICAgIGJlYXJlcjogKGdldFN0YXRlKCIwX3VzZXJkYXRhLjAuQk1XLlRva2VuIikudmFsKX0sCiAgYm9keTogZm9ybUJvZHkKfTsKCmZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCByZXNwb25zZSwgYm9keSkgewp2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShib2R5KTsKY29uc29sZS5sb2cocmVzdWx0KQp9CgoKcmVxdWVzdC5wb3N0KG9wdGlvbnMsIGNhbGxiYWNrKTs=</field>
                              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                            </block>
                            <block type="procedures_defcustomnoreturn" id="qLVD,Ua~|Xo7$C,E2/2R" x="512" y="-363">
                              <mutation statements="false"></mutation>
                              <field name="NAME">Token abfragen</field>
                              <field name="SCRIPT">dmFyIGh0dHBzID0gcmVxdWlyZSgiaHR0cHMiKTsKdmFyIHJlcXVlc3QgPSByZXF1aXJlKCJyZXF1ZXN0Iik7CnZhciBkZXRhaWxzID0gewogICAgJ3VzZXJuYW1lJzogQmVudXR6ZXJuYW1lLAogICAgJ3Bhc3N3b3JkJzogUGFzc3dvcnQsCiAgICAnZ3JhbnRfdHlwZSc6ICdwYXNzd29yZCcsCiAgICAnc2NvcGUnOidhdXRoZW50aWNhdGVfdXNlciB2ZWhpY2xlX2RhdGEgcmVtb3RlX3NlcnZpY2VzJwp9OwogCnZhciBmb3JtQm9keSA9IFtdOwpmb3IgKHZhciBwcm9wZXJ0eSBpbiBkZXRhaWxzKSB7CiAgdmFyIGVuY29kZWRLZXkgPSBlbmNvZGVVUklDb21wb25lbnQocHJvcGVydHkpOwogIHZhciBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQoZGV0YWlsc1twcm9wZXJ0eV0pOwogIGZvcm1Cb2R5LnB1c2goZW5jb2RlZEtleSArICI9IiArIGVuY29kZWRWYWx1ZSk7Cn0KZm9ybUJvZHkgPSBmb3JtQm9keS5qb2luKCImIik7CgoKIHZhciBvcHRpb25zID0gewogIHVybDogJ2h0dHBzOi8vYjJ2YXBpLmJtd2dyb3VwLmNvbS9nY2RtL29hdXRoL3Rva2VuJywKICBoZWFkZXJzOiB7J0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCAnQXV0aG9yaXphdGlvbic6ICdCYXNpYyBaRGMyTm1JMU16Y3RZVFkxTkMwMFkySmtMV0V6WkdNdE1HTmhOVFkzTW1RM1pqaGtPakUxWmpZNU4yWTJMV0UxWkRVdE5HTmhaQzA1T1dRNUxUTmhNVFZpWXpkbU16azNNdz09JywgJ0NyZWRlbnRpYWxzJzogJ25RdjZDcXR4SnVYV1A3NHhmM0NKd1VFUDoxekRIeDZ1bjRjRGp5YkxFTk4za3lmdW1YMmtFWWlnV1BjUXBkdkRScElCazdyT0onfSwKICBib2R5OiBmb3JtQm9keQp9OwogCmZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCByZXNwb25zZSwgYm9keSkgewp2YXIgcmVzdWx0ID0gSlNPTi5wYXJzZShib2R5KTsKc2V0U3RhdGUoIjBfdXNlcmRhdGEuMC5CTVcuVG9rZW4iLypUb2tlbiovLCAoJycgKyByZXN1bHQuYWNjZXNzX3Rva2VuKSk7CmNvbnNvbGUubG9nKHJlc3VsdCkKfQogIApyZXF1ZXN0LnBvc3Qob3B0aW9ucywgY2FsbGJhY2spOw==</field>
                              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                            </block>
                            <block type="on" id=")QODy$[H-(7lc9HPc%Xx" x="513" y="-312">
                              <field name="OID">0_userdata.0.BMW.Klimatisieren</field>
                              <field name="CONDITION">any</field>
                              <field name="ACK_CONDITION">false</field>
                              <statement name="STATEMENT">
                                <block type="controls_if" id="qi2OU5y9AjO|pE1=!(W`">
                                  <value name="IF0">
                                    <block type="on_source" id="]6?RDB6_qbNs}FH@FT/5">
                                      <field name="ATTR">state.val</field>
                                    </block>
                                  </value>
                                  <statement name="DO0">
                                    <block type="procedures_callcustomnoreturn" id="DC)Em1Ehbz1LW6fj[K!7">
                                      <mutation name="Befehl">
                                        <arg name="Befehl"></arg>
                                      </mutation>
                                      <value name="ARG0">
                                        <block type="text" id="wekLEjbNhi3sYYeR;bq1">
                                          <field name="TEXT">CLIMATE_NOW</field>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="update" id="?@kSoXR52NIAnmTbP@is">
                                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                                          <field name="OID">0_userdata.0.BMW.Klimatisieren</field>
                                          <field name="WITH_DELAY">TRUE</field>
                                          <field name="DELAY_MS">1000</field>
                                          <field name="UNIT">ms</field>
                                          <field name="CLEAR_RUNNING">FALSE</field>
                                          <value name="VALUE">
                                            <block type="logic_boolean" id="K/F}wA*$n:5CnQHpYr@$">
                                              <field name="BOOL">FALSE</field>
                                            </block>
                                          </value>
                                        </block>
                                      </next>
                                    </block>
                                  </statement>
                                </block>
                              </statement>
                              <next>
                                <block type="on" id="DO.4#e50zzBReVkXk5yb">
                                  <field name="OID">0_userdata.0.BMW.Zusperren</field>
                                  <field name="CONDITION">any</field>
                                  <field name="ACK_CONDITION">false</field>
                                  <statement name="STATEMENT">
                                    <block type="controls_if" id="OiM7;RsdIpMs*67U$W1}">
                                      <value name="IF0">
                                        <block type="on_source" id="DUggLU3jpKTMWDwchY@Q">
                                          <field name="ATTR">state.val</field>
                                        </block>
                                      </value>
                                      <statement name="DO0">
                                        <block type="procedures_callcustomnoreturn" id="6]WNw%0B$@C*pjCV+42;">
                                          <mutation name="Befehl">
                                            <arg name="Befehl"></arg>
                                          </mutation>
                                          <value name="ARG0">
                                            <block type="text" id="PU^ebj(ix}-k_Y?zFd8u">
                                              <field name="TEXT">DOOR_LOCK</field>
                                            </block>
                                          </value>
                                          <next>
                                            <block type="update" id="9rlPG|IAAhKHcZ|+99|z">
                                              <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                                              <field name="OID">0_userdata.0.BMW.Zusperren</field>
                                              <field name="WITH_DELAY">TRUE</field>
                                              <field name="DELAY_MS">1000</field>
                                              <field name="UNIT">ms</field>
                                              <field name="CLEAR_RUNNING">FALSE</field>
                                              <value name="VALUE">
                                                <block type="logic_boolean" id="0,a9ZN|M|PkAi}n*T19O">
                                                  <field name="BOOL">FALSE</field>
                                                </block>
                                              </value>
                                            </block>
                                          </next>
                                        </block>
                                      </statement>
                                    </block>
                                  </statement>
                                  <next>
                                    <block type="on" id="Mt2*}WFoiR5--row2T8H">
                                      <field name="OID">0_userdata.0.BMW.Aufsperren</field>
                                      <field name="CONDITION">any</field>
                                      <field name="ACK_CONDITION">false</field>
                                      <statement name="STATEMENT">
                                        <block type="controls_if" id="1tfzyj?EGI~c[$sfM,=H">
                                          <value name="IF0">
                                            <block type="on_source" id="L-qx[QjgE7YK^@QoxL?s">
                                              <field name="ATTR">state.val</field>
                                            </block>
                                          </value>
                                          <statement name="DO0">
                                            <block type="procedures_callcustomnoreturn" id="UA+^g5gs#H|-G2i{TbW0">
                                              <mutation name="Befehl">
                                                <arg name="Befehl"></arg>
                                              </mutation>
                                              <value name="ARG0">
                                                <block type="text" id="cyD@aSO~.u2Bx0K/ZDvH">
                                                  <field name="TEXT">DOOR_UNLOCK</field>
                                                </block>
                                              </value>
                                              <next>
                                                <block type="update" id="!W;+jZdtO4Z$.N{oZ!~u">
                                                  <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                                                  <field name="OID">0_userdata.0.BMW.Aufsperren</field>
                                                  <field name="WITH_DELAY">TRUE</field>
                                                  <field name="DELAY_MS">1000</field>
                                                  <field name="UNIT">ms</field>
                                                  <field name="CLEAR_RUNNING">FALSE</field>
                                                  <value name="VALUE">
                                                    <block type="logic_boolean" id="i7H=1Q%)]bTWwtb,mZL^">
                                                      <field name="BOOL">FALSE</field>
                                                    </block>
                                                  </value>
                                                </block>
                                              </next>
                                            </block>
                                          </statement>
                                        </block>
                                      </statement>
                                      <next>
                                        <block type="on" id="x3sA~Bo,9#W8+0QQ4?Mk">
                                          <field name="OID">0_userdata.0.BMW.Lichthupe</field>
                                          <field name="CONDITION">any</field>
                                          <field name="ACK_CONDITION">false</field>
                                          <statement name="STATEMENT">
                                            <block type="controls_if" id="g^t/])A_OBmH:}D:7hx1">
                                              <value name="IF0">
                                                <block type="on_source" id="Qk9]ZT(6`yuT9IJ1mS#h">
                                                  <field name="ATTR">state.val</field>
                                                </block>
                                              </value>
                                              <statement name="DO0">
                                                <block type="procedures_callcustomnoreturn" id="?Ar*XxGO6vVdJr~9F;?)">
                                                  <mutation name="Befehl">
                                                    <arg name="Befehl"></arg>
                                                  </mutation>
                                                  <value name="ARG0">
                                                    <block type="text" id="8y9k?DHsHpiCgnF.S`o=">
                                                      <field name="TEXT">LIGHT_FLASH</field>
                                                    </block>
                                                  </value>
                                                  <next>
                                                    <block type="update" id="8viE(:=_WA,IPGi~+0MV">
                                                      <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                                                      <field name="OID">0_userdata.0.BMW.Lichthupe</field>
                                                      <field name="WITH_DELAY">TRUE</field>
                                                      <field name="DELAY_MS">1000</field>
                                                      <field name="UNIT">ms</field>
                                                      <field name="CLEAR_RUNNING">FALSE</field>
                                                      <value name="VALUE">
                                                        <block type="logic_boolean" id="3KW3b{O(!n=5:mg(M_Wv">
                                                          <field name="BOOL">FALSE</field>
                                                        </block>
                                                      </value>
                                                    </block>
                                                  </next>
                                                </block>
                                              </statement>
                                            </block>
                                          </statement>
                                          <next>
                                            <block type="on" id=".`HU#5P7{T)o:1xn*a/?">
                                              <field name="OID">0_userdata.0.BMW.Hupen</field>
                                              <field name="CONDITION">any</field>
                                              <field name="ACK_CONDITION">false</field>
                                              <statement name="STATEMENT">
                                                <block type="controls_if" id="Qrr/!E+TuG7Gq66FQA;5">
                                                  <value name="IF0">
                                                    <block type="on_source" id="mvXJMfS$OdG+L~5/z^rY">
                                                      <field name="ATTR">state.val</field>
                                                    </block>
                                                  </value>
                                                  <statement name="DO0">
                                                    <block type="procedures_callcustomnoreturn" id="%-uafX09p)!Y/xx5^fi2">
                                                      <mutation name="Befehl">
                                                        <arg name="Befehl"></arg>
                                                      </mutation>
                                                      <value name="ARG0">
                                                        <block type="text" id="}58KZNu_0dQ=K}dkAOS$">
                                                          <field name="TEXT">HORN_BLOW</field>
                                                        </block>
                                                      </value>
                                                      <next>
                                                        <block type="update" id="GWaADA}?}4ONL*[A[7Fi">
                                                          <mutation xmlns="http://www.w3.org/1999/xhtml" delay_input="true"></mutation>
                                                          <field name="OID">0_userdata.0.BMW.Hupen</field>
                                                          <field name="WITH_DELAY">TRUE</field>
                                                          <field name="DELAY_MS">1000</field>
                                                          <field name="UNIT">ms</field>
                                                          <field name="CLEAR_RUNNING">FALSE</field>
                                                          <value name="VALUE">
                                                            <block type="logic_boolean" id="f^.-6^1JVE#^ag9aE_/X">
                                                              <field name="BOOL">FALSE</field>
                                                            </block>
                                                          </value>
                                                        </block>
                                                      </next>
                                                    </block>
                                                  </statement>
                                                </block>
                                              </statement>
                                            </block>
                                          </next>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </next>
                            </block>
                            <block type="procedures_defnoreturn" id="|j~QSzdhMG38aQ;V1mPc" collapsed="true" x="13" y="63">
                              <field name="NAME">Datenpunkte erstellen</field>
                              <comment pinned="false" h="80" w="160">Beschreibe diese Funktion …</comment>
                              <statement name="STACK">
                                <block type="create" id="!Bqw.`_nnd;$sm~A@{Q3">
                                  <field name="NAME">0_userdata.0.BMW.NeuerToken</field>
                                  <value name="COMMON">
                                    <block type="text" id="!:1H2(OE_?WjY60~:*g0">
                                      <field name="TEXT">{"name": "NeuerToken","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
                                    </block>
                                  </value>
                                  <next>
                                    <block type="create" id="13]PXp{s02GRS^2rU@5p">
                                      <field name="NAME">0_userdata.0.BMW.Token</field>
                                      <value name="COMMON">
                                        <block type="text" id="{i=WwB;}YuxwEcmD6j)/">
                                          <field name="TEXT">{"name": "Token","role": "","type": "string","desc": "Manuell erzeugt","def": "","read": true,"write": true}</field>
                                        </block>
                                      </value>
                                      <next>
                                        <block type="create" id="+F7.+]A.3oWYgBO;o3l@">
                                          <field name="NAME">0_userdata.0.BMW.Klimatisieren</field>
                                          <value name="COMMON">
                                            <block type="text" id="/Ls,.mwrB1gtt4n,OtP?">
                                              <field name="TEXT">{"name": "Klimatisieren","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
                                            </block>
                                          </value>
                                          <next>
                                            <block type="create" id="9+lYiXoKcCC}@ra33swp">
                                              <field name="NAME">0_userdata.0.BMW.Hupen</field>
                                              <value name="COMMON">
                                                <block type="text" id="u:n1k-I|L=F=8?JMe!(l">
                                                  <field name="TEXT">{"name": "Hupen","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
                                                </block>
                                              </value>
                                              <next>
                                                <block type="create" id="5x9-eg*nuFpH[i2~aI4g">
                                                  <field name="NAME">0_userdata.0.BMW.Aufsperren</field>
                                                  <value name="COMMON">
                                                    <block type="text" id="vGXV2B#+A==u5HFC!tRT">
                                                      <field name="TEXT">{"name": "Aufsperren","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
                                                    </block>
                                                  </value>
                                                  <next>
                                                    <block type="create" id="qfuj7fsIN;X0S`.s~:/1">
                                                      <field name="NAME">0_userdata.0.BMW.Zusperren</field>
                                                      <value name="COMMON">
                                                        <block type="text" id="lG?k08n8yap6EBCwv;kF">
                                                          <field name="TEXT">{"name": "Zusperren","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
                                                        </block>
                                                      </value>
                                                      <next>
                                                        <block type="create" id="g27XDJ5cUzQMp;IDa?0V">
                                                          <field name="NAME">0_userdata.0.BMW.Lichthupe</field>
                                                          <value name="COMMON">
                                                            <block type="text" id="%#XQ;ro0{u(B56z26$C@">
                                                              <field name="TEXT">{"name": "Lichthupe","role": "button","type": "boolean","read": true,"write": true, "desc": "Manuell erzeugt","def": false}</field>
                                                            </block>
                                                          </value>
                                                        </block>
                                                      </next>
                                                    </block>
                                                  </next>
                                                </block>
                                              </next>
                                            </block>
                                          </next>
                                        </block>
                                      </next>
                                    </block>
                                  </next>
                                </block>
                              </statement>
                            </block>
                          </xml>
                          
                          M S 2 Replies Last reply Reply Quote 1
                          • M
                            mameier1234 @Strobelix last edited by

                            @strobelix Einfach Klasse !

                            Wenn wir jetzt noch die Statusabfragen hätten, dann wäre es end-Perfekt !!

                            bahnuhr S 2 Replies Last reply Reply Quote 0
                            • bahnuhr
                              bahnuhr Forum Testing Most Active @mameier1234 last edited by

                              @mameier1234 sagte in Adapter: bmw zum Auslesen von BMW's ConnectedDrive Daten:

                              @strobelix Einfach Klasse !

                              Wenn wir jetzt noch die Statusabfragen hätten, dann wäre es end-Perfekt !!

                              Ja, der Befehl wäre wohl so was:
                              3cbfac13-47af-4b17-9ce6-fd43858dda6d-image.png

                              Habs aber bisher noch nicht hinbekommen.

                              Vielleicht hat @Strobelix eine Idee

                              S 1 Reply Last reply Reply Quote 0
                              • S
                                Stefan Hanke @Strobelix last edited by

                                @strobelix

                                ...Für alle die sich in Blockly "mehr zu Hause" fühlen als in reinem JS, habe ich das hier noch mal verschönert....

                                ...sensationell, herzlichen Dank !!!

                                👍👍👍

                                1 Reply Last reply Reply Quote 0
                                • S
                                  Strobelix @bahnuhr last edited by

                                  @bahnuhr

                                  Am Status bin ich dran, allerdings liefert der BMW Server da eine Fehlermeldung a la „server overload“ oder so ähnlich.

                                  Ich probiere es weiter und geb Rückmeldung

                                  bahnuhr 1 Reply Last reply Reply Quote 0
                                  • S
                                    Strobelix @mameier1234 last edited by

                                    @mameier1234
                                    Meinst du den Status der Remotebefehle oder die gesamten Statusmeldungen/Zustände des Fahrzeugs?

                                    M 1 Reply Last reply Reply Quote 0
                                    • bahnuhr
                                      bahnuhr Forum Testing Most Active @Strobelix last edited by

                                      @strobelix sagte in Adapter: bmw zum Auslesen von BMW's ConnectedDrive Daten:

                                      BMW Server da eine Fehlermeldung

                                      Bei mir nicht.

                                          var VIN = "WBA5xxxxxxx"           // VIN vom BMW
                                          var Obj_Token = "javascript.0.Geräte.BMW.Token"
                                      
                                      
                                                  var send = { url: 'https://b2vapi.bmwgroup.com/webapi/v1/user/vehicles/' + VIN + '/serviceExecutionStatus?serviceType=LIGHT_FLASH', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, auth: { bearer: (getState(Obj_Token).val)} };
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 3000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 6000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 9000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 12000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 15000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 18000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 21000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 24000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 27000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 30000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 33000); 
                                                  setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 36000); 
                                      
                                      

                                      ich bekomme zurück:

                                      javascript.0	2021-01-31 19:37:53.275	info	(1062) script.js.Scripte.test4: callback= {"executionStatus":{"serviceType":"LIGHT_FLASH","status":"EXECUTED","eventId":"4732393336303527A9992900@bmw.de","extendedStatus":{"result":"STATUS_CHANGED","i
                                      javascript.0	2021-01-31 19:37:50.275	info	(1062) script.js.Scripte.test4: callback= {"executionStatus":{"serviceType":"LIGHT_FLASH","status":"EXECUTED","eventId":"4732393336303527A9992900@bmw.de","extendedStatus":{"result":"STATUS_CHANGED","i
                                      javascript.0	2021-01-31 19:37:47.301	info	(1062) script.js.Scripte.test4: callback= {"executionStatus":{"serviceType":"LIGHT_FLASH","status":"EXECUTED","eventId":"4732393336303527A9992900@bmw.de","extendedStatus":{"result":"STATUS_CHANGED","
                                      
                                      S 1 Reply Last reply Reply Quote 0
                                      • S
                                        Strobelix @bahnuhr last edited by

                                        @bahnuhr said in Adapter: bmw zum Auslesen von BMW's ConnectedDrive Daten:

                                        var send = { url: 'https://b2vapi.bmwgroup.com/webapi/v1/user/vehicles/' + VIN + '/serviceExecutionStatus?serviceType=LIGHT_FLASH', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, auth: { bearer: (getState(Obj_Token).val)} }; setTimeout(function(){ request(send, function (error, response, body) { log ("callback= " + body); })}, 3000);

                                        Ich bekomme da leider ein

                                        {'error':{'code':500,'description':'(SmartPhoneUtil-I-300) Unexpected error - server panic. Values to be returned cannot be converted to interface type.'}}
                                        
                                        bahnuhr 1 Reply Last reply Reply Quote 0
                                        • bahnuhr
                                          bahnuhr Forum Testing Most Active @Strobelix last edited by

                                          @strobelix sagte in Adapter: bmw zum Auslesen von BMW's ConnectedDrive Daten:

                                          code':500,'description':

                                          bekomme ich auch wenn schon etwas läuft.
                                          Beobachte in der BMW Handy App bei Verlauf ob es läuft oder eben nicht.

                                          1 Reply Last reply Reply Quote 0
                                          • M
                                            mameier1234 @Strobelix last edited by

                                            @strobelix Ich meinte eigentlich den Status der Zustände .. .Aber den Status der Remotebefehle , wäre natürlich auch schön...

                                            S 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate
                                            FAQ Cloud / IOT
                                            HowTo: Node.js-Update
                                            HowTo: Backup/Restore
                                            Downloads
                                            BLOG

                                            837
                                            Online

                                            31.7k
                                            Users

                                            79.9k
                                            Topics

                                            1.3m
                                            Posts

                                            49
                                            305
                                            54148
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo