|
|
|
@@ -12,6 +12,7 @@ class LightState(str, Enum):
|
|
|
|
|
on = "off"
|
|
|
|
|
off = "on"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class XYColor(NamedTuple):
|
|
|
|
|
x: float
|
|
|
|
|
y: float
|
|
|
|
@@ -45,6 +46,7 @@ class LightID(str, Enum):
|
|
|
|
|
all = "all"
|
|
|
|
|
infuse = "infuse"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_mqtt_broker():
|
|
|
|
|
if "HUECLI_BROKER" in os.environ:
|
|
|
|
|
return os.environ["HUECLI_BROKER"]
|
|
|
|
@@ -67,6 +69,7 @@ def complete_id(incomplete: str):
|
|
|
|
|
completion.append(id)
|
|
|
|
|
return completion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def complete_state(incomplete: str):
|
|
|
|
|
states = ["on", "off"]
|
|
|
|
|
completion = []
|
|
|
|
@@ -147,8 +150,10 @@ def set_state(
|
|
|
|
|
LightID, typer.Argument(help="ID of light.", autocompletion=complete_id)
|
|
|
|
|
],
|
|
|
|
|
state: Annotated[
|
|
|
|
|
LightState, typer.Argument(help="State of light.", autocompletion=complete_state)
|
|
|
|
|
]):
|
|
|
|
|
LightState,
|
|
|
|
|
typer.Argument(help="State of light.", autocompletion=complete_state),
|
|
|
|
|
],
|
|
|
|
|
):
|
|
|
|
|
"""
|
|
|
|
|
Set the state of ID to STATE
|
|
|
|
|
"""
|
|
|
|
@@ -163,7 +168,8 @@ def set_brightness(
|
|
|
|
|
id: Annotated[
|
|
|
|
|
LightID, typer.Argument(help="ID of light.", autocompletion=complete_id)
|
|
|
|
|
],
|
|
|
|
|
brightness: int):
|
|
|
|
|
brightness: int,
|
|
|
|
|
):
|
|
|
|
|
"""
|
|
|
|
|
Set brigthness of ID to BRIGHTNESS
|
|
|
|
|
"""
|
|
|
|
@@ -174,6 +180,7 @@ def set_brightness(
|
|
|
|
|
payload = json.dumps({"brightness": brightness})
|
|
|
|
|
pub.single(topic, payload, hostname=get_mqtt_broker())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.command()
|
|
|
|
|
def version():
|
|
|
|
|
"""
|
|
|
|
@@ -182,6 +189,7 @@ def version():
|
|
|
|
|
version = importlib.metadata.version("huecli")
|
|
|
|
|
typer.echo(f"huecli {version}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def parse_color(color: str) -> XYColor:
|
|
|
|
|
if color in COLOR_MAP:
|
|
|
|
|
return XYColor(COLOR_MAP[color][0], COLOR_MAP[color][1])
|
|
|
|
@@ -194,6 +202,7 @@ def parse_color(color: str) -> XYColor:
|
|
|
|
|
case _:
|
|
|
|
|
raise ValueError("Invalid color format")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _parse_rgb_color(r: float, g: float, b: float) -> XYColor:
|
|
|
|
|
if any(val > 1 for val in [r, g, b]):
|
|
|
|
|
if any(val > 255 for val in [r, g, b]):
|
|
|
|
@@ -204,6 +213,7 @@ def _parse_rgb_color(r: float, g: float, b: float) -> XYColor:
|
|
|
|
|
return rgb_to_xy(r, g, b)
|
|
|
|
|
raise ValueError("RGB values must be between 0 and 255 or 0.0 and 1.0")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
|
app()
|
|
|
|
|
|
|
|
|
|