Fiat 500e (uconnect) MQTT

Was braucht ihr, Auto hängt zu Hause an der Wallbox. Ist allerdings voll geladen…
@demel42 hat Zugriff auf den Wagen…

Mein Wunsch war es, im Modul eine zusätzliche Variable für die Anzeige der restlichen Ladedauer zu integrieren (so wie in der App).
@demel42 benötigt hierfür die Info, um was für eine Variable es sich dabei aus dem Debug handelt, welche den gleichen Wert wie in der App anzeigt.

Dann müsste @demel42 die Variable finden können, welche den Wert mit 0 Minuten restliche Ladedauer enthält, wenn dein Auto voll geladen ist…

Hallo,
habe gerade mal nachgesehen:

21.09.2024, 14:20:51 |         UpdateStatus | battery.timeToFullyChargeL2=295

Die 295 sind die verbleibende Zeit in Minuten.

Gruß, Peter

Nachtrag: Lade mit dem „Ladeziegel“. Evtl. Haben Wallbox oder DC-Laden einen anderen Charge-Level

2 „Gefällt mir“

Mich treibt noch um, was L2/L3 ist, denn es gibt zwei Werte und eine Steuervariable.
Was ist denn der Wert von timeToFullyChargeL3?

Habe gerade meinen Beitrag ergänzt:

Lade mit dem „Ladeziegel“. Evtl. Haben Wallbox oder DC-Laden einen anderen Charge-Level

Der Level3-Wert ist bei mit „0“

Ok, versucht es mal mit v1.7b3

Ich besetze die Variable TimeToFullyCharge (Verbleibende Ladedauer → oder wie heisst das in der App?) mit timeToFullyChargeL2 oder timeToFullyChargeL3 in Abhängig von chargingLevel (was ja bisher immer auf LEVEL_2 stand).

1 „Gefällt mir“

Kann ja wie gesagt noch nicht testen;
aber wird die restliche Ladedauer der Variable nur in Minuten ausgegeben?
In der App wird z.B. in Stunden und Minuten ausgegeben.

Einer muss umrechnen!

Für mich wäre der Originalwert (in Minuten) besser. Dann kann ich zwei Werte ermitteln:
Zeit bis Ladeende (Minuten in SS:MM umrechnen)
Uhrzeit Ladeende ( aktuelle Zeit + Ladedauer)

Leider habe ich gerade das Laden beendet und kann erst irgendwann nächste Woche testen.

1 „Gefällt mir“

Aktueller Test der restlichen Ladedauer: funktioniert wie gewünscht.
Eins Sache beschäftigt mich jedoch noch immer:
Warum müssen zusätzliche Variablen angelegt werden, das der DeepRefresh sich immer nach 5 Minuten aktualisiert wenn Fahrzeug geladen wird?

Das könnte man doch ganz leicht im Hintergrund des Moduls ausführen - alles wäre vorhanden:
Aktualisierungsintervall des Moduls = x Minuten
Variable „Status des Ladevorgangs“ = Charging
Also wenn Variable = Charging führe DeepRefresh nach x Minuten aus
Somit bräuchte man keine zusätzlichen Variablen anlegen…

Wird die Variable „Status des Ladevorgangs“ ohne DeepRefresh aktualisiert?

Hm, gute Frage, wie könnte das am besten testen?
Warum dann nicht einfach nach x Minuten immer den DeepRefresh ausführen (wenn nicht geladen wird hat dieser sowieso keine Funktion)?

Wenn du den DeepRefresh immer alle x Minuten ausführst, legt sich dein Auto nicht schlafen und das geht auf den Akku. Das wird in diversen Foren nicht empfohlen!

Ich dachte der DeepRefresh aus diesem Modul funktioniert nur wenn Fahrzeug geladen wird?

Korrekt ausgedrückt ist es so, das der API-Aufruf mit einem Fehler quittiert wird, wenn das Auto nicht läd und dieser Fehler wird im Modul abgefangen.

Früher konnte man vermutlich ein DeepRefresh machen (wenn man den Diskussionen auf den entsprechenden Seiten glauben kann) und führte dann dazu, das diese Autos nicht schlafen gingen. Und ob es „kein Problem“ ist, permanent ein DeepRefresh zu machen, ist etwas unklar - hat eventuell einen Grund, warum Fiat diese Daten nicht von alleine aktuell hält?

Es ist ja nun wirklich keine gute Programmierung, darauf zu setzen, einen API-Fehler abzufangen.

Wäre ja schon sinnvoller, die Frage von @DeejayT zu klären …

… dazu musst du ja nur beim nächsten Ladevorgang beobachten, ob und wann der Lade-Status aktualisiert wird (so ohne DeepRefresh).
Wenn eine zeitnahe Aktualisierung gesichert stattfindet, kann ich ja drüber nachdenken, im Modul das DeepRefresh automatisch zu machen.

1 „Gefällt mir“

ich habe mir ein zyklisches Ereignis mit weiteren Bedingungen erstell:

und für die Umrechnung der Restladedauer folgenden Code:

$stunden		= intdiv($minuten, 60);			// Ganzzahlige Division
$restMinuten	= $minuten % 60;			    // Restminuten mit Modulo-Operator
$ladedauer		= sprintf("%02d:%02d", $stunden, $restMinuten)." Std. bis ".date("H:i",time()+$minuten*60)." Uhr";

Grüße, Peter

Der Status des Ladevorgangs (=aktiv) sowie der Status des Ladekabels (=verbunden) aktualisiert sich von selbst nach dem einstecken des Ladekabels ohne zusätzliche Ausführung von DeepRefresh!

Ein Schreibfehler hat sich zudem eingeschlichen bei der Variable „Status der Ladekabels“.

Umrechnen in Stunden und Minuten geht auch kürzer:
SetValue($newLadedauer, (date(‚G:i‘, mktime(0, (GetValue($Ladedauer))))));

Und nach Abschluss des Ladevorgangs, geht der Status dann auch von alleine wieder auf „inaktiv“?

Meine noch nicht zu Ende gedachte Idee wäre, das ich - solange der „Status des Ladevorgangs“ „aktiv“ ist - bei jedem Update zuerst ein DeepRefresh mache. Ist allerdings schon etwas tricky …

Dieser Automatismus müsste in der Instanzkonfiguration aktivierbar/deaktivierbar sein, weil ja keiner beurteilen kann, ob dieser Trick nicht doch eine negative Auswirkung hat.

ok, gefixed, kommt mit dem nächsten Update

Das ist aber ein ziemlich schmutziger Trick, denn mktime() und date() sind Datumsfunktionen und das Ganze funktioniert anscheinend nur per Zufall. mktime() wird eigentlich als erster Parameter die Stunde und als 2. Parameter die Minuten (der Stunde) übergeben (siehe PHP: mktime - Manual).

Ich würde es so machen:

$v = GetValue($Ladedauer);
SetValue(sprintf("%d:%02d", floor($v / 60), $v % 60));
1 „Gefällt mir“

Das habe ich natürlich nicht bis zum Ende beobachtet und Akku ist auch schon wieder voll :sleepy:
Wäre evtl. @DeejayT oder @pitty so lieb und würden es nochmals testen?