various tidyups

This commit is contained in:
zorruno
2026-09-13 15:32:16 +12:00
parent 3ead85ef29
commit d1fea67cfe
34 changed files with 3303 additions and 2306 deletions
+2170 -2108
View File
File diff suppressed because it is too large Load Diff
+223
View File
@@ -0,0 +1,223 @@
--- a/esp-bedside-panel.yaml
+++ b/esp-bedside-panel.yaml
@@ -5,6 +5,7 @@
# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-bedside-panel.yaml
#:########################################################################################:#
# VERSIONS:
+# V1.56 2026-09-04 Added latched blackout after 10 seconds below 1 lx with immediate exit
# V1.55 2026-08-16 Show only Clock time and date in Blackout ambient-light mode
# V1.54 2026-08-16 Dimmed Clock time and date palette in Blackout ambient-light mode
@@ -248,7 +249,6 @@
# Bright light: approximately 642-643 lx
ambient_lux_multiplier_default: "200"
-
- display_blackout_lux_threshold_default: "2"
display_dark_lux_threshold_default: "20"
display_bright_lux_threshold_default: "250"
@@ -921,21 +921,6 @@
step: 5
mode: box
- - platform: template
- id: display_blackout_lux_threshold
- name: "${friendly_name} Blackout Lux Threshold"
- icon: mdi:brightness-1
- entity_category: config
- optimistic: true
- restore_value: true
- initial_value: "${display_blackout_lux_threshold_default}"
- unit_of_measurement: "lx"
- min_value: 0
- max_value: 20
- step: 0.5
- mode: box
-
- platform: template
id: display_dark_lux_threshold
@@ -1228,6 +1213,45 @@
update_interval: 3s
lambda: |-
const float voltage = id(ambient_light_voltage).state;
+
+ if (isnan(voltage)) {
+ return NAN;
+ }
+
+ float multiplier = id(ambient_lux_multiplier).state;
+
+ if (isnan(multiplier) || multiplier <= 0.0f) {
+ multiplier = 200.0f;
+ }
+
+ return voltage * multiplier;
+ on_value:
+ then:
+ - if:
+ condition:
+ lambda: |-
+ return !isnan(x) && x >= 1.0f;
+ then:
+ - script.stop: latch_display_blackout
+ - lambda: |-
+ id(display_blackout_active) = false;
+ - if:
+ condition:
+ lambda: |-
+ return id(lvgl_ready) && id(display_is_dimmed);
+ then:
+ - script.execute: apply_dim_backlight
+ else:
+ - if:
+ condition:
+ lambda: |-
+ return id(lvgl_ready);
+ then:
+ - script.execute: apply_active_backlight
+ else:
+ - if:
+ condition:
+ lambda: |-
+ return !isnan(x) && x < 1.0f && !id(display_blackout_active);
+ then:
+ - script.execute: latch_display_blackout
- float multiplier = id(ambient_lux_multiplier).state;
-
- if (isnan(voltage)) {
- return NAN;
- }
-
- if (isnan(multiplier) || multiplier <= 0.0f) {
- multiplier = 200.0f;
- }
-
- return voltage * multiplier;
- platform: homeassistant
@@ -1918,6 +1942,12 @@
restore_value: false
initial_value: "false"
+ # True after ambient light remains below 1 lx for 10 continuous seconds.
+ - id: display_blackout_active
+ type: bool
+ restore_value: false
+ initial_value: "false"
+
# True only while the Security page is visible.
@@ -3133,31 +3163,52 @@
- # Four ambient ranges are used:
- # Blackout: lux < Blackout Lux Threshold
- # Dark: Blackout threshold to Dark Lux Threshold
- # Normal: between Dark and Bright thresholds
- # Bright: lux >= Bright Lux Threshold
+ # Blackout latches after ambient light remains below 1 lx for 10 seconds and
+ # exits immediately when ambient light reaches 1 lx. The remaining ranges are:
+ # Dark: lux <= Dark Lux Threshold
+ # Normal: between Dark and Bright thresholds
+ # Bright: lux >= Bright Lux Threshold
#
# The active and clock/idle brightness levels are independently adjustable
# and restored after reboot.
+ - id: latch_display_blackout
+ mode: single
+ then:
+ - delay: 10s
+ - if:
+ condition:
+ lambda: |-
+ const float lux = id(ambient_light_illuminance).state;
+ return !isnan(lux) && lux < 1.0f;
+ then:
+ - lambda: |-
+ id(display_blackout_active) = true;
+ - if:
+ condition:
+ lambda: |-
+ return id(lvgl_ready) && id(display_is_dimmed);
+ then:
+ - script.execute: apply_dim_backlight
+ else:
+ - if:
+ condition:
+ lambda: |-
+ return id(lvgl_ready);
+ then:
+ - script.execute: apply_active_backlight
+
# Keep the idle Clock unobtrusive at the minimum usable backlight level.
- id: apply_clock_blackout_palette
@@ -3146,15 +3197,7 @@
- if:
condition:
lambda: |-
- const float lux = id(ambient_light_illuminance).state;
- float blackout_threshold =
- id(display_blackout_lux_threshold).state;
-
- if (isnan(blackout_threshold)) {
- blackout_threshold = 2.0f;
- }
-
- return !isnan(lux) && lux < blackout_threshold;
+ return id(display_blackout_active);
@@ -3212,22 +3255,12 @@
brightness: !lambda |-
const float lux = id(ambient_light_illuminance).state;
- float blackout_threshold =
- id(display_blackout_lux_threshold).state;
float dark_threshold =
id(display_dark_lux_threshold).state;
float bright_threshold =
id(display_bright_lux_threshold).state;
- if (isnan(blackout_threshold)) {
- blackout_threshold = 2.0f;
- }
-
if (
isnan(dark_threshold) ||
- dark_threshold <= blackout_threshold
+ dark_threshold <= 0.0f
) {
dark_threshold = 20.0f;
}
@@ -3239,7 +3272,7 @@
float brightness_percent;
- if (!isnan(lux) && lux < blackout_threshold) {
+ if (id(display_blackout_active)) {
brightness_percent =
id(display_blackout_brightness).state;
@@ -3280,22 +3313,12 @@
brightness: !lambda |-
const float lux = id(ambient_light_illuminance).state;
- float blackout_threshold =
- id(display_blackout_lux_threshold).state;
float dark_threshold =
id(display_dark_lux_threshold).state;
float bright_threshold =
id(display_bright_lux_threshold).state;
- if (isnan(blackout_threshold)) {
- blackout_threshold = 2.0f;
- }
-
if (
isnan(dark_threshold) ||
- dark_threshold <= blackout_threshold
+ dark_threshold <= 0.0f
) {
dark_threshold = 20.0f;
}
@@ -3307,7 +3330,7 @@
float brightness_percent;
- if (!isnan(lux) && lux < blackout_threshold) {
+ if (id(display_blackout_active)) {
brightness_percent =
id(display_blackout_brightness).state;