Skip to content

About

Matter for aftermarket car parts. Open SDK so aftermarket electronics discover each other and exchange typed data. AGPL-3.0 — use it, share improvements back.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

CarConnect SDK

License: AGPL v3 Open Source

"Matter for aftermarket car parts." An open SDK that lets aftermarket car electronics — head units, digital dashes, dashcams, sensors — discover each other and exchange typed data, plug-and-play.

Status: v0.0.1, early prototype. The protocol is UDP multicast + JSON on a LAN, the reference implementation is Python (stdlib only), and everything except the mission is expected to change.

Mission

Keep good cars on the road. People replace vehicles that could run another 100k+ miles just because the car lacks modern electronics. CarConnect lets any older vehicle be retrofitted with modern, connected, upgradeable parts that interoperate out of the box — an open software layer for the aftermarket, ahead of the software-defined-vehicle era.

Today every aftermarket part is a silo: a dash can't ask the head unit for navigation state; a dashcam only talks to its own phone app. CarConnect defines the missing middle:

  • Discovery + self-description — devices announce manifests (what they publish/subscribe), no pairing rituals.
  • A typed signal tree — VSS-aligned dot-path signals (Navigation.Maneuver.DistanceToTurn, Camera.Front.Event.Impact, Vehicle.Speed, Sensor.Tire.FrontLeft.Pressure) with datatypes, units, and quality metadata, extended by an aftermarket overlay.
  • Read-only safety posture — the vehicle bridge is read-only by construction; nothing in the SDK can write to OEM buses.

Flagship use cases: turn-by-turn nav on the aftermarket digital dash, and dashcam integrated into the head unit (status, impact events, and — in v1 — video stream signaling).

Quickstart

Requires Python 3.9+ (standard library only — no pip installs).

Open three terminals and start the simulated devices in any order:

# terminal 1 — head unit: publishes Navigation.*, shows dashcam events
python3 examples/head_unit.py

# terminal 2 — digital dash: subscribes Navigation.Maneuver.*, ASCII nav dial
python3 examples/dash.py

# terminal 3 — dashcam: publishes Camera.Front.*, fires impact events
python3 examples/dashcam.py

Or all-in-one (backgrounds the three devices, tails their logs, Ctrl-C stops everything):

examples/run_demo.sh

Devices discover each other within ~2 seconds. Real captured output:

dash (nav dial counting down, live):

[dash] on the bus, waiting for Navigation.* ...
[dash] discovered peer: HeadUnit (head-unit, CarConnect Examples)
[dash] discovered peer: DashCam (dashcam, CarConnect Examples)
+----------------------------------+
|  ^  288 m     Main Street        |
|  ETA 1:20    limit  50 km/h      |
+----------------------------------+
+----------------------------------+
|  ^  276 m     Main Street        |
|  ETA 1:19    limit  50 km/h      |
+----------------------------------+

head unit (dashcam status + impact event arriving):

[head-unit] discovered peer: DashCam (dashcam, CarConnect Examples)
[head-unit] camera state: Camera.Front.Recording = True (from DashCam)
[head-unit] camera state: Camera.Storage.UsedMB = 5120.0 MB (from DashCam)
[head-unit] camera EVENT: Camera.Front.Event.Impact = high (from DashCam)

dashcam:

[dashcam] discovered peer: DigitalDash (dash, CarConnect Examples)
[dashcam] G-sensor fired: impact (high), clip #43 protected

Using the SDK

from carconnect import Device, Schema

schema = Schema.load_dir("schema")
manifest = {
    "name": "MyGauge", "type": "gauge",
    "vendor": "Acme", "firmware": "1.0",
    "publishes": [], "subscribes": ["Navigation.#"],
}

with Device(manifest, schema) as dev:
    dev.on_peer_discovered(lambda m: print("peer:", m["name"]))
    dev.subscribe("Navigation.Maneuver.*",
                  lambda sig: print(sig["path"], "=", sig["value"]))
    dev.publish("Navigation.Maneuver.Direction", "left")  # validated
    ...  # run your loop
  • Unknown signal paths publish with a warning (forward compatibility); wrong datatypes/enums are refused with an error.
  • Subscriptions support wildcards: * (one segment), # (subtree).

Repository layout

spec/          the specification (00 overview → 05 security)
schema/        signal tree definitions (flat YAML subset, no pyyaml needed)
sdk/python/    reference implementation: signals, device, transport
examples/      three simulated devices + run_demo.sh
conformance/   stub for the future automated conformance harness

Roadmap

  • v0.0.1 (this) — UDP multicast + JSON prototype, Python SDK, demo.
  • v0.x — video stream descriptors, commissioning flow, conformance harness v1, ESP32/RPi reference hardware (demo kit).
  • v1 — IP profile on Ethernet/Wi-Fi, device identity + signed messages, USB Type-C physical link spec, CAN-FD profile for MCU parts.

License

AGPL-3.0-or-later — OSI-approved open source, with share-alike.

This is fully open source, same family as Matter's Apache license (both are OSI-approved): you can use it, study it, share it, and change it. No fee, no account, public repo.

The difference from Matter's Apache-2.0 is the protect: if you ship a modified version (in a product, a device, or as a network service), you must publish that source under AGPL and we ask you to send the improvements back here as a pull request. You cannot take this private.

See CONTRIBUTING.md.

About

Matter for aftermarket car parts. Open SDK so aftermarket electronics discover each other and exchange typed data. AGPL-3.0 — use it, share improvements back.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages