Repository navigation
Releases: TechnikWeber/YonderRC
Releases · TechnikWeber/YonderRC
Release list
A fix is assembled from sentences, not received
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
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
English
- An unset allowance now falls back to the LTE stick's own limit. With
Measured by: the LTE stickthe 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 GBand 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 sticksteht 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 GBund 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
English
- The data counter now survives a clean restart. It was written at most every 5
minutes and nothing flushed it on shutdown, so everysystemctl 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
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
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
English
- Setup › Sensors now shows which charge counter is actually running.
autostates 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· counterrow. 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.
autoist 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
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, andgit pullthen
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/healthat 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, undgit 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/healthmit 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
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 thevar()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
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.