Getting Started
Copy the compiled executable as to your target computer and run it from the directory that contains your data/sounds and data/music folders (see below), e.g. using the command line:
./deichwave
Then monitor the log output to see if everything is up and running and for instructions to access the web interface.
Web Interface
By default, Deichwave can be remote controlled using a web interface hosted at port :3000:
Screenshot of the web interface[^screenshots]
[^screenshots]: Screenshot created with Screely
Background
The BBYCR is a purpose-built vehicle used for outdoor parties on the move (e.g. for Kohltouren or the traditional hiking tour on German Father's Days). It is equipped with speakers to play music (continously, without requiring interaction while also being able to easily adjust what playlists are used) and sound effects (on demand), as well as being lit up with addressable LED strips (in addition to providing a way to bring along sufficient amounts of beer). It uses a Raspberry Pi 3 as its on-board computer.
To power all this on a software level, Deichwave was born after multiple previous attempts that simple bolted together a bunch of Python scripts with existing software like MPD, pigpio and others. As this proved to be too difficult to setup (and use for non-technical friends that borrowed the vehicle) and also not robust enough to survive the, sometimes day-long, deployments, it was first turned into multiple Go microservices that were again bolted onto the existing scripts and external software before being rewritten into its current form from scratch after two years of disappointing mid-party music failures.
This time it is supposed to be a portable monolith that can compile into a single executable, so that it is as easy as possible to deploy and can even be used directly from a thumb drive that contains the music and sound files that should be played. It also cross-compiles on (and for) Linux and Windows running on ARM64 and x64 platforms. So aside from the targeted Raspberry Pi 3 on the original BBYCR you can even use it for your home-party on your regular laptop or wherever else you like.
Structure
This project is structured into multiple folders with different purposes, most with individual additional readmes:
Runtime Environment
/config: Application configuration files
/data: Static assets used by the application
(All of these have to be made available, according to your configuration, to the application when you want to start it)
Development Environment
/cmd: Source code for the executable commands
/pkg: Library code that houses the actual functionality
/tools: Additional tools and scripts
/web: Web interface used to control all important features, will get bundled into the executable during compilation
(These are only required if you want to contribute to the development of Deichwave)
Miscellaneous
/api: API specifications
/bin: Target folder for the compiled binaries, if the supplied VS Code build tasks are used, the resulting binaries will be ordered into subfolders of the format <os>/<architecture>
/docs: Assets that contain or support the project's documentation
.github, .gocc, .vscode: Contain configurations for the development infrastructure
The Original Vehicle
Outfitted with main speakers between its wheel base, additional tweeters pointed at the front, a subwoofer at the back, underbody lights, an integrated foldable beer pong table and built-in bar counters, you almost forget that the BBYCR's main purpose is to make sure that you don't run out of drinks on your tour. All of this is controlled by a Rasbperry Pi in one of it's two trunks, which is also connected to two side-panels that houses multiple buttons, rotary encoders and switches allowing the participants of the tour to access the entertainment functions at any time.
TODOs
- Add a way to run the main executable automatically at boot
- Create pre-compiled releases
- Add signed OTA updates/patches
- Create a Flutter frontend
- Add tests