Regler stellt den Schlaf-Timeout des Dongles (2026.9.3.10)
Der Regler "Fahrt beenden" ist jetzt eine Zahl fuer zwei Dinge: unsere eigene
Wartezeit bis zum Fahrtende und der Schlaf-Timeout des FMM003 (103). So lange
bleibt der Dongle wach und wartet darauf, dass es gleich weitergeht; danach
schlaeft er. Die 180 s Ignition OFF Delay laufen davor und bleiben unsichtbar -
sie werden nur von der Fahrtdauer abgezogen. Der Regler geht deshalb von 1 bis
60 in Einerschritten; das Geraet kennt kein Timeout 0.
flespi.py liest und schreibt die Geraete-Konfiguration. Drei Annahmen sind an
der echten API gefallen und stehen als Messung im Modulkopf: der Wert liegt in
current (nicht value), die Einstellung heisst sleep_mode mit dem Wert eine Ebene
tiefer unter mode, und ein PUT braucht {"properties": ..., "address": ...}.
Die eigene Auftrags-Warteschlange ist wieder entfallen. Sie war fuer "das Geraet
schlaeft" gebaut - das gilt aber nur fuer das Geraet, nicht fuer die
Schnittstelle: die vollstaendige Konfiguration kam herein, waehrend das Fahrzeug
seit dem Vortag stand. flespi puffert selbst (pending + address=connection), ein
zweites Auftragsbuch waere eine zweite Warteschlange fuer dieselbe Aufgabe.
Gegengelesen wird nach jedem Schreiben; als Erfolg zaehlt current ODER pending -
letzteres ist bei stehendem Fahrzeug der Normalfall.
Live gegen den echten Account belegt: Token sieht genau ein Geraet, 127
Einstellungen bei parkendem Fahrzeug gelesen, Regler 15 geschrieben und als
pending bestaetigt (Nachbarfelder unveraendert), zweiter Neustart ohne erneute
Anfrage.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -220,9 +220,10 @@ class Nachziehen(Basis):
|
||||
)
|
||||
self.assertEqual(k.ablage.aktualisiert, [])
|
||||
|
||||
async def test_nur_die_juengste_fahrt_wird_korrigiert(self):
|
||||
"""Eine aeltere vorlaeufige Fahrt darf ein spaetes Aus nicht an sich
|
||||
ziehen - sonst wanderte ihr Ende ueber die naechste Fahrt hinweg."""
|
||||
async def test_keine_verlaengerung_ueber_eine_andere_fahrt_hinweg(self):
|
||||
"""Faengt zwischen dem vorlaeufigen Ende und dem Aus eine andere Fahrt
|
||||
an, gehoert das Aus zu ihr - zwei sich ueberlappende Fahrten waeren
|
||||
schlimmer als eine zu kurze."""
|
||||
alt_start = T0 - datetime.timedelta(hours=3)
|
||||
k = FakeKoordinator(
|
||||
start_ts=None,
|
||||
@@ -236,9 +237,29 @@ class Nachziehen(Basis):
|
||||
k, echt + datetime.timedelta(seconds=f.ZUENDUNG_NACHLAUF_S)
|
||||
)
|
||||
self.assertEqual(
|
||||
k.ablage.aktualisiert, [], "die juengste Fahrt ist regulaer geschlossen"
|
||||
k.ablage.aktualisiert, [], "dazwischen liegt der Beginn von t-neu"
|
||||
)
|
||||
|
||||
async def test_aeltere_vorlaeufige_fahrt_wird_gefunden(self):
|
||||
"""Die Suche ist NICHT auf die juengste Fahrt beschraenkt: eine aeltere
|
||||
regulaer geschlossene Fahrt darf die Korrektur nicht verdecken."""
|
||||
frueher = T0 - datetime.timedelta(hours=5)
|
||||
k = FakeKoordinator(
|
||||
start_ts=None,
|
||||
fahrten=[
|
||||
fahrt("t-frueh", frueher, frueher + datetime.timedelta(minutes=20), False),
|
||||
fahrt("t-hand", T0, LEBENSZEICHEN, True),
|
||||
],
|
||||
)
|
||||
echt = LEBENSZEICHEN + datetime.timedelta(minutes=8)
|
||||
await self._spaetes_aus(
|
||||
k, echt + datetime.timedelta(seconds=f.ZUENDUNG_NACHLAUF_S)
|
||||
)
|
||||
self.assertEqual(len(k.ablage.aktualisiert), 1)
|
||||
trip_id, aenderungen = k.ablage.aktualisiert[0]
|
||||
self.assertEqual(trip_id, "t-hand")
|
||||
self.assertEqual(aenderungen["ts_end"], echt.isoformat())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main(verbosity=2)
|
||||
|
||||
Reference in New Issue
Block a user