dotfiles/.local/bin/volume_control.py
2025-05-28 18:33:04 +02:00

65 lines
1.8 KiB
Python

import time
from roonapi import RoonApi, RoonDiscovery
appinfo = {
"extension_id": "python_roon_test",
"display_name": "Python library for Roon",
"display_version": "1.0.0",
"publisher": "gregd",
"email": "mygreat@emailaddress.com",
}
# The Roon output you want this code to control
VOLUME_OUTPUT = "Hi Fi"
# After running go to roon - and change the volume control method to
# Python Library for Roon
# You will then get callbacks below when the volumes for that endpoint are changed
try:
core_id = open("my_core_id_file").read()
token = open("my_token_file").read()
except OSError:
print("Please authorise first using discovery.py")
exit()
discover = RoonDiscovery(core_id)
server = discover.first()
discover.stop()
roonapi = RoonApi(appinfo, token, server[0], server[1], True)
def volume_control_callback(control_key, event, value):
"""Handle roon callback when Called by roon when volume is changed."""
print(
"volume_control_callback control_key: %s event: %s value: %s"
% (control_key, event, value)
)
# DO WHAT YOU NEED TO DO TO CHANGE THE VOLUME HERE
if event == "set_volume":
print("CHANGE VOLUME TO: %s" % (value))
elif event == "set_mute":
if value:
print("MUTE VOLUME")
else:
print("UNMUTE VOLUME")
else:
print("COMMAND NOT SUPPORTED - %s" % (event))
# Feedback to roon
if event == "set_volume":
roonapi.update_volume_control(control_key, value)
elif event == "set_mute":
roonapi.update_volume_control(control_key, None, value)
roonapi.register_volume_control(
"1", VOLUME_OUTPUT, volume_control_callback, 0, "db", 2, -150, 0, True
)
time.sleep(100)