Web Applikation zum Selberhosten für BMW Fahrzeuge (i3, i8 & Hybride)
Dise ist die neue Version der App welche in Versteckte/geheime, aber wichtige Infos zum BMW i3 vorgestellt wurde.
Nochmals zum Hintergrund: Die BMW Webseite (ConnectedDrive) ist ja soweit ganz gut zeit aber nur SoC (State of Charge also den Ladezustand) in Prozent und nicht als absoluten kWh Wert an - sie könnte aber, da die Daten sehrwohl vorliegen.
BMW CD Portal & rechts eine selbstgehostete WebApplikation (einmal auf dem Desktop und rechts auf dem mobile)
Die eigentlichen Daten kann man durch
- Das Webportal via Datenmitschneiden erhalten oder
- Via der BMW Server API abfragen
Die in der Webapp angezeigten Verbräuche oder Ladeleistungen werden mittels SoC und Zeit oder km Differenz zwischen den einzelnen Aufrufen berechnet. Dazu legt das PHP skript eine CSV Datei auf dem Server an in welcher die Daten (Zeitpunkt, SoC, Gesamtkm stand...) zum jeweiligen Aufruf gespeichert werden. Der Last Leg Wert wird analog aus der Differenz des Gesamtkmstandes zweier Aufrufe berechnet (und sich dann einfach gemerkt, falls sich nicht ändert).
Änderungen zur V1 die oben beschrieben wurde:
- Wenn man auf den SOC Kreis klickt kommt man zu eine Graphikseite mit
- MAX SOC Statistiken (Zeitskalen: täglich, wöchentlich, monatlich und alle Daten) und
- ObenStreetMap für die eigene und die Fahrzeugposition
Hauptfenster und Statistiken: Tages, Wochen, Monatsstatistik & alle Daten
Anmerkungen zu den Anzeigen:
-
Die Verbrauchsanzeige springt auf 99.9kWh wenn z.B. der actuelle SOC Wert sich verringert hat das Fahrzeug aber nicht bewegt wurde (unednlich hohen Verbrauch pro km)
- Verbrauch, Ladeleistung und letzte gefahrene Strecke bleiben bis zu einer Änderung erhalten (d.h. die letzte ladeleistung sieht man auch wenn man nicht mehr lädt)
- In der Die SOC_MAX Grafik
- Werden nur änderungen des Wertes angezeigt
- Es wird immer der Durchschnitt zwischen den Anzeigemomenten berechnet
- Bei mehr als 30 anzuzeigenden Werten wird die länge der Anzeigeperiode vergößert (außer bei Full Data)
- Die Positionsgrfik zoomt auf den Bereich um die eigene und Autoposition
- In manchen Brownsern (z.B. Chrome) funktioniert die eigene Positionsbestimmung nur bei HTTPS anbindung
- Die Position des Fahrzeugs kommt vom CD Portal (im Fahrzeug muss GPS aktiviert sein)
Geplant für V3:
- CSV ersetzen durch eine SQL-DB um nicht in der Applikationdie Daten filtern zu müssen (Speicher und Performance)
- Verbrauchs und Ladeleistungsstatistiken
- Speicherung und Anzeige von Wetterdaten (auch historisch damit man später Statisitken über Winter, Sommerverbräuche etc. erstellen kann)
- Anzeige der Positionen von Fahrzeug und Browser im letzten Monat/Jahr..
- Lasst mich Wissen was für Euch interessant sein könnte
Installation
Requirements: Webserver (Apache und IIS getestet) PHP (5.6 und 7.1 getestet) Laufzeitumgebung (ich nutze IIS 8 und PHP 7.1.1) Je nach Browser muss man über HTTPS gehen ansonsten ist die Funktion zur eigenen Positionsbestimmung deaktiviert.
Getestete Browser: Google Chrome, Opera, FireFox, iCab, Safari, MS Edge (hier kommen die Grafiken in Fehlfarben)
Anzeige im MS Edge (wer weiss die Lösung?)
Eigentliche Installation:
- Paket herunterladen
- Paket entpacken und auf den Webserver kopieren
- htaccess oder Webconfig Dateien anpassen (Sicherheitseinstellungen etc.)
- Batt/api/access/auth.json mit user, passerwort (der BMW Connecteddriveseite) und VIN füllen
Meine Webconfig sieht z.B. so aus (PHP Einstellung bitte anpassen):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
<mimeMap fileExtension=".woff2" mimeType="font/woff2" />
</staticContent>
<handlers>
<add name="php-7.1.1" path="*.php" verb="GET,HEAD,POST,PROPFIND,OPTIONS,REPORT,PUT,DELETE" modules="FastCgiModule" scriptProcessor="C:\Program Files\PHP\7_1_1\php-cgi.exe" resourceType="Either" requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>
Alles anzeigen
Hinweise für IIS und PHP:
- Wenn man fehler bei der HTTPS-Abfrage bekommt ala "Cert kann nicht geprüft" werden, müsst Ihr Eure PHP installation mit einem CA cert versehen
- CA Info in PHP setzen: PHP How to set CA info
- ein CA cert kann man hier finden: CA Extract
- Falls PHP mit einer anderen Version laufen soll, past Eure HandlerMappings an. Für PHP im allgemeinen nutzt unter ISS am besten den PHP Manager
- Oft fehlen die passenden Mime Types, siehe meine Webconfig
Migration der Daten von V1 auf V2:
Eine Zeile am Anfang der Datei appstats.txt (welche sich nun im data Unterordner befindet!) hinzufügen
DATE_TIME;TIMESTAMP;RANGE;SOC;ACT_SOC;MAX_SOC;REM_TIME;MILEAGE;CHARGEPOWER;CONSUMPTION;LAST_LEG;GPS_LON;GPS_LAT
Ohne diese Zeile kann die App die Daten nicht zuordnen.
Lizenzen der verwendeten 3pp Bibliotheken:
Chart.js:
The MIT License (MIT) Copyright (c) 2013-2017 Nick Downie
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
OpenLayers 4.1:
Licence: https://www.tldrlegal.com/l/freebsd
Troubleshooting:
Als erstes mal in Euer PHP Errorlog schauen - im Fehlerfall schreibe ich da auch Informationen rein.
Zweites sehr wichtiges Hilfsmittel zur Fehlersuche sind die Entwicklertools der Browser:
Opera, Chrome und FireFox Entwicklertools (hier Webkonsole)
Unter apache2 habe ich eine .htaccess zum Testen (ohne security headers und rewrite) die so aussieht - welche Sicherheitsfeature apache so bietet bitte auch selber nachlesen
# Security
Options -Indexes
ServerSignature Off
# UTF-8
AddDefaultCharset utf-8
# Don't show PHP errors
<IfModule mod_php7.c>
php_flag display_errors Off
</IfModule>
# Strip spaces
<IfModule mod_substitute.c>
AddOutputFilterByType SUBSTITUTE text/html
Substitute s/(\n|\t|\s\s+)//q
</IfModule>
# Restrict access
<FilesMatch "(^\.|\.(json|md)$)">
order deny,allow
deny from all
</FilesMatch>
# Mime types
<IfModule mod_mime.c>
AddType image/x-icon ico
AddType text/cache-manifest appcache
AddType application/font-woff2 woff2
AddType application/javascript js
</IfModule>
Alles anzeigen
Kommentare 9
Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.
Neu erstellte Kommentare unterliegen der Moderation und werden erst sichtbar, wenn sie durch einen Moderator geprüft und freigeschaltet wurden.