Files
etherlight/etherlight.py

225 lines
6.7 KiB
Python
Executable File

#! /usr/bin/env python3
# PYTHON_ARGCOMPLETE_OK
import argcomplete, argparse
import subprocess
from rgbw_colorspace_converter.colors.converters import RGB
LESBIAN_PRIDE_SINOPIA = [214, 41, 0]
LESBIAN_PRIDE_ATOMIC_TANGERINE = [255, 155, 85]
LESBIAN_PRIDE_WHITE = [255, 255, 255]
LESBIAN_PRIDE_SUPER_PINK = [212, 97, 166]
LESBIAN_PRIDE_FLIRT = [165, 0, 98]
LGBTQ_PRIDE_RED = [255, 0, 24]
LGBTQ_PRIDE_ORANGE = [255, 165, 44]
LGBTQ_PRIDE_YELLOW = [255, 255, 65]
LGBTQ_PRIDE_GREEN = [0, 128, 24]
LGBTQ_PRIDE_BLUE = [0, 0, 249]
LGBTQ_PRIDE_PURPLE = [134, 0, 125]
TRANS_PRIDE_MAYA_BLUE = [85, 205, 252]
TRANS_PRIDE_WHITE = [255, 255, 255]
TRANS_PRIDE_AMARANTH_PINK = [247, 168, 184]
BISEXUAL_PRIDE_ROYAL_RED = [208, 0, 112]
BISEXUAL_PRIDE_CADMIUM_VIOLET = [140, 71, 153]
BISEXULA_PRIDE_DARK_POWDER_BLUE = [0, 50, 160]
PANSEXUAL_PRIDE_PHILIPPINE_PINK = [255, 27, 141]
PANSEXUAL_PRIDE_SIZZLING_SUNRISE = [255, 218, 0]
PANSEXUAL_PRIDE_SPIRO_DISCO_BALL = [27, 179, 255]
def template_pansexual():
command = "echo 0 > /proc/led/led_mode;"
for port in range(1, 19):
if port < 7:
color = RGB(*PANSEXUAL_PRIDE_PHILIPPINE_PINK)
command += get_color_commands(port, *color.rgbw)
elif port < 13:
color = RGB(*PANSEXUAL_PRIDE_SIZZLING_SUNRISE)
command += get_color_commands(port, *color.rgbw)
else:
color = RGB(*PANSEXUAL_PRIDE_SPIRO_DISCO_BALL)
command += get_color_commands(port, *color.rgbw)
return command
def template_bisexual():
command = "echo 0 > /proc/led/led_mode;"
for port in range(1, 19):
if port < 8:
color = RGB(*BISEXUAL_PRIDE_ROYAL_RED)
command += get_color_commands(port, *color.rgbw)
elif port < 12:
color = RGB(*BISEXUAL_PRIDE_CADMIUM_VIOLET)
command += get_color_commands(port, *color.rgbw)
else:
color = RGB(*BISEXULA_PRIDE_DARK_POWDER_BLUE)
command += get_color_commands(port, *color.rgbw)
return command
def template_trans():
command = "echo 0 > /proc/led/led_mode;"
for port in range(1, 19):
if port < 5:
color = RGB(*TRANS_PRIDE_MAYA_BLUE)
command += get_color_commands(port, *color.rgbw)
elif port < 8:
color = RGB(*TRANS_PRIDE_AMARANTH_PINK)
command += get_color_commands(port, *color.rgbw)
elif port < 12:
color = RGB(*TRANS_PRIDE_WHITE)
command += get_color_commands(port, *color.rgbw)
elif port < 15:
color = RGB(*TRANS_PRIDE_AMARANTH_PINK)
command += get_color_commands(port, *color.rgbw)
else:
color = RGB(*TRANS_PRIDE_MAYA_BLUE)
command += get_color_commands(port, *color.rgbw)
return command
def template_lesbian():
command = "echo 0 > /proc/led/led_mode;"
for port in range(1, 19):
if port < 5:
color = RGB(*LESBIAN_PRIDE_SINOPIA)
command += get_color_commands(port, *color.rgbw)
elif port < 8:
color = RGB(*LESBIAN_PRIDE_ATOMIC_TANGERINE)
command += get_color_commands(port, *color.rgbw)
elif port < 12:
color = RGB(*LESBIAN_PRIDE_WHITE)
command += get_color_commands(port, *color.rgbw)
elif port < 15:
color = RGB(*LESBIAN_PRIDE_SUPER_PINK)
command += get_color_commands(port, *color.rgbw)
else:
color = RGB(*LESBIAN_PRIDE_FLIRT)
command += get_color_commands(port, *color.rgbw)
return command
def template_lgbtq():
command = "echo 0 > /proc/led/led_mode;"
for port in range(1, 19):
if port < 4:
color = RGB(*LGBTQ_PRIDE_RED)
command += get_color_commands(port, *color.rgbw)
elif port < 7:
color = RGB(*LGBTQ_PRIDE_ORANGE)
command += get_color_commands(port, *color.rgbw)
elif port < 10:
color = RGB(*LGBTQ_PRIDE_YELLOW)
command += get_color_commands(port, *color.rgbw)
elif port < 13:
color = RGB(*LGBTQ_PRIDE_GREEN)
command += get_color_commands(port, *color.rgbw)
elif port < 16:
color = RGB(*LGBTQ_PRIDE_BLUE)
command += get_color_commands(port, *color.rgbw)
else:
color = RGB(*LGBTQ_PRIDE_PURPLE)
command += get_color_commands(port, *color.rgbw)
return command
def get_color_commands(port, red, green, blue, white):
if args.color:
command = "echo 0 > /proc/led/led_mode;"
else:
command = ""
command += "echo {} r {} > /proc/led/led_color; ".format(port, red * 64)
command += "echo {} g {} > /proc/led/led_color; ".format(port, green * 64)
command += "echo {} b {} > /proc/led/led_color; ".format(port, blue * 64)
command += "echo {} w {} > /proc/led/led_color; ".format(port, white * 64)
return command
def flush_leds():
command = "echo 0 > /proc/led/led_mode;"
return command
def get_port_color(port, red, green, blue):
color = RGB(red, green, blue)
command = get_color_commands(port, *color.rgbw)
return command
if __name__ == "__main__":
parser = argparse.ArgumentParser(
prog="Etherlight",
description="Little tool to set the LEDs on Unifi devices with Etherlight support",
)
group = parser.add_mutually_exclusive_group(required=True)
parser.add_argument(
"device", help="The device you want to connect to via SSH (ssh_config works)"
)
group.add_argument(
"-f",
"--flush",
help="Clears the LEDs on the device (turns them off)",
action="store_true",
)
group.add_argument(
"-t",
"--template",
help="Sets a predefined pride template.",
choices=["lesbian", "lgbtq", "trans", "bisexual", "pansexual"],
)
group.add_argument(
"-c",
"--color",
help="Sets a RGB value to a specified port. This parameter needs 4 inputs: port, red, green, blue",
nargs=4,
type=int,
metavar=("PORT", "RED", "GREEN", "BLUE"),
)
argcomplete.autocomplete(parser)
args = parser.parse_args()
if args.flush:
command = flush_leds()
if args.color:
command = get_port_color(*args.color)
if args.template:
match args.template:
case "lesbian":
command = template_lesbian()
case "lgbtq":
command = template_lgbtq()
case "trans":
command = template_trans()
case "bisexual":
command = template_bisexual()
case "pansexual":
command = template_pansexual()
#print(command)
subprocess.run(["/usr/bin/ssh", args.device, command])