update light icon based on status

This commit is contained in:
mjallen18
2025-06-27 21:38:24 -05:00
parent b2e56a8146
commit ca155505be
2 changed files with 33 additions and 12 deletions

View File

@@ -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 = {

View File

@@ -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
{