From 396eeb175e9335d8861f785760413768e36e50cc Mon Sep 17 00:00:00 2001 From: Sam Rolfe Date: Thu, 29 Oct 2026 11:24:26 +1100 Subject: [PATCH] content: car tracker page with a real hardware image - content/edge/l3/edge-car-tracker.md, written from the evidence notes - product image of the SIM7080G Cat-M module, cropped to 640px, with a caption naming what it is and that it is a product image - referenced from the edge overview - original kept in sam/CAR_GPS_TRACKER so the project repo documents its own build --- content/assets/images/sim7080g-module.jpg | Bin 0 -> 29813 bytes content/edge/edge-overview.md | 2 +- content/edge/l3/edge-car-tracker.md | 51 ++++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 content/assets/images/sim7080g-module.jpg create mode 100644 content/edge/l3/edge-car-tracker.md diff --git a/content/assets/images/sim7080g-module.jpg b/content/assets/images/sim7080g-module.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94034a23d4d339e9be2710a8da57412ce42c222f GIT binary patch literal 29813 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 literal 0 HcmV?d00001 diff --git a/content/edge/edge-overview.md b/content/edge/edge-overview.md index 09e9204..a380962 100644 --- a/content/edge/edge-overview.md +++ b/content/edge/edge-overview.md @@ -8,7 +8,7 @@ confidence: running period: "2020–" tech: [ESP32, LoRa, Zigbee, MQTT, Home Assistant, Snapcast, Raspberry Pi] metrics: [{label: "edge nodes", value: 20}, {label: "lighting zones", value: 9}, {label: "automations", value: 20}] -artefacts: [{type: doc, label: "Edge architecture — power · radio · deep sleep", url: "content/edge/l3/edge-architecture.md"}, {type: doc, label: "The failures, kept in the record", url: "content/edge/l3/edge-failures.md"}, {type: doc, label: "Distributed audio — eight endpoints with ducking", url: "content/edge/l3/edge-snapcast.md"}] +artefacts: [{type: doc, label: "Edge architecture — power · radio · deep sleep", url: "content/edge/l3/edge-architecture.md"}, {type: doc, label: "The failures, kept in the record", url: "content/edge/l3/edge-failures.md"}, {type: doc, label: "Distributed audio — eight endpoints with ducking", url: "content/edge/l3/edge-snapcast.md"}, {type: doc, label: "Vehicle tracker on LTE Cat-M", url: "content/edge/l3/edge-car-tracker.md"}] public: true last_verified: 2026-10-26 tags: [edge, iot, esp32, lora, zigbee] diff --git a/content/edge/l3/edge-car-tracker.md b/content/edge/l3/edge-car-tracker.md new file mode 100644 index 0000000..4eb5b15 --- /dev/null +++ b/content/edge/l3/edge-car-tracker.md @@ -0,0 +1,51 @@ +--- +id: edge-car-tracker +area: edge +level: 3 +title: "Artefact — Vehicle tracker on LTE Cat-M" +claim: "A tracker that sleeps between reports · wakes on a schedule or when the car moves · and reports when it leaves a boundary set from the web interface." +confidence: in-progress +period: "2024–" +tech: [ESP32, LTE Cat-M, NB-IoT, SIM7080G, GPS, LiFePO4] +metrics: [{label: "battery packs", value: 2}] +artefacts: [] +public: true +last_verified: 2026-10-28 +tags: [edge, tracker, lte, low-power, artefact] +--- + +The build is on the bench: two LiFePO batteries, a buck converter, an ESP32 with GPS, and a +cellular module for the uplink. The car keeps the packs charged while it is running. + +![Waveshare Pico SIM7080G Cat-M and NB-IoT module — the cellular link in the tracker. Product image, used to identify the part.](../../assets/images/sim7080g-module.jpg) + +## What it does + +Two behaviours, chosen by the settings rather than hard-coded. When the car is parked the +ESP32 sits in deep sleep, wakes on a timer, checks its own configuration, and reports only +what the settings ask for. When the car is moving it stays awake and reports on a shorter +interval. Either way the interval and the boundary can be changed from the web interface, +and a change can force an immediate update rather than waiting for the next wake. + +The geofence is the part that matters. A boundary is drawn from the web interface, and the +device is responsible for deciding whether it has left it — which is why the settings have +to travel to the device rather than live only in the server. + +## Why LTE Cat-M rather than WiFi + +The tracker lives in a car. WiFi coverage is a driveway, not a road. Cat-M and NB-IoT were +chosen because they are designed for exactly this shape of traffic — small payloads, long +sleeps, coverage beyond what 4G handsets need — and because the modules are cheap enough to +leave installed. + +## What it proves + +A complete path rather than a demo: constrained hardware, a power budget that dictates the +schedule, a device that holds enough state to act on its own, and a web application that +configures it and shows where it has been. + +## Still open + +Field testing across the full battery cycle. The sleep interval that is right for a parked +car and the interval that is right for a moving one are guesses until the discharge curve +has been measured over a week rather than a day.