From 09157641ad2996645ee9b32cd959fb2140829c54 Mon Sep 17 00:00:00 2001 From: m3philis Date: Mon, 17 Mar 2025 20:08:00 +0100 Subject: [PATCH] initial commit --- etherlight.py | 219 +++++++++++++++++++++++++++++++++++++++ etherlight_pride_demo.sh | 13 +++ 2 files changed, 232 insertions(+) create mode 100755 etherlight.py create mode 100755 etherlight_pride_demo.sh diff --git a/etherlight.py b/etherlight.py new file mode 100755 index 0000000..a32c9fa --- /dev/null +++ b/etherlight.py @@ -0,0 +1,219 @@ +#! /usr/bin/env python3 + +import 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 = "" + + 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 = "" + + 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 = "" + + 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 = "" + + 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 = "" + + 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): + 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 template. Valid options are LESBIAN or LGBTQ", + 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"), + ) + + 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]) diff --git a/etherlight_pride_demo.sh b/etherlight_pride_demo.sh new file mode 100755 index 0000000..a393406 --- /dev/null +++ b/etherlight_pride_demo.sh @@ -0,0 +1,13 @@ +#! /bin/bash + +./etherlight.py usw-livingroom -f +sleep 3 +./etherlight.py usw-livingroom -t lgbtq +sleep 3 +./etherlight.py usw-livingroom -t bisexual +sleep 3 +./etherlight.py usw-livingroom -t lesbian +sleep 3 +./etherlight.py usw-livingroom -t pansexual +sleep 3 +./etherlight.py usw-livingroom -t trans