diff --git a/modules/desktop-environments/hyprland/config/waybar/default.nix b/modules/desktop-environments/hyprland/config/waybar/default.nix index 3e6d163..d16dcc1 100755 --- a/modules/desktop-environments/hyprland/config/waybar/default.nix +++ b/modules/desktop-environments/hyprland/config/waybar/default.nix @@ -86,8 +86,11 @@ in "custom/lights" = { tooltip = false; - format = "󱉓"; + exec = "waybar-hass --get_light light.living_room_lights"; + interval = "once"; + format = "{text}";#"󱉓"; on-click = "waybar-hass --toggle_light light.living_room_lights"; + return-type = "json"; }; temperature = { diff --git a/modules/desktop-environments/hyprland/config/waybar/scripts/hass.nix b/modules/desktop-environments/hyprland/config/waybar/scripts/hass.nix index 6fb3d3b..cdd805e 100755 --- a/modules/desktop-environments/hyprland/config/waybar/scripts/hass.nix +++ b/modules/desktop-environments/hyprland/config/waybar/scripts/hass.nix @@ -42,25 +42,37 @@ let waybar-hass = pkgs.writeScriptBin "waybar-hass" '' #!${pythonEnv}/bin/python - - import os + """run with the special python""" + import argparse import time - from homeassistant_api import Client + import json + from homeassistant_api import WebsocketClient - hass_url = 'http://homeassistant.local:8123/api' + HASS_URL = 'ws://homeassistant.local:8123/api/websocket' parser = argparse.ArgumentParser(prog='hass python wrapper') parser.add_argument('--toggle_light') + parser.add_argument('--get_light') args = parser.parse_args() - def loadKey(): + def load_key(): + """Read the api key""" token_path = "/run/secrets/desktop/hass_token" with open(token_path, "r") as key_file: key = key_file.readline() return key + def get_light_state(client, light): + """Get light status""" + light_entity = client.get_entity(entity_id=light) + state = light_entity.get_state() + if state.state == 'on': + return "󰛨" + return "󰹏" + def toggle_light(client, light): + """Toggle light status""" lights = client.get_domain("light") lights.toggle(entity_id=light) time.sleep(0.5) @@ -68,19 +80,25 @@ let state = light_entity.get_state() if state.state == 'on': return "󰛨" - else: - return "󰹏" + return "󰹏" def main(): - token = loadKey() + """Main""" + token = load_key() + status = "err" - with Client(hass_url, token) as client: + with WebsocketClient(HASS_URL, token) as client: + # toggle a light if args.toggle_light is not None: status = toggle_light(client=client, light=args.toggle_light) - - print("{ text: \"" + status + "\" }") + # get the current light status + if args.get_light is not None: + status = get_light_state(client=client, light=args.get_light) + + print(json.dumps({ "text": status })) main() + ''; in {