A small, battery-powered Wi-Fi/GNSS tracker based on the LilyGO T-SIM7080G-S3 and MicroPython.
I want a theft protection for our new stroller.
Requirements:
- Small and mobile
- Cheap
- Can send from any location to a configurable endpoint
- Without vendor-lock (no app/registration)
| Tracker Assembled | Tracker in Case |
|---|---|
| Tracker in Stroller | Tracker in Traccar |
- Hardware:
- LILYGO T-SIM7080G-S3 including GNSS and LTE antenna
- 18650 battery
- IoT SIM card
- Location methods:
- WiFi (+ cell data) -> BeaconDB
- GNSS
- Cellular connectivity: LTE-M or NB-IoT
The tracker obtains the location based on GNSS or WIFI. This data is sent to a configurable URL. In my case, this is a ntfy instance. A custom script subscribes to the ntfy instance, converts the data and forwards it to a self-hosted Traccar server in my home lab.
Please check the documentation for setup instructions and further details:
- Quick start
- Software implementation details
- Battery life estimation
- Cost estimation
- Search for a good LTE-M or NB-IoT SIM card
flowchart LR
%% =========================================================
%% DEVICE
%% =========================================================
subgraph DEVICE["📍 LILYGO T-SIM7080G"]
direction TB
TRACKER["Tracker"] --> WIFI_PATH["📶 WiFi path"]
WIFI_PATH -->|"Configured home SSID detected"| WIFI_PASSWORD["WiFi password set?"]
WIFI_PASSWORD -->|"No"| DONE["Cycle finished"]
WIFI_PASSWORD -->|"Yes -> heartbeat"| WIFI["WiFi"]
WIFI_PATH -->|"Enough APs detected"| CELLULAR["LTE-M / NB-IoT"]
WIFI_PATH -->|"Too few APs"| GNSS_PATH["🛰️ GNSS path"]
GNSS_PATH -->|"Fix -> Location"| CELLULAR
GNSS_PATH -->|"No fix -> WiFi fallback or heartbeat"| CELLULAR
end
%% =========================================================
%% PUBLIC NETWORK
%% =========================================================
subgraph PUBLIC["🌐 PUBLIC NETWORK"]
NTFY["ntfy"]
BEACON["BeaconDB\nWiFi geolocation"]
end
%% =========================================================
%% HOME NETWORK
%% =========================================================
subgraph HOME["🏠 HOME NETWORK"]
CONVERTER["Message Converter"]
TRACCAR["Traccar Server"]
end
%% =========================================================
%% CONNECTIONS
%% =========================================================
WIFI -->|"Publish"| NTFY
CELLULAR -->|"Publish"| NTFY
NTFY -->|"Subscribe"| CONVERTER
CONVERTER -->|"WiFi AP lookup"| BEACON
BEACON -->|"Location"| CONVERTER
CONVERTER -->|"HTTP Request in OsmAnd format"| TRACCAR
| Abbreviation | Description |
|---|---|
| AP | Access Point. I.e. a WiFi network. |
| APN | Access Point Name. Gateway for the cellular data. |
| BSSID | Basic Service Set Identification. I.e. the MAC address of the WiFi. |
| GNSS | Global Navigation Satellite System. For example GPS or Galileo. |
| LTE-M / NB-IoT | Narrowband Cellular Standards for mobile data. |
| RSSI | Received Signal Strength Indicator. I.e. the strength of the WiFi signal. |
| SSID | Service Set Identifier. I.e. the name of the WiFi. |
| File/Folder | Content |
|---|---|
| .github/workflows | Github CI |
| docs | Documentation |
| firmware | Firmware running on the device |
| ntfy_traccar_bridge | Bridge scripts running on the server at a machine in local network |
| flash_firmware.bash | Flash the firmware to the device |