This integration adds Bluetooth connectivity to the omni-COT ATAK plugin, enabling it to receive drone Remote ID detections from the gyb_detect ESP32 device and display them as CoT (Cursor on Target) events on the ATAK map.
- Bluetooth Serial Connection: Connects to gyb_detect device via Bluetooth Serial (SPP)
- Real-time Drone Detection: Receives and displays drone detections on ATAK map
- Remote ID Parsing: Parses OpenDroneID and French Remote ID formats
- CoT Conversion: Converts drone detections to ATAK-compatible CoT events
- Dashboard Integration: Shows connection status, battery level, and drone count
- Automatic Mapping: Detected drones appear as air tracks on the ATAK map with full metadata
-
RemoteIdData.java (
com.engindearing.omnicot.remoteid.RemoteIdData)- Data model for Remote ID drone detections
- Includes drone location, speed, altitude, operator info, and metadata
-
RemoteIdParser.java (
com.engindearing.omnicot.remoteid.RemoteIdParser)- Parses JSON messages from gyb_detect device
- Handles device info, battery status, and drone detections
-
BluetoothManager.java (
com.engindearing.omnicot.remoteid.BluetoothManager)- Manages Bluetooth connection lifecycle
- Scans for and connects to gyb_detect devices
- Streams JSON data and notifies listeners
-
RemoteIdToCotConverter.java (
com.engindearing.omnicot.remoteid.RemoteIdToCotConverter)- Converts Remote ID detections to CoT events
- Maps drone data to MIL-STD-2525D symbols
- Includes Remote ID metadata in CoT details
-
AndroidManifest.xml
- Added Bluetooth permissions (BLUETOOTH, BLUETOOTH_CONNECT, BLUETOOTH_SCAN)
- Added location permission for Bluetooth scanning
-
DashboardActivity.java
- Added Bluetooth UI components (status, connect/disconnect buttons)
- Added battery level and drone detection counter
- Integrated BluetoothManager with listeners
-
OmniCOTDropDownReceiver.java
- Added
handleRemoteIdDetection()method - Converts detections to CoT and dispatches to ATAK
- Added
-
omnicot_dashboard.xml
- Added "Remote ID Detection" section to dashboard
- Displays connection status, battery level, and drone count
gyb_detect Device (ESP32)
↓ Bluetooth Serial (JSON)
BluetoothManager
↓ RemoteIdParser
RemoteIdData
↓ DashboardActivity
OmniCOTDropDownReceiver
↓ RemoteIdToCotConverter
CotEvent
↓ CotDispatcher
ATAK Map (Air Track Display)
Before using the plugin, you need to pair your Android device with the gyb_detect device:
- Turn on the gyb_detect device
- Go to Android Settings → Bluetooth
- Look for a device named
gyb_detect-XXXXXX(where XXXXXX is the device serial) - Tap to pair with the device
- Open ATAK and launch the OmniCOT plugin
- The dashboard will show a "Remote ID Detection" section
- Click the Connect button
- The plugin will automatically find and connect to the paired gyb_detect device
- Connection status will update to "Bluetooth: Connected"
- Battery level will display the gyb_detect device battery percentage
Once connected:
- Automatic Display: Detected drones automatically appear on the ATAK map
- Air Track Symbols: Drones show as unknown air tracks (yellow rotary wing symbols)
- Real-time Updates: Drone positions update every second while detected
- Metadata: Tap on a drone marker to view:
- Serial number
- Operator ID
- Altitude (MSL and AGL)
- Speed and heading
- Detection method (WiFi/Bluetooth)
- Signal strength (RSSI)
- Operator location (if available)
The dashboard displays:
- Drones Detected: Total count of unique drones detected
- Battery: gyb_detect device battery percentage
- Connection Status: Current Bluetooth connection state
Click the Disconnect button to close the Bluetooth connection.
Drone detections are converted to CoT events with the following structure:
- Type:
a-u-A-M-F-Q-r(Unknown Air Track, Rotary Wing) - UID:
DRONE-{serial_number/mac} - How:
h-s(Sensor detected)
The CoT event includes:
- contact: Callsign derived from serial number or MAC
- track: Course (heading) and speed in m/s
- __remoteid: Custom detail with all Remote ID metadata:
serialNumber: Drone serial numberoperatorId: Remote ID operator identifierdescription: Self-ID description textrssi: Signal strength in dBmrecvMethod: Detection method (WiFi Beacon/NaN/Bluetooth)heightAGL: Height above ground in metersheightTakeoff: Height above takeoff pointhSpeed,vSpeed: Horizontal and vertical speedsopLat,opLon: Operator location coordinatesdetectedBy: "gyb_detect"
- precisionlocation: GPS source indicators
- remarks: Human-readable summary of detection
The gyb_detect device sends the following JSON data:
{
"manufacturer": "engindearing",
"make": "engindearing",
"model": "gyb_detect",
"version": "0.1a - [date]",
"serialNumber": "XXXXXX",
"capabilities": 49
}{
"batteryLevel": 0.85,
"batteryVersion": "11",
"batteryTemp": "29.0"
}{
"remoteId": "operator_id",
"uasId": "XX:XX:XX:XX:XX:XX",
"serialNumber": "drone_serial",
"rssi": -45,
"recvMethod": 16,
"uasLat": "37.123456",
"uasLon": "-122.123456",
"uasHae": 150.5,
"uasHag": 50.2,
"uasHeading": 180.0,
"uasHSpeed": 5.5,
"uasVSpeed": 0.5,
"opLat": "37.123400",
"opLon": "-122.123400",
"description": "DJI Mavic",
...
}The gyb_detect device can detect drones via:
- WiFi Beacon (2.4 GHz):
recvMethod = 1 - WiFi NaN (Neighbor Awareness):
recvMethod = 2 - Bluetooth Legacy (BLE 4):
recvMethod = 16
- Ensure the gyb_detect device is powered on
- Check that Bluetooth is enabled on your Android device
- Pair the device in Android Bluetooth settings first
- Make sure you're within Bluetooth range (typically 10 meters)
- Try disconnecting and reconnecting
- Restart the gyb_detect device
- Verify the gyb_detect device is detecting drones (check serial monitor if available)
- Ensure the drone is broadcasting Remote ID (required for DJI drones in many regions)
- Check that location data is valid (non-zero coordinates)
- Grant Bluetooth and Location permissions to ATAK
- On Android 12+, both BLUETOOTH_CONNECT and BLUETOOTH_SCAN permissions are required
- Profile: SPP (Serial Port Profile)
- UUID:
00001101-0000-1000-8000-00805f9b34fb - Baud Rate: 115200 (handled automatically by Android)
The plugin validates GPS coordinates:
- Rejects (0, 0) or near-zero coordinates
- Validates latitude: -90° to +90°
- Validates longitude: -180° to +180°
- Rejects NaN values
- Update Rate: 1 Hz per drone
- Connection Latency: ~1-2 seconds
- Map Update: Real-time via ATAK's CoT processing
To build the plugin with Remote ID support:
cd omni-COT
./gradlew clean assembleReleaseThe APK will be in app/build/outputs/apk/release/.
Potential improvements:
- Support for multiple simultaneous drones
- Drone track history and path display
- Geofence alerts for drone detections
- Offline drone database for identification
- Export drone detection logs
- Integration with other Remote ID receivers
- OpenDroneID: https://github.com/opendroneid/opendroneid-core-c
- ASTM F3411: Remote ID standard
- ATAK: https://tak.gov/
- gyb_detect Project: See main project README
This integration maintains the same license as the parent omni-COT project.
For issues or questions about the Remote ID integration, please open an issue in the project repository.
Note: This integration requires the gyb_detect hardware device. See the main gyb_detect project for hardware setup and firmware installation instructions.