Acoem has developed a complete gunshot detection platform that utilizes their ATD-300 pod sensors and an embedded AI engine to analyze and detect gunshot events with high accuracy. The head end software platform is called Cadence, and is cloud based which of course is not my preference for security applications. That isn't to say there's anything wrong with Cadence, in fact it is a good software product in my opinion. I just prefer running things behind a firewall on our own network.
Sooo, after obtaining a demo sensor, I became curious about what could actually be done with just the ATD-300 sensor itself, without the Cadence application. Turns out, you can get pretty good information just using their sensor pod and it's embedded API.
I took some time to work up some code to listen for notifications from a sensor and display information about health and event notifications. It was fairly straightforward and easy to implement a Google map interface to display the sensor location and related gunshot events in near real time as the come in. NOTE: This is NOT production quality software and we are not trying to sell anybody this tool. This was merely an exercise to see what was available just using the actual sensor pods themselves.
Here's a summary of the application's functions:
- Async TCP server — Runs a React-based server on port 8880 that handles both sensor connections and browser clients on a single port
- Sensor data ingestion — Accepts POST requests to receive JSON data from Acoem ATD-300 gunshot detection sensors
- SQLite storage — Persists all incoming data to a local SQLite database (atd300.sqlite3) using WAL mode for concurrent read/write
- Three data types parsed and stored:
- Measures — LAeq noise level readings (dB) including per-channel values
- State of Health (SOH) — Device status, temperature, CPU/RAM/disk usage, GPS coordinates, orientation, firmware version, IP, and uptime
- Threats — Gunshot detections with threat type, probability, azimuth, elevation, distance, and computed event GPS coordinates
- Geodesic event positioning — Calculates the GPS location of detected events using the sensor's known position, azimuth, and distance via a destination-point formula
- Server-Sent Events (SSE) — Broadcasts live updates to connected browser clients at /events
- REST API — Serves historical data via /api/threats, /api/measures, /api/soh, and /api/stats endpoints
- Live web dashboard (index.html) — Real-time browser UI showing measurement gauges, SOH status, a threat events table, an interactive Google Maps view with sensor/event markers, and a scrollable event log
- Google Maps integration — Plots sensor positions and gunshot events on a map (requires an API key in config.json)
- Schema auto-repair — Detects SQLite schema mismatches and automatically drops/recreates tables to match the current schema
Take a look at a quick demo to see how it works: