Compare commits
7 Commits
25567fa381
...
6e55c61032
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e55c61032 | ||
|
|
5877af3493 | ||
|
|
346897ac94 | ||
|
|
e8e483a92a | ||
|
|
9d68ecb5ab | ||
|
|
a84c428ab8 | ||
|
|
98d3a9189c |
14
.github/workflows/validate_esphome.yml
vendored
14
.github/workflows/validate_esphome.yml
vendored
@@ -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"
|
||||
|
||||
15
.github/workflows/validate_esphome_beta.yml
vendored
15
.github/workflows/validate_esphome_beta.yml
vendored
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
12
.test/esphome_climate_dual.yaml
Normal file
12
.test/esphome_climate_dual.yaml
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
## 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)
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
## 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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
36
nspanel_esphome_addon_climate_dual.yaml
Normal file
36
nspanel_esphome_addon_climate_dual.yaml
Normal 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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user