Installation
- install dependencies
sudo cp dj.service /etc/systemd/system/
sudo systemctl enable dj.service
sudo journalctl -fu dj.service
Features
- alarm clock
- automatic zone creation
import time | |
import schedule | |
import pdb | |
from random import sample | |
from libsoundtouch import discover_devices | |
from libsoundtouch.utils import Source | |
SPOTIFY_UID = 1158984004 | |
class Automator(object): | |
def __init__(self): | |
self.fetch_devices() | |
self.zone_master_id = None | |
def alarm_clock(self): | |
print("[alarm_clock] running alarm clock") | |
self.fetch_devices() | |
print("[alarm_clock] %s" % self.devices) | |
track_id = sample([ | |
"spotify:track:6h9Uu8dPr1nJX73C6JRKe1", | |
"spotify:track:5CaXxLM568tBh1PwhXdciZ", | |
"spotify:track:77vLpSAMNzeYL4EBeZxWqI", | |
"spotify:track:6G32zC3WzSYlBUgUO14tPF", | |
"spotify:track:6JvG7KVwnfmnXSJW7XMtb6", | |
"spotify:track:6kVuMP4u1WDFPmGxi1429F" | |
], 1)[0] | |
for device in self.devices: | |
device.power_on() | |
device.set_volume(10) | |
self.devices[0].play_media(Source.SPOTIFY, track_id, SPOTIFY_UID) | |
print("[alarm_clock] done %s" % track_id) | |
def zone_maker(self): | |
for i, device in enumerate(self.devices): | |
zone_status = device.zone_status() | |
if zone_status: | |
self.zone_master_id = zone_statu.master_id | |
else: | |
self.zone_master_id = None | |
if device.status().play_status == "PLAY_STATE" and not self.zone_master_id: | |
print("[zone_maker] starting with master: %s (%s)" % (device.config.name, device.config.device_id)) | |
device.create_zone(self.devices) | |
self.zone_master_id = device.config.device_id | |
def fetch_devices(self): | |
self.devices = discover_devices(timeout=2) | |
automator = Automator() | |
schedule.every(10).seconds.do(automator.zone_maker) | |
schedule.every().day.at("07:00").do(automator.alarm_clock) # system time | |
while True: | |
schedule.run_pending() | |
time.sleep(1) |
[Unit] | |
Description=DJ | |
After=network.target | |
[Service] | |
ExecStart=/usr/bin/python3 app.py | |
WorkingDirectory=/home/pi/dj | |
StandardOutput=inherit | |
StandardError=inherit | |
Restart=always | |
User=pi | |
[Install] | |
WantedBy=multi-user.target |