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