Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Tester
  4. Test Adapter BMW/Mini v4.x.x

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    680

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

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

Test Adapter BMW/Mini v4.x.x

Scheduled Pinned Locked Moved Tester
1.0k Posts 99 Posters 299.2k Views 86 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T tippy88

    Funktioniert bei euch aktuell die Telematic Daten?
    Bei mir seit heute Mittag:

    {"exveErrorId":"CU-500","exveErrorMsg":"Internal server error","exveErrorRef":"A74#UfzcDJoBcT%evNee","exveNote":"The server encountered an unexpected condition which prevented it from fulfilling the request."}
    
    J Offline
    J Offline
    jupzup
    wrote on last edited by
    #972

    @tippy88
    ist bei mir auch so seit heute Mittag.

    1 Reply Last reply
    0
    • T tippy88

      Funktioniert bei euch aktuell die Telematic Daten?
      Bei mir seit heute Mittag:

      {"exveErrorId":"CU-500","exveErrorMsg":"Internal server error","exveErrorRef":"A74#UfzcDJoBcT%evNee","exveNote":"The server encountered an unexpected condition which prevented it from fulfilling the request."}
      
      S Offline
      S Offline
      stenmic
      wrote on last edited by
      #973

      @tippy88 bei mir ist es auch so

      1 Reply Last reply
      0
      • T tippy88

        Funktioniert bei euch aktuell die Telematic Daten?
        Bei mir seit heute Mittag:

        {"exveErrorId":"CU-500","exveErrorMsg":"Internal server error","exveErrorRef":"A74#UfzcDJoBcT%evNee","exveNote":"The server encountered an unexpected condition which prevented it from fulfilling the request."}
        
        vowillV Offline
        vowillV Offline
        vowill
        wrote on last edited by
        #974

        @tippy88 Ich schließe mich an ...

        ioBroker im lxc auf NUC / Aktive Instanzen: 38

        J 1 Reply Last reply
        1
        • vowillV vowill

          @tippy88 Ich schließe mich an ...

          J Offline
          J Offline
          jrichl
          wrote on last edited by
          #975

          bei mir auch das selbe

          M 1 Reply Last reply
          0
          • J jrichl

            bei mir auch das selbe

            M Offline
            M Offline
            McLane
            wrote on last edited by
            #976

            @jrichl dito

            1 Reply Last reply
            0
            • T Offline
              T Offline
              tippy88
              wrote on last edited by
              #977

              Scheint nun wieder zu funktionieren 👍

              1 Reply Last reply
              2
              • C Offline
                C Offline
                createch2
                wrote on last edited by
                #978

                Ich hab den Adapter bei mir auch laufen, funktioniert gut soweit. Lediglich die Poll Begrenzung seitens BMW ist ziemlich unpraktisch wenn man wirklich die Daten zum gesteuerten Laden verwenden möchte.
                Wäre es denkbar verschiedene Intervall Voreinstellungen zur verfügung zu stellen die man je nach Bedingung aufrufen kann?
                Use case wäre zum Beispiel: Intervall sehr lang (1-2h) tagsüber, nur wenn Laden erkannt wird einen kurzen Intervall. Oder in einem bestimmten Zeitfenster.

                vowillV 1 Reply Last reply
                0
                • C createch2

                  Ich hab den Adapter bei mir auch laufen, funktioniert gut soweit. Lediglich die Poll Begrenzung seitens BMW ist ziemlich unpraktisch wenn man wirklich die Daten zum gesteuerten Laden verwenden möchte.
                  Wäre es denkbar verschiedene Intervall Voreinstellungen zur verfügung zu stellen die man je nach Bedingung aufrufen kann?
                  Use case wäre zum Beispiel: Intervall sehr lang (1-2h) tagsüber, nur wenn Laden erkannt wird einen kurzen Intervall. Oder in einem bestimmten Zeitfenster.

                  vowillV Offline
                  vowillV Offline
                  vowill
                  wrote on last edited by
                  #979

                  @createch2 Ich habe bei mir die 2h für den automatischen API-Abruf im Adapter eingestellt und nutze Skripte, um bei Bedarf sehr viel kürzere Intervalle zu realisieren. Ich denke das ist universeller, als diverse Konfigurationen im Adapter zu programmieren.

                  ioBroker im lxc auf NUC / Aktive Instanzen: 38

                  C 1 Reply Last reply
                  0
                  • vowillV vowill

                    @createch2 Ich habe bei mir die 2h für den automatischen API-Abruf im Adapter eingestellt und nutze Skripte, um bei Bedarf sehr viel kürzere Intervalle zu realisieren. Ich denke das ist universeller, als diverse Konfigurationen im Adapter zu programmieren.

                    C Offline
                    C Offline
                    createch2
                    wrote on last edited by
                    #980

                    @vowill sagte in Test Adapter BMW/Mini v4.x.x:

                    @createch2 Ich habe bei mir die 2h für den automatischen API-Abruf im Adapter eingestellt und nutze Skripte, um bei Bedarf sehr viel kürzere Intervalle zu realisieren. Ich denke das ist universeller, als diverse Konfigurationen im Adapter zu programmieren.

                    Gute Idee. Du triggerst dann einfach die remote funktionen im adapter?

                    vowillV 1 Reply Last reply
                    0
                    • C createch2

                      @vowill sagte in Test Adapter BMW/Mini v4.x.x:

                      @createch2 Ich habe bei mir die 2h für den automatischen API-Abruf im Adapter eingestellt und nutze Skripte, um bei Bedarf sehr viel kürzere Intervalle zu realisieren. Ich denke das ist universeller, als diverse Konfigurationen im Adapter zu programmieren.

                      Gute Idee. Du triggerst dann einfach die remote funktionen im adapter?

                      vowillV Offline
                      vowillV Offline
                      vowill
                      wrote on last edited by
                      #981

                      @createch2 Ja, das hatte ich z. B. beim Starten der Standheizung (über eine Alexa-Routine im ioBroker; anders kann man ja keine Befehle (mehr) absetzen) so programmiert und dann den Stand der Umsetzung abgefragt. Allerdings ist dies nicht erforderlich, der BMW bei Aktivitäten am bzw. im Auto selbst einen Stream sendet.

                      ioBroker im lxc auf NUC / Aktive Instanzen: 38

                      S 1 Reply Last reply
                      0
                      • vowillV vowill

                        @createch2 Ja, das hatte ich z. B. beim Starten der Standheizung (über eine Alexa-Routine im ioBroker; anders kann man ja keine Befehle (mehr) absetzen) so programmiert und dann den Stand der Umsetzung abgefragt. Allerdings ist dies nicht erforderlich, der BMW bei Aktivitäten am bzw. im Auto selbst einen Stream sendet.

                        S Offline
                        S Offline
                        silgri
                        wrote on last edited by silgri
                        #982

                        Ich habe jetzt schon 2x CarData eingerichtet, aber MQTT Daten schickt mein iX1 nicht.
                        Nur wenn ich den Remote-Schalter betätige oder über den Timerintervall des Adapter kommen alle Daten.
                        Wo liegt der Fehler?

                        1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          mblass
                          wrote on last edited by
                          #983

                          Ein ganz großes Danke für diesen Adapter. Das ist einfach großartig. Habe lange den "alten" BMW-Adapter genutzt und plötzlich lag ein Teil meiner VIS brach. Nun ist alles wieder aktuell. VIELEN DANK !
                          Und ich hab gleich ne Frage: habe gelesen, Stream-Daten kommen, wenn das Fahrzeug aktiv ist. Bei einem Fahrzeug sind mittlerweile die Location-Daten da, beim zweiten noch nicht. Genügt es, Zündung anzumachen oder muss die Kiste bewegt werden?

                          S 1 Reply Last reply
                          0
                          • M mblass

                            Ein ganz großes Danke für diesen Adapter. Das ist einfach großartig. Habe lange den "alten" BMW-Adapter genutzt und plötzlich lag ein Teil meiner VIS brach. Nun ist alles wieder aktuell. VIELEN DANK !
                            Und ich hab gleich ne Frage: habe gelesen, Stream-Daten kommen, wenn das Fahrzeug aktiv ist. Bei einem Fahrzeug sind mittlerweile die Location-Daten da, beim zweiten noch nicht. Genügt es, Zündung anzumachen oder muss die Kiste bewegt werden?

                            S Offline
                            S Offline
                            stenmic
                            wrote on last edited by
                            #984

                            @mblass
                            stream bzw. mqtt aktualisiert sich nur bei einer Änderung.
                            Somit müsste für die Location-Daten die Kiste bewegt werden.

                            S 1 Reply Last reply
                            1
                            • S stenmic

                              @mblass
                              stream bzw. mqtt aktualisiert sich nur bei einer Änderung.
                              Somit müsste für die Location-Daten die Kiste bewegt werden.

                              S Offline
                              S Offline
                              silgri
                              wrote on last edited by silgri
                              #985

                              Also von meinem iX1 EZ 7/25 kommen keine Daten per MQTT, obwohl im Log des Adapters steht 'BMW MQTT stream connected'
                              Fahre jeden Tag, da müßte ja was kommen.
                              Starte jetzt per Script alle 2 Stunden (nur von 6 - 22 Uhr) den API Abruf (remote.fetchViaAPI), dann bekomme ich Ladezustand, gef. km , Restreichweite usw.
                              Hätte aber gerne noch den Ladezustand beim Laden.
                              Im Moment mache ich das auch per Script, wenn an der Lade-Steckdose (11kW) Strom fließt, mache ich alle 10 Minuten ein API Abruf 😕

                              S D 2 Replies Last reply
                              0
                              • S silgri

                                Also von meinem iX1 EZ 7/25 kommen keine Daten per MQTT, obwohl im Log des Adapters steht 'BMW MQTT stream connected'
                                Fahre jeden Tag, da müßte ja was kommen.
                                Starte jetzt per Script alle 2 Stunden (nur von 6 - 22 Uhr) den API Abruf (remote.fetchViaAPI), dann bekomme ich Ladezustand, gef. km , Restreichweite usw.
                                Hätte aber gerne noch den Ladezustand beim Laden.
                                Im Moment mache ich das auch per Script, wenn an der Lade-Steckdose (11kW) Strom fließt, mache ich alle 10 Minuten ein API Abruf 😕

                                S Offline
                                S Offline
                                stenmic
                                wrote on last edited by stenmic
                                #986

                                @silgri die 244 Häkchen bei BMW hast du alle gesetzt?

                                S 1 Reply Last reply
                                0
                                • S silgri

                                  Also von meinem iX1 EZ 7/25 kommen keine Daten per MQTT, obwohl im Log des Adapters steht 'BMW MQTT stream connected'
                                  Fahre jeden Tag, da müßte ja was kommen.
                                  Starte jetzt per Script alle 2 Stunden (nur von 6 - 22 Uhr) den API Abruf (remote.fetchViaAPI), dann bekomme ich Ladezustand, gef. km , Restreichweite usw.
                                  Hätte aber gerne noch den Ladezustand beim Laden.
                                  Im Moment mache ich das auch per Script, wenn an der Lade-Steckdose (11kW) Strom fließt, mache ich alle 10 Minuten ein API Abruf 😕

                                  D Offline
                                  D Offline
                                  derdominik
                                  wrote on last edited by
                                  #987

                                  @silgri said in Test Adapter BMW/Mini v4.x.x:

                                  Hätte aber gerne noch den Ladezustand beim Laden.
                                  Im Moment mache ich das auch per Script, wenn an der Lade-Steckdose (11kW) Strom fließt, mache ich alle 10 Minuten ein API Abruf

                                  Soweit ich das bisher verstanden habe, wird beim AC-Laden, wenn das Auto ansonsten aus ist, seitens BMW kein Update per MQTT verschickt.

                                  Während der Fahrt -> SoC Update per MQTT.
                                  Beim AC Laden -> Kein MQTT Update, nur per API-Abfrage.

                                  S 1 Reply Last reply
                                  0
                                  • vowillV Offline
                                    vowillV Offline
                                    vowill
                                    wrote on last edited by
                                    #988

                                    Thema Spritverbrauch
                                    Ich nutze den Adapter für meinen Benziner. Allerdings habe ich im gesamten Stream keinen Datenpunkt gefunden, aus dem der Spritverbrauch hervorgeht - obwohl es in der Handy-App detaillierte Daten dazu gibt.
                                    Geht das hier im Forum allen Interessierten so, oder hat Jemand einen geeigneten Datenpunkt für diese Information gefunden?
                                    Danke für eine Rückmeldung!

                                    Als Abhilfe habe ich ein Skript geschrieben, das aus der kontinuierlich im Stream gemeldeten Tankstand-Reduzierung und dem km-Stand über einige Datenpunkte den Verbrauch berechnet. Das stelle ich gerne zur Verfügung, wenn Interesse besteht.

                                    ioBroker im lxc auf NUC / Aktive Instanzen: 38

                                    S 1 Reply Last reply
                                    0
                                    • vowillV vowill

                                      Thema Spritverbrauch
                                      Ich nutze den Adapter für meinen Benziner. Allerdings habe ich im gesamten Stream keinen Datenpunkt gefunden, aus dem der Spritverbrauch hervorgeht - obwohl es in der Handy-App detaillierte Daten dazu gibt.
                                      Geht das hier im Forum allen Interessierten so, oder hat Jemand einen geeigneten Datenpunkt für diese Information gefunden?
                                      Danke für eine Rückmeldung!

                                      Als Abhilfe habe ich ein Skript geschrieben, das aus der kontinuierlich im Stream gemeldeten Tankstand-Reduzierung und dem km-Stand über einige Datenpunkte den Verbrauch berechnet. Das stelle ich gerne zur Verfügung, wenn Interesse besteht.

                                      S Offline
                                      S Offline
                                      stenmic
                                      wrote on last edited by
                                      #989

                                      @vowill der Spritverbrauch wird leider nicht angezeigt, war im alten Adapter leider auch schon so.
                                      Zeig mal bitte dein Skript.

                                      vowillV 1 Reply Last reply
                                      0
                                      • S stenmic

                                        @vowill der Spritverbrauch wird leider nicht angezeigt, war im alten Adapter leider auch schon so.
                                        Zeig mal bitte dein Skript.

                                        vowillV Offline
                                        vowillV Offline
                                        vowill
                                        wrote on last edited by
                                        #990

                                        @stenmic Im alten Adapter fand sich der Verbrauch unter bmw.0.WBAxxx.trips.monthly.totalCombustionConsumption.averageConsumption.

                                        Anbei mein Skript zur Verbrauchsermittlung.
                                        Ablauf: Das Skript schreibt die Wertepaare für km und Liter immer dann in den Datenpunkt 0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel, wenn sich der Tankfüllstand reduziert. Nach 9 Wertepaaren wird die Differenz zwischen neuem Wertepaar und ältestem Wertepaar berechnet und daraus der Verbrauch; das älteste Wertepaar wird dann gelöscht. Wenn getankt wird (und sich deshalb der Tankfüllstand um mehr als 10 Liter erhöht) werden alle Wertepaare gelöscht; die nächste Rechnung findet dann erst wieder statt, wenn es wieder 9 Wertepaare gibt. (Grund ist, dass der BMW-Adapter nur ganze Liter liefert und es daher beim Tanken in der Rechnung eine Ungenauigkeit von bis zu 2 Litern geben könnte (z. B. aktueller Stand 10,0 oder 10,9 Liter und nach dem Tanken z. B. 55,0 oder 55,9 Liter --> ergäbe stets eine Differenz von 45 Litern, obwohl es 44,1 oder 45,9 Liter sein könnten)).
                                        Das Ergebnis der Verbrauchsrechnung wird im Datenpunkt 0_userdata.0.Fahrzeuge.BMW_Verbrauch_je_100km abgelegt.

                                        Hier das JS (Blockly gerne auf Anfrage im Chat über private Mailadresse):

                                        var alter_String, Anzahl_Werte, neuer_String, letzter_Listenwert, Liter_Differenz, km_Differenz, Verbrauch;
                                        
                                        // Verfolgung des Tankinhalts
                                        // Auswertung DP bmw.0.WBAxxx.stream.vehicle.drivetrain.fuelSystem.remainingFuel.value
                                        on({ id: [].concat(['bmw.0.WBAxxx.stream.vehicle.drivetrain.fuelSystem.remainingFuel.value']), change: 'ne' }, async (obj) => {
                                          let value = obj.state.val;
                                          let oldValue = obj.oldState.val;
                                          if ((obj.state ? obj.state.val : '') > (obj.oldState ? obj.oldState.val : '') + 10) {
                                            // es wird/wurde getankt --> Rücksetzen der Werte
                                            // Aufbau: Anzahl Werte: {Liter;km},...
                                            // hier: value = bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value
                                            if (getState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel').val.charAt(0) != '0') {
                                              console.warn((['BMW wird bzw. wurde betankt; Wert vom BMW: ',(obj.state ? obj.state.val : ''),'l'].join('')));
                                            }
                                            neuer_String = ['0: {',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('');
                                            setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, neuer_String, true);
                                            console.info(('BMW Tankfüllstand hat sich erhöht; Init-Wert: ' + String(neuer_String)));
                                          } else if ((obj.state ? obj.state.val : '') < (obj.oldState ? obj.oldState.val : '')) {
                                            alter_String = getState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel').val;
                                            Anzahl_Werte = parseFloat((alter_String.charAt(0)));
                                            if (Anzahl_Werte == 0) {
                                              // erster neuer Wert
                                              // Aufbau: Anzahl Werte: {Liter;km},...
                                              // hier: value = bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value
                                              neuer_String = ['1: {',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('');
                                              setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, neuer_String, true);
                                              console.info(('BMW Tankfüllstand hat sich erstmalig reduziert; neu: ' + String(neuer_String)));
                                            } else if (Anzahl_Werte < 9) {
                                              // weitere Werte
                                              // Aufbau: Anzahl Werte: {Liter;km},{Liter;km},...
                                              // hier: value = bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value
                                              neuer_String = ('' + (Anzahl_Werte + 1));
                                              neuer_String = String(neuer_String) + String(alter_String.slice(1, alter_String.length));
                                              neuer_String = [neuer_String,',{',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('');
                                              setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, neuer_String, true);
                                              console.info(('BMW Tankfüllstand hat sich reduziert; neu: ' + String(neuer_String)));
                                            } else if (Anzahl_Werte == 9) {
                                              // Liste voll --> 1. Berechnung Differenzwerte
                                              // Aufbau: Anzahl Werte: {Liter;km},{Liter;km},...
                                              // neuer Literwert: "Wert"
                                              // neuer km-Wert: siehe DP "value"
                                              // 1. a) Spritmenge (in Litern) berechnen:
                                              letzter_Listenwert = parseFloat((alter_String.slice(((alter_String.lastIndexOf('{') + 1 + 1) - 1), (alter_String.lastIndexOf(';') + 1) - 1)));
                                              if (parseFloat((obj.state ? obj.state.val : '')) == letzter_Listenwert) {
                                                // keine Änderung in der Literzahl
                                                // --> Abbruch
                                                console.warn('keine Änderung in der Literzahl --> weder Neueintrag noch Berechnung');
                                              } else {
                                                Liter_Differenz = parseFloat((alter_String.slice(((alter_String.indexOf('{') + 1 + 1) - 1), (alter_String.indexOf(';') + 1) - 1))) - parseFloat((obj.state ? obj.state.val : ''));
                                                // 1. b) km-Differenz berechnen
                                                km_Differenz = getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val - parseFloat((alter_String.slice(((alter_String.indexOf(';') + 1 + 1) - 1), (alter_String.indexOf('}') + 1) - 1)));
                                                // Verbrauchsrechnung:
                                                if (km_Differenz > 0) {
                                                  // neue Berechnung
                                                  Verbrauch = Math.round(((Liter_Differenz * 100) / km_Differenz) * 10) / 10;
                                                  setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_je_100km' /* BMW Verbrauch je 100km */, Verbrauch, true);
                                                  console.warn((['BMW-Verbrauchsrechnung ist erfolgt bei ',getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val,' km mit einem Delta von ',Liter_Differenz,' Litern und ',km_Differenz,'km. Ergebnis: ',Verbrauch,' l/100km'].join('')));
                                                } else {
                                                  // Fehler, da km-Differenz = 0!
                                                  setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_je_100km' /* BMW Verbrauch je 100km */, 99.9, true);
                                                  console.error((['BMW-Verbrauchsrechnung sollte erfolgen bei ',getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val,' km, aber die Entfernungs-Differenz ist Null ','--> FEHLER !!'].join('')));
                                                }
                                                // Liste voll --> 2. Werte durchschieben und
                                                //                         neues Wertepaar hinzufügen
                                                // Aufbau: 9: {Liter;km},{Liter;km},...
                                                // hier: value = bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value
                                                neuer_String = alter_String.slice(((alter_String.indexOf('},{') + 1 + 2) - 1), alter_String.length);
                                                neuer_String = ['9: ',neuer_String,',{',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('');
                                                setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, neuer_String, true);
                                                console.info(('BMW Tankfüllstand hat sich reduziert und Verbrauchsrechnung getriggert; neu: ' + String(neuer_String)));
                                              }
                                            } else {
                                              // Fehler
                                              console.error(('Ungültiger Wert für 0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel: ' + String(Anzahl_Werte)));
                                              setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, (['0: {',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('')), true);
                                            }
                                          } else {
                                            // Spritwerte gleich oder geringfügig höher
                                            // --> keine Aktion
                                          }
                                        });
                                        

                                        ioBroker im lxc auf NUC / Aktive Instanzen: 38

                                        S 1 Reply Last reply
                                        0
                                        • vowillV vowill

                                          @stenmic Im alten Adapter fand sich der Verbrauch unter bmw.0.WBAxxx.trips.monthly.totalCombustionConsumption.averageConsumption.

                                          Anbei mein Skript zur Verbrauchsermittlung.
                                          Ablauf: Das Skript schreibt die Wertepaare für km und Liter immer dann in den Datenpunkt 0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel, wenn sich der Tankfüllstand reduziert. Nach 9 Wertepaaren wird die Differenz zwischen neuem Wertepaar und ältestem Wertepaar berechnet und daraus der Verbrauch; das älteste Wertepaar wird dann gelöscht. Wenn getankt wird (und sich deshalb der Tankfüllstand um mehr als 10 Liter erhöht) werden alle Wertepaare gelöscht; die nächste Rechnung findet dann erst wieder statt, wenn es wieder 9 Wertepaare gibt. (Grund ist, dass der BMW-Adapter nur ganze Liter liefert und es daher beim Tanken in der Rechnung eine Ungenauigkeit von bis zu 2 Litern geben könnte (z. B. aktueller Stand 10,0 oder 10,9 Liter und nach dem Tanken z. B. 55,0 oder 55,9 Liter --> ergäbe stets eine Differenz von 45 Litern, obwohl es 44,1 oder 45,9 Liter sein könnten)).
                                          Das Ergebnis der Verbrauchsrechnung wird im Datenpunkt 0_userdata.0.Fahrzeuge.BMW_Verbrauch_je_100km abgelegt.

                                          Hier das JS (Blockly gerne auf Anfrage im Chat über private Mailadresse):

                                          var alter_String, Anzahl_Werte, neuer_String, letzter_Listenwert, Liter_Differenz, km_Differenz, Verbrauch;
                                          
                                          // Verfolgung des Tankinhalts
                                          // Auswertung DP bmw.0.WBAxxx.stream.vehicle.drivetrain.fuelSystem.remainingFuel.value
                                          on({ id: [].concat(['bmw.0.WBAxxx.stream.vehicle.drivetrain.fuelSystem.remainingFuel.value']), change: 'ne' }, async (obj) => {
                                            let value = obj.state.val;
                                            let oldValue = obj.oldState.val;
                                            if ((obj.state ? obj.state.val : '') > (obj.oldState ? obj.oldState.val : '') + 10) {
                                              // es wird/wurde getankt --> Rücksetzen der Werte
                                              // Aufbau: Anzahl Werte: {Liter;km},...
                                              // hier: value = bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value
                                              if (getState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel').val.charAt(0) != '0') {
                                                console.warn((['BMW wird bzw. wurde betankt; Wert vom BMW: ',(obj.state ? obj.state.val : ''),'l'].join('')));
                                              }
                                              neuer_String = ['0: {',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('');
                                              setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, neuer_String, true);
                                              console.info(('BMW Tankfüllstand hat sich erhöht; Init-Wert: ' + String(neuer_String)));
                                            } else if ((obj.state ? obj.state.val : '') < (obj.oldState ? obj.oldState.val : '')) {
                                              alter_String = getState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel').val;
                                              Anzahl_Werte = parseFloat((alter_String.charAt(0)));
                                              if (Anzahl_Werte == 0) {
                                                // erster neuer Wert
                                                // Aufbau: Anzahl Werte: {Liter;km},...
                                                // hier: value = bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value
                                                neuer_String = ['1: {',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('');
                                                setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, neuer_String, true);
                                                console.info(('BMW Tankfüllstand hat sich erstmalig reduziert; neu: ' + String(neuer_String)));
                                              } else if (Anzahl_Werte < 9) {
                                                // weitere Werte
                                                // Aufbau: Anzahl Werte: {Liter;km},{Liter;km},...
                                                // hier: value = bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value
                                                neuer_String = ('' + (Anzahl_Werte + 1));
                                                neuer_String = String(neuer_String) + String(alter_String.slice(1, alter_String.length));
                                                neuer_String = [neuer_String,',{',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('');
                                                setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, neuer_String, true);
                                                console.info(('BMW Tankfüllstand hat sich reduziert; neu: ' + String(neuer_String)));
                                              } else if (Anzahl_Werte == 9) {
                                                // Liste voll --> 1. Berechnung Differenzwerte
                                                // Aufbau: Anzahl Werte: {Liter;km},{Liter;km},...
                                                // neuer Literwert: "Wert"
                                                // neuer km-Wert: siehe DP "value"
                                                // 1. a) Spritmenge (in Litern) berechnen:
                                                letzter_Listenwert = parseFloat((alter_String.slice(((alter_String.lastIndexOf('{') + 1 + 1) - 1), (alter_String.lastIndexOf(';') + 1) - 1)));
                                                if (parseFloat((obj.state ? obj.state.val : '')) == letzter_Listenwert) {
                                                  // keine Änderung in der Literzahl
                                                  // --> Abbruch
                                                  console.warn('keine Änderung in der Literzahl --> weder Neueintrag noch Berechnung');
                                                } else {
                                                  Liter_Differenz = parseFloat((alter_String.slice(((alter_String.indexOf('{') + 1 + 1) - 1), (alter_String.indexOf(';') + 1) - 1))) - parseFloat((obj.state ? obj.state.val : ''));
                                                  // 1. b) km-Differenz berechnen
                                                  km_Differenz = getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val - parseFloat((alter_String.slice(((alter_String.indexOf(';') + 1 + 1) - 1), (alter_String.indexOf('}') + 1) - 1)));
                                                  // Verbrauchsrechnung:
                                                  if (km_Differenz > 0) {
                                                    // neue Berechnung
                                                    Verbrauch = Math.round(((Liter_Differenz * 100) / km_Differenz) * 10) / 10;
                                                    setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_je_100km' /* BMW Verbrauch je 100km */, Verbrauch, true);
                                                    console.warn((['BMW-Verbrauchsrechnung ist erfolgt bei ',getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val,' km mit einem Delta von ',Liter_Differenz,' Litern und ',km_Differenz,'km. Ergebnis: ',Verbrauch,' l/100km'].join('')));
                                                  } else {
                                                    // Fehler, da km-Differenz = 0!
                                                    setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_je_100km' /* BMW Verbrauch je 100km */, 99.9, true);
                                                    console.error((['BMW-Verbrauchsrechnung sollte erfolgen bei ',getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val,' km, aber die Entfernungs-Differenz ist Null ','--> FEHLER !!'].join('')));
                                                  }
                                                  // Liste voll --> 2. Werte durchschieben und
                                                  //                         neues Wertepaar hinzufügen
                                                  // Aufbau: 9: {Liter;km},{Liter;km},...
                                                  // hier: value = bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value
                                                  neuer_String = alter_String.slice(((alter_String.indexOf('},{') + 1 + 2) - 1), alter_String.length);
                                                  neuer_String = ['9: ',neuer_String,',{',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('');
                                                  setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, neuer_String, true);
                                                  console.info(('BMW Tankfüllstand hat sich reduziert und Verbrauchsrechnung getriggert; neu: ' + String(neuer_String)));
                                                }
                                              } else {
                                                // Fehler
                                                console.error(('Ungültiger Wert für 0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel: ' + String(Anzahl_Werte)));
                                                setState('0_userdata.0.Fahrzeuge.BMW_Verbrauch_km_bei_l-Wechsel' /* BMW Verbrauch km bei l-Wechsel */, (['0: {',('' + (obj.state ? obj.state.val : '')),';',('' + getState('bmw.0.WBAxxx.stream.vehicle.vehicle.travelledDistance.value').val),'}'].join('')), true);
                                              }
                                            } else {
                                              // Spritwerte gleich oder geringfügig höher
                                              // --> keine Aktion
                                            }
                                          });
                                          
                                          S Offline
                                          S Offline
                                          stenmic
                                          wrote on last edited by
                                          #991

                                          @vowill sagte in Test Adapter BMW/Mini v4.x.x:

                                          @stenmic Im alten Adapter fand sich der Verbrauch unter bmw.0.WBAxxx.trips.monthly.totalCombustionConsumption.averageConsumption.

                                          ok, den hab ich nie genutzt, mich interessiert mehr der Verbrauch ab tanken.

                                          1 Reply Last reply
                                          0

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate

                                          252

                                          Online

                                          32.7k

                                          Users

                                          82.6k

                                          Topics

                                          1.3m

                                          Posts
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Home
                                          • Recent
                                          • Tags
                                          • Unread 0
                                          • Categories
                                          • Unreplied
                                          • Popular
                                          • GitHub
                                          • Docu
                                          • Hilfe