selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

CarWatch logo

Self-host CarWatch

v0.7.0

Car agent that runs a local LLM on a Raspberry Pi 5

BetaOpen SourceAGPL-3.0
Updated2 weeks ago
LanguagePython
Setup difficultyAdvanced
Stars
299
CPU
Raspberry Pi 5 (BCM2712), active cooling mandatory
RAM
8 GB minimum, 16 GB recommended for 35B MoE model
Storage
High-endurance microSD for OS; USB SSD recommended for model storage
Ports
8088 (Phone dashboard (carwatch-chat)), 8080 (llama.cpp server (local LLM API))
Requires
Bluetooth ELM327 OBD adapter, GroupMind server, Llama.cpp, Piper, Raspberry Pi OS (64-bit), Systemd, Whisper.cpp
Install with Raspberry Pi
CarWatch v0.4 release video poster showing three spoken questions answered by the carCarWatch dashboard with Speak strip, live OBD tiles, Mercedes me cloud data, and control dockModel zone showing local models with measured tokens per second and swap in progress

What is CarWatch?

CarWatch is a self-hosted automotive agent that runs on a Raspberry Pi 5 installed in your car. It connects via a Bluetooth ELM327 OBD-II adapter to read live vehicle data (RPM, coolant, speed, hybrid battery, 12V system, fault codes), runs a 35B-parameter mixture-of-experts LLM (Qwen3.6-35B-A3B) locally via llama.cpp for grounded question answering, and uses whisper.cpp for speech-to-text and piper for text-to-speech — all fully offline. The car joins GroupMind chat rooms as an agent (@gle or custom handle), posting telemetry, trip summaries, and dashcam clips, and answering voice questions hands-free. A phone dashboard served by the Pi on port 8088 provides status, Wi-Fi management, voice toggle, and self-updates. Manufacturer cloud data (Mercedes me) is accessed via Home Assistant over Tailscale. The stack is pure Python standard library with systemd services, zero pip dependencies, and hourly self-updates from the repo. Hardware tested: Pi 5 16GB, Vgate iCar Pro 2S OBD adapter, WOLFBOX G900 dashcam.

Should you self-host CarWatch?

CarWatch scores 49/100 on selfhost.directory (how scoring works) and ranks #74 of 104 in Home Automation. It has 299 GitHub stars.

It shipped 8 stable releases in the past year. The latest, v0.7.0, came out on 7 September 2026. New versions land roughly every 2 days.

Setup is advanced: plan for several services and some ongoing maintenance. It is AGPL-3.0-licensed and written mostly in Python.

Its closest alternative on selfhost.directory is Home Assistant (91/100, 91 789 stars). It scores higher overall, so compare the two before you pick. See CarWatch vs Home Assistant side by side.

Features

  • Dashcam clip retrievalCamera API mapped, pipeline not fully wired
  • Dial-out tunnel
  • GroupMind chat integration
  • Hands-free voice assistant
  • Local LLM Inference
  • Make-safe commands
  • Model hot-swapping
  • OBD-II vehicle telemetry
  • Owner's manual RAG
  • Phone dashboard
  • Radiation monitoring
  • Raw CAN broadcast captureDecoding is open puzzle
  • Self-updates
  • Three-tier connectivity

CarWatch README

How to install CarWatch

Install CarWatch with Raspberry Pi

Environment variables
CARWATCH_CONFIG, CARWATCH_STATE, CARWATCH_RADIATION_HA_URL, CARWATCH_RADIATION_HA_TOKEN, CARWATCH_SSD
git clone https://github.com/ThinkOffApp/CarWatch.git
cd CarWatch
./install.sh

The installer sets up the SAME systemd stack the reference car runs — every unit in systemd/, rewritten to your username — and then tells you exactly which optional steps remain (the llama.cpp build and the 14.3 GB model are guided, never downloaded silently). Put your credentials in ~/.carwatch/config.json (never in the repo — see config.example.json; the installer seeds it, and every module resolves that one file through carwatch/config.py), then start the core:

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

Requires Raspberry Pi 5 (8GB minimum, 16GB recommended), active cooling, Bluetooth ELM327 OBD adapter, USB-C power source

How to configure CarWatch

  • api_basehttps://groupmind.oneGroupMind server URL

    GroupMind server URL

  • api_keyAgent's API key for GroupMind

    Agent's API key for GroupMind

  • carCar identity, appearance, known damage, brain description

    Car identity, appearance, known damage, brain description

  • CARWATCH_CONFIGOverride config file path

    Override config file path

  • CARWATCH_RADIATION_HA_TOKENEnv override for HA radiation token

    Env override for HA radiation token

  • CARWATCH_RADIATION_HA_URLEnv override for HA radiation URL

    Env override for HA radiation URL

  • CARWATCH_SSDSSD mount path for model storage

    SSD mount path for model storage

  • CARWATCH_STATEOverride state directory

    Override state directory

  • handle@gleCar's display handle (e.g. @gle)

    Car's display handle (e.g. @gle)

  • home_ssidsWiFi networks that mean 'parked at home'

    WiFi networks that mean 'parked at home'

  • obd_macBluetooth MAC address of OBD adapter

    Bluetooth MAC address of OBD adapter

  • ownerYour GroupMind handle; only owner can address the car

    Your GroupMind handle; only owner can address the car

  • radiationRadiation data source configuration

    Radiation data source configuration

  • roomRoom slug the car posts to

    Room slug the car posts to

  • trip_idle_seconds300Idle seconds before trip ends

    Idle seconds before trip ends

  • wledWLED host, LED count, brightness

    WLED host, LED count, brightness

  • wolfboxDashcam AP name/password, host, poll interval

    Dashcam AP name/password, host, poll interval

CarWatch releases & version history

FAQ

Should you trust anything a Pi-sized LLM says about your car?

No — the design assumes you shouldn't. The model is never the source of truth: OBD numbers pass through verbatim, manual answers carry page citations, anything unverified is labeled.

How does the Pi do TLS to the manufacturer API?

It doesn't — the Pi reads Home Assistant over Tailscale, and HA holds the Mercedes integration and credentials. No manufacturer credentials in the car.

Is the model trained or fine-tuned for cars?

No — it's a stock open-weight model. Car knowledge comes from grounding: live OBD values passed verbatim, owner's manual chunked with page numbers for citations.

Which runtime and what speed do you really get?

llama.cpp serving Qwen3.6-35B-A3B in Unsloth's UD-Q3_K_S quant (14.3 GB). Measured: 3.5 tokens/s generation, 25+ tokens/s prompt processing, 65°C sustained. Full spoken answer takes 1.5-4 minutes.

What hardware do you need?

A Raspberry Pi 5, a ~15 € Bluetooth ELM327 OBD adapter (Vgate iCar Pro tested), and a power source in the car. No cables beyond the OBD dongle, no soldering.

Will it answer its own voice or the radio?

Not anymore — v0.4 ships an echo gate that keeps the mic closed until cabin audio finishes, and drops anything that transcribes as a copy of the car's last answer.

Does it really work with no internet?

Yes — the last question in the release video is asked with the phone hotspot off. Speech-to-text (whisper.cpp), the model, and the voice (piper) all run on the Pi. OBD readings and manual answers work fully offline.

How do I actually talk to the car?

Say a wake phrase ("Hello car", "Hey car", "Hei auto") or tap Speak on the phone dashboard, then ask in the same breath. For 30 seconds after an answer you can keep talking with no new wake phrase.

More in IoT

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…