When I got myself a Pine64, I wondered for a bit about what to do with it. @RaitoBezarius suggested that I set up a music server on it, which got my attention as I don't have a lot of hardware to buy for that (none, actually, except if you want to plug in a cheap sound system).
I set up a Mopidy server on the card, installed with Pip (since the Pine64 runs an ARM64 architecture and Mopidy's Debian/Ubuntu packages don't support it).
When I got that done, I wanted to enhance it. Since I didn't want just some central sound system I could control from my phone (really, my apartment is not that big, I don't need that), I thought of some system which would detect when I get home after work and automatically start my music.
Welcome Home is a bash script (ran as a daemon) which detects when a selected device is connected to your local network. If it detects the device, it will communicate with Mopidy using its JSON API and start playing a selected stream (set in the configuration file) on the Pine64's jack output.
In my example, when I get home and my phone connects to my apartment's wifi, it gets a static IP address (as I configured it in my DHCP server). Welcome Home detects it, which means that I'm home or almost there, and starts some nice Trance music for me.
When Welcome Home will stop detecting the device, it will automatically tell Mopidy to stop playing the stream. Which means that if I want to stop the music and am too lazy to turn off my sound system, I can also stop the wifi on my phone.
Detection of both connection and disconnection takes up to 6s maximum with the default settings.
There are three files in this repository (except for those in the
mopidy directory which are Pine64-related):
welcomehomecontains the bash script and is to move to
welcomehome.example.confis a configuration example, and is to edit as described below and to move as
/etc/welcomehome/welcomehome.conf(you'll need to create the
welcomehome.serviceis the systemd service for Welcome Home, and is to move to
Right now, there's only three configurable values:
device_addressis the static IP address bound to the device you wish to detect.
device_thresholdis the detection threshold. It defaults to 3. A greater threshold will mean a connection or a disconnection will take more time to detect, but you'll be able to detect them with more accuracy if your device's wifi is working weakly.
streamis the URL of the audio stream you want Welcome Home to play when you get home. For now, it has to be an HTTP(S) stream.
For more info on the configuration syntax, have a look at the
Once you moved all the needed files, and filled your configuration file, you need to start Welcome Home as a daemon. I use systemd for that (with the
welcomehome.service file), but you're free to use whatever you want (and even to send me your configuration file in a pull request so I can add it to this repo :wink:).
To start Welcome Home, and launch it at the machine's startup, with systemd, just run as root:
systemctl enable welcomehome systemctl start welcomehome
I had some troubles setting up Mopidy on my Pine64, so here's how I did it.
I had some troubles setting up the Pine's soundcard, but finally managed it by installing the latest Ubuntu image, and following these instructions.
After following the instructions above, I also installed the
gstreamer1.0-alsa package, which got me some nice ALSA plugins for Gstreamer. I edited the
/usr/share/alsa/alsa.conf file and set both the
defaults.ctl.card and the
defaults.pcm.card properties from 0 to 1, so ALSA doesn't have to wonder too much about what soundcard to use (0 is the HDMI output and 1 is the jack output). I then set Mopidy's configuration file to what you can find in
mopidy/mopidy-pine64.conf. It's basically the default configuration file, but with the right bindings.
Since you installed Mopidy from sources, there's no provided way to automatically launch Mopidy when your Pine64 starts. I did it with the systemd service file you can find in
mopidy/mopidy.service, which I moved to
/etc/systemd/system. Then, the usual (as root):
systemctl enable mopidy systemctl start mopidy