7 Commits

Author SHA1 Message Date
Edward Firmo
6e55c61032 Implements target_low and target_high substitutions
Solves #1418
2023-12-18 23:22:36 +01:00
Edward Firmo
5877af3493 Add climate dual to validations 2023-12-18 22:45:27 +01:00
Edward Firmo
346897ac94 Initial support to addon_climate_dual 2023-12-18 22:38:32 +01:00
Edward Firmo
e8e483a92a yamllint 2023-12-18 17:54:09 +01:00
Edward Firmo
9d68ecb5ab yamllint 2023-12-18 17:52:17 +01:00
Edward Firmo
a84c428ab8 yamllint 2023-12-18 17:48:45 +01:00
Edward Firmo
98d3a9189c yamllint 2023-12-18 17:42:45 +01:00
24 changed files with 192 additions and 106 deletions

View File

@@ -34,6 +34,8 @@ jobs:
run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_cool.yaml run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_cool.yaml
- name: Validate nspanel_esphome_addon_climate_heat.yaml - name: Validate nspanel_esphome_addon_climate_heat.yaml
run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_heat.yaml run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_heat.yaml
- name: Validate nspanel_esphome_addon_climate_dual.yaml
run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_dual.yaml
build_core: build_core:
name: Core name: Core
@@ -83,6 +85,18 @@ jobs:
with: with:
yaml_file: "./.test/esphome_climate_cool.yaml" yaml_file: "./.test/esphome_climate_cool.yaml"
build_climate_dual:
name: Climate (dual)
runs-on: "ubuntu-latest"
needs:
- build_core
steps:
- uses: actions/checkout@v4.1.0
- name: Build core+climate_dual
uses: esphome/build-action@v1.8.0
with:
yaml_file: "./.test/esphome_climate_dual.yaml"
build_climate_heat_advanced: build_climate_heat_advanced:
name: Advanced+climate (heat) name: Advanced+climate (heat)
runs-on: "ubuntu-latest" runs-on: "ubuntu-latest"

View File

@@ -38,6 +38,8 @@ jobs:
run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_cool.yaml run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_cool.yaml
- name: Validate nspanel_esphome_addon_climate_heat.yaml - name: Validate nspanel_esphome_addon_climate_heat.yaml
run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_heat.yaml run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_heat.yaml
- name: Validate nspanel_esphome_addon_climate_dual.yaml
run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_dual.yaml
build_core: build_core:
name: Core name: Core
@@ -91,6 +93,19 @@ jobs:
yaml_file: "./.test/esphome_climate_cool.yaml" yaml_file: "./.test/esphome_climate_cool.yaml"
version: beta version: beta
build_climate_dual:
name: Climate (dual)
runs-on: "ubuntu-latest"
needs:
- build_core
steps:
- uses: actions/checkout@v4.1.0
- name: Build core+climate_dual
uses: esphome/build-action@v1.8.0
with:
yaml_file: "./.test/esphome_climate_dual.yaml"
version: beta
build_climate_heat_advanced: build_climate_heat_advanced:
name: Advanced+climate (heat) name: Advanced+climate (heat)
runs-on: "ubuntu-latest" runs-on: "ubuntu-latest"

View File

@@ -9,3 +9,4 @@ packages:
advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
#addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml #addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
#addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml #addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml
#addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml

View File

@@ -9,6 +9,7 @@ packages:
advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
#addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml #addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml
#addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml
esp32: esp32:
framework: framework:

View File

@@ -9,6 +9,7 @@ packages:
advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
#addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml #addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml
#addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml
esp32: esp32:
framework: framework:

View File

@@ -9,3 +9,4 @@ packages:
advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
#addon_climate_cold: !include ../nspanel_esphome_addon_climate_cold.yaml #addon_climate_cold: !include ../nspanel_esphome_addon_climate_cold.yaml
#addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml

View File

@@ -10,6 +10,7 @@ packages:
advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
#addon_climate_cold: !include ../nspanel_esphome_addon_climate_cold.yaml #addon_climate_cold: !include ../nspanel_esphome_addon_climate_cold.yaml
#addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml
##### Customizations from Wiki ##### ##### Customizations from Wiki #####
api: api:

View File

@@ -9,3 +9,4 @@ packages:
#advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml #advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
#addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml #addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml
#addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml

View File

@@ -0,0 +1,12 @@
substitutions:
device_name: nspanel
wifi_ssid: "nspanel"
wifi_password: "NSPanel_HA_Blueprint"
nextion_update_url: "https://github.com/Blackymas/NSPanel_HA_Blueprint/dummy"
packages:
core_package: !include ../nspanel_esphome.yaml # Core package
#advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
#addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
#addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml
addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml

View File

@@ -9,3 +9,4 @@ packages:
#advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml #advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
#addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml #addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml
#addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml

View File

@@ -9,3 +9,4 @@ packages:
#advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml #advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
#addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml #addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
#addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml #addon_climate_cool: !include ../nspanel_esphome_addon_climate_cool.yaml
#addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml

View File

@@ -77,6 +77,7 @@ wifi:
10. Chips can be inverted 10. Chips can be inverted
11. Add swipe control to screensaver page 11. Add swipe control to screensaver page
12. Enhanced control for automation entities on buttons 12. Enhanced control for automation entities on buttons
13. Dual thermostat controller support (add-on)
   
## Details of noteworthy changes ## Details of noteworthy changes
@@ -161,6 +162,25 @@ We're pleased to announce a new feature that offers users enhanced control over
1. Apply the setting. This will then be effective across all relevant entities. 1. Apply the setting. This will then be effective across all relevant entities.
This update is specially designed to cater to diverse user needs, ensuring a more intuitive and responsive smart home experience. This update is specially designed to cater to diverse user needs, ensuring a more intuitive and responsive smart home experience.
 
### 13. Dual thermostat controller support (add-on)
This new add-on enables the NSPanel to manage both heating and cooling systems simultaneously, utilizing its dual relay functionality.
#### Key Benefits:
- **Versatility:** Users can now configure their NSPanel to control both a heater and a cooler, offering increased flexibility in home temperature management.
- **Efficiency:** With the ability to control both heating and cooling systems, the NSPanel can more effectively maintain desired temperatures, potentially leading to energy savings.
- **User Experience:** This update simplifies the user interface by integrating control of both systems into one panel, making it easier to manage home climate.
#### Implementation Details:
- The dual thermostat controller functionality allows the NSPanel to utilize both of its relays for separate heating and cooling control.<br>
Users can configure their heating and cooling settings independently, providing a tailored climate control experience.
- The update is designed to be intuitive and user-friendly, ensuring a seamless transition for existing NSPanel users.
- Additional Documentation: For detailed instructions and configurations, refer to the updated [add-on climate documentation](docs/addon_climate.md).
#### Note to Users:
This feature enhances the capabilities of the NSPanel without compromising its existing functionalities. Users who previously used the NSPanel for single-mode (either heating or cooling) control can now explore dual-mode options for a more comprehensive climate control solution.
&nbsp; &nbsp;
## What's Next? ## What's Next?
Discover what's next and what we are working on right now in our [Milestones](https://github.com/Blackymas/NSPanel_HA_Blueprint/milestones?direction=asc&sort=due_date) Discover what's next and what we are working on right now in our [Milestones](https://github.com/Blackymas/NSPanel_HA_Blueprint/milestones?direction=asc&sort=due_date)

View File

@@ -6,7 +6,7 @@
##################################################################################################### #####################################################################################################
##### ATTENTION: This will add climate elements to the core system and requires the core part. ##### ##### ATTENTION: This will add climate elements to the core system and requires the core part. #####
##################################################################################################### #####################################################################################################
---
substitutions: substitutions:
### Local thermostat defaults ### ### Local thermostat defaults ###
# https://esphome.io/components/climate/thermostat.html # https://esphome.io/components/climate/thermostat.html
@@ -19,10 +19,13 @@ substitutions:
temp_min: "5" temp_min: "5"
temp_max: "45" temp_max: "45"
temp_step: "0.5" temp_step: "0.5"
target_low: "18"
target_high: "24"
##### DO NOT CHANGE THIS ##### ##### DO NOT CHANGE THIS #####
addon_climate_cool: "false" addon_climate_cool: "false"
addon_climate_heat: "false" addon_climate_heat: "false"
addon_climate_dual: "false"
############################## ##############################
climate: climate:
@@ -34,9 +37,8 @@ climate:
visual: visual:
min_temperature: ${temp_min} ${temp_units} min_temperature: ${temp_min} ${temp_units}
max_temperature: ${temp_max} ${temp_units} max_temperature: ${temp_max} ${temp_units}
#temperature_step: ${temp_step} ${temp_units}
temperature_step: temperature_step:
target_temperature: 0.5 #This is hard coded for now as ESPHome isn't supporting a substitution here. In contact with support. target_temperature: 0.5 # This is hard coded for now as ESPHome isn't supporting a substitution here. In contact with support.
current_temperature: 0.1 current_temperature: 0.1
idle_action: idle_action:
- switch.turn_off: relay_${heater_relay} - switch.turn_off: relay_${heater_relay}

View File

@@ -6,9 +6,8 @@
##################################################################################################### #####################################################################################################
##### ATTENTION: This will add advanced elements to the core system and requires the core part. ##### ##### ATTENTION: This will add advanced elements to the core system and requires the core part. #####
##################################################################################################### #####################################################################################################
---
substitutions: substitutions:
################## Defaults ################## ################## Defaults ##################
# Just in case user forgets to set something # # Just in case user forgets to set something #
nextion_update_url: "http://github.com/Blackymas/NSPanel_HA_Blueprint/raw/main/custom_configuration/nspanel_eu.tft" nextion_update_url: "http://github.com/Blackymas/NSPanel_HA_Blueprint/raw/main/custom_configuration/nspanel_eu.tft"
@@ -64,7 +63,7 @@ display:
exit_reparse_on_start: true exit_reparse_on_start: true
script: script:
- id: upload_tft_nextion #NOT IN USE FOR NOW - id: upload_tft_nextion # NOT IN USE FOR NOW
mode: single mode: single
parameters: parameters:
url: string url: string

View File

@@ -6,7 +6,7 @@
##################################################################################################### #####################################################################################################
##### ATTENTION: This will add advanced elements to the core system and requires the core part. ##### ##### ATTENTION: This will add advanced elements to the core system and requires the core part. #####
##################################################################################################### #####################################################################################################
---
button: button:
##### EXIT REPARSE TFT DISPLAY ##### ##### EXIT REPARSE TFT DISPLAY #####
- name: ${device_name} Exit reparse - name: ${device_name} Exit reparse

View File

@@ -4,7 +4,7 @@
##### PLEASE only make changes if it is necessary and also the required knowledge is available. ##### ##### PLEASE only make changes if it is necessary and also the required knowledge is available. #####
##### For normal use with the Blueprint, no changes are necessary. ##### ##### For normal use with the Blueprint, no changes are necessary. #####
##################################################################################################### #####################################################################################################
---
substitutions: substitutions:
##### DON'T CHANGE THIS ##### ##### DON'T CHANGE THIS #####
version: "4.2dev" version: "4.2dev"
@@ -171,14 +171,14 @@ api:
disp1->set_component_value(component.c_str(), val); disp1->set_component_value(component.c_str(), val);
##### Service to send a command "hide componente" directly to the display ##### ##### Service to send a command "hide componente" directly to the display #####
- service: send_command_hide ### unused ### - service: send_command_hide
variables: variables:
component: string component: string
then: then:
- lambda: 'disp1->hide_component(component.c_str());' - lambda: 'disp1->hide_component(component.c_str());'
##### Service to send a command "show componente" directly to the display ##### ##### Service to send a command "show componente" directly to the display #####
- service: send_command_show ### unused ### - service: send_command_show
variables: variables:
component: string component: string
then: then:
@@ -210,7 +210,7 @@ api:
code_format: string code_format: string
code_arm_required: bool code_arm_required: bool
entity: string entity: string
mui_alarm: string[] #std::vector<std::string> #std::map mui_alarm: string[]
then: then:
- lambda: |- - lambda: |-
// Is page Alarm visible? // Is page Alarm visible?
@@ -225,7 +225,8 @@ api:
} }
disp1->set_component_text_printf("page_label", "%s", page_title.c_str()); disp1->set_component_text_printf("page_label", "%s", page_title.c_str());
disp1->set_component_text_printf("code_format", "%s", code_format.c_str()); disp1->set_component_text_printf("code_format", "%s", code_format.c_str());
if (code_arm_required) disp1->set_component_text_printf("code_arm_req", "1"); else disp1->set_component_text_printf("code_arm_req", "0"); if (code_arm_required) disp1->set_component_text_printf("code_arm_req", "1");
else disp1->set_component_text_printf("code_arm_req", "0");
// Alarm page - Button's text // Alarm page - Button's text
display_wrapped_text->execute("bt_home_text", mui_alarm[0].c_str(), 10); display_wrapped_text->execute("bt_home_text", mui_alarm[0].c_str(), 10);
@@ -619,7 +620,6 @@ api:
- service: page_settings - service: page_settings
variables: variables:
reboot: string reboot: string
#sleep_mode: string
brightness: string brightness: string
bright: string bright: string
dim: string dim: string
@@ -855,10 +855,6 @@ globals:
initial_value: 'false' initial_value: 'false'
##### Date/time formats ##### ##### Date/time formats #####
#- id: mui_date_format
# type: std::string
# restore_value: no
# initial_value: '"%A, %d.%m"'
- id: home_date_color - id: home_date_color
type: uint type: uint
restore_value: true restore_value: true
@@ -866,7 +862,7 @@ globals:
- id: mui_time_format - id: mui_time_format
type: std::string type: std::string
restore_value: no restore_value: false
initial_value: '"%H:%M"' initial_value: '"%H:%M"'
- id: home_time_color - id: home_time_color
type: uint type: uint
@@ -917,7 +913,7 @@ globals:
- id: page_names - id: page_names
type: std::vector<std::string> type: std::vector<std::string>
restore_value: no restore_value: false
initial_value: initial_value:
'{ '{
"home", "home",
@@ -1040,7 +1036,7 @@ binary_sensor:
component: "hw_bt_right" component: "hw_bt_right"
command: "short_click" command: "short_click"
- timing: *hold_to_restart-timing - timing: *hold_to_restart-timing
then: #Restart the panel then: # Restart the panel
- button.press: restart_nspanel - button.press: restart_nspanel
##### Restart NSPanel Button - Setting Page ##### ##### Restart NSPanel Button - Setting Page #####
@@ -1413,24 +1409,9 @@ text_sensor:
- name: ${device_name} Current page - name: ${device_name} Current page
id: current_page id: current_page
platform: template platform: template
#platform: nextion
#nextion_id: disp1
#component_name: currentpage
icon: mdi:tablet-dashboard icon: mdi:tablet-dashboard
internal: false internal: false
disabled_by_default: false disabled_by_default: false
#filters:
# - lambda: |-
# x = x.c_str();
# x.shrink_to_fit();
# return x;
#on_value:
# then:
# - lambda: |-
# static const char *const TAG = "text_sensor.current_page";
# // Construct new page
# ESP_LOGV(TAG, "Construct new page");
# page_changed->execute(x.c_str());
- name: ${device_name} Notification Label - name: ${device_name} Notification Label
platform: template platform: template
@@ -1632,7 +1613,7 @@ script:
timer_dim->execute(page.c_str(), int(timeout_dim->state)); timer_dim->execute(page.c_str(), int(timeout_dim->state));
timer_sleep->execute(page.c_str(), int(timeout_sleep->state)); timer_sleep->execute(page.c_str(), int(timeout_sleep->state));
- id: timer_page # Handle the fallback to home page after a timeout - id: timer_page # Handles the fallback to home page after a timeout
mode: restart mode: restart
parameters: parameters:
page: string page: string
@@ -1663,7 +1644,7 @@ script:
ESP_LOGD("script.timer_page", "Fallback to page Home"); ESP_LOGD("script.timer_page", "Fallback to page Home");
disp1->goto_page("home"); disp1->goto_page("home");
} }
- id: timer_dim # Handle the brightness dimming after a timeout - id: timer_dim # Handles the brightness dimming after a timeout
mode: restart mode: restart
parameters: parameters:
page: string page: string
@@ -1690,7 +1671,7 @@ script:
timeout >= 1) { timeout >= 1) {
set_brightness->execute(id(display_dim_brightness_global)); set_brightness->execute(id(display_dim_brightness_global));
} }
- id: timer_sleep # Handle the sleep (go to screensaver page) after a timeout - id: timer_sleep # Handles the sleep (go to screensaver page) after a timeout
mode: restart mode: restart
parameters: parameters:
page: string page: string
@@ -1794,20 +1775,34 @@ script:
disp1->set_component_text_printf("home.meridiem", "%s", meridiem_text.c_str()); disp1->set_component_text_printf("home.meridiem", "%s", meridiem_text.c_str());
} }
else { disp1->set_component_text_printf("home.meridiem", " "); } else { disp1->set_component_text_printf("home.meridiem", " "); }
if (time_format_str.find("%-H") != std::string::npos) { time_format_str = time_format_str.replace(time_format_str.find("%-H"), sizeof("%-H")-1, to_string((int)(id(time_provider).now().hour))); } if (time_format_str.find("%-H") != std::string::npos) {
time_format_str = time_format_str.replace(time_format_str.find("%-H"),
sizeof("%-H")-1,
to_string((int)(id(time_provider).now().hour))
);
}
if (time_format_str.find("%-I") != std::string::npos) if (time_format_str.find("%-I") != std::string::npos)
{ {
if (id(time_provider).now().hour>12) if (id(time_provider).now().hour>12)
{ {
time_format_str = time_format_str.replace(time_format_str.find("%-I"), sizeof("%-I")-1, to_string((int)(id(time_provider).now().hour-12))); time_format_str = time_format_str.replace(time_format_str.find("%-I"),
sizeof("%-I")-1,
to_string((int)(id(time_provider).now().hour-12))
);
} }
else if (id(time_provider).now().hour==0) else if (id(time_provider).now().hour==0)
{ {
time_format_str = time_format_str.replace(time_format_str.find("%-I"), sizeof("%-I")-1, "12"); time_format_str = time_format_str.replace(time_format_str.find("%-I"),
sizeof("%-I")-1,
"12"
);
} }
else else
{ {
time_format_str = time_format_str.replace(time_format_str.find("%-I"), sizeof("%-I")-1, to_string((int)(id(time_provider).now().hour))); time_format_str = time_format_str.replace(time_format_str.find("%-I"),
sizeof("%-I")-1,
to_string((int)(id(time_provider).now().hour))
);
} }
} }
std::string time_text = id(time_provider).now().strftime(time_format_str); std::string time_text = id(time_provider).now().strftime(time_format_str);
@@ -1954,7 +1949,7 @@ script:
{"command", command} {"command", command}
}); });
- id: update_alarm_icon #To do: Move to blueprint - id: update_alarm_icon # To do: Move to blueprint
mode: restart mode: restart
parameters: parameters:
component: string component: string
@@ -2085,7 +2080,11 @@ script:
- lambda: |- - lambda: |-
int fg565 = -1; int fg565 = -1;
// Foreground // Foreground
if (foreground.size() == 3 and foreground[0] >= 0 and foreground[1] >= 0 and foreground[2] >= 0) fg565 = ((foreground[0] & 0b11111000) << 8) | ((foreground[1] & 0b11111100) << 3) | (foreground[2] >> 3); if (foreground.size() == 3 and
foreground[0] >= 0 and
foreground[1] >= 0 and
foreground[2] >= 0)
fg565 = ((foreground[0] & 0b11111000) << 8) | ((foreground[1] & 0b11111100) << 3) | (foreground[2] >> 3);
else if (foreground.size() == 1) fg565 = foreground[0]; else if (foreground.size() == 1) fg565 = foreground[0];
else fg565 = -1; else fg565 = -1;
if (fg565 >= 0) disp1->set_component_font_color(component.c_str(), fg565); if (fg565 >= 0) disp1->set_component_font_color(component.c_str(), fg565);
@@ -2158,8 +2157,6 @@ script:
return (major1 == major2) && (minor1 == minor2); return (major1 == major2) && (minor1 == minor2);
}; };
return (compareVersions("${version}", id(version_tft).c_str()) and compareVersions("${version}", id(version_blueprint).c_str())); return (compareVersions("${version}", id(version_tft).c_str()) and compareVersions("${version}", id(version_blueprint).c_str()));
#- lambda: !lambda 'return (id(version_tft) == "${version}");'
#- lambda: !lambda 'return (id(version_blueprint) == "${version}");'
timeout: 60s timeout: 60s
- lambda: |- - lambda: |-
static const char *const TAG = "script.check_versions"; static const char *const TAG = "script.check_versions";
@@ -2279,8 +2276,7 @@ script:
- id: page_alarm - id: page_alarm
mode: restart mode: restart
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_blank - id: page_blank
mode: restart mode: restart
@@ -2321,8 +2317,7 @@ script:
mode: restart mode: restart
parameters: parameters:
page_number: uint page_number: uint
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_buttonpage01 - id: page_buttonpage01
mode: restart mode: restart
then: then:
@@ -2350,25 +2345,21 @@ script:
- id: page_climate - id: page_climate
mode: restart mode: restart
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_confirm - id: page_confirm
mode: restart mode: restart
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_cover - id: page_cover
mode: restart mode: restart
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_entitypage - id: page_entitypage
mode: restart mode: restart
parameters: parameters:
page_number: uint page_number: uint
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_entitypage01 - id: page_entitypage01
mode: restart mode: restart
then: then:
@@ -2396,8 +2387,7 @@ script:
- id: page_fan - id: page_fan
mode: restart mode: restart
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_home - id: page_home
mode: restart mode: restart
@@ -2416,18 +2406,15 @@ script:
- id: page_keyb_num - id: page_keyb_num
mode: restart mode: restart
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_light - id: page_light
mode: restart mode: restart
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_media_player - id: page_media_player
mode: restart mode: restart
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_notification - id: page_notification
mode: restart mode: restart
@@ -2440,8 +2427,7 @@ script:
- id: page_qrcode - id: page_qrcode
mode: restart mode: restart
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_screensaver - id: page_screensaver
mode: restart mode: restart
@@ -2477,8 +2463,7 @@ script:
mode: restart mode: restart
parameters: parameters:
page_number: uint page_number: uint
then: then: # There's nothing here so far
# There's nothing here so far
- id: page_weather01 - id: page_weather01
mode: restart mode: restart
then: then:
@@ -2656,8 +2641,6 @@ script:
- id: stop_all - id: stop_all
mode: restart mode: restart
#parameters:
# exceptions: string[] # to be implemented
then: then:
- lambda: |- - lambda: |-
static const char *const TAG = "script.stop_all"; static const char *const TAG = "script.stop_all";

View File

@@ -9,12 +9,11 @@ This add-on enables the use of your panel's relays to act as a thermostat (eithe
- 300W/220V/Gang, 600W/220V/Total<br> - 300W/220V/Gang, 600W/220V/Total<br>
- More details on the [Sonoff NSPanel's page](https://sonoff.tech/product/central-control-panel/nspanel/) and the [product specifications document](https://sonoff.tech/wp-content/uploads/2021/11/%E4%BA%A7%E5%93%81%E5%8F%82%E6%95%B0%E8%A1%A8-NSPanel-20210831.pdf). - More details on the [Sonoff NSPanel's page](https://sonoff.tech/product/central-control-panel/nspanel/) and the [product specifications document](https://sonoff.tech/wp-content/uploads/2021/11/%E4%BA%A7%E5%93%81%E5%8F%82%E6%95%B0%E8%A1%A8-NSPanel-20210831.pdf).
2. At this moment you have to choose between `heat` or `cool`. The dual/simultaneous operation is not supported at this moment. 2. A target temperature must be set on the climate entity in Home Assistant or the page Climate in your panel.
3. A target temperature must be set on the climate entity in Home Assistant or the page Climate in your panel.
&nbsp; &nbsp;
## Installation ## Installation
You will need to add the reference to `addon_climate_heat` or `addon_climate_cool` files on your ESPHome settings in the `package` section and after te `remote_package` (base code), as shown bellow (for `heat` in this example): You will need to add the reference to `addon_climate_heat`, `addon_climate_cool` or `addon_climate_dual` files on your ESPHome settings in the `package` section and after the `remote_package` (base code), as shown bellow (for `heat` in this example):
```yaml ```yaml
substitutions: substitutions:
@@ -41,6 +40,7 @@ packages:
- nspanel_esphome.yaml # Core package - nspanel_esphome.yaml # Core package
# - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control # - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control
- nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control
# - nspanel_esphome_addon_climate_dual.yaml # activate for local climate (dual) control
refresh: 300s refresh: 300s
esp32: esp32:
@@ -55,14 +55,16 @@ The following keys are available to be used in your `substitutions`:
Key|Required|Supported values|Default|Description Key|Required|Supported values|Default|Description
:-|:-:|:-:|:-:|:- :-|:-:|:-:|:-:|:-
cooler_relay|Mandatory for `cool`|`1` or `2`|`0` (disabled)|Relay used for control the cooler. User `1` for "Relay 1" or `2` for "Relay 2". cooler_relay|Mandatory for *cool* and *dual*|`1` or `2`|`0` (disabled)|Relay used for control the cooler. User `1` for "Relay 1" or `2` for "Relay 2".
heater_relay|Mandatory for `heat`|`1` or `2`|`0` (disabled)|Relay used for control the heater. User `1` for "Relay 1" or `2` for "Relay 2". heater_relay|Mandatory for *heat* and *dual*|`1` or `2`|`0` (disabled)|Relay used for control the heater. User `1` for "Relay 1" or `2` for "Relay 2".
temp_units|Optional|`°C` or `°F`|`°C`|Temperature unit. temp_units|Optional|`°C` or `°F`|`°C`|Temperature unit.
min_off_time|Optional|Positive integer representing the number of seconds|`300`|Minimum duration (in seconds) the cooling/heating action must be disengaged before it may be engaged. min_off_time|Optional|Positive integer representing the number of seconds|`300`|Minimum duration (in seconds) the cooling/heating action must be disengaged before it may be engaged.
min_run_time|Optional|Positive integer representing the number of seconds|`300`|Minimum duration (in seconds) the cooling/heating action must be engaged before it may be disengaged. min_run_time|Optional|Positive integer representing the number of seconds|`300`|Minimum duration (in seconds) the cooling/heating action must be engaged before it may be disengaged.
min_idle_time|Optional|Positive integer representing the number of seconds|`30`|Minimum duration (in seconds) the idle action must be active before calling another climate action. min_idle_time|Optional|Positive integer representing the number of seconds|`30`|Minimum duration (in seconds) the idle action must be active before calling another climate action.
temp_min|Optional|Number representing a temperature in the selected unit|`15` for `cool`, `5` for `heat`|The minimum temperature the climate device can reach. Used to set the range of the frontend gauge. target_low|Optional|Number representing a temperature in the selected unit|`18`|The initial lower treshold for the target temperature.
temp_max|Optional|Number representing a temperature in the selected unit|`45` for `cool`, `25` for `heat`|The maximum temperature the climate device can reach. Used to set the range of the frontend gauge. target_high|Optional|Number representing a temperature in the selected unit|`24`|The initial higher treshold for the target temperature.
temp_min|Optional|Number representing a temperature in the selected unit|*cool: `15`*<br>*heat: `5`*<br>*dual: `5`* |The minimum temperature the climate device can reach. Used to set the range of the frontend gauge.
temp_max|Optional|Number representing a temperature in the selected unit|*cool: `45`*<br>*heat: `25`*<br>*dual: `45`* |The maximum temperature the climate device can reach. Used to set the range of the frontend gauge.
temp_step|Optional|Number representing a temperature in the selected unit|`0.5`|The granularity with which the target temperature can be controlled. temp_step|Optional|Number representing a temperature in the selected unit|`0.5`|The granularity with which the target temperature can be controlled.
- All values must be delimited with `""` - All values must be delimited with `""`
@@ -101,6 +103,7 @@ packages:
- nspanel_esphome.yaml # Core package - nspanel_esphome.yaml # Core package
- nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control
# - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control # - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control
# - nspanel_esphome_addon_climate_dual.yaml # activate for local climate (dual) control
refresh: 300s refresh: 300s
esp32: esp32:

View File

@@ -73,6 +73,7 @@ packages:
- nspanel_esphome.yaml # Core package - nspanel_esphome.yaml # Core package
# - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control # - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control
# - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control # - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control
# - nspanel_esphome_addon_climate_dual.yaml # activate for local climate (dual) control
refresh: 300s refresh: 300s
esp32: esp32:

View File

@@ -84,7 +84,8 @@ packages:
# - advanced/esphome/nspanel_esphome_advanced.yaml # activate advanced (legacy) elements - can be useful for troubleshooting # - advanced/esphome/nspanel_esphome_advanced.yaml # activate advanced (legacy) elements - can be useful for troubleshooting
# - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control # - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control
# - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control # - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control
refresh: 1s # - nspanel_esphome_addon_climate_dual.yaml # activate for local climate (dual) control
refresh: 300s
esp32: esp32:
framework: framework:
@@ -164,5 +165,3 @@ esp32:
* Blueprint file _**"nspanel_blueprint.yaml "**_ can also be installed manually. * Blueprint file _**"nspanel_blueprint.yaml "**_ can also be installed manually.
* There is also the possibility to upload the TFT file _**"nspanel_us.tft "**_ manually. The whole thing can also be combined with a _**"Folder Watcher "**_. * There is also the possibility to upload the TFT file _**"nspanel_us.tft "**_ manually. The whole thing can also be combined with a _**"Folder Watcher "**_.
* additionally we provide the HMI files _**"nspanel_xx.HMI "**_ for the Nextion Editor to customize graphics and programming if needed. * additionally we provide the HMI files _**"nspanel_xx.HMI "**_ for the Nextion Editor to customize graphics and programming if needed.
&nbsp;

View File

@@ -39,6 +39,7 @@ packages:
- nspanel_esphome.yaml # Core package - nspanel_esphome.yaml # Core package
# - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control # - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control
# - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control # - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control
# - nspanel_esphome_addon_climate_dual.yaml # activate for local climate (dual) control
refresh: 300s refresh: 300s
esp32: esp32:

View File

@@ -1,3 +1,4 @@
---
packages: packages:
core_package: !include advanced/esphome/nspanel_esphome_core.yaml core_package: !include advanced/esphome/nspanel_esphome_core.yaml
upload_tft_package: !include advanced/esphome/nspanel_esphome_addon_upload_tft.yaml upload_tft_package: !include advanced/esphome/nspanel_esphome_addon_upload_tft.yaml

View File

@@ -6,18 +6,13 @@
##################################################################################################### #####################################################################################################
##### ATTENTION: This will add climate elements to the core system and requires the core part. ##### ##### ATTENTION: This will add climate elements to the core system and requires the core part. #####
##################################################################################################### #####################################################################################################
---
substitutions: substitutions:
### Local thermostat defaults ### ### Local thermostat defaults ###
# https://esphome.io/components/climate/thermostat.html
cooler_relay: "0" # Select 1 for "Relay 1", 2 for "Relay 2" or "0" to a dummy switch/disabled
# https://esphome.io/components/climate/index.html#base-climate-configuration
temp_min: "15" temp_min: "15"
temp_max: "45"
##### DO NOT CHANGE THIS ##### ##### DO NOT CHANGE THIS #####
addon_climate_cool: "true" addon_climate_cool: "true"
addon_climate_heat: "false"
############################## ##############################
climate: climate:
@@ -28,10 +23,11 @@ climate:
- switch.turn_on: relay_${cooler_relay} - switch.turn_on: relay_${cooler_relay}
preset: preset:
- name: "Off" - name: "Off"
default_target_temperature_high: ${temp_min} ${temp_units} default_target_temperature_high: ${target_high} ${temp_units}
mode: "off" mode: "off"
- name: Home - name: Home
default_target_temperature_high: 21 ${temp_units} default_target_temperature_high: ${target_high} ${temp_units}
mode: "cool"
packages: packages:
climate_base_package: !include advanced/esphome/nspanel_esphome_addon_climate_base.yaml climate_base_package: !include advanced/esphome/nspanel_esphome_addon_climate_base.yaml

View File

@@ -0,0 +1,36 @@
#####################################################################################################
##### NSPANEL ESPHOME created by Blackymas - https://github.com/Blackymas/NSPanel_HA_Blueprint #####
##### ESPHome Add-on for Climate control - Dual #####
##### PLEASE only make changes if it is necessary and also the required knowledge is available. #####
##### For normal use with the Blueprint, no changes are necessary. #####
#####################################################################################################
##### ATTENTION: This will add climate elements to the core system and requires the core part. #####
#####################################################################################################
---
substitutions:
##### DO NOT CHANGE THIS #####
addon_climate_dual: "true"
##############################
climate:
- id: !extend thermostat_embedded
min_cooling_off_time: ${min_off_time}s
min_heating_off_time: ${min_off_time}s
min_cooling_run_time: ${min_run_time}s
min_heating_run_time: ${min_run_time}s
cool_action:
- switch.turn_on: relay_${cooler_relay}
heat_action:
- switch.turn_on: relay_${heater_relay}
preset:
- name: "Off"
default_target_temperature_high: ${target_high} ${temp_units}
default_target_temperature_low: ${target_low} ${temp_units}
mode: "off"
- name: Home
default_target_temperature_high: ${target_high} ${temp_units}
default_target_temperature_low: ${target_low} ${temp_units}
mode: "auto"
packages:
climate_base_package: !include advanced/esphome/nspanel_esphome_addon_climate_base.yaml

View File

@@ -6,17 +6,12 @@
##################################################################################################### #####################################################################################################
##### ATTENTION: This will add climate elements to the core system and requires the core part. ##### ##### ATTENTION: This will add climate elements to the core system and requires the core part. #####
##################################################################################################### #####################################################################################################
---
substitutions: substitutions:
### Local thermostat defaults ### ### Local thermostat defaults ###
# https://esphome.io/components/climate/thermostat.html
heater_relay: "0" # Select 1 for "Relay 1", 2 for "Relay 2" or "0" to a dummy switch/disabled
# https://esphome.io/components/climate/index.html#base-climate-configuration
temp_min: "5"
temp_max: "25" temp_max: "25"
##### DO NOT CHANGE THIS ##### ##### DO NOT CHANGE THIS #####
addon_climate_cool: "false"
addon_climate_heat: "true" addon_climate_heat: "true"
############################## ##############################
@@ -28,10 +23,11 @@ climate:
- switch.turn_on: relay_${heater_relay} - switch.turn_on: relay_${heater_relay}
preset: preset:
- name: "Off" - name: "Off"
default_target_temperature_low: ${temp_min} ${temp_units} default_target_temperature_low: ${target_low} ${temp_units}
mode: "off" mode: "off"
- name: Home - name: Home
default_target_temperature_low: 21 ${temp_units} default_target_temperature_low: ${target_low} ${temp_units}
mode: "heat"
packages: packages:
climate_base_package: !include advanced/esphome/nspanel_esphome_addon_climate_base.yaml climate_base_package: !include advanced/esphome/nspanel_esphome_addon_climate_base.yaml