82cadfed8e
Created comprehensive onboarding document for experienced RF wardrivers to: - Understand GigLez platform capabilities (6-component scoring, 299 protocols, GPS validation) - Review current performance metrics (33% synthetic, 0% real-world accuracy) - Identify data format integration needs (rtl_433 JSON, URH, GPX, etc.) - Share their wardriving workflows and preferences Document includes: - What's working: Device ID system, protocol database, GPS privacy features - Critical gaps: Real-world performance analysis (REAL_CAPTURE_ANALYSIS.md findings) - Data format questions: Hardware, file formats, GPS association methods, batch uploads - Integration roadmap: Prioritized format support based on community feedback - Response template: Copy/paste survey for wardrivers to share their setup Purpose: Gather requirements from experienced RF community to build seamless upload workflows for existing wardriving tools (RTL-SDR, HackRF, rtl_433, URH, etc.) beyond just Flipper Zero .sub files. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
357 lines
12 KiB
Markdown
357 lines
12 KiB
Markdown
# GigLez - RF Wardriver Onboarding & Data Format Integration
|
|
|
|
**Welcome, RF Wardrivers!** This document explains what we've built, current system capabilities, and **critically, what data formats we need to support for your existing wardriving workflows**.
|
|
|
|
---
|
|
|
|
## What We've Built: GigLez Overview
|
|
|
|
**GigLez** is a Wigle-style crowdsourced platform for mapping Sub-GHz IoT RF devices (300-928 MHz). Think "Wigle.net but for garage doors, weather stations, tire pressure monitors, and doorbells instead of WiFi."
|
|
|
|
### Core Concept
|
|
- **Upload** .sub files (Flipper Zero format) with GPS coordinates
|
|
- **Automatic Device Identification** using RF signature matching (299 protocol database)
|
|
- **Interactive Map** showing IoT device distribution by location
|
|
- **Community Verification** for device IDs and crowdsourced improvements
|
|
|
|
---
|
|
|
|
## What's Working Right Now
|
|
|
|
### ✅ Device Identification System (6-Component Scoring)
|
|
|
|
We've built a multi-factor RF signature matching engine with **33% accuracy on synthetic signals** (baseline established):
|
|
|
|
| Component | Weight | Purpose |
|
|
|-----------|--------|---------|
|
|
| **Timing Analysis** | 40% | K-means clustering to extract SHORT/LONG pulse widths |
|
|
| **Preamble Detection** | 25% | Identifies sync patterns (alternating, long_burst, sync_word) |
|
|
| **Timing Ratio** | 20% | Discriminates protocols by LONG/SHORT ratio (2:1 vs 3:1) |
|
|
| **Frequency Fingerprinting** | 10% | ISM band classification (315/433/868/915 MHz, ±100kHz tolerance) |
|
|
| **Bit Count Matching** | 5% | Validates bit length against protocol expectations |
|
|
|
|
**Processing Speed**: 156ms average per signal (0.4ms parse + 156ms matching)
|
|
|
|
**Supported Modulations**: OOK, FSK (from .sub metadata)
|
|
|
|
### ✅ Protocol Database (299 Protocols)
|
|
|
|
Imported from RTL_433 project:
|
|
- **Weather Sensors**: LaCrosse, Oregon Scientific, Acurite, Nexus (70+ protocols)
|
|
- **Garage Doors**: Chamberlain, LiftMaster, Linear (15+ protocols)
|
|
- **TPMS**: Schrader, Toyota, Honda, Ford (30+ protocols)
|
|
- **Security**: Honeywell, SimpliSafe, DSC (20+ protocols)
|
|
- **Doorbells & Remotes**: Princeton, PT2262, EV1527 (40+ protocols)
|
|
- **Lighting/Climate**: LED controllers, ceiling fans, thermostats (20+ protocols)
|
|
|
|
**Frequency Coverage**:
|
|
- 315 MHz: 15% (garage doors, car keys)
|
|
- 433 MHz: 70% (weather, doorbells, generic remotes)
|
|
- 868 MHz: 10% (EU devices)
|
|
- 915 MHz: 5% (US ISM band)
|
|
|
|
### ✅ GPS Validation & Privacy Features
|
|
|
|
**Implemented** (`src/gps/validator.py`):
|
|
- Latitude/longitude validation (-90 to 90, -180 to 180)
|
|
- Coordinate precision rounding (configurable 4-8 decimal places)
|
|
- Altitude validation (optional, -500m to 10000m)
|
|
- Haversine distance calculation for duplicate detection
|
|
- **Privacy**: GPS anonymization via coordinate rounding
|
|
|
|
**Example**:
|
|
```python
|
|
from src.gps.validator import validate_coordinates, anonymize_location
|
|
|
|
# Validate raw GPS
|
|
coords = validate_coordinates(lat=40.712776, lon=-74.005974, altitude=10.5)
|
|
|
|
# Anonymize (round to ~11m precision)
|
|
anon = anonymize_location(lat=40.712776, lon=-74.005974, precision=4)
|
|
# Returns: (40.7128, -74.0060)
|
|
```
|
|
|
|
### ✅ File Format Parsing (.sub files)
|
|
|
|
**Currently Supported**: Flipper Zero .sub format (both RAW and decoded variants)
|
|
|
|
**Parser** (`src/parser/sub_parser.py`):
|
|
- Extracts frequency, preset (modulation), protocol name
|
|
- Parses RAW_Data into pulse sequences
|
|
- Handles both OOK and FSK modulation metadata
|
|
- Validates file structure
|
|
|
|
**Example .sub file**:
|
|
```
|
|
Filetype: Flipper SubGhz RAW File
|
|
Version: 1
|
|
Frequency: 433920000
|
|
Preset: FuriHalSubGhzPresetOok650Async
|
|
Protocol: RAW
|
|
RAW_Data: 2980 -240 520 -980 520 -980 1000 -500 ...
|
|
```
|
|
|
|
### ⚠️ Test Coverage
|
|
|
|
- **Unit Tests**: 56 tests passing (timing, preamble, frequency, GPS, database)
|
|
- **Synthetic Benchmark**: 33% top-1 accuracy on 12 test signals
|
|
- **Real-World Benchmark**: **0% accuracy on 11 real Flipper captures** ❌
|
|
|
|
---
|
|
|
|
## Critical Gap: Real-World Performance Issue
|
|
|
|
### The Problem: Synthetic vs Real
|
|
|
|
We optimized for synthetic test signals, but **real Flipper Zero community captures fail completely**.
|
|
|
|
**Root Causes** (analyzed in `docs/REAL_CAPTURE_ANALYSIS.md`):
|
|
|
|
1. **Decoded vs RAW Format** (45% of failures)
|
|
- Many real .sub files are **already decoded** (`Protocol: Holtek_HT12X`)
|
|
- Our system only processes `RAW_Data` fields
|
|
- **Fix Needed**: Parse decoded .sub files by protocol name + timing element (TE)
|
|
|
|
2. **Missing Protocols** (27% of failures)
|
|
- Database lacks: Acurite 02077M, GE Doorbell 19297, Byron DB421E, Holtek HT12X
|
|
- **Fix Needed**: Import from real captures or community contributions
|
|
|
|
3. **Signal Complexity** (27% of failures)
|
|
- Real captures have multi-packet transmissions (131 pulses vs 40 bits)
|
|
- Variable signal quality, interference beyond 15% jitter tolerance
|
|
- **Fix Needed**: Packet segmentation, higher noise tolerance (15% → 25%)
|
|
|
|
4. **Protocol Family Competition** (9% of failures)
|
|
- Nexus ranks #34, beaten by similar Oregon Scientific protocols
|
|
- **Fix Needed**: Protocol family grouping and boosting
|
|
|
|
---
|
|
|
|
## What We Need From You: Data Format Questions
|
|
|
|
To make GigLez seamless for **existing RF wardriving workflows**, we need to understand your data collection methods and formats.
|
|
|
|
### 1. Hardware & Capture Tools
|
|
|
|
**What RF capture hardware do you use?**
|
|
- [ ] Flipper Zero
|
|
- [ ] RTL-SDR dongles
|
|
- [ ] HackRF One
|
|
- [ ] LimeSDR
|
|
- [ ] YARD Stick One
|
|
- [ ] LilyGo T-Watch / LoRa devices
|
|
- [ ] Other: _______________
|
|
|
|
**What software do you use to capture signals?**
|
|
- [ ] Flipper Zero firmware (generates .sub files)
|
|
- [ ] rtl_433 (outputs JSON/CSV)
|
|
- [ ] Universal Radio Hacker (URH) - saves .complex/.cfile
|
|
- [ ] GNU Radio (custom flowgraphs)
|
|
- [ ] inspectrum (visual analysis)
|
|
- [ ] SDR# (saves .wav / IQ recordings)
|
|
- [ ] gqrx (IQ recordings)
|
|
- [ ] Other: _______________
|
|
|
|
### 2. File Format Preferences
|
|
|
|
**What file formats do your captures produce?**
|
|
- [ ] .sub (Flipper Zero)
|
|
- [ ] .fff (Flipper Zero older format)
|
|
- [ ] JSON (rtl_433 output)
|
|
- [ ] CSV (rtl_433 CSV mode)
|
|
- [ ] .complex / .cfile (URH raw IQ data)
|
|
- [ ] .wav (SDR# IQ recordings)
|
|
- [ ] .sigmf (SigMF metadata format)
|
|
- [ ] .cu8 / .cs8 (raw IQ samples)
|
|
- [ ] Other: _______________
|
|
|
|
**Would you prefer to upload:**
|
|
- [ ] Individual files with GPS metadata embedded
|
|
- [ ] Batch uploads (ZIP with manifest.json)
|
|
- [ ] Real-time streaming (live wardriving session)
|
|
- [ ] CSV/JSON logs referencing stored signal files
|
|
|
|
### 3. GPS Data Association
|
|
|
|
**How do you currently associate GPS coordinates with captures?**
|
|
- [ ] Manual entry (lat/lon typed per file)
|
|
- [ ] GPX track log synced by timestamp
|
|
- [ ] NMEA GPS logs (separate file)
|
|
- [ ] Embedded in capture file metadata
|
|
- [ ] Kismet-style CSV (BSSID, lat, lon, timestamp)
|
|
- [ ] Custom database/spreadsheet
|
|
- [ ] Other: _______________
|
|
|
|
**GPS Precision Requirements:**
|
|
- What precision do you typically capture? (e.g., 6 decimal places = ±0.11m)
|
|
- Do you need altitude data stored?
|
|
- Do you want GPS anonymization options (round to city-level precision)?
|
|
|
|
### 4. Metadata & Session Context
|
|
|
|
**What additional metadata do you typically log?**
|
|
- [ ] Device photos (visual identification)
|
|
- [ ] Signal strength (RSSI)
|
|
- [ ] Capture duration
|
|
- [ ] Antenna type/gain
|
|
- [ ] Weather conditions
|
|
- [ ] Session notes/comments
|
|
- [ ] Device orientation (N/S/E/W)
|
|
- [ ] Other: _______________
|
|
|
|
### 5. Batch Upload Workflows
|
|
|
|
**Typical wardriving session size:**
|
|
- How many captures per session? (e.g., 50, 500, 5000+)
|
|
- Do you prefer uploading during the drive or post-processing later?
|
|
- Would you use a CLI tool for bulk uploads or web interface?
|
|
|
|
**Preferred batch format:**
|
|
```
|
|
Option A: ZIP with manifest.json
|
|
captures.zip
|
|
├── capture_001.sub
|
|
├── capture_002.sub
|
|
├── ...
|
|
└── manifest.json # GPS + timestamps for all files
|
|
|
|
Option B: CSV index + separate signal files
|
|
session_2025-01-15.csv (columns: filename, lat, lon, timestamp, notes)
|
|
signals/
|
|
├── capture_001.sub
|
|
├── capture_002.sub
|
|
└── ...
|
|
|
|
Option C: Real-time API streaming (JSON payloads)
|
|
```
|
|
|
|
Which format would integrate best with your existing tools?
|
|
|
|
### 6. Device Identification Preferences
|
|
|
|
**When you capture unknown signals, what info helps you ID them?**
|
|
- [ ] Frequency alone (e.g., "433.92 MHz probably garage door")
|
|
- [ ] Timing patterns (pulse widths)
|
|
- [ ] Bit patterns (binary data)
|
|
- [ ] Physical device photo
|
|
- [ ] FCC ID database lookup
|
|
- [ ] Community voting/verification
|
|
- [ ] Other: _______________
|
|
|
|
**Confidence threshold for auto-tagging:**
|
|
- Would you trust automatic IDs at 80% confidence?
|
|
- Would you manually verify all IDs regardless of confidence?
|
|
- Prefer "suggested IDs" that you confirm before publishing?
|
|
|
|
### 7. Privacy & Data Sharing
|
|
|
|
**Data sharing preferences:**
|
|
- [ ] Make all captures public (Wigle-style open database)
|
|
- [ ] Private by default (opt-in sharing)
|
|
- [ ] Share anonymized location data only (round to city)
|
|
- [ ] Share device types but not GPS coordinates
|
|
- [ ] Custom privacy controls per capture
|
|
|
|
**Removal requests:**
|
|
- Should users be able to request removal of specific captures (like Wigle's BSSID opt-out)?
|
|
|
|
---
|
|
|
|
## Integration Roadmap
|
|
|
|
Based on your feedback, we'll prioritize:
|
|
|
|
### Phase 1: Core Format Support
|
|
- [ ] rtl_433 JSON import (most common for non-Flipper wardrivers)
|
|
- [ ] Decoded .sub file support (fix 45% of current failures)
|
|
- [ ] GPX track log parsing
|
|
|
|
### Phase 2: Batch Upload System
|
|
- [ ] ZIP + manifest.json uploader
|
|
- [ ] CLI tool for bulk submissions
|
|
- [ ] API endpoints for real-time streaming
|
|
|
|
### Phase 3: Additional Hardware Support
|
|
- [ ] URH .complex/.cfile import (convert to timing patterns)
|
|
- [ ] SDR# .wav IQ file processing
|
|
- [ ] SigMF metadata parsing
|
|
|
|
### Phase 4: Community Features
|
|
- [ ] Manual device ID submission
|
|
- [ ] Photo upload for visual verification
|
|
- [ ] Voting system for ID accuracy
|
|
- [ ] Protocol signature contributions
|
|
|
|
---
|
|
|
|
## How to Contribute Your Data Now
|
|
|
|
### Option 1: Share Sample Files
|
|
Send us 5-10 representative captures from your wardriving sessions:
|
|
- Include GPS coordinates (lat/lon/timestamp)
|
|
- Mix of known and unknown devices
|
|
- Note your capture tool and workflow
|
|
|
|
**Where to send**: [Create GitHub issue](https://github.com/yourusername/giglez/issues) or email
|
|
|
|
### Option 2: Test the Current System
|
|
Upload Flipper Zero .sub files via our API (coming soon):
|
|
```bash
|
|
curl -X POST https://giglez.io/api/submit \
|
|
-F "file=@capture.sub" \
|
|
-F "latitude=40.7128" \
|
|
-F "longitude=-74.0060" \
|
|
-F "timestamp=2025-01-15T12:00:00Z"
|
|
```
|
|
|
|
### Option 3: Provide rtl_433 JSON
|
|
If you use rtl_433, share sample JSON output:
|
|
```bash
|
|
rtl_433 -F json > captures.json
|
|
# Include GPS coordinates for each capture (manual or GPX sync)
|
|
```
|
|
|
|
---
|
|
|
|
## Questions?
|
|
|
|
We want to build this **for the wardriving community**, so your input directly shapes development priorities.
|
|
|
|
**Contact**:
|
|
- GitHub Issues: [giglez/issues](https://github.com/yourusername/giglez/issues)
|
|
- Email: team@giglez.io (placeholder)
|
|
- Discord: [GigLez Community](https://discord.gg/giglez) (placeholder)
|
|
|
|
---
|
|
|
|
## Response Template (Copy/Paste & Fill Out)
|
|
|
|
```
|
|
### My Wardriving Setup
|
|
|
|
**Hardware**: [e.g., HackRF One + GPS dongle]
|
|
**Software**: [e.g., rtl_433 + GPX logger]
|
|
**File Formats**: [e.g., JSON output from rtl_433]
|
|
**GPS Method**: [e.g., GPX track synced by timestamp]
|
|
**Session Size**: [e.g., 200-500 captures per drive]
|
|
**Upload Preference**: [e.g., Batch upload via CLI after session]
|
|
|
|
### Data Format Details
|
|
|
|
[Paste sample file snippet or describe structure]
|
|
|
|
### Integration Requests
|
|
|
|
[What would make GigLez fit seamlessly into your workflow?]
|
|
|
|
### Privacy Preferences
|
|
|
|
[Public/private/anonymized?]
|
|
```
|
|
|
|
---
|
|
|
|
**Thank you for helping build the Sub-GHz IoT mapping platform!** 🚗📡
|
|
|
|
*Last Updated: 2026-02-16*
|