Real-time APRS-driven SOTA activator monitoring and automatic summit-zone detection.
SOTA Watchtower is a functional proof of concept (POC) for integrating APRS telemetry with SOTA activity data to automatically identify likely summit activations in near real time.
The project ingests APRS positions from APRS-IS, correlates them with configured SOTA scope and active alerts, and publishes operator-relevant outputs through a web dashboard and Telegram notifications.
Its primary value is exploring and validating an APRS-first detection workflow for SOTA activators, including geo-filtered ingestion, proximity checks, and automated event signaling.
This project is a proof of concept and is not a replacement for SOTLAS.
SOTLAS (
manuelkasper/sotlas-frontend) is an established, mature reference implementation in the SOTA ecosystem.SOTA Watchtower has a different objective: it focuses on experimental APRS integration and automatic activator detection workflows. It should be viewed as a complementary exploration that can coexist with existing SOTA tools and infrastructure.
- SOTLAS remains the canonical user-facing reference for broad SOTA map/spot experience.
- SOTA Watchtower concentrates on APRS ingestion, detection logic, and alerting behavior.
- Design choices here prioritize experimentation and iteration in APRS-driven automation.
SOTA is a global amateur radio award program where licensed operators activate qualifying mountain summits and make contacts.
- Activators operate portable radio stations from summits.
- Chasers attempt to contact activators from other locations.
- Points are awarded based on summit characteristics under SOTA program rules.
- The program has grown internationally across many associations and regions.
Official references:
APRS is a digital amateur radio data network used to transmit position and telemetry information.
In this project, APRS enables near real-time location updates from operators carrying APRS-capable devices (handheld radios, trackers, mobile stations), creating the data foundation for automated summit proximity detection.
When activators transmit APRS while moving toward or operating from summits, their position stream can be correlated with summit metadata and planned activations.
That correlation enables automated workflows such as:
- detecting probable arrival in activation zones,
- prioritizing relevant activators,
- notifying teams/chats without manual map watching.
- Activation zone awareness: detect when a tracked operator enters a configurable summit vicinity.
- Operational support: send Telegram notifications for key events (alerts, spots, summit-zone detection).
- Situational map view: display APRS walkers, summit context, and tactical relevance in one UI.
- Scope control: monitor selected SOTA associations/regions instead of broad global feeds.
- Research and iteration: test detection heuristics, correlation strategies, and filtering models.
-
APRS-IS Integration
- EC2 listener connects to APRS-IS (
rotate.aprs.net:14580). - Applies dynamic APRS area filters (
a/...) and position-only constraints (t/p). - Uses lightweight deduplication to reduce noisy near-identical packets.
- EC2 listener connects to APRS-IS (
-
Automatic Activator Detection
- Correlates APRS callsigns with active SOTA alerts.
- Performs summit-zone checks using distance and altitude thresholds.
- Supports SSID-insensitive matching for improved APRS/alert correlation.
- Avoids duplicate notification spam by tracking already-notified states.
-
Web Dashboard
- Angular 19 frontend with map, alerts, spots, tactical view, and config UI.
- Real-time position visibility and summit metadata enrichment.
- Configurable monitoring scope and runtime behavior.
-
Telegram Notification Pipeline
- Sends HamAlert-forwarded events and auto-detection signals.
- Includes daily briefing support for planned activations.
-
Cloud-Native AWS Deployment
- AWS SAM backend (Lambda, API Gateway, DynamoDB, EventBridge).
- Cognito-protected UI/API sections.
- CloudWatch logging/monitoring coverage.
APRS-IS Network
|
v
EC2 APRS Listener (aprslib)
| dynamic filter + packet screening
v
ActivationZoneMonitorFunction
|-- store positions -> AprsPositionsTable
|-- correlate callsigns with active SOTA alerts
|-- geofence checks (distance + altitude)
`-- notify -> TelegramNotifyFunction
HamAlert Webhook -> HamAlertApi -> HamAlertProcessFunction -> SotaAlertsTable -> Telegram
SOTA API (alerts/spots/summits refresh) -> scheduled Lambdas -> DynamoDB
Web App (Angular)
|-- GET /aprs-positions
|-- GET /alerts
|-- GET /spots
|-- GET /summits
`-- GET/PUT /config
| Layer | Component | Purpose |
|---|---|---|
| APRS ingest | EC2 aprs-listener.py |
APRS-IS connection, filter refresh, packet pre-processing |
| Detection | ActivationZoneMonitorFunction |
Position persistence + summit-zone detection + signaling |
| Alert ingest | HamAlertProcessFunction |
HamAlert webhook processing and Telegram forwarding |
| Data/API | Multiple Lambda endpoints | Alerts, spots, summits, APRS positions, runtime config |
| Storage | DynamoDB tables | Positions, alerts, config, websocket sessions, summit metadata |
| Frontend | Angular 19 app (web/) |
Map, alerts/spots views, tactical workflows, configuration |
| Notifications | TelegramNotifyFunction |
Outbound Telegram messaging |
- APRS listener receives position packets under configured geographic scope.
- Candidate packets are filtered and deduplicated.
- Position updates are forwarded to the activation monitor Lambda.
- Lambda stores positions with TTL and evaluates active alerts.
- Callsign normalization + summit proximity checks estimate activation likelihood.
- On threshold pass, event is emitted via Telegram and reflected in UI state.
Detection confidence is derived from multiple converging signals rather than a single point test:
- Spatial proximity: distance to target summit within configured radius.
- Vertical plausibility: altitude relationship to summit altitude within configurable delta.
- Identity correlation: APRS callsign and alert callsign normalization (SSID-insensitive).
- Temporal relevance: active/current alert windows and fresh APRS updates.
This is intentionally heuristic and operational, not a formal probabilistic classifier.
- Python 3.12+
- AWS CLI configured for target account/region
- AWS SAM CLI
- Node.js 18+ (for frontend builds)
- HamAlert account
- Telegram bot token + target chat IDs
git clone https://github.com/DO4AF/sota-watchtower.git
cd sota-watchtowerCreate local environment file from example:
cp .env.example .envPopulate required values in .env (never commit secrets):
TELEGRAM_BOT_TOKEN=<your_telegram_bot_token>
TELEGRAM_USER_CHAT_ID=<your_personal_chat_id>
TELEGRAM_GROUP_CHAT_ID=<your_group_chat_id>
FREQUENCY_FILTER_PATTERN='\b(145|433|2|70).*-.*\b'
ADMIN_EMAIL=<admin_email>
ADMIN_PASSWORD=<admin_password>Set parameter overrides in samconfig.toml according to your environment:
TelegramBotTokenTelegramUserChatIdTelegramGroupChatIdFrequencyFilterPattern- admin credentials parameters
sam build
sam deployAlternatively, use the project helper:
./deploy.sh- Add webhook destination URL (
POST /notify) from stack outputs. - Use trigger comment keyword format containing
SOTA2TELEGRAM.
Example trigger comment:
SOTA2TELEGRAM_VHFUHF_DM-South
- Open the web UI and authenticate.
- Configure scope (
sotaAssociations, optionalsotaRegions) in the Config view. - Verify APRS positions are arriving in the map.
- Monitor alerts/spots tables and tactical map overlays.
- Observe Telegram for forwarded spots and activation-zone notifications.
- Map view: inspect walkers, summit overlays, and tactical relationships.
- Alerts/Spots view: review normalized and summit-enriched event data.
- Config view: adjust runtime behavior without full redeploy for supported keys.
- Use HamAlert simulate/test tools for webhook verification.
- Confirm APRS packets in CloudWatch logs for the listener and monitor functions.
- Ensure selected SOTA scope matches your intended operating region.
- Current stage: Functional proof of concept with live operational deployment.
- Maturity: Experimental system suitable for iterative development and focused operational use.
- Scope: APRS-centric activator detection and alerting, not full ecosystem replacement tooling.
- Detection logic is heuristic; false positives/negatives remain possible.
- APRS data quality and coverage depend on external network conditions and device behavior.
- Configuration and infrastructure are optimized for this project context, not generic turnkey multi-tenant operation.
- Ecosystem dependencies (SOTA API, HamAlert, APRS-IS, Telegram API) can affect behavior.
- Harden detection scoring and add richer confidence metadata.
- Improve APRS scope guardrails and fallback safety behavior.
- Expand observability (structured metrics, trend dashboards, anomaly alerts).
- Add more explicit correlation diagnostics in UI for operator trust.
- Improve test coverage for normalization, geofencing, and filtering paths.
- Evaluate broader interoperability hooks with existing SOTA ecosystem tools.
Contributions are welcome, especially around APRS filtering, detection quality, UI clarity, and reliability.
- Fork the repository.
- Create a branch (
git checkout -b feature/your-change). - Implement and validate changes.
- Open a pull request with clear context and test notes.
Recommended validation before PR:
cd web && npx ng build --configuration productionThis project is licensed under the GNU General Public License v3.0.
See LICENSE for full terms.
- Official SOTA site: https://www.sota.org.uk/
- SOTA overview (DE): https://de.wikipedia.org/wiki/Summits_on_the_Air
- SOTAWatch: https://sotawatch.sota.org.uk/
- APRS-IS network overview: http://www.aprs-is.net/
- APRS Foundation: https://www.aprs.org/
- SOTLAS frontend (reference project): https://github.com/manuelkasper/sotlas-frontend
- HamAlert: https://hamalert.org/
- The international SOTA community for operating practices, summit data, and shared knowledge.
- SOTLAS and maintainers for providing a strong ecosystem reference point.
- HamAlert for alerting infrastructure used in this workflow.
- APRS-IS operators and volunteers for sustaining packet routing infrastructure.
SOTA Watchtower is intentionally focused on APRS-driven detection experimentation. It complements existing SOTA tooling by exploring automated activator-awareness workflows built from live packet telemetry.