Skip to content

Releases: TechnikWeber/YonderRC

A fix is assembled from sentences, not received

Choose a tag to compare

@TechnikWeber TechnikWeber released this 28 Aug 16:45

English

  • The OSD stopped blinking during the first real drive. Home symbol, home arrow,
    odometer and speed vanished for a few seconds at a time and came back — with 8
    satellites and a solid fix. The receiver was fine: a fix is spread over several NMEA
    sentences (GGA carries position and satellites, RMC speed and course, GSA the 2D/3D
    mode) and the vehicle rebuilt the whole fix from scratch out of one one-second parse
    window. A sentence burst cut by the window boundary produced a fix with holes, and the
    OSD draws nothing for a missing value. It lasted seconds at a time because the
    receiver's 1 Hz and ours are free-running clocks drifting through each other.
  • A missing sentence is now a gap, not a loss. Values are carried over for up to 3 s
    (mergeFix), so a split burst is invisible. A reported loss of fix is never held — that
    is real information and drops out at once.
  • The half sentence at the window boundary is no longer destroyed. The buffer is cut
    at the last complete line and the remainder waits for the next window; before, exactly
    one sentence per second was thrown away, and which one depended on the phase.
  • A silent receiver now reports no fix after 5 s instead of freezing the last one. A
    position the vehicle left minutes ago is worse than no position: the home arrow keeps
    pointing, confidently, at nothing.

Deutsch

  • Das OSD blinkt bei der ersten echten Probefahrt nicht mehr. Haussymbol, Heimatpfeil,
    Kilometerzähler und Geschwindigkeit verschwanden für ein paar Sekunden und kamen wieder
    — bei 8 Satelliten und stehendem Fix. Der Empfänger war in Ordnung: ein Fix verteilt
    sich über mehrere NMEA-Sätze (GGA bringt Position und Satelliten, RMC Geschwindigkeit
    und Kurs, GSA den 2D/3D-Modus), und das Fahrzeug baute den kompletten Fix jede Sekunde
    neu aus genau einem Parse-Fenster. Ein Satz-Burst, den die Fenstergrenze zerschnitt,
    ergab einen Fix mit Löchern — und für einen fehlenden Wert zeichnet das OSD nichts.
    Sekundenlang deshalb, weil die 1 Hz des Empfängers und unsere gegeneinander driften.
  • Ein fehlender Satz ist jetzt eine Lücke, kein Verlust. Werte werden bis zu 3 s
    weitergetragen (mergeFix), ein zerschnittener Burst fällt damit nicht mehr auf. Ein
    gemeldeter Fix-Verlust wird nie gehalten — das ist eine echte Information und fällt
    sofort durch.
  • Der halbe Satz an der Fenstergrenze wird nicht mehr vernichtet. Der Puffer wird an
    der letzten vollständigen Zeile getrennt, der Rest wartet aufs nächste Fenster; vorher
    ging pro Sekunde genau ein Satz verloren, und welcher, entschied die Phase.
  • Ein verstummter Empfänger meldet jetzt nach 5 s keinen Fix, statt den letzten
    einzufrieren. Eine Position, die das Fahrzeug vor Minuten verlassen hat, ist schlimmer
    als gar keine: der Heimatpfeil zeigt weiter — überzeugt — ins Nichts.

v1.68.3 — docs cut down

Choose a tag to compare

@TechnikWeber TechnikWeber released this 28 Aug 13:39

Documentation only — no code changes.

English

  • README and hardware guide cut down, both languages: README −41 %, hardware guide
    −30 % by word count. Feature lists are bullets now, prose only where it earns its place.
    Tables, wiring, pin maps and commands are untouched — that is the part people come for.
  • The project was getting hard to enter for a beginner. Every fact is still there; the
    paragraphs around it are not.

Deutsch

  • README und Hardware-Guide gekürzt, beide Sprachen: README −41 %, Hardware-Guide
    −30 % nach Wortzahl. Feature-Listen sind jetzt Stichpunkte, Fließtext nur noch da, wo er
    etwas bringt. Tabellen, Verkabelung, Pinbelegungen und Befehle bleiben unangetastet —
    deswegen kommt man ja her.
  • Für Einsteiger war das Projekt zu überladen geworden. Jeder Fakt steht noch drin, die
    Absätze drumherum nicht mehr.

v1.68.2 — a budget nobody set cannot warn

Choose a tag to compare

@TechnikWeber TechnikWeber released this 28 Aug 13:21

English

  • An unset allowance now falls back to the LTE stick's own limit. With Measured by: the LTE stick the plan is already in the stick and enforced by it — retyping it here
    was busywork, and until you did, nothing could warn.
  • A counter with no allowance says so. It showed Used: 2.24 GB and looked like it
    was working, while no threshold existed and the OSD could never fire. Now stated in the
    panel and flagged amber on the overview.

Deutsch

  • Ohne eingetragenes Volumen gilt jetzt das Limit des LTE-Sticks. Bei Measured by: the LTE stick steht der Tarif ohnehin im Stick und wird von ihm durchgesetzt — ihn hier
    abzutippen war Doppelarbeit, und bis dahin konnte nichts warnen.
  • Ein Zähler ohne Volumen sagt das jetzt. Er zeigte Used: 2.24 GB und sah nach
    Funktion aus, während es gar keine Schwelle gab und das OSD nie auslösen konnte. Jetzt
    im Panel benannt und in der Übersicht gelb markiert.

v1.68.1 — the counter did not survive its own restart

Choose a tag to compare

@TechnikWeber TechnikWeber released this 28 Aug 13:12

English

  • The data counter now survives a clean restart. It was written at most every 5
    minutes and nothing flushed it on shutdown, so every systemctl restart — which every
    update does — threw away what had been counted since the last write. Now saved on
    shutdown too.
  • Mobile data is on the overview, with usage, percent and which source counted it.
    It was only in the Network tab, four panels down.

Deutsch

  • Der Datenzähler übersteht jetzt einen sauberen Neustart. Er wurde höchstens alle 5
    Minuten geschrieben und beim Herunterfahren gar nicht, also warf jeder
    systemctl restart — den jedes Update macht — den Stand seit dem letzten Schreiben weg.
    Jetzt wird auch beim Beenden gespeichert.
  • Mobile Daten stehen in der Übersicht, mit Verbrauch, Prozent und Quelle. Bisher nur
    im Network-Tab, vier Panels weiter unten.

v1.68.0 — the data plan runs out without telling you

Choose a tag to compare

@TechnikWeber TechnikWeber released this 28 Aug 13:00

English

  • Mobile-data budget (Setup › Network). Set the plan's allowance; the OSD shows
    ⚠ DATA past the configured share. An FPV stream costs 0.5–1 GB/h.
  • Two sources: the vehicle (default, sums every metered interface — works with a phone
    hotspot too) or the LTE stick's own billing month (HiLink only, survives reboots).
  • Not counted: the vehicle's own hotspot (that traffic is free, ~900 MB/h) and VPN
    interfaces (Tailscale/WireGuard/ZeroTier — they leave again through the real uplink and
    would count twice).
  • Counter persists across reboots; reset by hand or on the plan's day of month.
  • Fix: every tick box on the setup page was stretched across its label (194–477 px
    instead of 13) — input { width: 100% } inherited by a checkbox in a row-flex label.
  • Status strip: Vehicle and Driver merged into one cell, so the grid is 4×2 again.

Deutsch

  • Datenvolumen-Budget (Setup › Network). Vertragsvolumen eintragen; das OSD zeigt
    ⚠ DATA ab dem eingestellten Anteil. Ein FPV-Stream kostet 0,5–1 GB/h.
  • Zwei Quellen: das Fahrzeug (Standard, summiert jede kostenpflichtige Schnittstelle —
    auch Handy-Hotspot) oder der Abrechnungsmonat des LTE-Sticks (nur HiLink, übersteht
    Neustarts).
  • Nicht gezählt: der eigene Hotspot des Fahrzeugs (kostenlos, ~900 MB/h) und
    VPN-Schnittstellen (Tailscale/WireGuard/ZeroTier — sie gehen erneut über die echte
    Verbindung raus und würden doppelt zählen).
  • Der Zähler übersteht Neustarts; Reset von Hand oder am Tarif-Stichtag.
  • Behoben: Jede Checkbox der Setup-Seite war über ihr Label gestreckt (194–477 px
    statt 13) — input { width: 100% }, von einer Checkbox im Row-Flex-Label geerbt.
  • Statusleiste: Vehicle und Driver zu einer Kachel zusammengefasst, Raster wieder 4×2.

v1.67.0 — the gap you cannot see now leaves a mark

Choose a tag to compare

@TechnikWeber TechnikWeber released this 28 Aug 12:31

English

  • Status strip: Link gaps — failsafe episodes since the connection began, plus the
    longest the vehicle ever waited for a control frame. A watchdog trip lasts one control
    tick and the bars snap back unread; the 2 Hz blackbox misses it too.
  • Amber once the worst gap passes 60 % of the vehicle's watchdog timeout, red after an
    actual episode. Rising edges, not ticks; the opening moment of a connection (no frame
    accepted yet) is not counted.
  • Measured indoors over LTE: 13 gaps past 300 ms per minute at 0 % packet loss. Latency
    was fine, jitter was not, and nothing said so.

Deutsch

  • Statusleiste: Link gaps — Failsafe-Episoden seit Verbindungsbeginn und die längste
    Wartezeit des Fahrzeugs auf einen Steuerframe. Ein Watchdog-Auslöser dauert einen
    Steuertakt, die Balken sind zurück, bevor man sie liest; die 2-Hz-Blackbox verpasst ihn
    ebenfalls.
  • Gelb, sobald die schlechteste Lücke 60 % des Watchdog-Timeouts überschreitet, rot nach
    einer echten Episode. Gezählt werden Flanken, keine Ticks; der Verbindungsaufbau (noch
    kein Frame angenommen) zählt nicht.
  • Indoor über LTE gemessen: 13 Lücken über 300 ms pro Minute bei 0 % Paketverlust. Die
    Latenz war in Ordnung, der Jitter nicht — und nichts hat es gesagt.

v1.66.1 — "auto" was not an answer

Choose a tag to compare

@TechnikWeber TechnikWeber released this 28 Aug 12:20

English

  • Setup › Sensors now shows which charge counter is actually running. auto states a
    wish: it silently falls back to Pi integration when the primary current channel is not
    an INA228, and the mAh keep coming either way — only their accuracy changes. Also on the
    overview as a · counter row. It used to be visible only in an OSD tooltip and a
    startup log line.
  • Measured idle draw documented (HARDWARE.md §2.3): Pi 4B + CSI camera + LTE stick +
    PCA9685 + GPS, motor stopped = 0.7–1.0 A at 7.2 V, i.e. 1.4–2 A behind a 5 V
    regulator. "5 V / 3 A" is the floor, not headroom.

Deutsch

  • Setup › Sensors zeigt jetzt, welcher Ladungszähler tatsächlich läuft. auto ist ein
    Wunsch: Es fällt still auf die Pi-Integration zurück, wenn der primäre Stromkanal kein
    INA228 ist — die mAh laufen in beiden Fällen weiter, nur ihre Genauigkeit ändert sich.
    Auch in der Übersicht als Zeile · counter. Bisher nur in einem OSD-Tooltip und einer
    Startlog-Zeile sichtbar.
  • Gemessener Leerlaufstrom dokumentiert (HARDWARE.de.md §2.3): Pi 4B + CSI-Kamera +
    LTE-Stick + PCA9685 + GPS, Motor steht = 0,7–1,0 A bei 7,2 V, also 1,4–2 A hinter
    einem 5-V-Regler. „5 V / 3 A" ist die Untergrenze, nicht die Reserve.

v1.66.0 — the vehicle reports its own condition

Choose a tag to compare

@TechnikWeber TechnikWeber released this 25 Aug 14:35

English

  • The vehicle reports its own condition, ported from YonderGate and trimmed to what a
    vehicle can act on: SoC temperature, load, uptime and free card space,
    on the overview under the system status. Each is there because it explains a failure
    that otherwise reads as a bug in this software — the Pi encodes H.264 in a sealed hull,
    and from 80 °C the firmware clamps its clock, so video and control get worse together;
    the control loop shares the CPU, so a load spike is the honest cause of round-trip
    jitter; a full card cannot take an update.
  • The clock is reported where it actually breaks something. A Pi has no
    battery-backed clock: with no network at boot it starts in the past, and git pull then
    fails with a certificate error that never mentions the time. That line now sits
    above Check for updates, with the vehicle's own clock compared against yours — and it
    only appears when there is something wrong with it. No DS3231 and no NTP-server editor:
    the vehicle only needs the time when it already has internet, and then NTP just works.
  • Readings live on /api/health at a 30 s poll, not on the 3 s status — each one costs a
    file or a process on a box that is also driving servos.
  • Fixed while porting: an unreadable sensor read as a healthy one. Number('') is 0,
    not NaN, so an empty temperature file came back as 0 °C, an empty loadavg as an idle
    0.00, and an empty uptime as a box that booted this instant. Fixed in both projects.

Deutsch

  • Das Fahrzeug meldet seinen eigenen Zustand, portiert aus YonderGate und auf das
    gekürzt, womit ein Fahrzeug etwas anfangen kann: SoC-Temperatur, Last,
    Laufzeit und freier Platz auf der Karte, in der Übersicht unter dem
    Systemstatus. Jeder Wert steht dort, weil er einen Fehler erklärt, der sonst wie ein Bug
    in dieser Software aussieht — der Pi encodiert H.264 in einem geschlossenen Rumpf, und
    ab 80 °C drosselt die Firmware den Takt, Video und Steuerung werden also gemeinsam
    schlechter; die Steuerschleife teilt sich die CPU, eine Lastspitze ist damit die
    ehrliche Ursache für Zittern in der Umlaufzeit; eine volle Karte nimmt kein Update an.
  • Die Uhr steht dort, wo sie tatsächlich etwas kaputt macht. Ein Pi hat keine
    gepufferte Uhr: ohne Netz beim Start läuft er in der Vergangenheit los, und git pull
    scheitert dann an einem Zertifikatsfehler, der die Zeit mit keinem Wort erwähnt.
    Diese Zeile steht jetzt über Check for updates, mit der Uhr des Fahrzeugs im Vergleich
    zu deiner — und sie erscheint nur, wenn etwas mit ihr nicht stimmt. Kein DS3231 und kein
    NTP-Server-Editor: Zeit braucht das Fahrzeug nur, wenn es ohnehin Internet hat, und dann
    funktioniert NTP von selbst.
  • Die Werte liegen auf /api/health mit 30-s-Abfrage, nicht im 3-s-Status — jede Messung
    kostet eine Datei oder einen Prozess auf einer Box, die nebenbei Servos treibt.
  • Beim Portieren behoben: ein unlesbarer Sensor las sich wie ein gesunder.
    Number('') ist 0, nicht NaN — eine leere Temperaturdatei kam also als 0 °C zurück, ein
    leerer loadavg als entspannte 0,00 und eine leere Laufzeit als gerade gebootete Box. In
    beiden Projekten behoben.

v1.65.3 — the OSD's unclassed spans went dark on light

Choose a tag to compare

@TechnikWeber TechnikWeber released this 25 Aug 11:44

English

  • Fixed: current and mAh were near-invisible in the OSD under the light theme. The
    video stage keeps the dark palette in both themes, but it only ever re-declared the
    tokens — and CSS inheritance passes the computed colour down, not the var() that
    produced it. The OSD spans that carry no class of their own (current, mAh) therefore
    arrived with the page's ink, which the light theme had turned dark, and landed
    dark-on-dark over the video; voltage and temperature were fine only because they
    hardcode their colour. The stage now states its text colour instead of inheriting one.
    Nothing changes in the dark theme, where the two colours were identical.
  • README screenshots retaken with the fix in them.

Deutsch

  • Behoben: Strom und mAh waren im OSD unter dem hellen Theme kaum zu sehen. Die
    Video-Fläche behält in beiden Themes die dunkle Palette — aber sie hat die Tokens nur
    neu deklariert, und CSS-Vererbung reicht die berechnete Farbe weiter, nicht das
    var(), aus dem sie entstand. Die OSD-Spans ohne eigene Klasse (Strom, mAh) kamen
    deshalb mit der Tinte der Seite an, die im hellen Theme dunkel ist, und lagen dunkel
    auf dunkel über dem Video; Spannung und Temperatur sahen nur deshalb richtig aus, weil
    sie ihre Farbe fest verdrahten. Die Fläche setzt ihre Textfarbe jetzt selbst, statt sie
    zu erben. Im dunklen Theme ändert sich nichts — dort waren beide Farben identisch.
  • README-Screenshots mit dem Fix darin neu aufgenommen.

v1.65.2 — the whole Controls panel folds

Choose a tag to compare

@TechnikWeber TechnikWeber released this 25 Aug 10:11

English

  • All eight groups of Setup › Controls now start folded, not just Safety: return-home
    budget, stick feedback, voice callouts, auto-disarm, action bindings, low-battery
    warning and blackbox logging, each with its explanation. The panel is eight headings
    instead of six screens; the Ground app panel below it is unchanged.
  • Folding never hides state or a warning. Auto-disarm on reconnect carries its
    ON/OFF as a badge in the heading, blackbox logging shows recording there while it
    runs, and the two ⚠ notes about a forced auto-disarm sit outside their group — a
    warning you have to unfold is not a warning.

Deutsch

  • Alle acht Gruppen unter Setup › Controls starten jetzt zugeklappt, nicht nur Safety:
    Heimkehr-Budget, Stick-Feedback, Sprachansagen, Auto-Disarm, Aktions-Belegung,
    Akku-Warnung und Blackbox-Logging, jeweils samt Erklärung. Das Panel sind acht
    Überschriften statt sechs Bildschirmen; das Panel Ground app darunter bleibt, wie es war.
  • Zuklappen versteckt weder Zustand noch Warnung. Auto-disarm on reconnect trägt sein
    ON/OFF als Abzeichen in der Überschrift, das Blackbox-Logging zeigt dort recording,
    solange es läuft, und die beiden ⚠-Hinweise zum erzwungenen Auto-Disarm stehen außerhalb
    ihrer Gruppe — eine Warnung, die man aufklappen muss, ist keine.