New sleep flow

This commit is contained in:
Edward Firmo
2023-09-14 23:59:27 +02:00
parent 1597a2aaad
commit 21e099bb5f
22 changed files with 581 additions and 390 deletions

View File

@@ -217,7 +217,7 @@ api:
ESP_LOGV("service.notification_show", "text length: %i", text.length());
id(disp1).send_command_printf("is_notification=1");
id(disp1).send_command_printf("page notification");
id(disp1).goto_page("notification");
id(disp1).set_component_text_printf("notification.notifi_label", "%s", label.c_str());
id(display_wrapped_text).execute("notification.notifi_text01", text.c_str(), id(display_mode) == 2 ? 23 : 32);
@@ -297,7 +297,7 @@ api:
- lambda: |-
id(disp1).set_component_text_printf("qrcode.qrcode_label", "%s", title.c_str());
id(disp1).set_component_text_printf("qrcode.qrcode_value", "%s", qrcode.c_str());
if (show) id(disp1).send_command_printf("page qrcode");
if (show) id(disp1).goto_page("qrcode");
#### Service to set climate state ####
- service: set_climate
@@ -370,14 +370,10 @@ api:
reset_timer: bool
then:
- lambda: |-
if (id(current_page).state == "home")
{
id(disp1).send_command_printf("home.dimtimer.en=1");
id(disp1).send_command_printf("home.sleeptimer.en=1");
}
else if (id(current_page).state == "screensaver") id(disp1).send_command_printf("page %s", id(wakeup_page_name).state.c_str());
id(disp1).send_command_printf("dim=brightness");
if (reset_timer) id(page_timer)->execute();
if (id(current_page).state == "screensaver") id(disp1).goto_page(id(wakeup_page_name).state.c_str());
id(timer_sleep)->execute();
id(timer_dim)->execute();
if (reset_timer) id(timer_page)->execute();
#### Service to set the entities ####
- service: set_entity
@@ -510,7 +506,7 @@ api:
rtttl: 'two short:d=4,o=5,b=100:16e6,16e6'
- lambda: |-
ESP_LOGV("service.global_settings", "Jump to wake-up page: %s", id(wakeup_page_name).state.c_str());
id(disp1).send_command_printf("page %s", id(wakeup_page_name).state.c_str());
id(disp1).goto_page(id(wakeup_page_name).state.c_str());
- lambda: ESP_LOGV("service.global_settings", "Finished");
@@ -570,7 +566,7 @@ api:
- service: page_settings
variables:
reboot: string
sleep_mode: string
#sleep_mode: string
brightness: string
bright: string
dim: string
@@ -578,12 +574,12 @@ api:
- lambda: |-
ESP_LOGV("service.page_settings", "Starting");
ESP_LOGV("service.page_settings", "reboot: %s", reboot.c_str());
ESP_LOGV("service.page_settings", "sleep_mode: %s", sleep_mode.c_str());
//ESP_LOGV("service.page_settings", "sleep_mode: %s", sleep_mode.c_str());
ESP_LOGV("service.page_settings", "brightness: %s", brightness.c_str());
ESP_LOGV("service.page_settings", "bright: %s", bright.c_str());
ESP_LOGV("service.page_settings", "dim: %s", dim.c_str());
if (not reboot.empty()) id(disp1).set_component_text_printf("settings.lbl_reboot", " %s", reboot.c_str());
if (not sleep_mode.empty()) id(disp1).set_component_text_printf("settings.lbl_sleep", " %s", sleep_mode.c_str());
//if (not sleep_mode.empty()) id(disp1).set_component_text_printf("settings.lbl_sleep", " %s", sleep_mode.c_str());
id(display_wrapped_text).execute("settings.lbl_brightness", brightness.c_str(), id(display_mode) == 2 ? 25 : 10);
id(display_wrapped_text).execute("settings.lbl_bright", bright.c_str(), id(display_mode) == 2 ? 25 : 10);
id(display_wrapped_text).execute("settings.lbl_dim", dim.c_str(), id(display_mode) == 2 ? 25 : 10);
@@ -850,6 +846,12 @@ globals:
restore_value: true
initial_value: '0'
##### Is dimmed #####
- id: is_dim_brightness
type: bool
restore_value: false
initial_value: 'false'
##### Entity Id of the entity displayed on the detailed pages
- id: entity_id
type: std::string
@@ -1032,14 +1034,14 @@ binary_sensor:
- button.press: restart_nspanel
##### Sleep mode NSPanel Button #####
- name: ${device_name} Sleep mode
platform: nextion
page_id: 7
component_id: 10
internal: true
on_click:
- logger.log: "Sleep mode - Nextion toggle"
- switch.toggle: sleep_mode
#- name: ${device_name} Sleep mode
# platform: nextion
# page_id: 7
# component_id: 10
# internal: true
# on_click:
# - logger.log: "Sleep mode - Nextion toggle"
# - switch.toggle: sleep_mode
##### global variable to keep track on whether the Nextion display is ready or not.
## Delays initial info from HA to the display #####
@@ -1072,7 +1074,7 @@ sensor:
on_value:
then:
- lambda: |-
id(page_timer)->execute();
id(timer_reset_all)->execute();
##### Send current brightness info to Home Assistant
- name: ${device_name} Brightness
@@ -1228,7 +1230,6 @@ text_sensor:
then:
- lambda: |-
ESP_LOGV("text_sensor.nspanelevent", "Starting");
id(page_timer)->execute();
DynamicJsonDocument doc(1024);
deserializeJson(doc, x);
std::string page = doc["page"];
@@ -1252,6 +1253,7 @@ text_sensor:
{
ESP_LOGV("text_sensor.nspanelevent", "New page: %s", page.c_str());
ESP_LOGV("text_sensor.nspanelevent", "Trigger HA event");
id(timer_page)->execute();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
{
{"type", "page_changed"},
@@ -1271,19 +1273,7 @@ text_sensor:
else if (page=="screensaver")
{
ESP_LOGV("text_sensor.nspanelevent", "Construct screensaver page");
int wakeup_page_id = 0;
if (id(wakeup_page_name).state == "buttonpage01") wakeup_page_id = 12;
else if (id(wakeup_page_name).state == "buttonpage02") wakeup_page_id = 13;
else if (id(wakeup_page_name).state == "buttonpage03") wakeup_page_id = 14;
else if (id(wakeup_page_name).state == "buttonpage04") wakeup_page_id = 15;
else if (id(wakeup_page_name).state == "entitypage01") wakeup_page_id = 18;
else if (id(wakeup_page_name).state == "entitypage02") wakeup_page_id = 19;
else if (id(wakeup_page_name).state == "entitypage03") wakeup_page_id = 20;
else if (id(wakeup_page_name).state == "entitypage04") wakeup_page_id = 21;
else if (id(wakeup_page_name).state == "qrcode") wakeup_page_id = 17;
else if (id(wakeup_page_name).state == "alarm") wakeup_page_id = 23;
ESP_LOGV("text_sensor.nspanelevent", "Wake-up page id: %i", wakeup_page_id);
id(disp1).set_component_value("orign", wakeup_page_id);
id(update_page_screensaver).execute();
}
else if (page=="climate")
{
@@ -1330,7 +1320,12 @@ text_sensor:
else if (page=="buttonpage02" or page=="entitypage02") id(disp1).set_component_text_printf("page_index", "%s", "\uE765\uE764\uE765\uE765"); // 2/4
else if (page=="buttonpage03" or page=="entitypage03") id(disp1).set_component_text_printf("page_index", "%s", "\uE765\uE765\uE764\uE765"); // 3/4
else if (page=="buttonpage04" or page=="entitypage04") id(disp1).set_component_text_printf("page_index", "%s", "\uE765\uE765\uE765\uE764"); // 4/4
else if (page=="settings") id(disp1).set_component_text_printf("bt_sleep", "%s", (id(sleep_mode).state) ? "\uEA19" : "\uEA18"); //mdi:toggle-switch-outline or mdi:toggle-switch-off-outline
else if (page=="settings")
{
//id(disp1).set_component_text_printf("bt_sleep", "%s", (id(sleep_mode).state) ? "\uEA19" : "\uEA18"); //mdi:toggle-switch-outline or mdi:toggle-switch-off-outline
id(disp1).hide_component("lbl_sleep");
id(disp1).hide_component("bt_sleep");
}
else if (page=="notification")
{
id(disp1).set_component_text_printf("notification.notifi_label", "%s", id(notification_label).state.c_str());
@@ -1366,7 +1361,6 @@ text_sensor:
then:
- lambda: |-
ESP_LOGV("text_sensor.localevent", "Starting");
id(page_timer)->execute();
DynamicJsonDocument doc(1024);
deserializeJson(doc, x);
std::string page = doc["page"];
@@ -1390,6 +1384,7 @@ text_sensor:
if (event=="pagechanged")
{
ESP_LOGV("text_sensor.localevent", "New page: %s", page.c_str());
id(timer_page)->execute();
ESP_LOGV("text_sensor.localevent", "Trigger HA event");
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
{
@@ -1424,7 +1419,7 @@ text_sensor:
std::string title = doc["mui"];
if (code_format=="number" and (key=="disarm" or code_arm_req=="1"))
{
id(disp1).send_command_printf("page keyb_num");
id(disp1).goto_page("keyb_num");
id(disp1).set_component_value("keyb_num.page_id", 23); //Calling from Alarm page
id(disp1).set_component_text_printf("keyb_num.domain", "%s", page.c_str());
id(disp1).set_component_text_printf("keyb_num.key", "%s", key.c_str());
@@ -1466,7 +1461,7 @@ text_sensor:
if (stof(value) >= 5)
{
ESP_LOGV("text_sensor.localevent", "Jump to wakeup page: %s", id(wakeup_page_name).state.c_str());
id(disp1).send_command_printf("page %s", id(wakeup_page_name).state.c_str());
id(disp1).goto_page(id(wakeup_page_name).state.c_str());
}
}
}
@@ -1491,7 +1486,7 @@ text_sensor:
id(service_call_alarm_control_panel)->execute(entity.c_str(), key.c_str(), code_format.c_str(), pin.c_str());
}
else if (base_domain == "" or base_domain.empty()) base_domain = "home";
id(disp1).send_command_printf("page %s", base_domain.c_str());
id(disp1).goto_page(base_domain.c_str());
}
else if (page == "light") id(ha_call_service)->execute("light.turn_on", key.c_str(), value.c_str(), entity.c_str());
else if (page == "media_player")
@@ -1569,27 +1564,27 @@ switch:
internal: true
##### Switch Display Sleep mode #####
- name: ${device_name} Sleep mode
platform: template
device_class: switch
id: sleep_mode
entity_category: config
restore_mode: RESTORE_DEFAULT_OFF
optimistic: false
turn_on_action: &sleep_mode-turn_on
- lambda: |-
ESP_LOGV("switch.sleep_mode", "Turn on");
id(disp1).send_command_printf("sleep_mode=1");
id(disp1).set_component_value("settings.bt_sleep",1);
id(disp1).set_component_text_printf("settings.bt_sleep", "%s", "\uEA19");
id(sleep_mode).publish_state(true);
turn_off_action: &sleep_mode-turn_off
- lambda: |-
ESP_LOGV("switch.sleep_mode", "Turn off");
id(disp1).send_command_printf("sleep_mode=0");
id(disp1).set_component_value("settings.bt_sleep",0);
id(disp1).set_component_text_printf("settings.bt_sleep", "%s", "\uEA18");
id(sleep_mode).publish_state(false);
#- name: ${device_name} Sleep mode
# platform: template
# device_class: switch
# id: sleep_mode
# entity_category: config
# restore_mode: RESTORE_DEFAULT_OFF
# optimistic: false
# turn_on_action: &sleep_mode-turn_on
# - lambda: |-
# ESP_LOGV("switch.sleep_mode", "Turn on");
# id(disp1).send_command_printf("sleep_mode=1");
# id(disp1).set_component_value("settings.bt_sleep",1);
# id(disp1).set_component_text_printf("settings.bt_sleep", "%s", "\uEA19");
# id(sleep_mode).publish_state(true);
# turn_off_action: &sleep_mode-turn_off
# - lambda: |-
# ESP_LOGV("switch.sleep_mode", "Turn off");
# id(disp1).send_command_printf("sleep_mode=0");
# id(disp1).set_component_value("settings.bt_sleep",0);
# id(disp1).set_component_text_printf("settings.bt_sleep", "%s", "\uEA18");
# id(sleep_mode).publish_state(false);
##### Relay Local control #####
- name: ${device_name} Relay 1 Local
@@ -1635,15 +1630,8 @@ number:
id(display_brightness_global) = int(x);
id(disp1).send_command_printf("brightness=%i", int(x));
id(disp1).send_command_printf("settings.brightslider.val=%i", int(x));
if (id(current_page).state != "screensaver")
{
id(disp1).set_backlight_brightness(x/100);
id(disp1).send_command_printf("home.dimtimer.en=1");
}
if (id(current_page).state == "settings")
{
id(disp1).set_component_text_printf("bright_text", "%i%%", int(x));
}
if (id(current_page).state != "screensaver") id(disp1).set_backlight_brightness(x/100);
if (id(current_page).state == "settings") id(disp1).set_component_text_printf("bright_text", "%i%%", int(x));
##### SCREEN BRIGHTNESS DIMMED DOWN #####
- platform: template
@@ -1682,29 +1670,46 @@ number:
- delay: 1s
- lambda: id(temp_nspanel).publish_state(id(temp_nspanel).raw_state);
##### page-timeout #####
- platform: template
name: ${device_name} Page timeout
id: page_timeout
##### Timers settings #####
- name: ${device_name} Timeout Page
platform: template
id: timeout_page
entity_category: config
min_value: 0
max_value: 60
initial_value: 5
max_value: 300
initial_value: 15
step: 1
restore_value: true
optimistic: true
##### dimming-timeout #####
#- platform: template
# name: ${device_name} Dimming timeout
# id: dimming_timeout
# entity_category: config
# min_value: 0
# max_value: 60
# initial_value: 15
# step: 1
# restore_value: true
# optimistic: true
icon: mdi:timer
set_action:
- script.execute: timer_page
- name: ${device_name} Timeout Dimming
platform: template
id: timeout_dim
entity_category: config
min_value: 0
max_value: 300
initial_value: 30
step: 1
restore_value: true
optimistic: true
icon: mdi:timer
set_action:
- script.execute: timer_dim
- name: ${device_name} Timeout Sleep
platform: template
id: timeout_sleep
entity_category: config
min_value: 0
max_value: 300
initial_value: 60
step: 1
restore_value: true
optimistic: true
icon: mdi:timer
set_action:
- script.execute: timer_sleep
select:
- id: wakeup_page_name
@@ -1728,10 +1733,8 @@ select:
internal: false
entity_category: config
icon: mdi:page-next-outline
#set_action:
# - logger.log:
# format: "Wake-up page set: %s"
# args: ["x.c_str()"]
set_action:
- script.execute: update_page_screensaver
##### START - DISPLAY START CONFIGURATION #####
display:
@@ -1745,9 +1748,10 @@ display:
then:
- lambda: |-
ESP_LOGV("display.disp1", "Starting");
id(disp1).send_command_printf("page 8");
id(disp1).goto_page("boot");
id(disp1).set_component_text_printf("boot.esph_version", "%s", "${version}"); // ### esphome-version ###
id(disp1).show_component("bt_reboot");
id(timer_reset_all)->execute();
- wait_until:
api.connected
- lambda: |-
@@ -1759,11 +1763,11 @@ display:
{"step", "start"}
});
- delay: 1s
- if:
condition:
switch.is_off: sleep_mode
then: *sleep_mode-turn_off
else: *sleep_mode-turn_on
#- if:
# condition:
# switch.is_off: sleep_mode
# then: *sleep_mode-turn_off
# else: *sleep_mode-turn_on
- lambda: |-
// Set dimming values
id(display_brightness).publish_state(id(display_brightness_global));
@@ -1772,7 +1776,6 @@ display:
id(disp1).send_command_printf("settings.brightslider.val=%i", id(display_brightness_global));
id(disp1).send_command_printf("brightness_dim=%i", id(display_dim_brightness_global));
id(disp1).send_command_printf("settings.dimslider.val=%i", id(display_dim_brightness_global));
id(nextion_init).publish_state(true);
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
@@ -1782,25 +1785,87 @@ display:
});
id(home_relay1_icon) = "\uE3A5";
id(home_relay1_icon) = "\uE3A8";
id(timer_reset_all)->execute();
- *notification_clear
- switch.turn_off: notification_unread
- logger.log: "Nextion start - Done!"
### Script for page_timer
### Script for timer_reset_all
script:
- id: page_timer
###### Timers ######
## Global timer reset - Triggered with a touch on the screen
- id: timer_reset_all
mode: restart
then:
- logger.log:
format: Resetting timers
level: VERBOSE
- script.execute: timer_page
- script.execute: timer_dim
- script.execute: timer_sleep
- id: timer_page # Handle the fallback to home page after a timeout
mode: restart
then:
- lambda: ESP_LOGV("script.page_timer", "start page-timer delay %i", delay);
- delay: !lambda return int(id(page_timeout).state *1000);
- lambda: |-
if (id(current_page).state == "home" or id(current_page).state == "screensaver" or id(current_page).state == "boot" or int(id(page_timeout).state) == 0)
ESP_LOGD("script.page_timer", "no page-jump");
else
ESP_LOGV("script.timer_page", "Reset timer: %is", int(id(timeout_page).state));
- if:
condition:
- lambda: !lambda return (id(timeout_page).state >= 1);
then:
- delay: !lambda return int(id(timeout_page).state *1000);
- lambda: |-
ESP_LOGV("script.timer_page", "Timed out on page: %s", id(current_page).state.c_str());
if (id(current_page).state != "home" and id(current_page).state != "screensaver" and id(current_page).state != "boot" and id(timeout_page).state >= 1)
{
ESP_LOGD("script.timer_page", "Fallback to page Home");
id(disp1).goto_page("home");
}
- id: timer_dim # Handle the brightness dimming after a timeout DEBUG
mode: restart
then:
- lambda: |-
ESP_LOGV("script.timer_dim", "Reset timer: %is", int(id(timeout_dim).state));
if (id(is_dim_brightness))
{
ESP_LOGD("script.page_timer", "timer->home");
id(disp1).send_command_printf("page 0");
if (id(current_page).state != "screensaver" and id(current_page).state != "boot")
{
ESP_LOGD("script.timer_dim", "Waking up on page: %s", id(current_page).state.c_str());
id(disp1).send_command_printf("wakeup_timer.en=1");
}
id(is_dim_brightness) = false;
}
- if:
condition:
- lambda: !lambda return (id(timeout_dim).state >= 1);
then:
- delay: !lambda return int(id(timeout_dim).state *1000);
- lambda: |-
if (id(current_page).state != "screensaver" and id(current_page).state != "boot" and id(timeout_dim).state >= 1)
{
ESP_LOGD("script.timer_dim", "Dimming the display to %i%%", id(display_dim_brightness_global));
id(disp1).send_command_printf("dim=%i", id(display_dim_brightness_global));
id(is_dim_brightness) = true;
}
- id: timer_sleep # Handle the sleep (go to screensaver page) after a timeout DEBUG
mode: restart
then:
- lambda: |-
ESP_LOGV("script.timer_sleep", "Reset timer: %is", int(id(timeout_sleep).state));
if (id(current_page).state == "screensaver") id(disp1).goto_page(id(wakeup_page_name).state.c_str());
- if:
condition:
- lambda: !lambda return (id(timeout_sleep).state >= 1);
then:
- delay: !lambda return int(id(timeout_sleep).state *1000);
- lambda: |-
if (id(current_page).state != "screensaver" and id(current_page).state != "boot" and id(timeout_sleep).state >= 1)
{
ESP_LOGD("script.timer_sleep", "Going to sleep");
id(disp1).goto_page("screensaver");
id(is_dim_brightness) = true;
}
- id: set_climate
mode: restart
@@ -2047,6 +2112,7 @@ script:
ESP_LOGV("script.ha_button", "page: %s", page.c_str());
ESP_LOGV("script.ha_button", "component: %s", component.c_str());
ESP_LOGV("script.ha_button", "command: %s", command.c_str());
id(timer_reset_all)->execute();
auto ha_event = new esphome::api::CustomAPIDevice();
ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint",
{
@@ -2308,6 +2374,31 @@ script:
{"blueprint", id(version_blueprint).c_str()}
});
- id: update_page_screensaver
mode: restart
then:
- if:
condition:
text_sensor.state:
id: current_page
state: screensaver
then:
- lambda: |-
ESP_LOGV("script.update_page_screensaver", "Starting");
int wakeup_page_id = 0;
if (id(wakeup_page_name).state == "buttonpage01") wakeup_page_id = 12;
else if (id(wakeup_page_name).state == "buttonpage02") wakeup_page_id = 13;
else if (id(wakeup_page_name).state == "buttonpage03") wakeup_page_id = 14;
else if (id(wakeup_page_name).state == "buttonpage04") wakeup_page_id = 15;
else if (id(wakeup_page_name).state == "entitypage01") wakeup_page_id = 18;
else if (id(wakeup_page_name).state == "entitypage02") wakeup_page_id = 19;
else if (id(wakeup_page_name).state == "entitypage03") wakeup_page_id = 20;
else if (id(wakeup_page_name).state == "entitypage04") wakeup_page_id = 21;
else if (id(wakeup_page_name).state == "qrcode") wakeup_page_id = 17;
else if (id(wakeup_page_name).state == "alarm") wakeup_page_id = 23;
ESP_LOGV("script.update_page_screensaver", "Wake-up page id: %i", wakeup_page_id);
id(disp1).set_component_value("orign", wakeup_page_id);
##### ADD-ONS ############################################################
##### Add-on - Climate #####
- id: addon_climate_service_call