Skip to content

Latest commit

 

History

History
246 lines (199 loc) · 8.56 KB

File metadata and controls

246 lines (199 loc) · 8.56 KB

Feature Status

This is where we are in a nutshell: Playing music from local folders via RFID trigger. We also built a new WebUI to control the Jukebox from a browser.

There are a few things that are specifically not integrated yet: playing streams, podcasts, or Spotify.

In the following is the currently implemented feature list in more detail. It also shows some of the shortcomings. However, the list is not complete in terms of planned features, but probably reflects more of where work is currently being put into.

For new contributors: If you want to port a feature from version 2.X or implement a new feature, contact us. Open an issue or join us in the chat room. You may pick topics marked as open below, but also any other topic missing in the list below. As mentioned, that list is not complete in terms of open features. Check the Contribution guide.

Topics marked in progress are already in the process of implementation by community members.

Table of Contents

Jukebox Core App

Base

  • Clean up surplus files
  • Host interface (shutdown, reboot)
  • Temperature getter
    • Timer + Publisher
  • RPi is_throttled getter
    • Decode hex value to readable string (check version 2.x mqtt as reference?)
    • Timer + Publisher
  • Git hash log information
    • Log and publish this!
  • Version number getter (Version number should be stored in a python file)
    • Log and publish this
  • Exit via RPC
  • Service restart via RPC
    • Check if really running as a service
  • Storage space getter / publisher (shutil.disk_usage)
  • Getter for error logs to show in WebUI
    • Get file location from FileHandlers (files may be stale!)
    • Logger might be disabled or not connected
  • Enable/Disable debug logging from RPC
  • Publisher of errors (specialized logger handler)
    • This is a configurable logger handler in logger.yaml
  • Basic Logging Config should enable Publisher stream handler
  • Disable Console Stream Handler (or set to warning) when running as a service
  • Log & publish start time
  • Method to change configuration through WebUI
    • The difficulty lies in bringing the running Jukebox to accept the changes. There probably won't be a catch-all solution but rather a custom implementation for a select few features
  • Strategy to post config changes via PubSub: Must be taken care of by the setter function modifying the property

Via RPC

  • List of loaded / failed plugins
  • card action reference
  • Help command (available commands)
    • which basically is a plugin reference
  • Simplified alias definitions for often used RPC commands (for RFID, GPIO, etc)
    • Port all previous commands
    • Reference file write-out: now also included in Sphinx documentation
    • Export available alias definitions to RPC
    • Base quick select on yaml file (in progress)
      • or write a yaml file as an artifact that contains all the meta information about the functions as well?
      • or include a get_signature function that returns the meta information for a given alias

Config handler

  • While saving config to disk: local file change detection
  • cfghandler creates setndefault() at an arbitrary depth

ZMQ Publisher

  • Last Value Cache
  • Subscriber detection and initial status update
  • Port configuration option (WS and/or TCP)
  • Callback registration option for plugin on topic send
    • How to interact with threads?

Playback

  • Playlist generator

    • Local folders
      • Non-recursive folder play
      • Recursive folder play
    • Podcast
    • Livestreams
    • NEW: Playback of m3u playlists (e.g., folder.m3u) ?
  • Folder configuration (in progress)

    • Reference
    • Resume: Save and restore position (how interact with shuffle?)
    • Repeat Playlist
    • Repeat Song
    • Shuffle

MPD Player

  • Thread safety for status information / configuration (in progress)
  • Differential status post (in progress)
  • Second swipe option setter via RPC (in progress)
  • Before every music lib update, player should check user rights (not only after start-up)

RFID

  • Test with Reader disabled
  • Start-up behavior with un-configured Reader
  • Command card -> is now parameter ignore_same_id_delay
  • Revised RFID reader user-query setup script
    • Ask for place option
  • Enable config flag ?
  • Place not swipe / Timer thread
    • Configurable card removal action
  • Readers support
    • USB (e.g., Neuftech)
    • RDM6300
    • MFRC522
    • RC532
    • Multi-reader support
    • GUI Fake Reader for Development
    • PC/SC Cards (what actually is this?)
  • Publish RFID Card ID via PubSub
    • Needs to be thread safe
  • Card reference IF via RPC
  • Second Swipe Options -> must be part of player control (partially broken at the moment)
    • Freely configurable with an RPC call
    • Ignore (nothing)
    • Toggle Pause/Play
    • Skip to the next track
    • Re-start playlist

Cards

  • Write a simplified card summary to
    • file
    • RPC
  • Card assignment function for WebUI
    • Via RPC command alias definitions
    • Full custom RPC call
  • Remove card

Timer

  • Shutdown timer
  • Play stop timer
  • Shutdown timer volume reduction
    • Decreases volume every x min until zero, then shuts down
    • Needs to be cancelable
  • Publish mechanism of timer status
  • Change multitimer function call interface such that endless timer etc. won't pass the iteration kwarg
  • Make timer settings persistent
  • Idle timer
    • This needs clearer specification: Idle is when no music is playing and no user interaction is taking place
    • i.e., needs information from RPC AND from player status. Let's do this when we see a little clearer about Spotify

Volume

  • Jingle playback volume as a fixed value in config
  • Default volume setting after boot-up
  • Max Volume
  • PulseAudio integration with event handler
  • Bluetooth support
  • Automatic audio sink toggle
    • Callbacks for audio sink change

GPIO

  • All done! Read the docs at [GPIO Recipes](#builders/gpioz:GPIO Recipes)!
  • USB Buttons: It's a different category as it works similar to the RFID cards (in progress)

WLAN

  • Ad-hoc WLAN Hotspot
  • IP address read-out

Spotify

  • Everything

Others

  • MQTT
  • Record and Playback using a Mic
  • Dot Matrix Displays

Start-up stuff

  • check music folder permissions
  • mpc update / (mpc rescan)
  • sudo iwconfig wlan0 power off (need to be done after every restart)
  • Optional power down HDMI circuits: /usr/bin/tvservice -o

Debug Tools

  • Publishing Sniffer
    • Update mode vs. linear mode?
  • RPC command line client
    • with tab-completion and history

WebUI

  • Playback Control
  • Cover Art
  • Register cards / Delete cards
  • Shutdown button
  • Settings configuration page
  • System information page
    • Configure (one or multiple) WLANs
    • Enable/Disable Auto-Hotspot
  • run_npm_build script
    • Must consider export NODE_OPTIONS=--max-old-space-size=512
  • Upload audio files via WebUI #2138

Installation Procedure

  • Single call installation script
  • Query for settings vs. automatic version
  • IPQoS in SSH config
  • Separate static IP and IPv6 disable
  • For all system config file changes, check prior to modification if modification already exists

Documentation

  • Sphinx / Restructured Text tool flow
  • What is the Phoniebox
  • Artifacts: Generate artifacts (on command line switch only) for
    • loaded plugins and rpc command aliases (to sphinx and shared/artifacts)
    • rpc command aliases (to sphinx and shared/artifacts)
  • How to: Write a plugin