Files
arch-system-hyprland/03-user/dotfiles/.config/waybar/scripts/studio-sound.py
T
2026-07-02 15:56:21 +02:00

77 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python3
"""
Waybar module for controlling Studio Sound power outlet
Toggles power on click and shows current status
"""
import json
import requests
import sys
import os
STATUS_URL = 'http://192.168.1.75/cm?cmnd=status'
TOGGLE_URL = 'http://192.168.1.75/ay?o=1'
CACHE_FILE = '/tmp/studio_sound_status.json'
TIMEOUT = 2 # seconds
def get_status():
"""Fetch the current power status from the device"""
try:
response = requests.get(STATUS_URL, timeout=TIMEOUT)
response.raise_for_status()
data = response.json()
return data.get('Status', {}).get('Power', 0) == 1
except:
# Return cached status if available
if os.path.exists(CACHE_FILE):
try:
with open(CACHE_FILE, 'r') as f:
cached = json.load(f)
return cached.get('power', False)
except:
pass
return False
def toggle_power():
"""Toggle the power state"""
try:
requests.get(TOGGLE_URL, timeout=TIMEOUT)
# Give device time to process
import time
time.sleep(0.5)
return get_status()
except:
return False
def save_cache(power_state):
"""Save current state to cache file"""
try:
with open(CACHE_FILE, 'w') as f:
json.dump({'power': power_state}, f)
except:
pass
def main():
# Check if this is a click event
if len(sys.argv) > 1 and sys.argv[1] == 'toggle':
power_state = toggle_power()
else:
power_state = get_status()
# Save to cache
save_cache(power_state)
# Output JSON for waybar
output = {
"text": "Studio " if power_state else "Studio ",
"tooltip": f"Studio Sound: {'ON' if power_state else 'OFF'}",
"class": "studio-sound-on" if power_state else "studio-sound-off",
"alt": "on" if power_state else "off"
}
print(json.dumps(output))
sys.stdout.flush()
if __name__ == "__main__":
main()