CarWatch

Prestaties en hardware

Gemeten op echte hardware (Pi 5, 16 GB, ca. €300):

  • Model: Qwen3.6-35B-A3B (Unsloth UD-Q3KS dynamische quantisering, 14,3 GB).
  • Snelheid: 3,5 tok/s generatie / 25+ tok/s prompt.
  • Temperatuur: 65 °C constant.
  • Privacy: Geen cloud, geen internet, geen abonnement.

Belangrijkste kenmerken

  • Handleiding-RAG: Beantwoort vragen op basis van de eigen handleiding van de auto (745 pagina's) met paginanummer-citaties. Dit maakt gebruik van lexicale RAG die op de SD-kaart staat. Het systeem weigert vragen te beantwoorden die niet in de handleiding staan.
  • Gefundeerde zelfkennis: Informatie over temperatuur, throttling, ventilator, geheugen, schijf, netwerk en het geladen model wordt per vraag live uitgesleesd van de machine. Wat het systeem niet kan waarnemen, wordt eerlijk gemeld; de systemprompt is zo ingesteld dat onbekende informatie nooit als feit wordt gepresenteerd.
  • Handsfree spraak: Een continue luisterfunctie (energie VAD → whisper.cpp, volledig op de Pi) herkent spraak, routeert de woorden via de gefundeerde pipeline en antwoordt in de chat-room. Er is geen wake-word nodig en er wordt geen cloud-STT gebruikt.
  • Autonoom: Systemd-services starten de volledige stack automatisch op bij het opstarten: de modelserver, room agent, voice listener, telefoon-dashboard en engine watcher.
  • Onderhoud op afstand: De auto haalt zelf updates uit de repository (elk uur, of via een "update nu"-knop in het dashboard) en opent een tunnel zodat het systeem bereikbaar blijft, zelfs achter de NAT van een telefoon-hotspot. Onderhoud hoeft nooit met een laptop in de auto te gebeuren.
  • Drielagige connectiviteit: Telefoon-hotspot → thuis-wifi → eigen fallback access point. Hierdoor kan de telefoon het systeem altijd bereiken, zelfs in een garage zonder signaal.

Het build-logboek, inclusief alle doodlopende wegen, is te vinden in docs/plan.md.

CarWatch is een zustersysteem van CodeWatch (agents op je pols) en ClawWatch (gezondheid op je pols).

Architectuur

In de auto (Raspberry Pi 5):

  • Input: USB-microfoon → carwatch-listen (VAD + whisper.cpp).
  • Verwerking: llama.cpp server (Qwen3.6-35B-A3B) als het "brein".
  • Kennisbronnen:
  • Handleiding RAG (745 pagina's op SD).
  • selfstate (temperatuur / ventilator / netwerk / model).
  • Auto-integratie: carwatch-obd bewaakt de OBD-kabel.
  • Output: carwatch-agent (de @gle room agent) communiceert met GroupMind-kamers.
  • Beheer:
  • Webdashboard (poort :8088) voor status, updates, spraak en wifi.
  • self-update via uurtelijk git pull.
  • dial-out tunnel voor bereikbaarheid achter NAT.

Externe verbindingen:

  • De agent communiceert via berichten en mentions met GroupMind-kamers.
  • GroupMind is verbonden met de telefoon/het horloge via CodeWatch.
  • Het dashboard is via hetzelfde wifi-netwerk verbonden met de telefoon.

Strategie: Lokaal versus Online

Lokaal functioneren is het product; online is een verrijking. De auto moet volledig bruikbaar zijn zonder connectiviteit vanwege garages, tunnels en dode zones.

  1. Altijd lokaal (werkt zonder signaal): Spraakinvoer, antwoorden van de assistent (on-Pi model), antwoorden uit de handleiding (RAG op SD), het telefoon-dashboard (geserveerd door de auto) en het bijhouden van ritten/status.
  2. In wachtrij bij verbindingsonderbreking: Berichten naar de room, uploads van clips en reacties op mentions. Alles wordt eerst in een persistente on-disk outbox geplaatst en later verzonden.
  3. Alleen online (en transparant hierover): Remote bereikbaarheid (dial-out tunnel), zelf-updates en escalatie naar krachtigere modellen (eerst een lokaal-LAN modelserver indien aanwezig, daarna een cloud-model enkel wanneer online én expliciet gevraagd, binnen een budgetlimiet).

Vuistregel: Veiligheidsrelevante informatie die in één oogopslag zichtbaar moet zijn, is nooit afhankelijk van het netwerk; sociale of zware taken degraderen genadig naar "later".

Status: Bewezen vs. Gebouwd vs. Gepland

Eerlijkheidsbeleid: Een functie is pas "bewezen" (proven) nadat deze in een echte auto heeft gewerkt. "Gebouwd + getest" (built + tested) betekent dat de code end-to-end draait tegen een echte of gesimuleerde tegenhanger, maar nog niet in de fysieke auto is getest.

FunctieStatus
@gle room agent: mentions, gefundeerde antwoorden, presence heartbeatbewezen (dagelijks in gebruik)
Handleiding-RAG met paginacitatiesbewezen
Telefoon-dashboard geserveerd door de auto (status, wifi, voice toggle, update-knop)bewezen
Handsfree spraak: continue VAD listener → whisper → gefundeerd antwoord → roombewezen (spraak lokaal getranscribeerd op Pi)
Zelf-update vanuit deze repo (uurtijd + dashboard-knop)bewezen
Dial-out bereikbaarheid achter elke NAT (cloudflared quick tunnel)bewezen (bereikbaar via open internet)
OBD motor-uitlezing via DoIP/ENET (RPM, koelvloeistof, snelheid, voltage)gebouwd + getest tegen fake gateway; daemon bewaakt kabel. Verificatie in echte auto nog openstaand.
Dashcam clip pull (WOLFBOX G900, hisnet CGI API mapped)probe voltooid, pipeline nog niet aangesloten
MBUX dashboard render, mirror icon stripgepland

Hardware (Referentiebuild)

  • Raspberry Pi 5, 16 GB (actieve koeling vereist; de SoC throttelt anders).
  • USB-microfoon voor spraak (elke class-compliant microfoon).
  • WOLFBOX G900 3-kanaals dashcam (wifi AP; CarWatch haalt event-clips op).
  • OBD-toegang: ethernet-to-OBD (DoIP/ENET) kabel. Een standaard ELM327-adapter is het fallback-pad.
  • Voeding: De dashcam hardwire kit voedt de camera; de Pi heeft een eigen 5V/5A USB-C voeding nodig (12V PD-adapter, of 230V stopcontact + wandvoeding).

Installatie (op de Pi)

git clone https://github.com/ThinkOffApp/CarWatch.git
cd CarWatch
./install.sh

Voeg vervolgens je inloggegevens toe in /etc/carwatch/config.json (zie config.example.json voor het voorbeeld) en voer uit:

sudo systemctl enable --now carwatch

De auto houdt zichzelf daarna actueel via update.sh. Dit kan via de timer, de dashboard-knop, of handmatig:

curl -sSL https://raw.githubusercontent.com/ThinkOffApp/CarWatch/main/update.sh | bash

Configuratie

Kopieer config.example.json naar /etc/carwatch/config.json:

  • api_base: je GroupMind-server, bijv. https://groupmind.one
  • api_key: de API-sleutel van de agent (maak een unieke sleutel voor de auto)
  • room: de room slug waar de auto berichten naar stuurt
  • handle: de displaynaam van de auto, bijv. @gle
  • home_ssids: wifi-netwerken die betekenen dat de auto "geparkeerd is bij huis"
  • wolfbox: naam/wachtwoord van de dashcam AP en het poll-interval

Bench-day probe

Omdat de HTTP API van de WOLFBOX niet gedocumenteerd is, kan carwatch-probe deze ontdekken:

python3 -m carwatch.wolfbox --probe

Verbind de Pi eerst met de wifi AP van de dashcam. De probe doorzoekt bekende patronen in de firmware-endpoints en print de antwoorden, waarmee de TODO's in wolfbox.py kunnen worden ingevuld met de werkelijke paden van jouw camera.

Licentie

AGPL-3.0. Copyright (C) 2026 ThinkOff / Petrus Pennanen.