Skip to content

Speedscope

Daniel Frenkel edited this page Jul 7, 2026 · 1 revision

Speedscope (Speed radar)

Your Valar Scope can also run as a desk speed‑radar for your street. Pair it over Wi‑Fi with a MiniSpeedCam — a small radar speed camera — on the same network, and the round screen turns its readings into glanceable dials: the last vehicle's speed, a live "something's approaching" gauge, the recent passes, and the day's tally, with a phone ping when someone speeds.

It's a separate firmware build for the same Valar Scopes hardware: flash the Speedscope firmware and the device boots into the speed console instead of the radar. Everything else you already know carries over — Wi‑Fi setup, the web config page, persistent storage, over‑the‑air updates, and ntfy alerts.

Where the data comes from. Speedscope is a companion display for a MiniSpeedCam you already run — it does no radar sensing itself. It reads the camera's keyless local API over your LAN: GET /api/state (health, settings, and the live radar‑proximity signal) and GET /api/events (a ring of recent passes). There is no account, no API key, and no cloud — the device only ever talks to your camera on your own network. Speeds are shown in the camera's own unit (mph or kph, whichever it's set to). Nothing is polled until the camera is reachable.

⚠️ Firmware requirement. The /api/events pass list is a companion endpoint added to the MiniSpeedCam firmware (r1.1+). An older camera that only serves /api/state will show the live gauge and camera health, but the Recent/Today pass screens stay empty until you update the camera. See the MiniSpeedCam repo.

🧩 How it fits together

        your LAN                          on your desk
  ┌─────────────────────┐              ┌───────────────┐
  │     MiniSpeedCam     │  /api/state  │  Speedscope   │
  │  (radar + ESP32‑CAM) │ ───────────► │  (ESP32‑S3)   │
  │  serves /api/state   │  /api/events │  draws dials  │
  │  and /api/events     │     JSON     │               │
  └─────────────────────┘              └───────────────┘

The device just polls two plain JSON pages on your network and draws them. All the radar sensing, capture, and speed measurement happen on the camera.

🛠️ Setup

(1) have a MiniSpeedCam running (firmware r1.1+ for the pass list), (2) flash the Speedscope firmware, (3) point the device at the camera.

1. The camera

Set up your MiniSpeedCam on the same network and note the name or IP it shows on its own web page. Confirm its API answers — in a browser or with curl you should get JSON:

curl http://minispeedcam.local/api/state

If /api/events 404s, update the camera to r1.1 or newer.

2. Flash the firmware

Speedscope is its own PlatformIO build. From the firmware repo:

pio run -e blipscope-speed-s3-146 -t upload

(Kits can be re‑flashed to any edition at any time; see the repo's Firmware section for the PlatformIO basics.) On first boot the device brings up its Wi‑Fi setup exactly like every other edition — see Network and Setup.

3. Point the device at the camera

Open the device's config page (Configuration Reference explains how) and set Camera host to the MiniSpeedCam's mDNS name (e.g. MiniSpeedCam) or its IP (e.g. 192.168.1.50). The device resolves the name to an IP itself and starts polling; within a few seconds the splash gives way to your live dials.

🖥️ The screens

Speedscope uses the hybrid shell (like Quillscope/Reelscope): the enabled screens auto‑rotate on a dwell timer (skipping any with no data yet), and you can also swipe left/right by hand. Tap any screen to open a detail card. There's no PPI sweep — the camera is a fixed point, not moving contacts. Every screen can be toggled on or off in config.

Screen What it shows
🚗 Last pass The most recent vehicle's speed as a big number, flagged over or under the posted limit you set.
📡 Live A live radar‑proximity arc gauge built from the camera's signal reading, so you can see a vehicle approaching in real time.
📋 Recent A list of the latest passes — speed and how long ago — straight from the camera's /api/events ring.
📊 Today The day's tally, computed on‑device: count, top speed, average, and share over the limit.
🎥 Camera The MiniSpeedCam's own health — signal (RSSI), IP, uptime, free memory, last upload, claim state, firmware — so you know it's alive and feeding.
🕑 Clock An idle clock (in your configured UTC offset) that honours the night auto‑dim.
✨ Splash A welcome card on cold start, with a setup hint until the camera is reachable.

🚨 Alerts

Speedscope can push phone notifications via ntfy (see Alerts and Watchlist for how ntfy works). Set a topic and pick which triggers fire — each independently toggleable, and all edge‑seeded at boot so the backlog never pings you, only fresh events:

  • Speeder — a pass at or over a speed you set (in the camera's unit).
  • New fastest pass of the day — someone just set a new daily record.
  • Camera offline — the MiniSpeedCam stopped responding, so you know the feed dropped.

Leave the topic blank to disable all phone alerts.

⚙️ Configuration

Everything is set from the same web page as the radar — Configuration Reference explains how to open it. The Speedscope build's page offers:

Setting Description
Camera host Required. The MiniSpeedCam's mDNS name (e.g. MiniSpeedCam) or IP (e.g. 192.168.1.50). The device resolves a name to an IP itself. Nothing is polled until this is set.
Posted speed limit Optional. The limit passes are flagged over/under, in the camera's unit (mph or kph).
Views A checkbox grid — Last pass, Live, Recent, Today, Camera, Clock — for which dials appear in the rotation.
Alerts (ntfy) Phone‑alert topic plus the three toggles (speeder at/over a speed you set, new daily record, camera offline). Blank topic = all alerts off.
UTC offset Sets the idle clock and the day boundary (for the Today tally) to your local zone.
Location (optional) Latitude / longitude — used only for the day/night auto‑dim.
Brightness / Auto‑dim The same backlight and night‑dim controls as the radar.
Proxy base URL (advanced) Optional. Leave blank and the device talks to the camera on your LAN directly.

Changes apply live on Save, with no reboot — same as the radar.

⬆️ Getting it & updates

Speedscope is its own firmware image on its own update channel, so a device set up as Speedscope only ever pulls Speedscope firmware — the editions never cross. Over‑the‑air updates otherwise work exactly as on the radar; see Firmware Updates.

Related

Clone this wiki locally