[Modul] Smartcar

Hallo @mb-stern,

hast Du schon diesen Blogbeitrag vom Smartcar gelesen?

https://smartcar.com/blog/smartcar-partners-with-mercedes-benz-connectivity-services-gmbh

Hein09

Danke für den Hinweis, ich habe ihn gesehen…

Jedoch erschliesst sich mir noch nicht, was sich aktuell für neue Möglichkeiten seitens Mercedes zeigen. Wahrscheinlich ist das schon mal eine Vorankündigung.

Es wird aber API V3 kommen, wo bereits einige Scopes laufen, aber noch keine Befehle ans Fahrzeug gesendet werden können. Sobald diese V3 durchgehend unterstützt ist, werde ich das Modul anpassen. Das werden sich dann allenfalls neue Möglichkeiten zeigen.

Was aber auch neue ist sind die Vehicle Signals in den kostenpflichtigen Plänen von Fr 1.99 - 3.99$. Dort habe ich eine Anfrage beim Support am laufen, ob es sich da allenfalls um Signale handelt, welche über Webhook reinkommen. Das würde das umständlich pollen der Scopes ersetzen und die geänderten Werte kämen sofort. Jedoch ist das bis anhin meines Wissens nur im Premium-Plan enthalten.

Die wichtigste Abfrage, der SOC, funktioniert natürlich bereits jetzt für fast alle Marken. Das ist der wichtigeste Wert, um eine vernünftige Wallbox-Regelung hinzubekommen.

Und tatsächlich, es gibt nun Signals über Webhook, somit entfällt das lästige pollen. Allerdings muss dazu ein passender Plan bei Smartcar für 1.99 - 3.99$ erworben werden.
Deshalb ist nun Version 3.0 beta verfügbar, bitte um Feedback.

Signals über Webhook sind unterstützt, sofern ein entsprechender (kostenpflichtiger) Plan bei Smartcar gewählt wurde. Die Webhooks sind unter ‚Integration‘ in der Smartcar Konfiguration zu konfigurieren. Achte darauf, dass jeweils ein Webhook mit Signals einem bestimmten Fahrzeug zugewiesen ist. Es können verschiedene Trigger und Datenpunkte gewählt werden, ja nach erworbenem Smartcar-Plan. Es sind bei weitem nicht alle Signals für alle Fahrzeugen verfügbar. Bei eintreffen der Signals im Webhook werden automatisch Variablen dazu angelegt. Daher sind hier nur Signals zu wählen, welche auch effektiv benötigt werden. Das Modul filtert automatisch fehlerhafte Signals, so dass dazu keine Variablen angelegt werden. Das Konfigurationsformular im Modul ist komplett zu konfigurieren, da einige Signals auch die Daten der entsprechenden Variablen der Scopes aktualisieren (z.B. SOC).

Tolles Modul, vielen Dank dafür.

Leider haben wir mehr als ein Auto des selben Herstellers (3) mit entsprechenden Wallboxen.

Wird es in absehbarer Zukunft eine Möglichkeit geben mehr als ein Fahrzeug des selben Herstellers hinzuzufügen ohne für jedes einen eigenen Smartcar Account erstellen zu müssen ?

Gruß

Tom

Das geht problemlos, ist bei mir auch der Fall.

Du installierst das Modul so oft, soviel Fahrzeuge du hast.

Du kannst alle Fahrzeuge in denselben Smartcar-Account einbinden.

Es könnte höchstens Schwierigkeiten geben, wenn die Fahrzeuge am gleichen OEM-Konto hängen. Probiere es aber trotzdem, es könnte gut sein, dass es funktioniert. Bitte gib Bescheid.

Aktuell aber stelle ich fest, dass keine neuen Fahrzeuge bei Smartcar angelegt werden können. Ich denke aber, dass dies ein vorübergehendes Problem ist und bin sowieso dran, ein Ticket zu erstellen. Ich habe noch einige andere Ungereimtheiten festgestellt. Wie zum Beispiel, dass einig e Trigger sehr selten ausgelöst werden. Bei meinen Fahrzeugen ist es zum Beispiel ausgerechnet der SOC.

Neuer Tag, neue Beta…

Version 3.1 kann die zum Fahrzeug kompatiblen Scopes erkennen. So werden keine unnötigen Scopes abgefragt. Ebenfalls ist der Fehler bei der API-Abfrage der Batteriekapazität behoben.

1 „Gefällt mir“

Es ist eine neue Beta im Store, welche nun auf IPSModuleStrict basiert und daher wurde die Kompatibilität auf 8.2 hochgesetzt.

1 „Gefällt mir“

Moin mb-stern,

vielen Dank für Deine Arbeit.

Braucht man jetzt für das Modul, ein Bezahlkonto bei Smartcar?

Denn ich bekomme jetzt Fehler angezeigt:

Und es wird auch fast nichts mehr abgefragt:

Hein09

Die Meldung bedeutet, dass der jeweilige Scope nicht unterstützt ist.

Ein Bezahlkonto brauchst du ab einer gewissen Abfragehäufigkeit. Ich habe jedenfalls eins, darum kann ich nicht genau sagen, ab wann es nötig ist.

1: Am besten registrierst du alle Scopes (unter Berechtigungen) im Modul und dann verbindest du neu mit Smartcar. Dies darum, weil du dir dann den Zugang für Signale nicht verbaust, welche allenfalls über die API nicht kommen.

2: Danach rufst du die Fahrzeugdaten ab

3: Danach schaust du im Fehlerprotokoll (wie oben), welche Scopes nicht unterstützt sind und deaktivierst die entsprechenden Schieber wieder, um keine Fehlermeldungen zu erhalten. Nicht mehr neu registrieren. Es werden sozusagen nie alle Scopes unterstützt…

Danach kannst du auch in den Smartcar-Einstellungen unter Integrations einen Webhook erstellen und deinem Fahrzeug zuordnen, damit du Signale erhältst. Dies ist die beste Version um die Fahrzeugdaten zu erhalten, weil diese dann vom Fahrzeug bzw. OEM bei Änderung gepusht werden.

Ich habe auch einen EQA, hier sieht das Maximum mögliche an Daten so wie unten aus. Das Problem bei meinem ist, dass der km-Stand und die Ortungsdaten zwar kommen, aber nicht aktualisiert werden. Kannst mal testen, ob das bei dir auch so ist.

Moin,

vielen Dank für die Anleitung.

Bei Punkt 1 bekomme ich zum Schluss diese Info:

Danach bei Punkt 2 werden folgende Variablen angelegt:

Punkt 3 hier die Fehlermeldungen die ich erhalten habe:

Wenn ich denn die Berechtigungen alle abschalte wo Fehlermeldungen gekommen sind bleibt nur das übrig:

Woher hast Du die restlichen Daten?

Hein09

Nur die 501 Fehler bedeuten dass das Fahrzeug nicht kompatible ist (Vehicle not capable). Deaktiviere mal nur diese und lass die anderen aktiv und probiere zu einem späteren Zeitpunkt nochmals. Aktiviere auch die Signale über den Webhook in den Einstellungen bei Smartcar wie oben beschrieben. Im Moment ist sowieso noch ein wenig der Wurm drin bei Smartcar, ich erhalte wie erwähnt bei einigen Scopes zwar Daten, aber nicht die aktuellen,

den Webhook habe ich schon eingeschaltet, ich kann nur ein paar Felder zusätzlich auswählen.

Beim letzten mal wie ich das Modul genutzt hatte, hatte ich auch die Reifendrücke und den Standort. Wo sind die jetzt geblieben?
Obwohl die mir ja angezeigt wurden, siehe das Bild unter Punkt 1 in meiner letzten Beitrag.

Und wie hast Du es geschafft Dir soviel anzuzeigen?

Bei der Übersicht in Smartcar, wird mir angezeigt, das ich mit zwei Fahrzeugen verbunden bin:


Ich habe nur eins angebunden, was bedeutet zwei, ist das zweite Fahrzeug der Simulator?

Hein09

Smartcar hat die Kommunikation mit Mercedes geändert und sollte offensichtlich verbesserungne bringen, was es aber im Moment noch nicht hat. Wenn du neu autorisierst hast du eben nicht mehr die alten Funktionen.

Wenn du zwei Fahrzeug hast dann lösche mal beide in Smartcar und autorisiere neu. Und wenn du den Webhook dem Fahrzeug hinzugefügt hast dann solltest du die Signals auch erhalten, so ähnlich wie ich. Leider kann ich dir nicht die ganzen Smartcar-Abläufe hier beschreiben, wie man das macht musst du schon selber nachlesen. Ich habs dir eingangs grob beschrieben

Vielen Dank für die Info, jetzt verstehe ich warum vorher mehr Daten da waren.

So war es auch nicht gedacht, das Du mir Abläufe bei Smartcar erklären sollst :slight_smile:

Denn hoffe ich das Smartcar es endlich wieder hin bekommt, das es wieder ordentlich funktioniert.

Bei Smartcar unter " Vehicle Connections" wird mir nur ein Fahrzeug angezeigt, das aktuell verbundene. Deswegen bin ich irritiert was das zweite bedeutet.

Hein09

Wie gesagt, versuch es ab und zu wieder und vor allem, nutze die Signale, das ist viel besser als die API-Abfrage, da die Daten dann kommen, wenn sie sich ändern.

Hallo in die Runde,

ich hab das Modul bei mir sauber am Laufen. Allerdings habe ich jetzt den Energiemanager aufgesetzt um damit mein Auto bei günstigen Strompreisen zu laden. Allerdings stoße ich da an das Limit der möglichen Abfragen bei Smartcar. In der kostenlosen Variante sind ja nur maximal 500 API Requests pro Monat möglich. Es gibt auch eine kostenpflichtige Variante wo allerdings nirgendwo beschrieben ist, wie viele API requests man da machen kann.
Mein Problem war halt, dass der Energiemanager den Ladestand des Autos braucht um den Ladevorgang zu starten. Der sollte also aktuell sein. Gestern Abend hab ich das Auto mit 25% an die Wallbox angeschlossen und Smartcar hat wegen zu vieler Requests keine Daten mehr geliefert. Daher ging der Energiemanager vom letzten Ladestand 78% aus und hat nicht geladen!

wie geht ihr mit der Requestbeschränkung um und wie könnte man das lösen? weiß jemand wie viele Requests man bei Smartcar mi t dem Smartcar Build Basic für 1,99$ pro Monat und Auto hat?

Hier eine Übersicht der Leistungen.

Ich würde auf möglichst viele Signale setzen, auch wenn kein OEM alle unterstützt….

Für alle, die Fahrzeuge von der BMW Group besitzen, könnte das vielleicht interessant sein.
Ich habe ein Modul zur relativ neuen öffentlichen BMW CarData Schnittstelle geschrieben mit dem ihr Zugriff auf über 250+ Statusvariablen des Autos haben könnt, wie Tank, Kilometerstand, Türen- und Fensterstati und vieles mehr…

Bisher beschränkt sich mein Modul auf ein Abfragelimit von 50 Anfragen pro Tag, aber ein update für das Modul ist schon geplant mit dem man dann die Daten, die vom Fahrzeug gesendet werden, live im IP-Symcon hat.

Na die Info hab ich selbst auf der Webseite gefunden. Die beantwortet aber nicht meine Frage.

@mb-stern
vielen Dank für das tolle Modul!
Das funktioniert super und ich kann es gut gebrauchen da Polestar keine API bereitstellt.

@ThomasWest69
Ich habe es mit drei Skripten folgendermaßen gelöst:
Ein Start-Skript, in dem ich mir alle Parameter merke und das gestartet wird, wenn der Ladeleistung größer 500 Watt liegt.
In ihm wird lediglich der aktuelle SOC und der Kilometerstand per API abgefragt.

Ein Skript, dass z.B. alle 5 Minuten aufgerufen wird und mir den aktuellen SOC berechnet.

Und ein Ende Skript, dass mir die Ladeverluste und den Verbrauch berechnet.

Folgende Skripte dienen lediglich als “Muster”

MST

<?php

// --- IDs KONFIGURATION ---
$id_SoC_Echt         = 57580; // Dein API SoC
$id_Start_SoC_Merker  = 33666; // Dein API SoC beim Ladestart
$id_SoC_Berechnet    = 33613; // NEUE Variable (Float/Int) für die Anzeige
$id_Km_Stand         = 51386; // Aktueller KM Stand
$id_Km_Lstart        = 28009; // Aktueller KM Stand beim Ladestart
$id_Km_Gefahren      = 57371; // Variable für gefahrene KM
$id_Skript_Berechnung= 11765; // ID des Skripts Nr. 2 (siehe unten "Das Rechen-Skript")
$id_Geladene_Session = 31193; // NEUE Variable (Float) als Zähler für diese Ladung in kWh

// API Abruf (nur einmal beim Start)
SMCAR_FetchBatteryLevel(23432);
SMCAR_FetchOdometer(23432);

// Kurze Pause, damit Variablen aktualisiert werden können (optional)
IPS_Sleep(1000); 

$KMalt = GetValue($id_Km_Lstart);
$KM_neu = GetValue($id_Km_Stand);
SetValue($id_Km_Lstart,$KM_neu); // km merken
$KM_diff = $KM_neu - $KMalt;

// Nur positive Differenz speichern (falls API mal 0 liefert)
if($KM_diff > 0) {
    SetValue($id_Km_Gefahren, $KM_diff);
}

// --- INITIALISIERUNG DER BERECHNUNG ---

// 1. Den echten API-Wert als Startwert für die Berechnung setzen
$startSoC = GetValue($id_SoC_Echt);
SetValue($id_SoC_Berechnet, $startSoC);

SetValue($id_Start_SoC_Merker, GetValue($id_SoC_Echt));     // SOC merken

// 2. Session Zähler nullen
SetValue($id_Geladene_Session, 0.0);

// 3. Timer für das Rechen-Skript aktivieren (alle 300 Sekunden = 5 Minuten)
IPS_SetScriptTimer($id_Skript_Berechnung, 300);

// Optional: Loggen
IPS_LogMessage("LadeLogik", "Laden gestartet. Start-SoC: $startSoC %. Gefahrene KM: $KM_diff");



// — KONFIGURATION —
$batterieKapazitaet = 69.0; // kWh
$wirkungsgrad       = 0.90; // 90% (10% Verlust)
$intervallMinuten   = 5;    // Wie oft läuft das Skript?

// IDs
$id_Wallbox_Leistung = 22716; // ID Wallbox Leistung (Watt) - ANPASSEN!
$id_SoC_Berechnet    = 33613; // Die Variable, die wir hochzählen
$id_Geladene_Session = 31193; // Zähler für kWh

// Aktuelle Ladeleistung holen
$leistungWatt = GetValue($id_Wallbox_Leistung);

// Wenn aus irgendeinem Grund die Leistung 0 ist, abbrechen (oder Timer stoppen)
if($leistungWatt < 100) {
return;
}

// — BERECHNUNG —

// 1. Energie in diesem Intervall (Leistung * Zeit)
// kWh = (Watt / 1000) * (Minuten / 60)
$energieBrutto_kWh = ($leistungWatt / 1000) * ($intervallMinuten / 60);

// 2. Netto Energie (was im Akku ankommt)
$energieNetto_kWh = $energieBrutto_kWh * $wirkungsgrad;

// 3. Prozent-Zuwachs berechnen
$zuwachsProzent = ($energieNetto_kWh / $batterieKapazitaet) * 100;

// 4. Neuen SoC setzen
$alterSoC = GetValue($id_SoC_Berechnet);
$neuerSoC = $alterSoC + $zuwachsProzent;

// Begrenzung auf 100%
if($neuerSoC > 100) $neuerSoC = 100;

SetValue($id_SoC_Berechnet, $neuerSoC);

// 5. Brutto-Energie zur Session addieren (für die Verbrauchsberechnung am Ende)
SetValue($id_Geladene_Session, GetValue($id_Geladene_Session) + $energieBrutto_kWh);


// — KONFIGURATION —
$id_Geladene_Session  = 31193; // Die aufsummierten kWh
$id_Km_Gefahren       = 57371; // Die KM Differenz vom Start-Skript
$id_Skript_Berechnung = 11765; // ID des Skripts Nr. 2 (siehe unten „Das Rechen-Skript“)
$id_Km_Gefahren       = 57371; // Die KM Differenz
$id_SoC_Echt          = 57580; // Die Variable, wo der API Wert landet
$id_Start_SoC_Merker  = 33666; // Dein API SoC beim Ladestart
$id_Verlust           = 31480; // in %
$batterieKapazitaet = 69.0; // Netto-Kapazität in kWh

// — 1. Timer deaktivieren —
IPS_SetScriptTimer($id_Skript_Berechnung, 0);

// — 2. Abschluss-Daten holen —

// WICHTIG: Jetzt einen API Call machen, um den echten Endstand zu haben
// Da der Ladevorgang beendet ist, lohnt sich dieser eine Abruf.
//SMCAR_FetchBatteryLevel(23432);
// Kurze Wartezeit, falls IP-Symcon zeit braucht, die Variable zu aktualisieren
IPS_Sleep(1000);

$socStart   = GetValue($id_Start_SoC_Merker); // Stand beim Einstecken
$socEnde    = GetValue($id_SoC_Echt);         // Stand jetzt (echt)
$kwhWallbox = GetValue($id_Geladene_Session); // Brutto Energie

// — 3. Berechnung der Verluste —

// Wie viel Prozent wurden tatsächlich in den Akku geladen?
$socDifferenz = $socEnde - $socStart;

if ($socDifferenz > 0 && $kwhWallbox > 0) {

// Energie, die rechnerisch im Akku angekommen ist (Netto)
$kwhAkku = $batterieKapazitaet * ($socDifferenz / 100);

// Verlust in kWh
$verlustKWh = $kwhWallbox - $kwhAkku;

// Wirkungsgrad berechnen (Netto / Brutto)
$wirkungsgrad = ($kwhAkku / $kwhWallbox) * 100;

// Verlust in Prozent
$verlustProzent = 100 - $wirkungsgrad;

// --- AUSGABE / LOGGING ---
IPS_LogMessage("LadeStatistik", "--- Ladeabschluss Bericht ---");
IPS_LogMessage("LadeStatistik", "SoC Hub: " . $socStart . "% -> " . $socEnde . "% (+$socDifferenz%)");
IPS_LogMessage("LadeStatistik", "Energie Wallbox (Brutto): " . number_format($kwhWallbox, 2) . " kWh");
IPS_LogMessage("LadeStatistik", "Energie Akku (Netto):     " . number_format($kwhAkku, 2) . " kWh");
IPS_LogMessage("LadeStatistik", "Verlust: " . number_format($verlustKWh, 2) . " kWh (" . number_format($verlustProzent, 1) . "%)");
IPS_LogMessage("LadeStatistik", "Wirkungsgrad: " . number_format($wirkungsgrad, 1) . "%");

// Optional: Speichern in einer Variable für Visualisierung
SetValue($id_Verlust, $wirkungsgrad);

} else {
IPS_LogMessage(„LadeStatistik“, „Ladung beendet, aber zu wenig Energie geflossen für Berechnung.“);
}

// — 4. Verbrauch pro 100km (Dein ursprünglicher Teil) —
$gefahrene_km = GetValue($id_Km_Gefahren);

if ($gefahrene_km > 0 && $kwhWallbox > 0) {

$verbrauch = ($kwhWallbox / $gefahrene_km) * 100;
SetValue(56712,  $verbrauch);
IPS_LogMessage(„LadeStatistik“, „Verbrauch (Brutto): " . number_format($verbrauch, 2) . " kWh/100km“);
// SetValue(57371, 0); // Optional: KM Resetten für nächste Fahrt?
}