BMW connected drive in IPS?

Habe gerade etwas geg**glt und gespielt

Schickt das mal rein, dann bekommt Ihr sogar Euer Nummernschild :smiley:
Mit den Informationen kann man sogar die nachfolgende Verarbeitung steuern, Navi ja/nein usw.


/api/me/vehicles/v2

Ich habe das Modul jetzt mal so angepasst das die Werte gesetzt werden sollten. Kannst Du bitte mal Rückmeldung geben ob das funktioniert bzw. ob Fehlermeldungen auftauchen.

Ich habe das mal ergänzt


$data = BMW_GetVehicleInfo(12345); // ObjektID BMW

Was kommt da noch zurück außer dem Nummernschild was man abspeichern sollte?

Moin mit dem Aufruf:

/api/me/vehicles/v2

Bekomme ich nur das zurück:

Array
(
    [0] => Array
        (
            [series] => 4
            [basicType] => 4XXX
            [bodyType] => Coupe
            [brand] => BMW
            [modelName] => 4XXX
            [vin] => WBA111111111111
            [dcOnly] => 
            [hasNavi] => 1
            [hasSunRoof] => 
            [doorCount] => 5
            [hasRex] => 
            [steering] => LEFT
            [driveTrain] => CONV
        )

)

Da man hier, beim Aufruf, nicht die VIN (Fahrgestellnummer) mit geben muss, sondern diese zurückbekommt, könnte man sich den Eintrag in dem Modul sparen.

Attain

Bei mir noch


 "licensePlate" : "X-Y 1234",

Hallo Fonzo,

kannst du die zyklische Datenabfrage (alle 10 Minuten) rausnehmen?

Danke

Den Eintrag der VIN im Modul kann man sich nicht ganz sparen, da die Antwort sämtliche Fahrzeuge zurück gibt. Eine Instanz in IP-Symcon stellt ein Fahrzeug dar, daher wird die VIN nicht nur zum autorisieren genutzt sondern auch ob die Daten zu dem Fahrzeug gehören.
Ansonsten müsste man mit einem Configurator in IP-Symcon arbeiten, mit dem man dann die Fahrzeuge anlegen kann. Der Aufwand lohnt sich aus meiner Sicht aber zunächst nicht da die meisten Personen, mit Ausnahme von irgendwelchen Scheichs, nicht einen ganzen Fuhrpark BMW in der Garage stehen haben.

Funktioniert das Auslesen der Werte und setzen der Variablen durch das Modul soweit bei Dir?

Gibt es noch ein Elektroauto Nutzer der mal Auskunft geben kann welche Werte sinnvollerweise in IP-Symcon abgelegt werden sollen?

P.S. @Pitti Audi habe ich erst mal auf Eis gelegt, da sich für einen A6 keine sinnvollen Infos gewinnen lassen bzw. nichts geschaltet werden kann. Das soll wohl erst mit dem neuen Modell funktionieren. Der A4 kann in der Hinsicht zur Zeit mehr.

Moin,

hat bei jemanden schon das Auslösen von Ereignissen hin bekommen?
z.B: das verriegeln der Türen / Klimaanlage / Standheizung - abzufragen/ zu schalten?

Das ist noch was hier bei mir fehlt …

Danke,
Grüße
Thomas

Ja, aber nur schalten, abfragen geht bei meinem Auto nicht! Wie es geht steht etwas weiter oben - Post von kjb

Beispiel für Hupe:


/vehicle/remoteservices/v1/' . $vehicle . '/RHB'; 

Ciao Pitti

PS: @Fonzo, habe ich mir schon gedacht, nicht schlimm, solange unsere Kisten nix liefern :wink:

Generell oder nur für bestimmte Werte bzw. einstellbar? Ein Eintrag der Position in Karte oder auch der Status des Autos macht ja nur dann Sinn dies in IP-Symcon abzubilden wenn die Werte auch regelmäßig aktualisiert werden. Oder wie würdest Du das lösen?

Tankinhalt passt noch nicht

Und auch die Geoinformationen sind nicht da.

Attain

generell. Jeder der Zyklisch abfragen will kann dies durch ein Timer selber lösen.

Bei PHP Modulen dann am Schluss doch mit Skripten und zyklischen Ereignissen arbeiten zu müssen führt den Nutzen von einem Modul etwas ad absurdum. Ich kann aber ein Feld einbauen indem das Aktualisierungsintervall festgelegt wird das kannst Du dann auf 0 setzen wenn Du das lieber von Hand machen willst. Wegen den Werten kann ich erst heute Abend schauen.

Soweit so gut,

hat jemand noch eine Anregung wie ich das Event „serviceType=VEHICLE_FINDER“ auslösen kann?

Denn die GPS Position wird nicht automatisch aktualisiert. In der Handy APP gibt es den Punkt „Fahrzeug orten“. In der Webseite finde ich diesen leider nicht. :mad:

Methode dazu ist vorhanden aber wahrscheinlich geht die nicht da da ja anders kommuniziert wird. Eventuell gibt es ja einen Alternativen Aufruf.

Wird also immer die gleiche GPS Position übermittelt? Dann macht ein ständiges Update wirklich wenig Sinn.

Moin,

genau, die GPS Position bleibt bei der API Abfrage immer die gleiche. (Wohl wahrscheinlich, damit keiner aktiv Tracking Profile erstellen kann…)

Die (Park)Position muss also aktiv angefragt werden, dann meldet das Auto die aktuellen Daten zurück an BMW und dann stehen die aktualisierten Daten im Navigations Interface zur Verfügung.

Ich habe hier leider kein WLAN das ich mir mal sämtliche Handy Kommunikation protokolieren kann.
Der API Aufruf wird ja wieder nach dem gleichen Pronzip sein …


https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/".$vin."/XXX

GPS oder LOCation oder POS oder was auch immer???

Soweit geht alles was mein Auto an Daten her gibt … Vor allem die Standheizung zu schalten geht :loveips:

Thomas

Denn die GPS Position wird nicht automatisch aktualisiert.

Die Funktion mußt Du im Auto irgendwo freischalten. (Soweit ich mich erinnern kann)

Attain

Moin,

Ja, bzw. bei den neueren ist das schon (scheinbar) automatisch erfollgt.
Hier bei meinem über iDrive->Einstellungen->GPS (aktivieren) …

Das funktioniert ja auch alles, wie es sein soll. Das Problem ist der URL welcher zum API gehört. Die IPhone App macht es ja genau so. „Fahrzeug orten“ und kurze Zeit später stehen die über die Webseite zur Verfügung. Habe ich gerstern schon ausprobiert, wäre natürlich schön gewesen, wenn die GPS Daten sich alleine aktualisierten. Sprich das Auto alle Minute seine Position meldet. (Jedoch aus Datenschutzgründen, nachvollziebar nicht gemacht.)

Ich kann damit ja auch soweit leben mit dem Aufruf „fahrzeug Orten“ - das allerdings bitte aus IPS heraus und nicht aus der BMW APP.

Thomas

Mal in die Runde,

bis auf die Fahrzeug Ortung geht hier nun (bei mir) soweit alles.
Ich habe das mal versucht übersichtlich in 4 Scripten zu verpacken, so das sich jeder das weiter Entwickeln kann.

Danke für eure Unterstüzung.:slight_smile: :loveips:
Thomas

die Config einfach einmal ausführen. Die Variablen werden automatisch erstellt. ggf. die Profile noch zuordnen.


<?


// Fahrgestellnummer
$vin 					= "XXXXXXXXXXXXXXXXX";

// Logindaten bei BMW Connect
$username 				= "YYYYYYYYYYYYY";
$password 				= "ZZZZZZZZZZZZZ";

// GGF. Fehlerausgabe
$debug 					= false;


$id_instanz = IPS_GetObject($_IPS['SELF'])['ParentID'];

$id_token 				= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_token", "Token", 3);
$id_token_laufzeit		= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_token_laufzeit", "Token Laufzeit", 3);
$id_token_fehlerfrei	= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_token_fehlerfrei", "Token Fehlerfrei", 0);

$id_dynamic 			= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_dynamic", "Interface Dynamic", 3);
$id_navigation			= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_navigation", "Interface Navigation", 3);
$id_efficiency			= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_efficiency", "Interface Efficiency", 3);
$id_history				= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_history", "Interface History", 3);

$id_image				= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_image", "Interface Image", 3);
$id_mapupdate			= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_mapupdate", "Interface Map Update", 3);

$id_car					= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_car", "Interface Car", 3);

$id_store				= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_store", "Interface Store", 3);
$id_specs				= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_specs", "Interface Specs", 3);

$id_service				= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_service", "Interface Service", 3);
$id_service_partner		= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_service_partner", "Interface Service Partner", 3);

$id_remoteservice		= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_remoteservices", "Interface Remote Services", 3);
$id_chargingprofile		= CreateVariableByIdent($id_instanz, "BMW_". substr($vin, -7) . "_chargingprofile", "Interface Chargingprofile", 3);


// Zur Auswertung der History
$type = array("RCN" => "Lüftung aktivieren", "RCT" => "Einschaltzeit", "RHB" => "Hupe", "RLF" => "Lichthupe", "RDL" => "Verrigeln", "RDU" => "Entrigeln");
$status = array("SUCCESS" => "Erfolgreich gesendet", "PENDING" => "Steht aus", "INITIATED" => "Initiiert", "FAILED" => "Sendung Fehlgeschlagen", "CANCELLED" => "Sendung Abgebrochen");


// ------------------------------------------------------------------------------------------------------------
// Functions Bereich 
// ------------------------------------------------------------------------------------------------------------


function CreateInstanceByIdent($name, $ident ) {

$InsID = @IPS_GetInstanceIDByName($name, $ident);
	if($InsID === false)
	{
		$InsID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
		IPS_SetName($InsID, $name); // Instanz benennen
		IPS_SetParent($InsID, $ident ); // Instanz einsortieren unter
	}
	return $InsID;
}


function CreateVariableByIdent($id, $ident, $name, $type) {

$vid = @IPS_GetObjectIDByIdent($ident, $id);
	if($vid === false)
	{
		$vid = IPS_CreateVariable($type);
		IPS_SetParent($vid, $id);
		IPS_SetName($vid, $name);
		IPS_SetIdent($vid, $ident);
	}
	return $vid;
}

// BMW API ----------------------------------------------------

//Token neu anfordern, wenn nicht mehr gültig
if (time() > strtotime(GetValue($id_token_laufzeit))) connectBMWAPI();

	// Token erstellen
	function connectBMWAPI() {
		GLOBAL $username;
		GLOBAL $password;
		GLOBAL $debug;
		GLOBAL $id_token;
		GLOBAL $id_token_laufzeit;
		GLOBAL $id_token_fehlerfrei;
		
		// BMW API
				$app_id = "dbf0a542-ebd1-4ff0-a9a7-55172fbfce35";
				$auth_api = "https://customer.bmwgroup.com/gcdm/oauth/authenticate";
		
				$postfields = http_build_query(array(
					'username' => $username,
					'password' => $password,
					'client_id' => $app_id,
					'redirect_uri' => 'https://www.bmw-connecteddrive.com/app/default/static/external-dispatch.html',
					'response_type' => 'token',
					'locale' => 'DE-de'));
		
				$ch = curl_init();
				curl_setopt($ch, CURLOPT_URL, $auth_api);
				curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
				curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
				curl_setopt($ch, CURLOPT_HEADER, true);
				curl_setopt($ch, CURLOPT_NOBODY, true);
				curl_setopt($ch, CURLOPT_COOKIESESSION, true);
				curl_setopt($ch, CURLOPT_POST, true);
				curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
				curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
		
				$response = curl_exec($ch);
				$curl_error = curl_error($ch);
				curl_close( $ch );
				
		// Extract token
			preg_match( '/access_token=([\w\d]+).*token_type=(\w+).*expires_in=(\d+)/', $response, $matches );
		
			$error_log = "";
			
			// Check token type
			if ( empty( $matches[2] ) OR $matches[2] !== 'Bearer' ) {
		
				SetValue($id_token_fehlerfrei, false);

				return;
			}
		
			if($debug) {
				echo ($matches[0]) . "
";
				echo ($matches[1]) . "
";
				echo ($matches[2]) . "
";
				echo ($matches[3]) . "
";
			}
		
		SetValue($id_token, $matches[1]);
		SetValue($id_token_laufzeit, date("d.m.Y. H:i:s" , (time() + $matches[3])));
		SetValue($id_token_fehlerfrei, true);
	}




function SendBMWAPI($command, $action=false) {
	Global $id_token;
		$api = "";
		$token = GetValue($id_token);
		$ch = curl_init();
		curl_setopt( $ch, CURLOPT_URL, $api . $command );
		curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json' , 'Authorization: Bearer ' . $token) );
	
		if($action) {
		curl_setopt($ch, CURLOPT_POST, 1);
		curl_setopt($ch, CURLOPT_POSTFIELDS, 
			http_build_query(array('serviceType' => $action)));
		}
			
		curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
		curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
		$response = curl_exec($ch);
		$curl_error = curl_error($ch);
		curl_close( $ch );
		return $response;
}

?>

Daten Holen


<?

include("XXXXX /*Hier bitte die ID der Config Datei eintragen*/.ips.php");


// Navigation
$command = "https://www.bmw-connecteddrive.de/api/vehicle/navigation/v1/".$vin;
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_navigation, $response);


// Image
$command = "https://www.bmw-connecteddrive.de/api/vehicle/image/v1/" . $vin . "?startAngle=10&stepAngle=10&width=780";
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_image, $response);

// Dynamic
$command = "https://www.bmw-connecteddrive.de/api/vehicle/dynamic/v1/" . $vin . "?offset=-60";
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_dynamic, $response);

// Efficiency
$command = "https://www.bmw-connecteddrive.de/api/vehicle/efficiency/v1/" . $vin;
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_efficiency, $response);

// Car
$command = "https://www.bmw-connecteddrive.de/api/me/vehicles/v2";
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_car, $response);

// MapUpdate
$command = "https://www.bmw-connecteddrive.de/api/me/service/mapupdate/download/v1/" . $vin;
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_mapupdate, $response);

// Store
$command = "https://www.bmw-connecteddrive.de/api/store/v2/" . $vin . "/offersAndPortfolios";
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_store, $response);

// Specs
$command = "https://www.bmw-connecteddrive.de/api/vehicle/specs/v1/" . $vin;
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_specs, $response);

// Service
$command = "https://www.bmw-connecteddrive.de/api/vehicle/service/v1/" . $vin;
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_service, $response);


// Service Partner
$command = "https://www.bmw-connecteddrive.de/api/vehicle/servicepartner/v1/" . $vin;
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_service_partner, $response);

// Chargingprofile
$command = "https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/chargingprofile/v1/" . $vin;
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_chargingprofile, $response);


// History
$command = "https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/" . $vin . "/history";
	$response = SendBMWAPI($command);
#	if($debug) print_r($response);
SetValue($id_history, $response);


/*
Falls es noch jemand braucht

$command = "https://www.bmw-connecteddrive.de/api/me/service/vehicleprofile/v1";
	$response = SendBMWAPI($command);
	if($debug) print_r($response);

echo "
";

$command = "https://www.bmw-connecteddrive.de/api/me/service/batteryguard/v1";
	$response = SendBMWAPI($command);
	if($debug) print_r($response);

	echo "
";

$command = "https://www.bmw-connecteddrive.de/api/me/service/send2car/v1";
	$response = SendBMWAPI($command);
	if($debug) print_r($response);

#https://www.bmw-connecteddrive.de/api/me/service/mapupdate/download/v1/XXXXXXXXXXXXXXXX

*/



?>

Daten Senden


<?

include("XXXXX /*Hier bitte die ID der Config Datei eintragen*/.ips.php");

// z.B: remoteservice("hupe);  oder remoteservice("lichthupe);

function remoteservice ($service) {
	GLOBAL $id_remoteservice;
	GLOBAL $debug;
	GLOBAL $vin;
	
	switch ($service) {
	
		case "hupe":
	
				// Remote Service Hupe betätigen
				$command = "https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/".$vin."/RHB";
				$action  = "HORN_BLOW";
				
					$response = SendBMWAPI($command, $action);
					if($debug) print_r($response);
					$response .= GetValue($id_remoteservice);
				SetValue($id_remoteservice, $response);
				return $command; 
		break;
		
		case "lichthupe":
				
				// Remote Service Lichthupe betätigen
				$command = "https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/".$vin."/RLF";
				$action  = "LIGHT_FLASH&count=2";
				
					$response = SendBMWAPI($command, $action);
					if($debug) print_r($response);
					$response .= GetValue($id_remoteservice);
				SetValue($id_remoteservice, $response);
				return $command; 
		break;
		
		case "tuerzu":
				
				// Remote Service Türen verriegeln
				$command = "https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/".$vin."/RDL";
				$action  = "DOOR_LOCK";
				
					$response = SendBMWAPI($command, $action);
					if($debug) print_r($response);
					$response .= GetValue($id_remoteservice);
				SetValue($id_remoteservice, $response);
				return $command; 
		break;
		
		case "tuerauf":
					
				// Remote Service Türen entriegeln
				$command = "https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/".$vin."/RDU";
				$action ="DOOR_UNLOCK";
				
					$response = SendBMWAPI($command, $action);
					if($debug) print_r($response);
					$response .= GetValue($id_remoteservice);
				SetValue($id_remoteservice, $response);
				return $command; 
		break;
		
		case "lueftung":
				
				// Remote Service Standlüftung / Standheizung
						// Zeit aktivieren
						#https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/XXXXXXXXXXXXXX/RCT
						#{"climateTimer":{"timerEnabled":true,"departureTime":"18:01"}}
						
						// Timer deaktivieren
						#https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/XXXXXXXXXXXXXX/RCT
						#{"climateTimer":{"timerEnabled":false}}
				

				$command = "https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/".$vin."/RCN";
				$action ="CLIMATE_NOW";
				
					$response = SendBMWAPI($command, $action);
					if($debug) print_r($response);
					$response .= GetValue($id_remoteservice);
				SetValue($id_remoteservice, $response);
				return $command; 
		break;
		
		case "ortung":
				
				
				// Remote Service VehicleFinder
				// Dieser geht noch nicht
				$command = "https://www.bmw-connecteddrive.de/api/vehicle/remoteservices/v1/".$vin."/POS";
				$action ="VEHICLE_FINDER";
				
					$response = SendBMWAPI($command, $action);
					if($debug) print_r($response);
					$response .= GetValue($id_remoteservice);
				SetValue($id_remoteservice, $response);
				
				return $command; 
		break;
	
	}

}

?>

Daten Verarbeiten


<?

include("XXXXX /*Hier bitte die ID der Config Datei eintragen*/.ips.php");

// Bereich Dynamic ----------------------------------------------------------------------------------

	// Variablen erstellen
	$id_mileage				= CreateVariableByIdent($id_dynamic, "BMW_". substr($vin, -7) . "_mileage", "Kilometerstand", 1);
	$id_remaining_fuel		= CreateVariableByIdent($id_dynamic, "BMW_". substr($vin, -7) . "_remaining_fuel", "Tank Füllstand", 1);


	$data = json_decode(GetValue($id_dynamic)); 

	SetValue($id_mileage, $data->attributesMap->mileage);
	SetValue($id_remaining_fuel, $data->attributesMap->remaining_fuel);

	if($debug) print_r($data); echo "
";


// Bereich Navigation ----------------------------------------------------------------------------------

	// Variablen erstellen
	$id_position			= CreateVariableByIdent($id_navigation, "BMW_". substr($vin, -7) . "_position", "GPS Position", 3);
	$id_maps				= CreateVariableByIdent($id_navigation, "BMW_". substr($vin, -7) . "_maps", "Maps", 3);


	$data = json_decode(GetValue($id_navigation)); 
	
	$latitude = number_format($data->latitude, 6, ".", "");
	$longitude = number_format($data->longitude, 6, ".", "");
	$pos = $latitude ."," . $longitude;

	SetValue($id_position, $pos);
	
			if($debug) echo $pos . "
";
	
	$maps = "
	<img src='http://maps.googleapis.com/maps/api/staticmap?center=$pos&zoom=15&size=245x245&scale=1&markers=color:blue|$pos'  style='float: left; margin-left:4px; margin-right:4px; margin-bottom:4px; '>
	<img src='http://maps.googleapis.com/maps/api/staticmap?center=$pos&zoom=18&size=245x245&scale=1&markers=color:blue|$pos'style=' margin-left:4px;' >
	";
	SetValue($id_maps, $maps);
	
	

// Bereich History ----------------------------------------------------------------------------------

	// Variablen erstellen
	$id_verlauf				= CreateVariableByIdent($id_history, "BMW_". substr($vin, -7) . "_verlauf", "Verlauf", 3);
	
	// Daten einlesen
	$data = json_decode(GetValue($id_history), true);
		
		if(isset($data) && !empty($data)) {
			$html = '<table><th coolspan=3>Verlauf</th>';
				for($index = 0; $index < count($data); $index++) {
					$html .= "<tr>";
					$html .= "<td>" . $type[$data[$index]["remoteServiceType"]] . "</td>";
					$html .= "<td>" . date("d.m.Y. H:i:s", ($data[$index]["creationTime"]/1000)) . "</td>";
					$html .= "<td>" . $status[$data[$index]["status"]] . "</td>";
					$html .= "</tr>";
				}
		
			$html .= "</table>";
		}
	
	SetValue($id_verlauf, $html);
	


?>

Die Variable wurde geändert nach Float, kannst Du mal schauen unter Variablenprofilen ob da unter Integer ein Profil mit „BMW.TankCapacity“ existiert und dies löschen. Theoretisch sollte dies dann nach einem Update passen, ansonsten bitte noch mal melden.

Die sollten jetzt gesetzt werden ebenso in der Karte. Funktioniert die Karte auch?

Ansonsten ist jetzt ein Feld mit Update Intervall im Konfigurationsformular dazu gekommen. Wenn Du wirklich kein Update wünscht bzw. das von Hand machen willst setzt Du den Wert auf 0.

Weiterhin gibt es einen Slider für die Zoom Stufe der Karte, damit man besser erkennen kann wo das Auto steht. 0 % ist Weltansicht und 100 % maximale Auflösung auf Gebäudeebene.

Außerdem gibt es noch eine Variable für die Servicemeldungen, müsst ihr mal schauen ob das was ankommt.

Was wohl noch fehlt ist eine Möhlichkeit die GPS Daten upzudaten, wer da eine Idee hat, als her mit und Stromer hat sich noch niemand gemeldet. Wie ist sonst der Zwischenstand der alpha Version, was geht bzw. geht noch nicht, bzw. was fehlt noch an Funktionen bzw. Werten die abgelegt werden sollen?

Falls es erst mal so weit gehen sollte, könnte ja vielleicht jemand von Euch noch ein Screenshot ohne wichtige persönliche Daten machen den man dann ins Readme übernehmen kann von der Webfront Ansicht. Wenn so weit erst mal die Grundfunktionen gehen könnte man dann ja noch HTMLBoxen mit schönem Inhalt der Werte ergänzen für die die das brauchen sollten. Ihr könnt ja mal Vorschläge machen oder was posten was ihr selber nutzt.