Installation
- install dependencies
sudo cp dj.service /etc/systemd/system/sudo systemctl enable dj.servicesudo 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 |