From bb4a8791fc0ad8d0ed457accae095852dddbe004 Mon Sep 17 00:00:00 2001 From: matt1432 Date: Sun, 2 Feb 2025 00:46:20 -0500 Subject: [PATCH] feat(hass): add synced input_text for brightness control --- .../homie/modules/home-assistant/frontend.nix | 8 +++ .../netdaemon/HomeAssistantGenerated | Bin 790116 -> 843205 bytes .../Frontend/BathroomLight/BathroomLight.cs | 58 ++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 configurations/homie/modules/home-assistant/netdaemon/apps/Frontend/BathroomLight/BathroomLight.cs diff --git a/configurations/homie/modules/home-assistant/frontend.nix b/configurations/homie/modules/home-assistant/frontend.nix index 319aca27..45ba3792 100644 --- a/configurations/homie/modules/home-assistant/frontend.nix +++ b/configurations/homie/modules/home-assistant/frontend.nix @@ -124,6 +124,14 @@ in { } ]; + # TODO: restrict to 0-100 + config.input_text = { + bathroom_light_brightness = { + name = "BathroomLightBrightness"; + pattern = "[0-9]*"; + }; + }; + lovelaceConfig = { title = "Our House"; # I don't want multiple views diff --git a/configurations/homie/modules/home-assistant/netdaemon/HomeAssistantGenerated b/configurations/homie/modules/home-assistant/netdaemon/HomeAssistantGenerated index 6fd6f050ccd191fce7d4ff3f87da7029234884a3..ca915f35a9c21dde9035ee442ea7559104680274 100644 GIT binary patch delta 26407 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 diff --git a/configurations/homie/modules/home-assistant/netdaemon/apps/Frontend/BathroomLight/BathroomLight.cs b/configurations/homie/modules/home-assistant/netdaemon/apps/Frontend/BathroomLight/BathroomLight.cs new file mode 100644 index 00000000..60a774f2 --- /dev/null +++ b/configurations/homie/modules/home-assistant/netdaemon/apps/Frontend/BathroomLight/BathroomLight.cs @@ -0,0 +1,58 @@ +using System; + +using HomeAssistantGenerated; + +using NetDaemon.AppModel; +using NetDaemon.HassModel.Entities; + + +namespace NetDaemonConfig.Apps.Frontend.BathroomLight +{ + [NetDaemonApp] + public class BathroomLight + { + public BathroomLight(Services services, Entities entities) + { + LightEntity? bathroomLight = entities.Light.Tz3210KatchgxyTs0505bLight; + InputTextEntity? bathroomLightBrightness = entities.InputText.BathroomLightBrightness; + + var brightnessCallback = (Action callback) => + { + double? currentBrightness = bathroomLight?.Attributes?.Brightness; + + if (currentBrightness is not null) + { + double currentBrightnessPercent = Math.Floor((double)currentBrightness / 2.54); + double inputBrightnessPercent = Double.Parse(bathroomLightBrightness.State ?? "0"); + + if (currentBrightnessPercent != inputBrightnessPercent) + { + callback(currentBrightnessPercent, inputBrightnessPercent); + } + } + }; + + bathroomLightBrightness + .StateAllChanges() + .Subscribe((_) => brightnessCallback((current, input) => + { + services.Light.TurnOn( + target: ServiceTarget.FromEntity("light.tz3210_katchgxy_ts0505b_light"), + brightness: Math.Floor(input * 2.54 + 1)); + })); + + bathroomLight + .StateAllChanges() + .Subscribe((_) => brightnessCallback((current, input) => + { + bathroomLightBrightness.SetValue(current.ToString()); + })); + + // Init value + brightnessCallback((current, input) => + { + bathroomLightBrightness.SetValue(current.ToString()); + }); + } + } +}