From 8585b97d72eefe970be6d47a3511452b5376943a 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 47c10ae2229078b206191b36d5361f7225d0975a 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 cdcc82590ef48ece03aeae3fcb2788fd00a6b827 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 35ab536eb7e9bc406ba0360269c701ccf10e0b6c Mon Sep 17 00:00:00 2001 From: joBr99 <29555657+joBr99@users.noreply.github.com> 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