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
- name: Validate 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:
name: Core
@@ -83,6 +85,18 @@ jobs:
with:
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:
name: Advanced+climate (heat)
runs-on: "ubuntu-latest"

View File

@@ -38,6 +38,8 @@ jobs:
run: yamllint -c "./.yamllint/rules.yml" nspanel_esphome_addon_climate_cool.yaml
- name: Validate 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:
name: Core
@@ -91,6 +93,19 @@ jobs:
yaml_file: "./.test/esphome_climate_cool.yaml"
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:
name: Advanced+climate (heat)
runs-on: "ubuntu-latest"

View File

@@ -9,3 +9,4 @@ packages:
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,6 +9,7 @@ packages:
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
esp32:
framework:

View File

@@ -9,6 +9,7 @@ packages:
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
esp32:
framework:

View File

@@ -9,3 +9,4 @@ packages:
advanced_package: !include ../advanced/esphome/nspanel_esphome_advanced.yaml
addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.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
addon_climate_heat: !include ../nspanel_esphome_addon_climate_heat.yaml
#addon_climate_cold: !include ../nspanel_esphome_addon_climate_cold.yaml
#addon_climate_dual: !include ../nspanel_esphome_addon_climate_dual.yaml
##### Customizations from Wiki #####
api:

View File

@@ -9,3 +9,4 @@ packages:
#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

@@ -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
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
#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

@@ -77,6 +77,7 @@ wifi:
10. Chips can be inverted
11. Add swipe control to screensaver page
12. Enhanced control for automation entities on buttons
13. Dual thermostat controller support (add-on)
 
## 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.
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;
## 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)

View File

@@ -6,12 +6,12 @@
#####################################################################################################
##### ATTENTION: This will add climate elements to the core system and requires the core part. #####
#####################################################################################################
---
substitutions:
### 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
cooler_relay: "0" # Select 1 for "Relay 1", 2 for "Relay 2" or "0" to a dummy switch/disabled
heater_relay: "0" # Select 1 for "Relay 1", 2 for "Relay 2" or "0" to a dummy switch/disabled
cooler_relay: "0" # Select 1 for "Relay 1", 2 for "Relay 2" or "0" to a dummy switch/disabled
min_off_time: "300"
min_run_time: "300"
min_idle_time: "30"
@@ -19,10 +19,13 @@ substitutions:
temp_min: "5"
temp_max: "45"
temp_step: "0.5"
target_low: "18"
target_high: "24"
##### DO NOT CHANGE THIS #####
addon_climate_cool: "false"
addon_climate_heat: "false"
addon_climate_dual: "false"
##############################
climate:
@@ -34,9 +37,8 @@ climate:
visual:
min_temperature: ${temp_min} ${temp_units}
max_temperature: ${temp_max} ${temp_units}
#temperature_step: ${temp_step} ${temp_units}
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
idle_action:
- 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. #####
#####################################################################################################
---
substitutions:
################## Defaults ##################
# 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"
@@ -64,7 +63,7 @@ display:
exit_reparse_on_start: true
script:
- id: upload_tft_nextion #NOT IN USE FOR NOW
- id: upload_tft_nextion # NOT IN USE FOR NOW
mode: single
parameters:
url: string

View File

@@ -6,7 +6,7 @@
#####################################################################################################
##### ATTENTION: This will add advanced elements to the core system and requires the core part. #####
#####################################################################################################
---
button:
##### EXIT REPARSE TFT DISPLAY #####
- 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. #####
##### For normal use with the Blueprint, no changes are necessary. #####
#####################################################################################################
---
substitutions:
##### DON'T CHANGE THIS #####
version: "4.2dev"
@@ -171,14 +171,14 @@ api:
disp1->set_component_value(component.c_str(), val);
##### Service to send a command "hide componente" directly to the display #####
- service: send_command_hide ### unused ###
- service: send_command_hide
variables:
component: string
then:
- lambda: 'disp1->hide_component(component.c_str());'
##### Service to send a command "show componente" directly to the display #####
- service: send_command_show ### unused ###
- service: send_command_show
variables:
component: string
then:
@@ -210,11 +210,11 @@ api:
code_format: string
code_arm_required: bool
entity: string
mui_alarm: string[] #std::vector<std::string> #std::map
mui_alarm: string[]
then:
- lambda: |-
// Is page Alarm visible?
if (current_page->state == "alarm") // To do: This page constructor should be moved to Blueprint
if (current_page->state == "alarm") // To do: This page constructor should be moved to Blueprint
{ // Update alarm page
detailed_entity->publish_state(entity);
@@ -225,7 +225,8 @@ api:
}
disp1->set_component_text_printf("page_label", "%s", page_title.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
display_wrapped_text->execute("bt_home_text", mui_alarm[0].c_str(), 10);
@@ -355,7 +356,7 @@ api:
- if:
condition:
- text_sensor.state: # Is boot page visible?
- text_sensor.state: # Is boot page visible?
id: current_page
state: boot
then:
@@ -365,13 +366,13 @@ api:
- wait_until:
condition:
- not:
- text_sensor.state: # Is boot page visible?
- text_sensor.state: # Is boot page visible?
id: current_page
state: 'boot'
timeout: 2s
- if:
condition:
- text_sensor.state: # Avoid this being called twice by multiple boot triggers
- text_sensor.state: # Avoid this being called twice by multiple boot triggers
id: current_page
state: 'boot'
then:
@@ -484,7 +485,7 @@ api:
climate_icon: !lambda "return climate_icon;"
embedded_climate: !lambda "return embedded_climate;"
#### Service to set the buttons ####
#### Service to set the buttons ####
- service: set_button
variables:
page: string
@@ -619,7 +620,6 @@ api:
- service: page_settings
variables:
reboot: string
#sleep_mode: string
brightness: string
bright: string
dim: string
@@ -855,10 +855,6 @@ globals:
initial_value: 'false'
##### Date/time formats #####
#- id: mui_date_format
# type: std::string
# restore_value: no
# initial_value: '"%A, %d.%m"'
- id: home_date_color
type: uint
restore_value: true
@@ -866,7 +862,7 @@ globals:
- id: mui_time_format
type: std::string
restore_value: no
restore_value: false
initial_value: '"%H:%M"'
- id: home_time_color
type: uint
@@ -917,7 +913,7 @@ globals:
- id: page_names
type: std::vector<std::string>
restore_value: no
restore_value: false
initial_value:
'{
"home",
@@ -1040,7 +1036,7 @@ binary_sensor:
component: "hw_bt_right"
command: "short_click"
- timing: *hold_to_restart-timing
then: #Restart the panel
then: # Restart the panel
- button.press: restart_nspanel
##### Restart NSPanel Button - Setting Page #####
@@ -1413,24 +1409,9 @@ text_sensor:
- name: ${device_name} Current page
id: current_page
platform: template
#platform: nextion
#nextion_id: disp1
#component_name: currentpage
icon: mdi:tablet-dashboard
internal: 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
platform: template
@@ -1632,7 +1613,7 @@ script:
timer_dim->execute(page.c_str(), int(timeout_dim->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
parameters:
page: string
@@ -1663,7 +1644,7 @@ script:
ESP_LOGD("script.timer_page", "Fallback to 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
parameters:
page: string
@@ -1690,7 +1671,7 @@ script:
timeout >= 1) {
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
parameters:
page: string
@@ -1794,20 +1775,34 @@ script:
disp1->set_component_text_printf("home.meridiem", "%s", meridiem_text.c_str());
}
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 (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)
{
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
{
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);
@@ -1954,7 +1949,7 @@ script:
{"command", command}
});
- id: update_alarm_icon #To do: Move to blueprint
- id: update_alarm_icon # To do: Move to blueprint
mode: restart
parameters:
component: string
@@ -2085,7 +2080,11 @@ script:
- lambda: |-
int fg565 = -1;
// 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 fg565 = -1;
if (fg565 >= 0) disp1->set_component_font_color(component.c_str(), fg565);
@@ -2158,8 +2157,6 @@ script:
return (major1 == major2) && (minor1 == minor2);
};
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
- lambda: |-
static const char *const TAG = "script.check_versions";
@@ -2279,8 +2276,7 @@ script:
- id: page_alarm
mode: restart
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_blank
mode: restart
@@ -2321,8 +2317,7 @@ script:
mode: restart
parameters:
page_number: uint
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_buttonpage01
mode: restart
then:
@@ -2350,25 +2345,21 @@ script:
- id: page_climate
mode: restart
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_confirm
mode: restart
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_cover
mode: restart
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_entitypage
mode: restart
parameters:
page_number: uint
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_entitypage01
mode: restart
then:
@@ -2396,8 +2387,7 @@ script:
- id: page_fan
mode: restart
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_home
mode: restart
@@ -2416,18 +2406,15 @@ script:
- id: page_keyb_num
mode: restart
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_light
mode: restart
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_media_player
mode: restart
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_notification
mode: restart
@@ -2440,8 +2427,7 @@ script:
- id: page_qrcode
mode: restart
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_screensaver
mode: restart
@@ -2477,8 +2463,7 @@ script:
mode: restart
parameters:
page_number: uint
then:
# There's nothing here so far
then: # There's nothing here so far
- id: page_weather01
mode: restart
then:
@@ -2589,7 +2574,7 @@ script:
- wait_until:
condition:
- not:
- text_sensor.state: # Is boot page visible?
- text_sensor.state: # Is boot page visible?
id: current_page
state: 'boot'
timeout: 15s
@@ -2656,8 +2641,6 @@ script:
- id: stop_all
mode: restart
#parameters:
# exceptions: string[] # to be implemented
then:
- lambda: |-
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>
- 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.
3. A target temperature must be set on the climate entity in Home Assistant or the page Climate in your panel.
2. A target temperature must be set on the climate entity in Home Assistant or the page Climate in your panel.
&nbsp;
## 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
substitutions:
@@ -41,6 +40,7 @@ packages:
- nspanel_esphome.yaml # Core package
# - 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_dual.yaml # activate for local climate (dual) control
refresh: 300s
esp32:
@@ -55,14 +55,16 @@ The following keys are available to be used in your `substitutions`:
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".
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".
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* 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.
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_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.
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_low|Optional|Number representing a temperature in the selected unit|`18`|The initial lower treshold for the target temperature.
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.
- All values must be delimited with `""`
@@ -101,6 +103,7 @@ packages:
- nspanel_esphome.yaml # Core package
- 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_dual.yaml # activate for local climate (dual) control
refresh: 300s
esp32:

View File

@@ -73,6 +73,7 @@ packages:
- nspanel_esphome.yaml # Core package
# - 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_dual.yaml # activate for local climate (dual) control
refresh: 300s
esp32:

View File

@@ -84,7 +84,8 @@ packages:
# - 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_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:
framework:
@@ -164,5 +165,3 @@ esp32:
* 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 "**_.
* 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_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_dual.yaml # activate for local climate (dual) control
refresh: 300s
esp32:

View File

@@ -1,3 +1,4 @@
---
packages:
core_package: !include advanced/esphome/nspanel_esphome_core.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. #####
#####################################################################################################
---
substitutions:
### 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_max: "45"
##### DO NOT CHANGE THIS #####
addon_climate_cool: "true"
addon_climate_heat: "false"
##############################
climate:
@@ -28,10 +23,11 @@ climate:
- switch.turn_on: relay_${cooler_relay}
preset:
- name: "Off"
default_target_temperature_high: ${temp_min} ${temp_units}
default_target_temperature_high: ${target_high} ${temp_units}
mode: "off"
- name: Home
default_target_temperature_high: 21 ${temp_units}
default_target_temperature_high: ${target_high} ${temp_units}
mode: "cool"
packages:
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. #####
#####################################################################################################
---
substitutions:
### 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"
##### DO NOT CHANGE THIS #####
addon_climate_cool: "false"
addon_climate_heat: "true"
##############################
@@ -28,10 +23,11 @@ climate:
- switch.turn_on: relay_${heater_relay}
preset:
- name: "Off"
default_target_temperature_low: ${temp_min} ${temp_units}
default_target_temperature_low: ${target_low} ${temp_units}
mode: "off"
- name: Home
default_target_temperature_low: 21 ${temp_units}
default_target_temperature_low: ${target_low} ${temp_units}
mode: "heat"
packages:
climate_base_package: !include advanced/esphome/nspanel_esphome_addon_climate_base.yaml