Skip to content

Instantly share code, notes, and snippets.

@nicholas-gh
Created August 6, 2017 21:28
Show Gist options
  • Save nicholas-gh/5f6a7595924eaffa3881a8bd8eadbb3b to your computer and use it in GitHub Desktop.
Save nicholas-gh/5f6a7595924eaffa3881a8bd8eadbb3b to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import sys
sys.path.append('/home/pi/fliclib-linux-hci/clientlib/python/')
import mpd
import fliclib
from random import choice
flic = fliclib.FlicClient("localhost")
music = mpd.MPDClient()
current_playlist = None
def next_playlist():
global current_playlist
playlists = [x['playlist'] for x in music.listplaylists()]
try:
index = playlists.index(current_playlist)
next = index + 1
except ValueError as e:
next = 0
if next > len(playlists):
next = 0
current_playlist = playlists[next]
music.clear()
music.load(current_playlist)
music.shuffle()
music.next()
def on_button_single_or_double_click_or_hold(channel, click_type, was_queued, time_diff):
#print(click_type)
if click_type == fliclib.ClickType.ButtonHold:
#print("Loading playlist")
music.connect('localhost',6600)
state = music.status()['state']
next_playlist()
if state in ('play'):
# keep playing
music.play()
music.disconnect()
elif click_type == fliclib.ClickType.ButtonDoubleClick:
music.connect('localhost',6600)
music.next()
music.disconnect()
else:
music.connect('localhost',6600)
state = music.status()['state']
if state in ('stop', 'pause'):
if not music.playlist():
next_playlist()
music.play()
elif state == 'play':
music.pause()
music.disconnect()
def got_button(bd_addr):
cc = fliclib.ButtonConnectionChannel(bd_addr)
cc.on_button_single_or_double_click_or_hold = on_button_single_or_double_click_or_hold
flic.add_connection_channel(cc)
def got_info(items):
for bd_addr in items["bd_addr_of_verified_buttons"]:
got_button(bd_addr)
flic.get_info(got_info)
flic.on_new_verified_button = got_button
flic.handle_events()
@nicholas-gh
Copy link
Author

nicholas-gh commented Aug 6, 2017

Misc notes, using raspberry pi 3:

raspi-config # force audio to 3.5mm
vi /etc/wpa_supplicant/wpa_supplicant.conf
wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -
wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/jessie.list
apt-get install mopidy python3-pip daemontools-run mpc git
pip3 install python-mpd2
vi /etc/mopidy/mopidy.conf
systemctl enable mopidy
service mopidy restart
# fill /var/lib/mopidy/media
find /var/lib/mopidy/media/*oby -iname "*.mp3" >>/var/lib/mopidy/playlists/moby.m3u
find /var/lib/mopidy/media/zero_7 -iname "*.mp3" >>/var/lib/mopidy/playlists/zero7.m3u
mopidyctl local scan
git clone https://github.com/50ButtonsEach/fliclib-linux-hci
mkdir /home/pi/.flic/
cat <<EOF >/etc/systemd/system/flicd.service
[Unit]
Description=flicd Service
After=bluetooth.service
Requires=bluetooth.service

[Service]
TimeoutStartSec=0
ExecStart=/home/pi/fliclib-linux-hci/bin/armv6l/flicd -f /home/pi/.flic/flic.sqlite3 -s 0.0.0.0 -h hci0 -w
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF
service enable flicd
service start flicd
mkdir flicbutton/
curl $GIST >flicbutton/run
update-service --add flicbutton/
svc -u /home/pi/flicbutton

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment