Skip to content

v1.2.0 - Geofence/Distance Tracking

Choose a tag to compare

@MrAlders0n MrAlders0n released this 19 Dec 01:32
· 589 commits to main since this release
1f13996

Release Notes - v1.2.0

Release Date: 2025-12-19


πŸŽ‰ What's New

🌍 Geofence Validation

Pings are now restricted to a 150km radius around Ottawa (centered on Parliament Hill). This ensures all wardrive data stays within the coverage mapping region and prevents accidental data submissions from outside the target area.

πŸ“ Minimum Distance Filtering

A new 25-meter minimum distance requirement between consecutive pings has been added. This prevents duplicate data points when stationary or moving slowly, resulting in cleaner and more meaningful coverage data.

πŸ“ Distance from Last Ping Display

The UI now shows real-time distance from your last successful ping location, helping you know when you've moved far enough for a new ping to be accepted.

πŸ› Debug Mode

Developers and advanced users can now enable detailed logging by adding ?debug=true to the URL. This provides extensive console output for troubleshooting connection issues, GPS problems, and ping failures.


βš™οΈ Improvements

⏱️ Timer System Refactoring

  • Auto-ping countdown now pauses when you send a manual ping and resumes afterward
  • More reliable timer management with better clock skew handling
  • Cleaner countdown display with consistent status messaging

🎨 Status Color Consistency

Standardized color coding across all status messages:

  • 🟒 Green - Success (ping sent, connected)
  • 🟑 Amber - Warning (skipped pings, cooldown)
  • πŸ”΄ Red - Error (disconnected, failures)
  • πŸ”΅ Blue - Info (connecting, sending)
  • βšͺ Gray - Idle (waiting)

πŸ“ GPS Handling

  • Improved handling of GPS watch data during manual pings
  • Better fallback logic when GPS data becomes stale
  • More informative status messages when GPS issues occur

🧹 Code Quality

  • Refactored countdown timers into reusable components
  • Centralized timer cleanup on disconnect
  • Better separation of concerns throughout the codebase

πŸ“š Documentation

  • README updated with detailed instructions for joining the #wardriving channel in the MeshCore app before using the web app
  • Step-by-step setup guides improved for both Android and iOS

πŸ”§ Technical Details

New Configuration Constants

Constant Value Description
OTTAWA_GEOFENCE_RADIUS_M 150,000m Geofence radius around Ottawa
MIN_PING_DISTANCE_M 25m Minimum distance between pings
GPS_WATCH_MAX_AGE_MS 60,000ms Max age for GPS data in manual pings
MIN_PAUSE_THRESHOLD_MS 1,000ms Minimum timer value to pause
MAX_REASONABLE_TIMER_MS 300,000ms Maximum timer value (clock skew protection)

New Functions

  • calculateHaversineDistance() - Accurate distance calculation between GPS coordinates
  • validateGeofence() - Check if coordinates are within Ottawa region
  • validateMinimumDistance() - Check if moved 25m+ from last ping
  • createCountdownTimer() - Generalized countdown timer factory
  • debugLog(), debugWarn(), debugError() - Conditional debug logging

⬆️ Upgrade Notes

This is a non-breaking update. Simply refresh the web app to get the latest version. No configuration changes are required.

Note: If you're testing outside the Ottawa region (150km from Parliament Hill), pings will be blocked with a "Ping skipped, outside of geo fenced region" message.


πŸ™ Acknowledgments

Thanks to everyone testing and providing feedback on the MeshCore wardrive coverage mapping project!


What's Changed

  • Refactor and optimize wardrive.js with comprehensive debug logging by @Copilot in #46
  • Fix manual ping timeout after stopping auto ping by @Copilot in #48
  • Add GPS status feedback and freshness validation for ping operations by @Copilot in #49
  • Add live countdown for GPS skip in auto-ping mode by @Copilot in #50
  • Fix auto ping timer conflict during manual ping by @Copilot in #52
  • Add GPS geofence and distance-based ping filtering for Ottawa region by @Copilot in #53
  • Add geofence validation, distance filtering, and debug mode by @MrAlders0n in #54

Full Changelog: v1.1.1...v1.2.0