diff --git a/README.md b/README.md index dd2b46bf..29e5c929 100644 --- a/README.md +++ b/README.md @@ -380,6 +380,7 @@ key | optional | type | default | description `sleepBrightness` | True | integer/complex | `20` | Brightness for the screen on the screensaver, see example below for complex/scheduled config. `screenBrightness` | True | integer/complex | `100` | Brightness for the screen during usage, config format is the same as sleepBrightness. `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"`@@ -537,6 +538,22 @@ 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. + +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 diff --git a/apps/nspanel-lovelace-ui/luibackend/config.py b/apps/nspanel-lovelace-ui/luibackend/config.py index 185b6c52..644ce87c 100644 --- a/apps/nspanel-lovelace-ui/luibackend/config.py +++ b/apps/nspanel-lovelace-ui/luibackend/config.py @@ -69,6 +69,7 @@ class LuiBackendConfig(object): 'sleepBrightness': 20, 'screenBrightness': 100, '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 cf4cd9c1..ca0293be 100644 --- a/apps/nspanel-lovelace-ui/luibackend/controller.py +++ b/apps/nspanel-lovelace-ui/luibackend/controller.py @@ -43,6 +43,12 @@ 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 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 (for input_number) - sleepBrightness sleep_brightness_config = self._config.get("sleepBrightness") @@ -78,9 +84,21 @@ 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"] + sleepBrightness = 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") sleepBrightness = 0 + + 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}") + sleepBrightness = sOBrightness + else: self.current_screensaver_brightness = kwargs['ssbr'] sleepBrightness = self.current_screensaver_brightness