PartyJukebox/plan.md

2.4 KiB
Raw Blame History

To design a self-running app for your Raspberry Pi based on your requirements, heres a step-by-step plan that you can follow. I'll guide you through the steps without giving the full solution, so you can piece it together.

Steps to Implement

  1. Automating Raspberry Pi Startup Actions:

    • Systemd Service: Use systemd to create a service that will automatically run when the Pi starts. This can manage your apps startup logic.
    • Startup Script: Alternatively, you can create a simple shell script that runs on boot, either placed in /etc/rc.local or managed by cron with the @reboot directive.
  2. Detect USB Flash Drive on Boot:

    • Automounting USB: Set up the Raspberry Pi to automount flash drives when plugged in. Look into editing /etc/fstab or using the usbmount package.
    • Checking for MP3s: Write Python logic that checks the mounted drives for files with .mp3 extension. Use libraries like os or pathlib to scan directories.
  3. Copying MP3s to a Directory:

    • You can use the shutil library in Python to handle file copying.
    • Ensure this logic only triggers when new files are found (so you dont overwrite your existing directory unnecessarily).
  4. Running the Database Generator:

    • Since you only want the database generator to run when needed, you can add a condition to check whether the MP3s were updated. For example, store a checksum or file modification time, and if there's a change, trigger the generator.
  5. Running the Flask Web Server:

    • After copying the files and running the database generator (if needed), the script should launch your Flask web server.
    • Flask can be run as part of your startup service as well, once the other tasks are complete.

Suggested Order of Operations

  • On boot, run your startup script.
  • Check for connected USB drives.
  • If MP3s are found, copy them to the designated folder.
  • Run the database generator only if new files are detected.
  • Launch the Flask web server.

Things to Consider:

  • Timing: If theres a delay for the USB drive to mount, you might want to add a short wait period or a retry loop when checking for the flash drive.
  • Combining Files: You can combine the MP3-checking, copying, and database generation logic into a single Python script. Then, it can conditionally call the database generator only when new files are added, before starting the Flask server.