From 52205e8c11d67ef4c3f985ae7824c7b8a16e444b Mon Sep 17 00:00:00 2001 From: illuzn Date: Mon, 30 May 2022 14:22:38 +0930 Subject: [PATCH 1/4] Enable sleepOverride --- apps/nspanel-lovelace-ui/luibackend/config.py | 1 + apps/nspanel-lovelace-ui/luibackend/controller.py | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/apps/nspanel-lovelace-ui/luibackend/config.py b/apps/nspanel-lovelace-ui/luibackend/config.py index 9a6f5482..186d438a 100644 --- a/apps/nspanel-lovelace-ui/luibackend/config.py +++ b/apps/nspanel-lovelace-ui/luibackend/config.py @@ -68,6 +68,7 @@ class LuiBackendConfig(object): 'sleepTimeout': 20, 'sleepBrightness': 20, 'sleepTracking': None, + 'sleepOverride': None, 'locale': "en_US", 'timeFormat': "%H:%M", 'dateFormatBabel': "full", diff --git a/apps/nspanel-lovelace-ui/luibackend/controller.py b/apps/nspanel-lovelace-ui/luibackend/controller.py index 6025451a..dedf0346 100644 --- a/apps/nspanel-lovelace-ui/luibackend/controller.py +++ b/apps/nspanel-lovelace-ui/luibackend/controller.py @@ -42,6 +42,11 @@ class LuiController(object): bst = self._config.get("sleepTracking") if bst is not None and self._ha_api.entity_exists(bst): self._ha_api.listen_state(self.update_screensaver_brightness_state_callback, entity_id=bst) + + # call update_screensaver_brightness on entity configured in sleepOverride + sleepOverride = self._config.get("sleepOverride") + if sleepOverride is not None and sleepOverride["entity"] is not None and sleepOverride["brightness"] is not None and self._ha_api.entity_exists(sleepOverride["entity"]): + self._ha_api.listen_state(self.update_screensaver_brightness_state_callback, entity_id=sleepOverride["entity"]) # register callback for state changes on tracked value sleep_brightness_config = self._config.get("sleepBrightness") @@ -72,9 +77,15 @@ class LuiController(object): def update_screensaver_brightness(self, kwargs): bst = self._config.get("sleepTracking") + sleepOverride = self._config.get("sleepOverride") + brightness = 0 if bst is not None and self._ha_api.entity_exists(bst) and self._ha_api.get_entity(bst).state in ["not_home", "off"]: brightness = 0 + + elif sleepOverride is not None and sleepOverride["entity"] is not None and sleepOverride["brightness"] is not None and self._ha_api.entity_exists(sleepOverride["entity"]) and self._ha_api.get_entity(sleepOverride["entity"]) in ["on", "true", "home"]: + brightness = sleepOverride["brightness"] + else: self.current_screensaver_brightness = kwargs['value'] brightness = kwargs['value'] From 38030e4a81bc54b30c1bd2cf919a767f5babd2a7 Mon Sep 17 00:00:00 2001 From: illuzn Date: Mon, 30 May 2022 15:52:11 +0930 Subject: [PATCH 2/4] debug, change readme and example configs --- README.md | 4 ++++ appdaemon/apps-simple.yaml | 4 ++++ apps/nspanel-lovelace-ui/luibackend/controller.py | 13 ++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 453d94d8..d7b2be7d 100644 --- a/README.md +++ b/README.md @@ -379,6 +379,7 @@ key | optional | type | default | description `sleepTimeout` | True | integer | `20` | Timeout for the screen to enter screensaver, to disable screensaver use 0 `sleepBrightness` | True | integer/complex | `20` | Brightness for the screen to enter screensaver, see example below for complex/scheduled config. `sleepTracking` | True | string | None | Forces screensaver brightness to 0 in case entity state is not_home or off, can be a group, person or device_tracker entity. +`sleepOverride` | True | complex | None | Allows overriding of the sleepBrightness if entity state is on, true or home. Overrides sleepBrightness but sleepTracking takes precedence. `locale` | True | string | `en_US` | Used by babel to determinante Date format on screensaver, also used for localization. `dateFormatBabel` | True | string | `full` | formatting options on https://babel.pocoo.org/en/latest/dates.html?highlight=name%20of%20day#date-fields `timeFormat` | True | string | `%H:%M` | Time Format on screensaver. Substring after `?` is displayed in a seperate smaller textbox. Useful for 12h time format with AM/PM
`"%I:%M   ?%p"`
@@ -536,6 +537,9 @@ It is possible to schedule a brightness change for the screen at specific times. value: 0 ``` +`sleepTracking` overrides this setting and sets the brightness to 0 if the state of the configured Home Assistant entity is `off` or `not_home`. You may also use a [Home Assistant group](https://www.home-assistant.io/integrations/group) to track multiple entities. + +`sleepOverride` overrides sleepBrightness but does not take precedence over sleepTracking. This is useful if, for example, you want your NSPanel to be brighter than usual if your light is on or if you want to override a panel dimming if you are in the room. #### Override Icons or Names diff --git a/appdaemon/apps-simple.yaml b/appdaemon/apps-simple.yaml index bb61f3b1..0ba92351 100644 --- a/appdaemon/apps-simple.yaml +++ b/appdaemon/apps-simple.yaml @@ -8,6 +8,10 @@ nspanel-1: updateMode: "auto-notify" sleepTimeout: 20 #sleepBrightness: 10 + sleepTracking: device_tracker.amihome + sleepOverride: + entity: sensor.isthelighton + brightness: 99 sleepBrightness: - time: "7:00:00" value: 10 diff --git a/apps/nspanel-lovelace-ui/luibackend/controller.py b/apps/nspanel-lovelace-ui/luibackend/controller.py index de6c03e8..42edb046 100644 --- a/apps/nspanel-lovelace-ui/luibackend/controller.py +++ b/apps/nspanel-lovelace-ui/luibackend/controller.py @@ -45,7 +45,8 @@ class LuiController(object): # call update_screensaver_brightness on entity configured in sleepOverride sleepOverride = self._config.get("sleepOverride") - if sleepOverride is not None and sleepOverride["entity"] is not None and sleepOverride["brightness"] is not None and self._ha_api.entity_exists(sleepOverride["entity"]): + if sleepOverride is not None and type(sleepOverride) is dict and sleepOverride["entity"] is not None and sleepOverride["brightness"] is not None and self._ha_api.entity_exists(sleepOverride["entity"]): + self._ha_api.log(f"Configuring Sleep Override. Config is {sleepOverride}") self._ha_api.listen_state(self.update_screensaver_brightness_state_callback, entity_id=sleepOverride["entity"]) # register callback for state changes on tracked value @@ -78,13 +79,19 @@ class LuiController(object): def update_screensaver_brightness(self, kwargs): bst = self._config.get("sleepTracking") sleepOverride = self._config.get("sleepOverride") + if sleepOverride is not None and type(sleepOverride) is dict: + sOEntity = sleepOverride["entity"] + sOBrightness = sleepOverride["brightness"] brightness = 0 + if bst is not None and self._ha_api.entity_exists(bst) and self._ha_api.get_entity(bst).state in ["not_home", "off"]: + self._ha_api.log(f"sleepTracking setting brightness to 0") brightness = 0 - elif sleepOverride is not None and sleepOverride["entity"] is not None and sleepOverride["brightness"] is not None and self._ha_api.entity_exists(sleepOverride["entity"]) and self._ha_api.get_entity(sleepOverride["entity"]) in ["on", "true", "home"]: - brightness = sleepOverride["brightness"] + elif sOEntity is not None and sOBrightness is not None and self._ha_api.entity_exists(sOEntity) and self._ha_api.get_entity(sOEntity).state in ["on", "true", "home"]: + self._ha_api.log(f"sleepOverride setting brightness to {sOBrightness}") + brightness = sOBrightness else: self.current_screensaver_brightness = kwargs['value'] From b11018aad211b616fc6226d446115426d3a31413 Mon Sep 17 00:00:00 2001 From: illuzn Date: Mon, 30 May 2022 15:55:44 +0930 Subject: [PATCH 3/4] Clarify Readme --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index d7b2be7d..83e86596 100644 --- a/README.md +++ b/README.md @@ -541,6 +541,19 @@ It is possible to schedule a brightness change for the screen at specific times. `sleepOverride` overrides sleepBrightness but does not take precedence over sleepTracking. This is useful if, for example, you want your NSPanel to be brighter than usual if your light is on or if you want to override a panel dimming if you are in the room. +The following example configuration does nothing during the day but at night, if the bedroom light is on the NSPanel brightness will be 20 instead of 0. + +```yaml + sleepBrightness: + - time: "sunrise" + value: 20 + - time: "sunset" + value: 0 + sleepOverride: + entity: light.bedroomlight + brightness: 20 +``` + #### Override Icons or Names To overwrite Icons or Names of entities you can configure an icon and/or name in your configuration, please see the following example. From dcca27bf43333534dc74d3cf290344f5055d77e8 Mon Sep 17 00:00:00 2001 From: Johannes Date: Tue, 31 May 2022 17:16:59 +0200 Subject: [PATCH 4/4] Update apps-simple.yaml --- appdaemon/apps-simple.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/appdaemon/apps-simple.yaml b/appdaemon/apps-simple.yaml index 0ba92351..bb61f3b1 100644 --- a/appdaemon/apps-simple.yaml +++ b/appdaemon/apps-simple.yaml @@ -8,10 +8,6 @@ nspanel-1: updateMode: "auto-notify" sleepTimeout: 20 #sleepBrightness: 10 - sleepTracking: device_tracker.amihome - sleepOverride: - entity: sensor.isthelighton - brightness: 99 sleepBrightness: - time: "7:00:00" value: 10