Changelog¶
All notable changes to django-micboard are documented here.
Version format: CalVer (YY.MM.DD)
Status: Active development, not production-ready
[25.10.17] - 2025-10-17¶
Added¶
- Real-Time Connection Tracking -
RealTimeConnectionmodel for monitoring SSE/WebSocket subscriptions - Connection Health Monitoring - Automatic cleanup of stale connections and error recovery
- Real-Time Subscription Tasks - SSE tasks for Sennheiser, WebSocket tasks for Shure
- Management Commands -
realtime_statuscommand for connection monitoring - Admin Interface Enhancements - Real-time connection monitoring with color-coded status
- Automatic Subscription Startup - Real-time subscriptions start automatically after polling
Changed¶
- Polling Integration -
poll_devicesnow starts real-time subscriptions after polling completes - Architecture Documentation - Updated to reflect real-time connection management
- Test Suite - Added tests for real-time connection functionality
Features¶
- Connection Lifecycle Management - Track connecting/connected/disconnected/error/stopped states
- Automatic Failover - Reconnection logic with configurable retry attempts
- Health Monitoring - Background tasks for connection health checks and cleanup
- Status Reporting - CLI and admin interfaces for monitoring connection status
- Error Tracking - Detailed error messages and connection history
Added¶
- Multi-Manufacturer Plugin Architecture - Complete refactor to support multiple wireless microphone manufacturers
- ManufacturerPlugin Abstract Base Class - Extensible plugin system for adding new manufacturers
- Manufacturer Model - New model for tracking different microphone manufacturers
- Manufacturer-Aware API Views - All API endpoints now support
?manufacturer=codefiltering - Plugin Development Documentation - Comprehensive guide for adding new manufacturer support
- Shure Plugin Implementation - Concrete plugin for Shure wireless systems
Changed¶
- Receiver Model - Added required
manufacturerforeign key relationship - DiscoveredDevice Model - Added
manufacturerforeign key relationship - MicboardConfig Model - Added optional
manufacturerforeign key for manufacturer-specific settings - API Views - Updated all views to support manufacturer filtering and data isolation
- Serializers - Enhanced
serialize_receivers()with manufacturer filtering capabilities - Test Suite - Updated all 60+ tests to include manufacturer relationships and plugin mocking
Architecture¶
- Plugin-Based Design - Dynamic plugin loading via
get_manufacturer_plugin()function - Data Isolation - Manufacturer-specific data properly isolated and filtered
- Backward Compatibility - Existing functionality preserved while adding multi-manufacturer support
[25.10.15] - 2025-10-15¶
Changed¶
- Updated version to use CalVer (YY.MM.DD) format
- Removed ownership claims from codebase
- Updated to FOSS community contribution model
- Simplified README for development-only status
- Removed PyPI packaging documentation (never released)
- Updated documentation to reflect active development status
[25.10.14] - 2025-10-14¶
Features¶
Core Functionality
- Real-time Shure wireless microphone monitoring via Django web interface
- Shure System API integration with automatic retry and exponential backoff
- WebSocket broadcasting via Django Channels for live updates
- Background polling service for continuous device monitoring (poll_devices management command)
- User assignment and alert notification system
- Rate-limited REST API endpoints
Supported Devices - UHF-R, QLX-D, ULX-D, Axient Digital, PSM1000
Architecture - Middleware-based: Shure System API (external) → Django app → WebSocket clients - Django 4.2+ and Django 5.0+ compatible - Python 3.9+ compatible - Async WebSocket support via Django Channels 4.0+
Models & Data - Receiver, Channel, Transmitter models for device tracking - Location and MonitoringGroup models for organization - DeviceAssignment model for user-to-device associations - Alert and UserAlertPreference models for notifications - Custom model managers for common query patterns
API Features - Rate limiting with token bucket algorithm (Django cache-based) - Automatic retry with exponential backoff (0.5s, 1s, 2s) - Health tracking for Shure System API connection - Configurable timeouts and SSL verification - Connection pooling via requests.Session
API Endpoints
- /api/data/ - Get all device data (rate limited: 120 req/min)
- /api/receivers/ - List all receivers
- /api/receivers/{id}/ - Get receiver details
- /api/discover/ - Discover new devices (rate limited: 5 req/min)
- /api/refresh/ - Force refresh (rate limited: 10 req/min)
- /api/health/ - Check API health status
- /api/config/ - Get/update configuration
- /api/groups/{id}/ - Update group settings
WebSocket
- Real-time device updates via ws://server/ws/micboard/
- Automatic reconnection
- Message types: device_update, alert, status
Admin Interface - Full Django admin for all models - Advanced filtering and search - Custom displays with relationship counts - Inline editing capabilities
Rate Limiting - Client-side: Prevents overwhelming Shure System API - Server-side: Protects app from client abuse - Per-IP tracking with sliding window algorithm - Returns HTTP 429 with Retry-After header
User Assignment System - Fine-grained device-to-user assignments - Priority levels: low, normal, high, critical - Per-device alert preferences - Quiet hours support - Team-based monitoring groups - Alert history tracking
Requirements¶
- Python 3.9+
- Django 4.2+ or 5.0+
- Shure System API server (external, installed separately)
- Redis (recommended for production WebSocket support)
Known Limitations¶
- Requires external Shure System API server
- WebSocket subscriptions require manual implementation
- No historical data retention (current state only)
- Development-stage error handling
Previous Development¶
This project is a complete refactoring of the original Tornado-based micboard into a modern Django application. No prior versions were released.