Files
NSPanel_HA_Blueprint/esphome.yaml
2022-10-07 22:25:04 +02:00

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