Auslesen der BMW-Daten mit FHEM (225xe)

  • Hallo zusammen,

    vor längerer Zeit hatte ich mal angekündigt, dass ich meine Daten per Heimautomatisierung abholen will und mir grafisch darstellen lassen will.
    Ich nutze für die Heimautomatisierung FHEM (Siehe HIER) auf einem Raspberry Pi 3

    Um den Code laufen zu lassen, solltet ihr daher auch FHEM nutzen. Oder alles anpassen. :)

    Folgendes geht
    - Auslesen aller Daten, die CD sendet
    - Berechnung einiger weniger Daten (bspw mit Benzin gefahrene km, Prozentsatz allgemein elektrisch gefahren, ...)
    - Statistiken zu Verbrauch, %Elektrisch, etc
    - Karte mit der letzten Position
    - Karte mit der Position der letzten 3 Stops (für längere Reisen)
    - Benachrichtigungen, wenn das Auto parkt, läd, etc. Teilweise inkl. Positionsangabe (benötigt Pushbulled)
    - Automatisches holen des Bearers falls nötig / ungültig (aktuell ca. alle 2-3h glaub ich)

    Folgendes kommt vielleicht noch
    - Senden von Kommandos
    - Das ganze als FHEM Modul fertig verpackt
    - eine schöne Oberfläche mit Bildchen
    - ein paar fehlende Daten

    Folgendes kommt nie
    - Vollständiger Support von mir oder
    - Haftung in irgendeiner Weise, falls BMW das Ganze irgendwie doof findet und uns aussperrt oder das deswegen Fahrzeug implodiert. ;)


    Hinweise:
    Der Code ist noch "gefrickel": Da wurde viel gebastelt, viel entspricht nicht unbedingt der höchsten Qualität, aber es läuft schon mal :)
    Für mich ist's ne Beta zum Testen und weiterentwickeln und irgendwann folgt vielleicht ein komplettes Modul.


    Hier der Code in drei Teilen
    Einrichten der Passswörter / VIM

    Passwörter

    BMW 225xe Sport Line Atlantikgrau seit 14.11.2017 :D
    BMW X1 Bj. '16 weiß/DRK mit getarnter Sondersignalanlage (5-10 Tage/Monat Dienst)
    Audi A4 Avant bj 2006 bis 11.2017 / Fiat Tipo Bj '97 bis 2007 /Honda Civic Bj. '87 bis 2003

    Einmal editiert, zuletzt von Rumbel (21. März 2018 um 13:37)

  • Einrichten der FHEM-Config

    Einrichtung


    Perl-Quellcode

    Quellcode bearbeiten

    • define BMW_gps_lat dummy
    • attr BMW_gps_lat event-on-change-reading state
    • attr BMW_gps_lat group Location
    • attr BMW_gps_lat room BMW
    • attr BMW_gps_lat stateFormat state
    • define BMW_gps_lng dummy
    • attr BMW_gps_lng event-on-change-reading state
    • attr BMW_gps_lng group Location
    • attr BMW_gps_lng room BMW
    • attr BMW_gps_lng stateFormat state
    • define BMW_heading dummy
    • attr BMW_heading event-on-change-reading state
    • attr BMW_heading group Location
    • attr BMW_heading room BMW
    • attr BMW_heading stateFormat state°
    • define BMW_charging_status dummy
    • attr BMW_charging_status event-on-change-reading state
    • attr BMW_charging_status group Battery
    • attr BMW_charging_status room BMW
    • attr BMW_charging_status stateFormat state
    • define BMW_chargingSystemStatus dummy
    • attr BMW_chargingSystemStatus event-on-change-reading state
    • attr BMW_chargingSystemStatus group Battery
    • attr BMW_chargingSystemStatus room BMW
    • attr BMW_chargingSystemStatus stateFormat state
    • define BMW_prognosisWhileChargingStatus dummy
    • attr BMW_prognosisWhileChargingStatus event-on-change-reading state
    • attr BMW_prognosisWhileChargingStatus group Battery
    • attr BMW_prognosisWhileChargingStatus room BMW
    • attr BMW_prognosisWhileChargingStatus stateFormat state
    • define BMW_chargingLevelHv dummy
    • attr BMW_chargingLevelHv event-on-change-reading state
    • attr BMW_chargingLevelHv group Battery
    • attr BMW_chargingLevelHv room BMW
    • attr BMW_chargingLevelHv stateFormat state %
    • define BMW_Segment_LastTrip_time_segment_end dummy
    • attr BMW_Segment_LastTrip_time_segment_end event-on-change-reading state
    • attr BMW_Segment_LastTrip_time_segment_end group LastTrip
    • attr BMW_Segment_LastTrip_time_segment_end room BMW
    • attr BMW_Segment_LastTrip_time_segment_end stateFormat state
    • define BMW_Segment_LastTrip_time_segment_end_formatted dummy
    • attr BMW_Segment_LastTrip_time_segment_end_formatted event-on-change-reading state
    • attr BMW_Segment_LastTrip_time_segment_end_formatted group LastTrip
    • attr BMW_Segment_LastTrip_time_segment_end_formatted room BMW
    • attr BMW_Segment_LastTrip_time_segment_end_formatted stateFormat state
    • define BMW_soc_hv_percent dummy
    • attr BMW_soc_hv_percent event-on-change-reading state
    • attr BMW_soc_hv_percent group Battery
    • attr BMW_soc_hv_percent room BMW
    • attr BMW_soc_hv_percent stateFormat state %
    • define BMW_beMaxRangeElectricKm dummy
    • attr BMW_beMaxRangeElectricKm event-on-change-reading state
    • attr BMW_beMaxRangeElectricKm group LastTrip
    • attr BMW_beMaxRangeElectricKm room BMW
    • attr BMW_beMaxRangeElectricKm stateFormat state km
    • define BMW_beRemainingRangeElectricKm dummy
    • attr BMW_beRemainingRangeElectricKm event-on-change-reading state
    • attr BMW_beRemainingRangeElectricKm group LastTrip
    • attr BMW_beRemainingRangeElectricKm room BMW
    • attr BMW_beRemainingRangeElectricKm stateFormat state km
    • define BMW_beRemainingRangeFuel dummy
    • attr BMW_beRemainingRangeFuel event-on-change-reading state
    • attr BMW_beRemainingRangeFuel group LastTrip
    • attr BMW_beRemainingRangeFuel room BMW
    • attr BMW_beRemainingRangeFuel stateFormat state km
    • define BMW_remaining_fuel dummy
    • attr BMW_remaining_fuel event-on-change-reading state
    • attr BMW_remaining_fuel group LastTrip
    • attr BMW_remaining_fuel room BMW
    • attr BMW_remaining_fuel stateFormat state Liter
    • define BMW_Segment_LastTrip_ratio_electric_driven_distance dummy
    • attr BMW_Segment_LastTrip_ratio_electric_driven_distance event-on-change-reading state
    • attr BMW_Segment_LastTrip_ratio_electric_driven_distance group LastTrip
    • attr BMW_Segment_LastTrip_ratio_electric_driven_distance room BMW
    • attr BMW_Segment_LastTrip_ratio_electric_driven_distance stateFormat state %
    • define BMW_mileage dummy
    • attr BMW_mileage event-on-change-reading state
    • attr BMW_mileage group AllTrips
    • attr BMW_mileage room BMW
    • attr BMW_mileage stateFormat state km
    • define BMW_door_lock_state dummy
    • attr BMW_door_lock_state event-on-change-reading state
    • attr BMW_door_lock_state group Doors
    • attr BMW_door_lock_state room BMW
    • attr BMW_door_lock_state stateFormat state
    • define BMW_door_driver_front dummy
    • attr BMW_door_driver_front event-on-change-reading state
    • attr BMW_door_driver_front group Doors
    • attr BMW_door_driver_front room BMW
    • attr BMW_door_driver_front stateFormat state
    • define BMW_door_passenger_front dummy
    • attr BMW_door_passenger_front event-on-change-reading state
    • attr BMW_door_passenger_front group Doors
    • attr BMW_door_passenger_front room BMW
    • attr BMW_door_passenger_front stateFormat state
    • define BMW_door_driver_rear dummy
    • attr BMW_door_driver_rear event-on-change-reading state
    • attr BMW_door_driver_rear group Doors
    • attr BMW_door_driver_rear room BMW
    • attr BMW_door_driver_rear stateFormat state
    • define BMW_door_passenger_rear dummy
    • attr BMW_door_passenger_rear event-on-change-reading state
    • attr BMW_door_passenger_rear group Doors
    • attr BMW_door_passenger_rear room BMW
    • attr BMW_door_passenger_rear stateFormat state
    • define BMW_trunk_state dummy
    • attr BMW_trunk_state event-on-change-reading state
    • attr BMW_trunk_state group Doors
    • attr BMW_trunk_state room BMW
    • attr BMW_trunk_state stateFormat state
    • define BMW_hood_state dummy
    • attr BMW_hood_state event-on-change-reading state
    • attr BMW_hood_state group Windows
    • attr BMW_hood_state room BMW
    • attr BMW_hood_state stateFormat state
    • define BMW_window_driver_front dummy
    • attr BMW_window_driver_front event-on-change-reading state
    • attr BMW_window_driver_front group Windows
    • attr BMW_window_driver_front room BMW
    • attr BMW_window_driver_front stateFormat state
    • define BMW_window_passenger_front dummy
    • attr BMW_window_passenger_front event-on-change-reading state
    • attr BMW_window_passenger_front group Windows
    • attr BMW_window_passenger_front room BMW
    • attr BMW_window_passenger_front stateFormat state
    • define BMW_window_driver_rear dummy
    • attr BMW_window_driver_rear event-on-change-reading state
    • attr BMW_window_driver_rear group Windows
    • attr BMW_window_driver_rear room BMW
    • attr BMW_window_driver_rear stateFormat state
    • define BMW_window_passenger_rear dummy
    • attr BMW_window_passenger_rear event-on-change-reading state
    • attr BMW_window_passenger_rear group Windows
    • attr BMW_window_passenger_rear room BMW
    • attr BMW_window_passenger_rear stateFormat state
    • define BMW_sunroof_state dummy
    • attr BMW_sunroof_state event-on-change-reading state
    • attr BMW_sunroof_state group Windows
    • attr BMW_sunroof_state room BMW
    • attr BMW_sunroof_state stateFormat state
    • define BMW_sunroof_position dummy
    • attr BMW_sunroof_position event-on-change-reading state
    • attr BMW_sunroof_position group Windows
    • attr BMW_sunroof_position room BMW
    • attr BMW_sunroof_position stateFormat state %
    • define BMW_LASTTRIP_DELTA_KM dummy
    • attr BMW_LASTTRIP_DELTA_KM event-on-change-reading state
    • attr BMW_LASTTRIP_DELTA_KM group LastTrip
    • attr BMW_LASTTRIP_DELTA_KM room BMW
    • attr BMW_LASTTRIP_DELTA_KM stateFormat state km
    • define BMW_LASTTRIP_TIME_SEGMENT_END dummy
    • attr BMW_LASTTRIP_TIME_SEGMENT_END event-on-change-reading state
    • attr BMW_LASTTRIP_TIME_SEGMENT_END group LastTrip
    • attr BMW_LASTTRIP_TIME_SEGMENT_END room BMW
    • attr BMW_LASTTRIP_TIME_SEGMENT_END stateFormat state
    • define BMW_CUMULATED_ELECTRIC_DRIVEN_DISTANCE dummy
    • attr BMW_CUMULATED_ELECTRIC_DRIVEN_DISTANCE event-on-change-reading state
    • attr BMW_CUMULATED_ELECTRIC_DRIVEN_DISTANCE group AllTrips
    • attr BMW_CUMULATED_ELECTRIC_DRIVEN_DISTANCE room BMW
    • attr BMW_CUMULATED_ELECTRIC_DRIVEN_DISTANCE stateFormat state km
    • define BMW_SAVED_LITERS_OVERALL dummy
    • attr BMW_SAVED_LITERS_OVERALL event-on-change-reading state
    • attr BMW_SAVED_LITERS_OVERALL group AllTrips
    • attr BMW_SAVED_LITERS_OVERALL room BMW
    • attr BMW_SAVED_LITERS_OVERALL stateFormat state km
    • define BMW_TIMESTAMP_STATISTICS_RESET dummy
    • attr BMW_TIMESTAMP_STATISTICS_RESET event-on-change-reading state
    • attr BMW_TIMESTAMP_STATISTICS_RESET group AllTrips
    • attr BMW_TIMESTAMP_STATISTICS_RESET room BMW
    • attr BMW_TIMESTAMP_STATISTICS_RESET stateFormat state
    • define BMW_LASTTRIP_DELTA_TIME dummy
    • attr BMW_LASTTRIP_DELTA_TIME event-on-change-reading state
    • attr BMW_LASTTRIP_DELTA_TIME group LastTrip
    • attr BMW_LASTTRIP_DELTA_TIME room BMW
    • attr BMW_LASTTRIP_DELTA_TIME stateFormat state min
    • define BMW_COMBINED_AVG_CONSUMED_LITERS_OVERALL dummy
    • attr BMW_COMBINED_AVG_CONSUMED_LITERS_OVERALL event-on-change-reading state
    • attr BMW_COMBINED_AVG_CONSUMED_LITERS_OVERALL group AllTrips
    • attr BMW_COMBINED_AVG_CONSUMED_LITERS_OVERALL room BMW
    • attr BMW_COMBINED_AVG_CONSUMED_LITERS_OVERALL stateFormat state Liter
    • define BMWUpdateCyclic at +*00:05:00 {BMW_Test();;}
    • attr BMWUpdateCyclic room BMW
    • define BMW_Map weblink htmlCode {myBMWUtils_ShowGoogleMapsCode(16,400,400)}
    • attr BMW_Map room BMW
    • define FileLog_BMW_Trips FileLog ./log/BMW_Trips-%Y-%m.log BMW_.*
    • attr FileLog_BMW_Trips group log
    • attr FileLog_BMW_Trips logtype text
    • attr FileLog_BMW_Trips room BMW
    • define SVG_FileLog_BMW_Trips_1 SVG FileLog_BMW_Trips:SVG_FileLog_BMW_Trips_1:CURRENT
    • attr SVG_FileLog_BMW_Trips_1 room BMW


    BMW 225xe Sport Line Atlantikgrau seit 14.11.2017 :D
    BMW X1 Bj. '16 weiß/DRK mit getarnter Sondersignalanlage (5-10 Tage/Monat Dienst)
    Audi A4 Avant bj 2006 bis 11.2017 / Fiat Tipo Bj '97 bis 2007 /Honda Civic Bj. '87 bis 2003

  • Einrichtung Teil 2

    Einrichtung


    BMW 225xe Sport Line Atlantikgrau seit 14.11.2017 :D
    BMW X1 Bj. '16 weiß/DRK mit getarnter Sondersignalanlage (5-10 Tage/Monat Dienst)
    Audi A4 Avant bj 2006 bis 11.2017 / Fiat Tipo Bj '97 bis 2007 /Honda Civic Bj. '87 bis 2003

  • Tolle Arbeit. Leider fahre ich jetzt in Osterferien weg und kann es nicht testen (FHEM habe ich seit vielen Jahren im Einsatz).

    Hättest Du für die Wartezeit ein paar Screenshots Deiner Plots?

  • hier mal auf die schnelle 3 Screenshots per Smartphone aus der Musikprobe... Hoffe, unser Dirigent liest nicht mit... Glaub der fährt Golf. :P

    Wie gesagt: das Design fehlt noch... Irgendwann will ich das als Floorplan anlegen mit dem Auto als Hintergrund.

    Bild 1: Anzeige der Position unseres Probelokals und die Fenster.
    Lustig: Das gekippte Schiebedach wird nicht als offen angezeigt... :D

    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Bild 2: Daten
    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.
    Bild 3: Statistik
    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.
    Die Karte mit der Historie zeige ich später mal, da will ich die Koordinaten noch ändern.

    BMW 225xe Sport Line Atlantikgrau seit 14.11.2017 :D
    BMW X1 Bj. '16 weiß/DRK mit getarnter Sondersignalanlage (5-10 Tage/Monat Dienst)
    Audi A4 Avant bj 2006 bis 11.2017 / Fiat Tipo Bj '97 bis 2007 /Honda Civic Bj. '87 bis 2003

    2 Mal editiert, zuletzt von Rumbel (23. März 2018 um 23:59)

  • Whoow bist Du schnell! Tausend Dank!

    Danke vielmals. Das sieht ja richtig toll aus! Da weiß ich gleich was ich nach dem Urlaub mache.......
    Ich vermute, dass ich meine alten FHEM-Server erstmal updaten muss.

    Keine Angst. Ich nerve nicht bzgl. Support. Habe selbst mehrere FHEM-Treiber geschrieben und weiß wie viel Arbeit Support macht.

  • Freut mich, dass es dir gefällt

    Eingeschränkt Support werde ich leisten können, aber eben nicht all zu viel ;)

    Sag Bescheid, bevor du anfängst, dann lade ich dann nochmals die neuste version hoch.

    Hier noch die Karte mit der Historie. Nein, ich bin nicht durch's Wasser gefahren, ich hab einfach nur zufällige Koordinaten verwendet. :)
    Das Textfeld ist der Mouse-Over tag des zweiten (dunkleren) Punktes
    Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen.

    Zwecks update. ich nutze eigentlich alles Standard.
    Perl sollte halt aktuell sein auf deinem Server und FHEM das WebWidget für die karten unterstützen.
    Theoretisch sollte das auch mit älteren FHEMs laufen, aber Updaten macht sicher generell Sinn ;)


    p.s.: wünsch dir einen schönen Urlaub und allzeit freie Straßen! :)

    BMW 225xe Sport Line Atlantikgrau seit 14.11.2017 :D
    BMW X1 Bj. '16 weiß/DRK mit getarnter Sondersignalanlage (5-10 Tage/Monat Dienst)
    Audi A4 Avant bj 2006 bis 11.2017 / Fiat Tipo Bj '97 bis 2007 /Honda Civic Bj. '87 bis 2003

    Einmal editiert, zuletzt von Rumbel (23. März 2018 um 22:32)

  • Hi,
    das ist ja echt super, sowas hab ich lange gesucht.
    Die Statistik die BMW in der CD-App oder im CD-Web anbietet ist lächerlich.
    Ich hab auch schon mehrfach bei BMW reklamiert man möge doch bitte eine vernünftige Verbrauchsstatistik einbringen.

    Also frisch ans Werk und FHEM installiert.
    Steile Lernkurve, aber ich hab zumindest meine Heizung-Steuerung schon erfolgreich integriert.

    Dann hab ich mich an my_BMWUtils gewagt …
    Stunden und Tage vergingen ohne jeden Erfolg, bis mir endlich klar war, dass der BMW CD Server am Wochenende fast immer offline war …
    Als der endlich wieder funktionierte musste ich mehrmals mein Passwort zurücksetzen, weil das Konto gesperrt war. Vermutlich wegen zu vieler Fehlversuche mit myBMWUtils.

    Das Problem dabei war offensichtlich, dass mein Passwort ein & enthielt!
    Sobald ich keine Sonderzeichen im Passwort habe funktioniert auch der Login und ich erhalte einen Bearer Session Key.

    Aber leider kommt es gleich danach doch wider zu einem Fehler 400.
    Hier das Log mit Debug=2, die VID habe ich unkenntlich gemacht:


    Woran kann das liegen?
    Nach meinem Verständnis der Fehlermeldung ist an der im Code hinterlegten URL was falsch?

    Wäre schön, wenn du mir da weiterhelfen könntest.

  • Hi @Thatsme.2,

    freut mich, dass FHEM so einfach läuft bei dir. Mit entsprechenden Tutorials geht das gut. :)

    Ich werde bei Gelegenheit die neueste Version hier hochladen... ein paar Kleinigkeiten hab ich schon verbessert.

    Zu deinem Problem:
    Was gibst du als VIN ein? Die Kurze (V123456) oder die Lange (WBA2C71080V123456) (hier anynomisiert)
    Es muss auf jeden Fall die lange sein. Die volle VIN erhält man im Web oder im Fahrzeugschein.

    Setzen kannst du sie über

    Code
    set BMWif_vim WBA2C71080V123456

    Ein wichtiger Tipp noch:
    deaktiviere auf jeden Fall den Timer so lange du noch am testen bist

    Code
    set BMWUpdateCyclic  inactive


    und ruf das Script manuell über die Kommandozeile auf

    Code
    {BMW_Test();;}

    (ja, mit 2x ; am Ende)

    dann wird der token nicht so schnell gesperrt, wenn doch was nicht stimmt. :D

    BMW 225xe Sport Line Atlantikgrau seit 14.11.2017 :D
    BMW X1 Bj. '16 weiß/DRK mit getarnter Sondersignalanlage (5-10 Tage/Monat Dienst)
    Audi A4 Avant bj 2006 bis 11.2017 / Fiat Tipo Bj '97 bis 2007 /Honda Civic Bj. '87 bis 2003

    2 Mal editiert, zuletzt von Rumbel (26. März 2018 um 16:57)