Monitoring Devices

Learn how to monitor your Shure wireless microphone system with django-micboard.

Device Status Overview

Django Micboard provides real-time monitoring of:

  • Battery Levels - Current charge percentage and status
  • RF Signal Strength - Signal quality and interference indicators
  • Audio Levels - Input/output levels and peak indicators
  • Device Status - Online/offline state and connection health
  • Location Tracking - Device location and assignment status

Admin Interface

Access the monitoring interface at /admin/ in your Django application.

Device List View

The main device list shows all discovered devices with key metrics:

  • Device name and model
  • Current battery level (with color coding)
  • RF signal strength
  • Online status
  • Last update time
  • Assigned user/location

Real-time Updates

Device status updates automatically via WebSocket connections:

  • Battery levels refresh every 30 seconds
  • RF signals update continuously
  • Status changes appear immediately
  • Connection health is monitored

Management Commands

Continuous Polling

For production monitoring, run continuous device polling:

# Poll Shure devices continuously
python manage.py poll_devices --manufacturer shure --continuous

# Poll with custom interval (default 30 seconds)
python manage.py poll_devices --manufacturer shure --continuous --interval 60

Health Monitoring

Monitor connection health and detect issues:

# Check all connections
python manage.py check_connections

# Check specific manufacturer
python manage.py check_connections --manufacturer shure

Alerts and Notifications

Battery Alerts

Configure alerts for low battery conditions:

  • Set threshold levels (default: 20%)
  • Enable/disable per device or globally
  • Email notifications (planned)
  • Admin interface warnings

RF Signal Alerts

Monitor signal quality:

  • Low signal strength warnings
  • Interference detection
  • Channel conflicts
  • Automatic channel scanning

Device Assignment

User Assignments

Assign devices to specific users:

from micboard.services import AssignmentService

# Assign device to user
assignment = AssignmentService.create_assignment(
    user=user,
    device=device,
    alert_enabled=True
)

Location Tracking

Track devices by location:

from micboard.services import LocationService

# Create location
location = LocationService.create_location(
    name="Main Stage",
    description="Primary performance area"
)

# Assign device to location
LocationService.assign_device_to_location(device, location)

Troubleshooting

Device Not Updating

Check connection status:

python manage.py check_connections --manufacturer shure

Verify API access:

python manage.py poll_devices --manufacturer shure --dry-run

Check device logs: - Review Django admin logs - Check Shure System API logs - Verify network connectivity

WebSocket Issues

Test WebSocket connection: - Open browser developer tools - Check Network tab for WebSocket connections - Verify ASGI configuration

Redis connection:

# Test Redis connectivity
python manage.py shell -c "from channels.layers import get_channel_layer; print(get_channel_layer())"

Performance Issues

Monitor polling performance:

# Check polling duration
python manage.py poll_devices --manufacturer shure --verbose

Database optimization: - Ensure proper indexing on device models - Monitor query performance - Check connection pooling

Advanced Monitoring

Custom Dashboards

Create custom monitoring views:

  • Filter by location or user
  • Sort by battery level or signal strength
  • Export device reports
  • Historical trend analysis

API Integration

Use the REST API for custom monitoring:

# Get device status
GET /api/v1/devices/

# Get battery levels
GET /api/v1/devices/?battery_level__lt=20

# Real-time updates via WebSocket
ws://your-server/ws/devices/

Health Checks

Implement health check endpoints:

from micboard.services import ConnectionHealthService

# Check overall system health
health = ConnectionHealthService.get_overall_health_status()
print(f"Online devices: {health['online_receivers']}/{health['total_receivers']}")