Self-hosted Push-to-Talk server with GPS tracking, emergency alerts, weather reporting, and fleet dispatch.
Two-way voice communication using the Mumble protocol. Press the hardware PTT button on the device to transmit. Release to listen. Audio is encoded with Opus at 16-24 kbps for clear voice quality with low latency (<200ms).
Server: Murmur (Mumble server) handles voice routing, encoding, and channel management.
Client: HamMumble app on Android devices (e.g., Hytera P50, or any Android device with PTT support).
Create channels for different teams or purposes (e.g., Warehouse, Security, Office). Users join a channel to hear and talk to other members. Managed from the Channels tab.
Special channels:
• Emergency — Auto-created for SOS events. All users are moved here during emergencies.
• Weather — Double-PTT to hear a spoken weather report for your GPS location.
Each device runs the Traccar Client app in the background, reporting GPS position every 30 seconds. The Map tab shows all device locations on an interactive map (OpenStreetMap).
Overview tab shows GPS coordinates, battery level, and last seen time per device.
Requires: Traccar Client APK installed on the device, configured with server ptt.harro.ch:5055.
When an SOS is triggered:
1. All connected users are automatically moved to the Emergency channel
2. Red alert banner appears on the admin dashboard with GPS location
3. Webhook/email notification sent to configured admin contacts
4. Everyone can hear the person in distress, regardless of which channel they were in
Acknowledge: An admin can acknowledge from the dashboard or type "OK" in the Emergency channel chat. All users are moved back to their original channels.
Trigger methods: Traccar Client alarm (man-down/SOS), or API call.
Aviation-style weather reporting. Join the Weather channel and press PTT twice quickly (within 10 seconds). The system:
1. Looks up your GPS position from Traccar
2. Fetches current weather from Open-Meteo (free, no API key)
3. Generates a spoken ATIS-style report using TinyTTS
4. Plays the audio in the Weather channel
Report includes: temperature, wind speed and direction, cloud cover, precipitation, weather conditions.
Rate limit: One request per user per 60 seconds.
Also available via API: POST /api/weather with {"location": "Paris, France"}
From the Dispatch tab, enter a location name or coordinates. The system geocodes the location and finds the nearest workers by GPS distance.
Click Dispatch to send a message to the selected worker via Mumble text.
Also on Map tab: Click anywhere on the map to dispatch to that location.
Pre-configure frequently used dispatch locations for one-click access. Add locations by name (auto-geocoded) or coordinates from the Dispatch tab.
Saved locations appear as quick-pick buttons at the top of the Dispatch tab. Click a button to instantly search for the nearest workers to that location.
For field workers who work alone. When enabled:
• Workers flagged as Lone Worker must check in every X minutes (configurable)
• If a worker goes overdue, they receive a TTS voice reminder: "Automated check-in for {name}, please respond"
• Status shown on the Users tab: OK / Due soon / OVERDUE
• Optionally auto-triggers SOS when a worker goes overdue
Enable: Admin tab → Lone Worker Safety → toggle on.
Per-user: Only users with the "Lone Worker" flag are monitored. Set this when creating or editing a user.
Create users for each device from the Users tab. Each user gets a username, password, and optional display name.
QR Code: Click QR to generate a QR code for quick device enrollment. Scan with the device camera to auto-configure HamMumble.
Roles:
• Admin — Can acknowledge SOS from the radio (type "OK" in Emergency channel)
• Lone Worker — Subject to periodic check-in monitoring
• User — Standard radio user
Manage admin dashboard accounts from the Admin tab. Passwords are hashed with bcrypt.
Roles: Admin (full access) or Viewer (read-only dashboard).
From the Admin tab, upload a CSV file to create multiple users at once. Download the template, fill in usernames and passwords, upload. Returns a ZIP file with QR codes for each device.
The Audit Log tab shows every admin action: user creation/deletion, admin management, SOS events. Filterable by action type. Includes timestamp, admin username, and IP address.
GET /metrics returns Prometheus-compatible metrics: uptime, Murmur connection status, users online, total users, channels, SOS events.
Health check: GET /api/status/health returns {"status": "healthy", "murmur": "connected"}
Two apps needed:
| App | Purpose | Server | Port |
|---|---|---|---|
| HamMumble | Voice PTT + text | voice.harro.ch | 443 |
| Traccar Client | GPS tracking | ptt.harro.ch | 5055 |
Sideload via adb: adb install HamMumble.apk and adb install TraccarClient.apk
Device settings: Disable battery optimization for both apps. Enable background running.
| Port | Protocol | Service |
|---|---|---|
| 443 | TCP | Mumble voice (via Nginx SNI) + HTTPS admin |
| 80 | TCP | HTTP redirect to HTTPS |
| 64738 | TCP+UDP | Mumble voice (direct fallback) |
| 5055 | TCP+UDP | Traccar GPS client |
openPTT TRX — Self-hosted Push-to-Talk for field operations