CarWatch logo

CarWatch

Your car as a chat-room agent: Raspberry Pi 5 + dashcam + local AI. CodeWatch's sibling for the garage.

Website GitHub

What is it?

What it is

CarWatch turns a Raspberry Pi 5 in the car into a fully offline, voice‑controlled AI agent that runs a local LLM, reads the owner’s manual via RAG, monitors OBD data, posts to GroupMind rooms, and serves a phone dashboard, all without external dependencies or subscriptions.

Why it exists

To give car owners independent, private AI that stays in the vehicle, works without network, avoids manufacturer lock‑in and data harvesting, and enables any brand to be supported via a vendor‑neutral interface.

Who should use it

Raspberry Pi 5 enthusiasts, car owners wanting local offline AI monitoring, privacy advocates, and open-source tinkerers comfortable with OBD-II and systemd setup.

Who should avoid it

Users requiring cloud-dependent AI, those uncomfortable with Linux/Raspberry Pi configuration, and beginners seeking plug-and-play without technical setup.

How it works

A quick walkthrough in plain English

How CarWatch works

Step 1 of 3

You interact with it

Open CarWatch, send a request, or connect it to your stack.

Features

Voice interaction with hands-free continuous VAD listening
Real-time OBD engine monitoring (RPM, coolant, speed, hybrid %, 12V)
Owner's manual RAG with page citations from a 489-page manual
Grounded responses that refuse to answer unverified claims
Seven local models available for task-specific swapping (Qwen3.6-35B, Gemma 4 variants, Ornith 1.5)
Phone dashboard (web-based) serving status, voice toggle, update button
Autonomous systemd service startup on boot
Remote reachability via dial-out tunnel (Tailscale) behind any NAT
Manufacturer cloud integration (Mercedes me via Home Assistant)
Dark-mode UI with Speak strip, live OBD tiles, and control dock
Self-update mechanism pulling from the main repo hourly
Continuous listening without wake word ceremony
Zero external dependencies (runs on Python standard library only)

Advantages

  • All data stays in the car - no cloud transmission or subscription required
  • Vendor-neutral architecture works with any car brand via adapter modules
  • Full offline operation - works in garages, tunnels, and dead zones
  • On-device AI processing ensures privacy and low latency
  • Honest about limitations - refuses to invent facts or hallucinate sensor data
  • Multiple model options allow trade-off between speed and capability
  • Self-update capability keeps the system current without manual intervention
  • Real-time sensor monitoring provides immediate feedback on car health
  • Local LLM inference enables sophisticated reasoning without internet

Disadvantages

  • Requires significant hardware investment (Raspberry Pi 5, 16GB, ~300€)
  • Limited by local hardware constraints (larger models slower on Pi CPU)
  • Some advanced features still under development (dashcam clip pull, MBUX dashboard rendering)
  • OBD readings rely on Bluetooth ELM327 adapter (~15€) - alternative DoIP/ENET paths often fail
  • Complex initial setup requiring careful configuration of systemd services and config files
  • Model selection involves trade-offs between size (speed) and capability (quality)
  • Performance varies by car model and OBD adapter compatibility
  • Potential latency with larger models on single-core Pi CPUs

Installation

cloud

Remote access via Tailscale - your Pi and Home Assistant join your own encrypted mesh for manufacturer-cloud data while driving. Full setup in docs/remote-access.md.

native

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

Put credentials in /etc/carwatch/config.json (see config.example.json), then start the core:

sudo systemctl enable --now carwatch-chat carwatch-obd carwatch-agent

Enable extras (carwatch-brain, carwatch-listen, carwatch-rfcomm, carwatch-reach) as hardware and config become ready.

FAQ

What hardware do I need to build a CarWatch system?

The reference build is a Raspberry Pi 5 with 16 GB RAM (active cooling is required, since the SoC throttles without it), a class-compliant USB microphone for voice input, a WOLFBOX G900 3-channel dashcam on its wifi AP, a ~15 € Bluetooth ELM327 OBD-II adapter (the Vgate iCar Pro is tested), and a 5V/5A USB-C power source for the Pi (such as a 12V PD adapter or the car's 230V socket plus a wall PSU). The dashcam can be powered from its own hardwire kit.

How do I install CarWatch on the Raspberry Pi?

Clone the repo and run ./install.sh. The installer wires up the same systemd stack that the reference car runs, rewriting each unit in systemd/ to your username. The llama.cpp build and the ~14.3 GB model are guided, never downloaded silently. Put credentials in /etc/carwatch/config.json (never in the repo), then enable the core services with: sudo systemctl enable --now carwatch-chat carwatch-obd carwatch-agent. Optional services (carwatch-brain, carwatch-listen, carwatch-rfcomm, carwatch-reach) can be enabled once their hardware and config are ready.

Does CarWatch actually work fully offline?

Yes. Speech-to-text via whisper.cpp, the local LLM (Qwen3.6-35B-A3B at Q3_K_S), the owner's-manual RAG (489 pages shipped on the SD card with page citations), the phone dashboard, and OBD readings all run on the Pi with no internet. The Mercedes me tiles (fuel/tyre/charge/lock via Home Assistant) are an online enrichment; when offline they show last-known values, labeled as such. Room posts are queued through a persistent on-disk outbox and delivered late rather than dropped.

How do I talk to the car hands-free, and will it hear itself?

Say a wake phrase such as "Hello car", "Hey car", or "Hei auto", then ask in the same breath; for 30 seconds after an answer you can keep talking with no new wake phrase. Anything before the wake phrase is discarded, so ambient talking doesn't summon the car. v0.4 ships an echo gate: the mic stays closed until the cabin audio has actually finished, and any transcription that matches the car's last answer is dropped, so it will not reply to itself or to the radio.

Can I swap the language model running on the car?

Yes. The dashboard's Model zone lists every .gguf on the box with the tokens/second it actually reached on your Pi (from llama-bench runs on the device itself), and one tap switches the running brain. Three guard rails are enforced: a model that won't fit in RAM is refused with the reason, a swap never interrupts an answer being generated (ask first, swap after), and a failed restart rolls back to the previous working model. The model is read from an EnvironmentFile so switching is a file write plus a restart, not a unit-file edit.

How do I reach the Pi remotely when it's behind a phone-hotspot NAT?

CarWatch pulls its own updates from the repo on an hourly timer plus a dashboard "update now" button, and dials out a tunnel (cloudflared quick tunnel) so it stays reachable from anywhere, even behind a phone hotspot's NAT. For reaching Home Assistant on your home network from the road, the recommended path is Tailscale: both the Pi and the HA machine join your encrypted network and the Pi reaches HA at a stable private IP, with no subscription and no inbound ports exposed.

Loading documentation…
View on GitHub

Featured in Videos

YouTube tutorials and walkthroughs for CarWatch

Alternatives

Similar projects ranked by category, topics, and text overlap.

Compare