Skip to content

Changelog

All notable changes to django-micboard are documented here.

Version format: CalVer (YY.MM.0D.MICRO)

Status: Active development, not production-ready


[25.10.17] - 2025-10-17

Added

  • Real-Time Connection Tracking - RealTimeConnection model 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_status command for connection monitoring
  • Admin Interface Enhancements - Real-time connection monitoring with color-coded status
  • Explicit Subscription Startup - Foreground commands and native Huey entrypoints start real-time supervisors independently from polling

Changed

  • Polling Separation - poll_devices remains one-shot and never starts subscription supervisors
  • 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=code filtering
  • Plugin Development Documentation - Comprehensive guide for adding new manufacturer support
  • Shure Plugin Implementation - Concrete plugin for Shure wireless systems

Changed

  • Receiver Model - Added required manufacturer foreign key relationship
  • DiscoveredDevice Model - Added manufacturer foreign key relationship
  • MicboardConfig Model - Added optional manufacturer foreign 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.0D.MICRO) 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 httpx.Client

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
  • 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.