1169 lines
39 KiB
YAML
1169 lines
39 KiB
YAML
#############################################################
|
|
##### START - SUBSTITUTIONS #####
|
|
#############################################################
|
|
substitutions:
|
|
##### GENEREL CONFIG #############################################################################################
|
|
node_name: nspanel-buero # $node_name
|
|
device_name: NSPanel Büro # $device_name
|
|
|
|
wifi_ssid: !secret wifi_ssid # add in your esphome secrets file.
|
|
wifi_password: !secret wifi_password # add in your esphome secrets file.
|
|
ota_password: !secret ota_password # add in your esphome secrets file.
|
|
nextion_update_url: !secret nextion_update_url_buero # add in your esphome secrets file.
|
|
|
|
###### EDIT THE BELOW ENTITIES FOR YOURS... #######################################################################
|
|
|
|
#ha_weekday: sensor.wochentag ##### Sensor Wochentag generiert in HA (custom_configuration -> nspanel) #####
|
|
#ha_outdoor_temp: sensor.terrasse_garage_motion_sensor_temperature ##### Temperatur von Bewegungsmelder Outdoor (Zigbee2Mqtt) #####
|
|
#ha_hotwater_temp: sensor.hotwater_temp ##### Buderus Heizung Warmwasser Temperatur (Integration) #####
|
|
ha_hotwater_charge: switch.charge
|
|
ha_heating_system_flame: binary_sensor.flamestatus ##### Buderus Heizung Flamen-Status (Integration) #####
|
|
ha_climate_thermostat_target_temp: sensor.nspanel_buro_target_temp ##### Climate Thermostat generiert in HA (custom_configuration -> nspanel) #####
|
|
ha_climate_thermostat: climate.nspanel_buro ##### Climate Thermostat generiert in HA (custom_configuration -> nspanel) #####
|
|
#ha_humidity: sensor.kinderzimmer_lea_temperatur_sensor_humidity
|
|
#########################################
|
|
#
|
|
#
|
|
#############################################################
|
|
##### CLOSE - SUBSTITUTIONS #####
|
|
#############################################################
|
|
#
|
|
##
|
|
###
|
|
#############################################################################################################################################################################################
|
|
###
|
|
##
|
|
#
|
|
#############################################################
|
|
##### START - Settings #####
|
|
#############################################################
|
|
#
|
|
#
|
|
#########################################
|
|
|
|
##### Functionality for the Nextion display #####
|
|
external_components:
|
|
- source: github://pr#2956
|
|
components: [nextion]
|
|
refresh: 1h
|
|
|
|
##### ESP home CONFIG #####
|
|
esphome:
|
|
name: $node_name
|
|
comment: $device_name
|
|
|
|
##### TYPE OF ESP BOARD #####
|
|
esp32:
|
|
board: esp32dev
|
|
|
|
##### WIFI SETUP #####
|
|
wifi:
|
|
ssid: $wifi_ssid
|
|
password: $wifi_password
|
|
power_save_mode: none
|
|
|
|
captive_portal:
|
|
|
|
##### OTA (Over the air updates) password #####
|
|
ota:
|
|
password: $ota_password
|
|
safe_mode: true
|
|
reboot_timeout: 3min
|
|
num_attempts: 3
|
|
|
|
##### LOGGER #####
|
|
logger:
|
|
# baud_rate: 0
|
|
# level: WARN
|
|
|
|
##### CONFIGURE INTERNAL BUZZER #####
|
|
output:
|
|
##### BUZZER FOR PLAYING RINGTONES #####
|
|
- platform: ledc
|
|
id: buzzer_out
|
|
pin:
|
|
number: 21
|
|
|
|
##### ENABLE RINGTONE MUSIC SUPPORT #####
|
|
rtttl:
|
|
id: buzzer
|
|
output: buzzer_out
|
|
|
|
##### UART FOR NEXTION DISPLAY #####
|
|
uart:
|
|
tx_pin: 16
|
|
rx_pin: 17
|
|
baud_rate: 115200
|
|
id: tf_uart
|
|
|
|
##### INFO - Time component that fetches time from home Assistant and updates the display once a minute and when the display is ready at bootup (and time is available) #####
|
|
#time:
|
|
# - platform: homeassistant
|
|
# id: homeassistant_time
|
|
# on_time:
|
|
# - seconds: 0
|
|
# minutes: /1
|
|
# then:
|
|
# - wait_until:
|
|
# switch.is_on: nextion_init
|
|
# - lambda: id(disp1).set_component_text_printf("home.a01", "%02i:%02i", id(homeassistant_time).now().hour, id(homeassistant_time).now().minute);
|
|
# on_time_sync:
|
|
# then:
|
|
# - wait_until:
|
|
# switch.is_on: nextion_init
|
|
# - lambda: id(disp1).set_component_text_printf("home.a01", "%02i:%02i", id(homeassistant_time).now().hour, id(homeassistant_time).now().minute);
|
|
|
|
###### A reboot button is always useful #####
|
|
button:
|
|
- platform: restart
|
|
name: $device_name Restart
|
|
id: restart_nspanel
|
|
|
|
#########################################
|
|
#
|
|
#
|
|
#############################################################
|
|
##### CLOSE - Settings #####
|
|
#############################################################
|
|
#
|
|
##
|
|
###
|
|
#############################################################################################################################################################################################
|
|
###
|
|
##
|
|
#
|
|
#############################################################
|
|
##### START - API #####
|
|
#############################################################
|
|
#
|
|
#
|
|
#########################################
|
|
|
|
api:
|
|
services:
|
|
|
|
##### SERVICE TO UPDATE THE HMI FILE #####
|
|
- service: upload_tft
|
|
then:
|
|
- lambda: 'id(disp1)->upload_tft();'
|
|
|
|
##### Service to send a command "printf" directly to the display. Useful for testing #####
|
|
- service: send_command_printf
|
|
variables:
|
|
cmd: string
|
|
then:
|
|
- lambda: 'id(disp1).send_command_printf("%s", cmd.c_str());'
|
|
|
|
##### Service to send a command "text_printf" directly to the display. Useful for testing #####
|
|
- service: send_command_text_printf
|
|
variables:
|
|
component: string
|
|
message: string
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- lambda: 'id(disp1).set_component_text_printf(component.c_str(), "%s", message.c_str());'
|
|
|
|
##### Service to send a command "component_value (Dualstate Button)" directly to the display. Useful for testing #####
|
|
- service: send_command_value
|
|
variables:
|
|
component: string
|
|
message: int
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- lambda: 'id(disp1).set_component_value(component.c_str(), message);'
|
|
|
|
#########################################
|
|
#
|
|
#
|
|
#############################################################
|
|
##### CLOSE - API #####
|
|
#############################################################
|
|
#
|
|
##
|
|
###
|
|
#############################################################################################################################################################################################
|
|
###
|
|
##
|
|
#
|
|
#############################################################
|
|
##### START - GLOBALS #####
|
|
#############################################################
|
|
#
|
|
#
|
|
#########################################
|
|
|
|
globals:
|
|
|
|
##### Save Target Temp #####
|
|
- id: climate_target_temp_val_global
|
|
type: float
|
|
restore_value: true
|
|
initial_value: '12'
|
|
|
|
##### Save Thermostat PIC Position #####
|
|
- id: climate_slider_val_global
|
|
type: int
|
|
restore_value: true
|
|
initial_value: '0'
|
|
|
|
##### Save Display Brightness for NSPanel reboot #####
|
|
- id: display_brightness_global
|
|
type: int
|
|
restore_value: true
|
|
initial_value: '100'
|
|
|
|
##### Save Display DIM Brightness for NSPanel reboot
|
|
- id: display_dim_brightness_global
|
|
type: int
|
|
restore_value: true
|
|
initial_value: '10'
|
|
|
|
##### Save Display DIM Brightness for NSPanel reboot
|
|
- id: sleep_modus_global
|
|
type: int
|
|
restore_value: true
|
|
initial_value: '0'
|
|
|
|
##### Save State Heating Room #####
|
|
- id: heating_room_global
|
|
type: int
|
|
restore_value: true
|
|
initial_value: '0'
|
|
|
|
##### Save State HVAC #####
|
|
- id: hvac_mode_global
|
|
type: int
|
|
restore_value: true
|
|
initial_value: '0'
|
|
|
|
#########################################
|
|
#
|
|
#
|
|
#############################################################
|
|
##### CLOSE - GLOBALS #####
|
|
#############################################################
|
|
#
|
|
##
|
|
###
|
|
#############################################################################################################################################################################################
|
|
###
|
|
##
|
|
#
|
|
#############################################################
|
|
##### START - BINARY SENSOR #####
|
|
#############################################################
|
|
#
|
|
#
|
|
#########################################
|
|
|
|
binary_sensor:
|
|
|
|
###### LEFT BUTTON BELOW DISPLAY TO TOGGLE RELAY#####
|
|
- platform: gpio
|
|
name: $device_name Left Button
|
|
pin:
|
|
number: 14
|
|
inverted: true
|
|
on_click:
|
|
- switch.toggle: relay_1
|
|
|
|
##### RIGHT BUTTON BELOW DISPLAY TO TOGGLE RELAY #####
|
|
- platform: gpio
|
|
name: $device_name Right Button
|
|
pin:
|
|
number: 27
|
|
inverted: true
|
|
on_click:
|
|
- switch.toggle: relay_2
|
|
|
|
##### THERMOSTAT - BUTTON DECREASES CLIMATE TARGET TEMPERATURE IN HA #####
|
|
- platform: nextion
|
|
name: $device_name Climate Target DOWN
|
|
page_id: 6
|
|
component_id: 14
|
|
internal: true
|
|
on_click:
|
|
- homeassistant.service:
|
|
service: climate.set_temperature
|
|
data_template:
|
|
entity_id: $ha_climate_thermostat
|
|
temperature: !lambda return id(climate_target_temp_val_global) - 0.5;
|
|
|
|
##### THERMOSTAT - BUTTON INCREASES CLIMATE TARGET TEMPERATURE IN HA #####
|
|
- platform: nextion
|
|
name: $device_name Climate Target UP
|
|
page_id: 6
|
|
component_id: 15
|
|
internal: true
|
|
on_click:
|
|
- homeassistant.service:
|
|
service: climate.set_temperature
|
|
data_template:
|
|
entity_id: $ha_climate_thermostat
|
|
temperature: !lambda return id(climate_target_temp_val_global) + 0.5;
|
|
|
|
##### THERMOSTAT - BUTTON ON / OFF Heating #####
|
|
- platform: nextion
|
|
name: $device_name Heating Room State
|
|
id: heating_room_state
|
|
page_id: 6
|
|
component_id: 17
|
|
internal: true
|
|
on_click:
|
|
- switch.toggle: hvac_mode
|
|
|
|
##### Display Brightness - BUTTON DECREASES Brightness #####
|
|
- platform: nextion
|
|
name: $device_name Brightness DOWN
|
|
page_id: 7
|
|
component_id: 12
|
|
internal: true
|
|
on_click:
|
|
- number.set:
|
|
id: display_brightness
|
|
value: !lambda return id(display_brightness_global) - 1;
|
|
- lambda: id(disp1).set_component_text_printf("settings.a03", "%i", id(display_brightness_global));
|
|
- lambda: id(disp1).send_command_printf("settings.brightslider.val=%i", id(display_brightness_global));
|
|
|
|
##### Display Brightness - BUTTON INCREASES Brightness #####
|
|
- platform: nextion
|
|
name: $device_name Brightness UP
|
|
page_id: 7
|
|
component_id: 13
|
|
internal: true
|
|
on_click:
|
|
- number.set:
|
|
id: display_brightness
|
|
value: !lambda return id(display_brightness_global) + 1;
|
|
- lambda: id(disp1).set_component_text_printf("settings.a03", "%i", id(display_brightness_global));
|
|
- lambda: id(disp1).send_command_printf("settings.brightslider.val=%i", id(display_brightness_global));
|
|
|
|
##### Display DIM Brightness - BUTTON DECREASES Brightness #####
|
|
- platform: nextion
|
|
name: $device_name Brightness DIM DOWN
|
|
page_id: 7
|
|
component_id: 14
|
|
internal: true
|
|
on_click:
|
|
- number.set:
|
|
id: display_dim_brightness
|
|
value: !lambda return id(display_dim_brightness_global) - 1;
|
|
- lambda: id(disp1).set_component_text_printf("settings.a04", "%i", id(display_dim_brightness_global));
|
|
- lambda: id(disp1).send_command_printf("settings.dimslider.val=%i", id(display_dim_brightness_global));
|
|
|
|
##### Display DIM Brightness - BUTTON INCREASES Brightness #####
|
|
- platform: nextion
|
|
name: $device_name Brightness DIM UP
|
|
page_id: 7
|
|
component_id: 15
|
|
internal: true
|
|
on_click:
|
|
- number.set:
|
|
id: display_dim_brightness
|
|
value: !lambda return id(display_dim_brightness_global) + 1;
|
|
- lambda: id(disp1).set_component_text_printf("settings.a04", "%i", id(display_dim_brightness_global));
|
|
- lambda: id(disp1).send_command_printf("settings.dimslider.val=%i", id(display_dim_brightness_global));
|
|
|
|
##### Restart NSPanel Button #####
|
|
- platform: nextion
|
|
name: $device_name Restart
|
|
page_id: 7
|
|
component_id: 11
|
|
internal: true
|
|
on_click:
|
|
- button.press: restart_nspanel
|
|
|
|
##### Sleep Modus NSPanel Button #####
|
|
- platform: nextion
|
|
name: $device_name Sleep Modus
|
|
page_id: 7
|
|
component_id: 6
|
|
internal: true
|
|
on_click:
|
|
- switch.toggle: sleep_modus
|
|
|
|
##### Hotwater Charge #####
|
|
- platform: nextion
|
|
name: $device_name Hotwater Charge
|
|
page_id: 6
|
|
component_id: 22
|
|
on_click:
|
|
- homeassistant.service:
|
|
service: switch.toggle
|
|
data:
|
|
entity_id: $ha_hotwater_charge
|
|
|
|
#########################################
|
|
#
|
|
#
|
|
#############################################################
|
|
##### CLOSE - BINARY SENSOR #####
|
|
#############################################################
|
|
#
|
|
##
|
|
###
|
|
#############################################################################################################################################################################################
|
|
###
|
|
##
|
|
#
|
|
#############################################################
|
|
##### START - SENSOR #####
|
|
#############################################################
|
|
#
|
|
#
|
|
#########################################
|
|
|
|
sensor:
|
|
|
|
##### INTERNAL TEMPERATUE SENSOR, ADC VALUE #####
|
|
- platform: adc
|
|
id: ntc_source
|
|
pin: 38
|
|
update_interval: 10s
|
|
attenuation: 11db
|
|
|
|
##### INTERNAL TEMPERATUE SENSOR, adc reading converted to resistance (calculation)#####
|
|
- platform: resistance
|
|
id: resistance_sensor
|
|
sensor: ntc_source
|
|
configuration: DOWNSTREAM
|
|
resistor: 11.2kOhm
|
|
|
|
##### INTERNAL TEMPERATUE SENSOR, resistance to temperature (calculation) #####
|
|
- platform: ntc
|
|
name: $device_name Temperature
|
|
id: temp_nspanel
|
|
sensor: resistance_sensor
|
|
calibration:
|
|
b_constant: 3950
|
|
reference_temperature: 25°C
|
|
reference_resistance: 10kOhm
|
|
on_value:
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- lambda: id(disp1).set_component_text_printf("home.a03", "%.1f°", id(temp_nspanel).state); # onboard temp (thermostat temp) to home page.
|
|
- lambda: id(disp1).set_component_text_printf("thermostat.a04", "%.1f", id(temp_nspanel).state);
|
|
|
|
##### TEMPERATURE Outdoor FROM HA #####
|
|
# - platform: homeassistant
|
|
# id: temp_outdoor
|
|
# entity_id: $ha_outdoor_temp
|
|
# on_value:
|
|
# then:
|
|
# - wait_until:
|
|
# switch.is_on: nextion_init
|
|
# - lambda: id(disp1).set_component_text_printf("home.a06", "%.0f°", id(temp_outdoor).state);
|
|
# - lambda: id(disp1).set_component_text_printf("thermostat.a07", "%.0f°", id(temp_outdoor).state);
|
|
|
|
##### HUMIDITY Indoor FROM HA #####
|
|
# - platform: homeassistant
|
|
# id: humidity
|
|
# entity_id: $ha_humidity
|
|
# on_value:
|
|
# then:
|
|
# - wait_until:
|
|
# switch.is_on: nextion_init
|
|
# - lambda: id(disp1).set_component_text_printf("home.a04", "%.0f°", id(humidity).state);
|
|
|
|
|
|
##### THERMOSTAT HOT WATER TEMP FROM HA #####
|
|
# - platform: homeassistant
|
|
# id: temp_hotwater
|
|
# entity_id: $ha_hotwater_temp
|
|
# on_value:
|
|
# then:
|
|
# - wait_until:
|
|
# switch.is_on: nextion_init
|
|
# - lambda: id(disp1).set_component_text_printf("home.a07", "%.1f°", id(temp_hotwater).state);
|
|
# - lambda: id(disp1).set_component_text_printf("thermostat.a08", "%.1f°", id(temp_hotwater).state);
|
|
|
|
##### THERMOSTAT CLIMATE TARGET TEMPERATURE FROM HA #####
|
|
- platform: homeassistant
|
|
id: ha_climate_target_temp
|
|
entity_id: $ha_climate_thermostat_target_temp
|
|
on_value:
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- globals.set:
|
|
id: climate_target_temp_val_global
|
|
value: !lambda 'return float(x);'
|
|
- lambda: id(disp1).set_component_text_printf("thermostat.a05", "%.1f", id(climate_target_temp_val_global));
|
|
# THERMO PROGRESS CIRCLE, broken into 3 images to create space for the temperatures in the center.
|
|
- lambda: |-
|
|
int left=16; // 16 is empty left.
|
|
int mid=17; // 17 is empty mid.
|
|
int right=18; // 18 is empty right.
|
|
if (id(climate_target_temp_val_global) == 13) {
|
|
left=16;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 13.5) {
|
|
left=19;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 14) {
|
|
left=20;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 14.5) {
|
|
left=21;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 15) {
|
|
left=22;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 15.5) {
|
|
left=23;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 16) {
|
|
left=24;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 16.5) {
|
|
left=25;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 17) {
|
|
left=26;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 17.5) {
|
|
left=27;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 18) {
|
|
left=28;
|
|
mid=17;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 18.5) {
|
|
left=29;
|
|
mid=30;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 19) {
|
|
left=29;
|
|
mid=31;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 19.5) {
|
|
left=29;
|
|
mid=32;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 20) {
|
|
left=29;
|
|
mid=33;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 20.5) {
|
|
left=29;
|
|
mid=34;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 21) {
|
|
left=29;
|
|
mid=35;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 21.5) {
|
|
left=29;
|
|
mid=36;
|
|
right=18;
|
|
} else if (id(climate_target_temp_val_global) == 22) {
|
|
left=29;
|
|
mid=37;
|
|
right=38;
|
|
} else if (id(climate_target_temp_val_global) == 22.5) {
|
|
left=29;
|
|
mid=37;
|
|
right=39;
|
|
} else if (id(climate_target_temp_val_global) == 23) {
|
|
left=29;
|
|
mid=37;
|
|
right=40;
|
|
} else if (id(climate_target_temp_val_global) == 23.5) {
|
|
left=29;
|
|
mid=37;
|
|
right=41;
|
|
} else if (id(climate_target_temp_val_global) == 24) {
|
|
left=29;
|
|
mid=37;
|
|
right=42;
|
|
} else if (id(climate_target_temp_val_global) == 24.5) {
|
|
left=29;
|
|
mid=37;
|
|
right=43;
|
|
} else if (id(climate_target_temp_val_global) == 25) {
|
|
left=29;
|
|
mid=37;
|
|
right=44;
|
|
} else if (id(climate_target_temp_val_global) == 25.5) {
|
|
left=29;
|
|
mid=37;
|
|
right=45;
|
|
} else if (id(climate_target_temp_val_global) == 26) {
|
|
left=29;
|
|
mid=37;
|
|
right=46;
|
|
} else if (id(climate_target_temp_val_global) == 26.5) {
|
|
left=29;
|
|
mid=37;
|
|
right=47;
|
|
} else if (id(climate_target_temp_val_global) == 27) {
|
|
left=29;
|
|
mid=37;
|
|
right=48;
|
|
}
|
|
// sends the 3 images to the display
|
|
id(disp1).send_command_printf("thermostat.a01.pic=%i", left);
|
|
id(disp1).send_command_printf("thermostat.a02.pic=%i", mid);
|
|
id(disp1).send_command_printf("thermostat.a03.pic=%i", right);
|
|
|
|
###### TARGET TEMPERATURE GET VALUE FROM NEXTION CIRCLE SLIDER AND SET GLOBAL VARIBLE #####
|
|
- platform: nextion
|
|
id: climate_circleslider
|
|
name: $device_name Climate circleslider
|
|
variable_name: climateslider
|
|
internal: true
|
|
on_value:
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- globals.set:
|
|
id: climate_slider_val_global
|
|
value: !lambda 'return int(x);'
|
|
- lambda: |-
|
|
if (id(climate_slider_val_global) == 0) {
|
|
id(climate_target_temp_val_global) = 13;
|
|
} else if (id(climate_slider_val_global) == 1) {
|
|
id(climate_target_temp_val_global) = 13.5;
|
|
} else if (id(climate_slider_val_global) == 2) {
|
|
id(climate_target_temp_val_global) = 14;
|
|
} else if (id(climate_slider_val_global) == 3) {
|
|
id(climate_target_temp_val_global) = 14.5;
|
|
} else if (id(climate_slider_val_global) == 4) {
|
|
id(climate_target_temp_val_global) = 15;
|
|
} else if (id(climate_slider_val_global) == 5) {
|
|
id(climate_target_temp_val_global) = 15.5;
|
|
} else if (id(climate_slider_val_global) == 6) {
|
|
id(climate_target_temp_val_global) = 16;
|
|
} else if (id(climate_slider_val_global) == 7) {
|
|
id(climate_target_temp_val_global) = 16.5;
|
|
} else if (id(climate_slider_val_global) == 8) {
|
|
id(climate_target_temp_val_global) = 17;
|
|
} else if (id(climate_slider_val_global) == 9) {
|
|
id(climate_target_temp_val_global) = 17.5;
|
|
} else if (id(climate_slider_val_global) == 10) {
|
|
id(climate_target_temp_val_global) = 18;
|
|
} else if (id(climate_slider_val_global) == 11) {
|
|
id(climate_target_temp_val_global) = 18.5;
|
|
} else if (id(climate_slider_val_global) == 12) {
|
|
id(climate_target_temp_val_global) = 19;
|
|
} else if (id(climate_slider_val_global) == 13) {
|
|
id(climate_target_temp_val_global) = 19.5;
|
|
} else if (id(climate_slider_val_global) == 14) {
|
|
id(climate_target_temp_val_global) = 20;
|
|
} else if (id(climate_slider_val_global) == 15) {
|
|
id(climate_target_temp_val_global) = 20.5;
|
|
} else if (id(climate_slider_val_global) == 16) {
|
|
id(climate_target_temp_val_global) = 21;
|
|
} else if (id(climate_slider_val_global) == 17) {
|
|
id(climate_target_temp_val_global) = 21.5;
|
|
} else if (id(climate_slider_val_global) == 18) {
|
|
id(climate_target_temp_val_global) = 22;
|
|
} else if (id(climate_slider_val_global) == 19) {
|
|
id(climate_target_temp_val_global) = 22.5;
|
|
} else if (id(climate_slider_val_global) == 20) {
|
|
id(climate_target_temp_val_global) = 23;
|
|
} else if (id(climate_slider_val_global) == 21) {
|
|
id(climate_target_temp_val_global) = 23.5;
|
|
} else if (id(climate_slider_val_global) == 22) {
|
|
id(climate_target_temp_val_global) = 24;
|
|
} else if (id(climate_slider_val_global) == 23) {
|
|
id(climate_target_temp_val_global) = 24.5;
|
|
} else if (id(climate_slider_val_global) == 24) {
|
|
id(climate_target_temp_val_global) = 25;
|
|
} else if (id(climate_slider_val_global) == 25) {
|
|
id(climate_target_temp_val_global) = 25.5;
|
|
} else if (id(climate_slider_val_global) == 26) {
|
|
id(climate_target_temp_val_global) = 26;
|
|
} else if (id(climate_slider_val_global) == 27) {
|
|
id(climate_target_temp_val_global) = 26.5;
|
|
} else if (id(climate_slider_val_global) == 28) {
|
|
id(climate_target_temp_val_global) = 27;
|
|
}
|
|
- homeassistant.service:
|
|
service: climate.set_temperature
|
|
data_template:
|
|
entity_id: $ha_climate_thermostat
|
|
temperature: !lambda return id(climate_target_temp_val_global);
|
|
|
|
###### Display Brightness GET VALUE FROM NSPanel SLIDER #####
|
|
- platform: nextion
|
|
id: brightslider
|
|
name: $device_name brightness Slider
|
|
variable_name: brightslider
|
|
internal: true
|
|
on_value:
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- number.set:
|
|
id: display_brightness
|
|
value: !lambda 'return int(x);'
|
|
# send text field percentage of current_lightslider_val
|
|
- lambda: id(disp1).set_component_text_printf("settings.a03", "%i", id(display_brightness_global));
|
|
|
|
###### Display DIM Brightness GET VALUE FROM NSPanel SLIDER #####
|
|
- platform: nextion
|
|
id: dimslider
|
|
name: $device_name dim brightness slider
|
|
variable_name: dimslider
|
|
internal: true
|
|
on_value:
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- number.set:
|
|
id: display_dim_brightness
|
|
value: !lambda 'return int(x);'
|
|
# send text field percentage of current_lightslider_val
|
|
- lambda: id(disp1).set_component_text_printf("settings.a04", "%i", id(display_dim_brightness_global));
|
|
|
|
|
|
#########################################
|
|
#
|
|
#
|
|
#############################################################
|
|
##### CLOSE - SENSOR #####
|
|
#############################################################
|
|
#
|
|
##
|
|
###
|
|
#############################################################################################################################################################################################
|
|
###
|
|
##
|
|
#
|
|
#############################################################
|
|
##### START - TEXT SENSOR#####
|
|
#############################################################
|
|
#
|
|
#
|
|
#########################################
|
|
|
|
text_sensor:
|
|
|
|
##### ESPhome version used to compile the app #####
|
|
- platform: version
|
|
name: $device_name ESPhome Version
|
|
|
|
##### SUN SENSOR FROM HA #####
|
|
- platform: homeassistant
|
|
id: sun_sun
|
|
entity_id: sun.sun
|
|
|
|
##### last click sensor, the main action variable - push to HA #####
|
|
- platform: nextion
|
|
nextion_id: disp1
|
|
name: $device_name last click
|
|
id: disp1_last_click_va
|
|
update_interval: 50ms
|
|
component_name: lastclick
|
|
|
|
##### last click lightsettings page, the main action variable - push to HA #####
|
|
- platform: nextion
|
|
nextion_id: disp1
|
|
name: $device_name last click lightsettings
|
|
id: disp1_last_click_lightsettings
|
|
update_interval: 50ms
|
|
component_name: lightsetting
|
|
|
|
##### last click coversettings page, the main action variable - push to HA #####
|
|
- platform: nextion
|
|
nextion_id: disp1
|
|
name: $device_name last click coversettings
|
|
id: disp1_last_click_coversettings
|
|
update_interval: 50ms
|
|
component_name: coverposition
|
|
|
|
##### Wochentag SENSOR FROM HA #####
|
|
# - platform: homeassistant
|
|
# id: weekday
|
|
# entity_id: $ha_weekday
|
|
# on_value:
|
|
# then:
|
|
# - wait_until:
|
|
# switch.is_on: nextion_init
|
|
# - lambda: id(disp1).set_component_text_printf("home.a02", "%s", id(weekday).state.c_str());
|
|
|
|
##### HEATING System ICON #####
|
|
- platform: homeassistant
|
|
entity_id: $ha_heating_system_flame
|
|
name: "Heating System"
|
|
id: heating_system
|
|
on_value:
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- lambda: |-
|
|
int symbol=60; // 60 is a blank image 30x30
|
|
if (id(heating_system).state == "on") {
|
|
symbol=61;
|
|
}
|
|
id(disp1).send_command_printf("home.a50.pic=%i", symbol);
|
|
id(disp1).send_command_printf("thermostat.a50.pic=%i", symbol);
|
|
|
|
##### Hotwater Charge ICON #####
|
|
- platform: homeassistant
|
|
entity_id: $ha_hotwater_charge
|
|
name: "Hotwater Charge"
|
|
id: hotwater_charge
|
|
on_value:
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- lambda: |-
|
|
if (id(hotwater_charge).state == "on") {
|
|
id(disp1).set_component_value("thermostat.a12",1);
|
|
} else {
|
|
id(disp1).set_component_value("thermostat.a12",0);
|
|
}
|
|
# - lambda: |-
|
|
# id(disp1).set_component_value("thermostat.a12",0);
|
|
# if (id(hotwater_charge) == "on")
|
|
# {
|
|
# id(disp1).set_component_value("thermostat.a12",1);
|
|
# }
|
|
|
|
##### WEATHER SYMBOL FROM HA WEATHER ENTITY #####
|
|
- platform: homeassistant
|
|
id: weather_symbol
|
|
entity_id: weather.home_wetter
|
|
on_value:
|
|
then:
|
|
- wait_until:
|
|
switch.is_on: nextion_init
|
|
- lambda: |-
|
|
int symbol=1; // 1 is a empty box.
|
|
if (id(weather_symbol).state == "sunny") {
|
|
symbol=2;
|
|
} else if (id(weather_symbol).state == "cloudy") {
|
|
symbol=3;
|
|
if (id(sun_sun).state == "below_horizon") {
|
|
symbol=3;
|
|
}
|
|
} else if (id(weather_symbol).state == "rainy") {
|
|
symbol=4;
|
|
} else if (id(weather_symbol).state == "pouring") {
|
|
symbol=5;
|
|
} else if (id(weather_symbol).state == "snowy") {
|
|
symbol=6;
|
|
} else if (id(weather_symbol).state == "hail" || id(weather_symbol).state == "snowy-rainy") {
|
|
symbol=7;
|
|
} else if (id(weather_symbol).state == "fog") {
|
|
symbol=8;
|
|
} else if (id(weather_symbol).state == "windy" || id(weather_symbol).state == "windy-variant") {
|
|
symbol=9;
|
|
} else if (id(weather_symbol).state == "lightning") {
|
|
symbol=10;
|
|
} else if (id(weather_symbol).state == "partlycloudy") {
|
|
symbol=11;
|
|
if (id(sun_sun).state == "below_horizon") {
|
|
symbol=12;
|
|
}
|
|
} else if (id(weather_symbol).state == "lightning-rainy" || id(weather_symbol).state == "exceptional") {
|
|
symbol=13;
|
|
if (id(sun_sun).state == "below_horizon") {
|
|
symbol=14;
|
|
}
|
|
} else if (id(weather_symbol).state == "clear-night") {
|
|
symbol=15;
|
|
}
|
|
id(disp1).send_command_printf("home.a05.pic=%i", symbol);
|
|
|
|
#########################################
|
|
#
|
|
#
|
|
#############################################################
|
|
##### CLOSE - TEXT SENSOR #####
|
|
#############################################################
|
|
#
|
|
##
|
|
###
|
|
#############################################################################################################################################################################################
|
|
###
|
|
##
|
|
#
|
|
#############################################################
|
|
##### START - SWITCH #####
|
|
#############################################################
|
|
#
|
|
#
|
|
#########################################
|
|
|
|
switch:
|
|
|
|
##### global variable to keep track on whether the Nextion display is ready or not. Delays initial info from HA to the display #####
|
|
- platform: template
|
|
name: $device_name Nextion inited
|
|
id: nextion_init
|
|
entity_category: config
|
|
restore_state: false
|
|
assumed_state: off
|
|
optimistic: true
|
|
|
|
##### UPDATE TFT DISPLAY #####
|
|
- platform: template
|
|
name: Update TFT display
|
|
id: tft_update
|
|
turn_on_action:
|
|
- delay: 16ms
|
|
- lambda: id(disp1).upload_tft();
|
|
- switch.turn_off: tft_update
|
|
|
|
##### PHYSICAL SWITCH 1 #####
|
|
- platform: gpio
|
|
name: $device_name Relay 1
|
|
id: relay_1
|
|
pin:
|
|
number: 22
|
|
|
|
##### PHYSICAL SWITCH 2 ######
|
|
- platform: gpio
|
|
name: $device_name Relay 2
|
|
id: relay_2
|
|
pin:
|
|
number: 19
|
|
on_turn_off:
|
|
- globals.set:
|
|
id: heating_room_global
|
|
value: '0'
|
|
- lambda: |-
|
|
if (id(hvac_mode_global) == 0)
|
|
{
|
|
id(disp1).send_command_printf("thermostat.a06.pic=51");
|
|
} else if (id(hvac_mode_global) == 1) {
|
|
id(disp1).send_command_printf("thermostat.a06.pic=52");
|
|
}
|
|
- lambda: id(disp1).send_command_printf("home.a52.pic=60");
|
|
- lambda: id(disp1).send_command_printf("thermostat.a52.pic=60");
|
|
on_turn_on:
|
|
- globals.set:
|
|
id: heating_room_global
|
|
value: '1'
|
|
- lambda: id(disp1).send_command_printf("thermostat.a06.pic=53");
|
|
- lambda: id(disp1).send_command_printf("home.a52.pic=63");
|
|
- lambda: id(disp1).send_command_printf("thermostat.a52.pic=63");
|
|
|
|
##### Switch Climate HVAC Mode #####
|
|
- platform: template
|
|
device_class: switch
|
|
name: $device_name hvac Mode
|
|
id: hvac_mode
|
|
restore_state: true
|
|
assumed_state: false
|
|
optimistic: true
|
|
on_turn_off:
|
|
- lambda: id(disp1).set_component_value("thermostat.a10",0);
|
|
- globals.set:
|
|
id: hvac_mode_global
|
|
value: '0'
|
|
- homeassistant.service:
|
|
service: climate.set_hvac_mode
|
|
data_template:
|
|
entity_id: $ha_climate_thermostat
|
|
hvac_mode: 'off'
|
|
- lambda: id(disp1).send_command_printf("thermostat.a06.pic=51");
|
|
- lambda: id(disp1).send_command_printf("home.a51.pic=60");
|
|
- lambda: id(disp1).send_command_printf("thermostat.a51.pic=60");
|
|
on_turn_on:
|
|
- lambda: id(disp1).set_component_value("thermostat.a10",1);
|
|
- globals.set:
|
|
id: hvac_mode_global
|
|
value: '1'
|
|
- homeassistant.service:
|
|
service: climate.set_hvac_mode
|
|
data_template:
|
|
entity_id: $ha_climate_thermostat
|
|
hvac_mode: 'heat'
|
|
- lambda: |-
|
|
if (id(heating_room_global) == 0)
|
|
{
|
|
id(disp1).send_command_printf("thermostat.a06.pic=52");
|
|
} else if (id(heating_room_global) == 1) {
|
|
id(disp1).send_command_printf("thermostat.a06.pic=53");
|
|
}
|
|
- lambda: id(disp1).send_command_printf("home.a51.pic=62");
|
|
- lambda: id(disp1).send_command_printf("thermostat.a51.pic=62");
|
|
|
|
##### DISPLAY ALWAYS ON #####
|
|
- platform: gpio
|
|
name: $device_name Screen Power
|
|
id: screen_power
|
|
entity_category: config
|
|
pin:
|
|
number: 4
|
|
inverted: true
|
|
restore_mode: ALWAYS_ON
|
|
internal: true
|
|
|
|
##### Switch Display Sleep Modus #####
|
|
- platform: template
|
|
device_class: switch
|
|
name: $device_name Sleep Modus
|
|
id: sleep_modus
|
|
restore_state: true
|
|
assumed_state: false
|
|
optimistic: true
|
|
on_turn_off:
|
|
- lambda: id(disp1).send_command_printf("home.sleepmodus.val=0");
|
|
- globals.set:
|
|
id: sleep_modus_global
|
|
value: '0'
|
|
- lambda: id(disp1).set_component_value("settings.a02",0);
|
|
on_turn_on:
|
|
- lambda: id(disp1).send_command_printf("home.sleepmodus.val=1");
|
|
- globals.set:
|
|
id: sleep_modus_global
|
|
value: '1'
|
|
- lambda: id(disp1).set_component_value("settings.a02",1);
|
|
|
|
#########################################
|
|
#
|
|
#
|
|
#############################################################
|
|
##### CLOSE - SWITCH #####
|
|
#############################################################
|
|
#
|
|
##
|
|
###
|
|
#############################################################################################################################################################################################
|
|
###
|
|
##
|
|
#
|
|
#############################################################
|
|
##### START - NUMBER #####
|
|
#############################################################
|
|
#
|
|
#
|
|
#########################################
|
|
|
|
number:
|
|
|
|
##### SCREEN BRIGHTNESS #####
|
|
- platform: template
|
|
name: $device_name Display Brightness
|
|
id: display_brightness
|
|
entity_category: config
|
|
unit_of_measurement: '%'
|
|
min_value: 1
|
|
max_value: 100
|
|
step: 1
|
|
restore_value: true
|
|
optimistic: true
|
|
set_action:
|
|
then:
|
|
- lambda: 'id(disp1).set_backlight_brightness(x/100);'
|
|
- lambda: 'id(disp1).send_command_printf("home.brightness.val=%i", int(x));'
|
|
- globals.set:
|
|
id: display_brightness_global
|
|
value: !lambda 'return int(x);'
|
|
|
|
##### SCREEN BRIGHTNESS DIMMED DOWN #####
|
|
- platform: template
|
|
name: $device_name Display Brightness Dimdown
|
|
id: display_dim_brightness
|
|
entity_category: config
|
|
unit_of_measurement: '%'
|
|
min_value: 1
|
|
max_value: 100
|
|
step: 1
|
|
restore_value: true
|
|
optimistic: true
|
|
set_action:
|
|
then:
|
|
- lambda: 'id(disp1).send_command_printf("home.brightdd.val=%i", int(x));'
|
|
- globals.set:
|
|
id: display_dim_brightness_global
|
|
value: !lambda 'return int(x);'
|
|
|
|
#########################################
|
|
#
|
|
#
|
|
#############################################################
|
|
##### CLOSE - NUMBER #####
|
|
#############################################################
|
|
#
|
|
##
|
|
###
|
|
#############################################################################################################################################################################################
|
|
###
|
|
##
|
|
#
|
|
#############################################################
|
|
##### START - DISPLAY START#####
|
|
#############################################################
|
|
#
|
|
#
|
|
#########################################
|
|
|
|
display:
|
|
- platform: nextion
|
|
id: disp1
|
|
uart_id: tf_uart
|
|
tft_url: $nextion_update_url
|
|
on_setup:
|
|
then:
|
|
- lambda: id(disp1).send_command_printf("page 9"); ##### CHANGE! - Loading page #####
|
|
- wait_until:
|
|
api.connected
|
|
- delay: 0.5s
|
|
- rtttl.play: "two short:d=4,o=5,b=100:16e6,16e6"
|
|
- delay: 0.5s
|
|
- switch.template.publish:
|
|
id: nextion_init
|
|
state: on
|
|
- lambda: id(disp1).send_command_printf("page 0"); #### home page #####
|
|
- delay: 2s ##### gives the display time to update other components & set the home page #####
|
|
- number.set:
|
|
id: display_brightness
|
|
value: !lambda 'return id(display_brightness_global);'
|
|
- number.set:
|
|
id: display_dim_brightness
|
|
value: !lambda 'return id(display_dim_brightness_global);'
|
|
- lambda: id(disp1).set_component_text_printf("settings.a03", "%i", id(display_brightness_global));
|
|
- lambda: id(disp1).set_component_text_printf("settings.a04", "%i", id(display_dim_brightness_global));
|
|
- lambda: id(disp1).send_command_printf("settings.brightslider.val=%i", id(display_brightness_global));
|
|
- lambda: id(disp1).send_command_printf("settings.dimslider.val=%i", id(display_dim_brightness_global));
|
|
- lambda: id(disp1).send_command_printf("home.sleepmodus.val=%i", id(sleep_modus_global));
|
|
- lambda: |-
|
|
id(disp1).set_component_value("settings.a02",0);
|
|
if (id(sleep_modus_global) == 1)
|
|
{
|
|
id(disp1).set_component_value("settings.a02",1);
|
|
}
|
|
- lambda: |-
|
|
id(disp1).send_command_printf("home.a50.pic=60");
|
|
id(disp1).send_command_printf("thermostat.a50.pic=60");
|
|
id(disp1).send_command_printf("thermostat.a06.pic=52");
|
|
if (id(heating_room_global) == 1)
|
|
{
|
|
id(disp1).send_command_printf("home.a52.pic=63");
|
|
id(disp1).send_command_printf("thermostat.a52.pic=63");
|
|
id(disp1).send_command_printf("thermostat.a06.pic=53");
|
|
}
|
|
- lambda: |-
|
|
if (id(hvac_mode_global) == 0) {
|
|
id(disp1).send_command_printf("home.a51.pic=60");
|
|
id(disp1).send_command_printf("thermostat.a51.pic=60");
|
|
id(disp1).send_command_printf("thermostat.a06.pic=51");
|
|
} else if (id(hvac_mode_global) == 1) {
|
|
id(disp1).send_command_printf("home.a51.pic=62");
|
|
id(disp1).send_command_printf("thermostat.a51.pic=62");
|
|
id(disp1).set_component_value("thermostat.a10",1);
|
|
}
|
|
|
|
#############################################################
|
|
##### CLOSE - DISPLAY START #####
|
|
#############################################################
|