utils.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. """MQTT utilities and callback management."""
  2. import os
  3. from typing import Dict, Callable
  4. from dune_weaver_flask.modules.core.pattern_manager import (
  5. run_theta_rho_file, stop_actions, pause_execution,
  6. resume_execution, THETA_RHO_DIR,
  7. run_theta_rho_files, list_theta_rho_files
  8. )
  9. from dune_weaver_flask.modules.core.playlist_manager import get_playlist, run_playlist
  10. from dune_weaver_flask.modules.serial.serial_manager import (
  11. is_connected, get_port, home
  12. )
  13. from dune_weaver_flask.modules.core.state import state
  14. def create_mqtt_callbacks() -> Dict[str, Callable]:
  15. """Create and return the MQTT callback registry."""
  16. def set_speed(speed):
  17. state.speed = speed
  18. return {
  19. 'run_pattern': lambda file_path: run_theta_rho_file(file_path),
  20. 'run_playlist': lambda playlist_name: run_playlist(
  21. playlist_name,
  22. run_mode="loop", # Default to loop mode
  23. pause_time=0, # No pause between patterns
  24. clear_pattern=None # No clearing between patterns
  25. ),
  26. 'stop': stop_actions,
  27. 'pause': pause_execution,
  28. 'resume': resume_execution,
  29. 'home': home,
  30. 'set_speed': set_speed
  31. }
  32. def get_mqtt_state():
  33. """Get the current state for MQTT updates."""
  34. # Get list of pattern files
  35. patterns = list_theta_rho_files()
  36. # Get current execution status
  37. is_running = bool(state.current_playing_file) and not state.stop_requested
  38. # Get serial status
  39. serial_connected = is_connected()
  40. serial_port = get_port() if serial_connected else None
  41. serial_status = f"connected to {serial_port}" if serial_connected else "disconnected"
  42. return {
  43. 'is_running': is_running,
  44. 'current_file': state.current_playing_file or '',
  45. 'patterns': sorted(patterns),
  46. 'serial': serial_status,
  47. 'current_playlist': state.current_playlist,
  48. 'current_playlist_index': state.current_playlist_index,
  49. 'playlist_mode': state.playlist_mode
  50. }