From 88d3185b1ee0c6e4a1af9674dcd6d2f445bb88d6 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 7 Nov 2022 20:41:01 +0100 Subject: [PATCH] fix: indentation --- esphome.yaml | 2290 +++++++++++++++++++++++++------------------------- 1 file changed, 1145 insertions(+), 1145 deletions(-) diff --git a/esphome.yaml b/esphome.yaml index 5373329..932deca 100644 --- a/esphome.yaml +++ b/esphome.yaml @@ -3,1163 +3,1163 @@ ############################################################# - ##### advanced config activate only when you know what you do ##### - # substitutions: - # ## usage of secrets-file ## -> comment in ###### Change ME ###### - # device_name: "nspanel-name" # Wird im Blueprint benötigt! - # friendly_name: "NSPanel Name" # ändere Name zum Beispiel in den Raum wo das NSPanel verbaut wird - # wifi_ssid: !secret nspanel_wifi_ssid # add in your esphome secrets file. - # wifi_password: !secret nspanel_wifi_password # add in your esphome secrets file. - # ota_password: !secret nspanel_ota_password # add in your esphome secrets file. - # nextion_update_url: !secret nspanel_update_url # add in your esphome secrets file. Example: "http://"HOME ASSISTANT IP":8123/local/nspanel/nspanel.tft" - - # ## static ip config ## - # ip: "10.0.0.7" - # gw: "10.0.0.138" - # subnet: "255.255.255.0" - # dns: "10.0.0.138" - # domain: ".local" - - ##### end of advanced config ##### - - ###### EDIT THE BELOW ENTITIES FOR YOURS... depricated ####################################################################### - ##### - will be removed in future release - ignore it or set if exist ################## - # ha_hotwater_charge: switch.wwcharge - # ha_heating_system_flame: binary_sensor.flamestatus ##### Buderus Heizung Flamen-Status (Integration) ##### - # ha_climate_thermostat_target_temp: sensor.nspanel_target_temp ##### Climate Thermostat generiert in HA (custom_configuration -> nspanel) ##### - # ha_climate_thermostat: climate.nspanel_name ##### Climate Thermostat generiert in HA (custom_configuration -> nspanel) ##### - ######################################### - # - # - ############################################################# - ##### CLOSE - SUBSTITUTIONS ##### - ############################################################# - # - ## - ### - ############################################################################################################################################################################################# - ### - ## - # - ############################################################# - ##### START - Settings ##### - ############################################################# - # - # - ######################################### - - ##### Functionality for the Nextion display ##### - external_components: - - source: github://pr#2956 - components: [nextion] - refresh: 1h - - ##### ESP home CONFIG ##### - esphome: - name: ${device_name} +##### advanced config activate only when you know what you do ##### +# substitutions: + # ## usage of secrets-file ## -> comment in ###### Change ME ###### + # device_name: "nspanel-name" # Wird im Blueprint benötigt! + # friendly_name: "NSPanel Name" # ändere Name zum Beispiel in den Raum wo das NSPanel verbaut wird + # wifi_ssid: !secret nspanel_wifi_ssid # add in your esphome secrets file. + # wifi_password: !secret nspanel_wifi_password # add in your esphome secrets file. + # ota_password: !secret nspanel_ota_password # add in your esphome secrets file. + # nextion_update_url: !secret nspanel_update_url # add in your esphome secrets file. Example: "http://"HOME ASSISTANT IP":8123/local/nspanel/nspanel.tft" + + # ## static ip config ## + # ip: "10.0.0.7" + # gw: "10.0.0.138" + # subnet: "255.255.255.0" + # dns: "10.0.0.138" + # domain: ".local" + +##### end of advanced config ##### + + ###### EDIT THE BELOW ENTITIES FOR YOURS... depricated ####################################################################### + ##### - will be removed in future release - ignore it or set if exist ################## + # ha_hotwater_charge: switch.wwcharge + # ha_heating_system_flame: binary_sensor.flamestatus ##### Buderus Heizung Flamen-Status (Integration) ##### + # ha_climate_thermostat_target_temp: sensor.nspanel_target_temp ##### Climate Thermostat generiert in HA (custom_configuration -> nspanel) ##### + # ha_climate_thermostat: climate.nspanel_name ##### Climate Thermostat generiert in HA (custom_configuration -> nspanel) ##### +######################################### +# +# +############################################################# +##### CLOSE - SUBSTITUTIONS ##### +############################################################# +# +## +### +############################################################################################################################################################################################# +### +## +# +############################################################# +##### START - Settings ##### +############################################################# +# +# +######################################### + +##### Functionality for the Nextion display ##### +external_components: + - source: github://pr#2956 + components: [nextion] + refresh: 1h + +##### ESP home CONFIG ##### +esphome: + name: ${device_name} - - ##### TYPE OF ESP BOARD ##### - esp32: - board: esp32dev - - ##### WIFI SETUP ##### - wifi: - ssid: ${wifi_ssid} + +##### TYPE OF ESP BOARD ##### +esp32: + board: esp32dev + +##### WIFI SETUP ##### +wifi: + ssid: ${wifi_ssid} + password: ${wifi_password} + power_save_mode: none + ##### advanced config - uncomment to use static IP-Config ##### + # manual_ip: + # static_ip: ${ip} + # gateway: ${gw} + # subnet: ${subnet} + # dns1: ${dns} + # domain: ${domain} + # Enable fallback hotspot (captive portal) in case wifi connection fails + ap: + ssid: "${device_name}" password: ${wifi_password} - power_save_mode: none - ##### advanced config - uncomment to use static IP-Config ##### - # manual_ip: - # static_ip: ${ip} - # gateway: ${gw} - # subnet: ${subnet} - # dns1: ${dns} - # domain: ${domain} - # Enable fallback hotspot (captive portal) in case wifi connection fails - ap: - ssid: "${device_name}" - password: ${wifi_password} - - captive_portal: - - web_server: - port: 80 - auth: - username: admin - password: ${ota_password} - - ##### OTA (Over the air updates) password ##### - ota: + +captive_portal: + +web_server: + port: 80 + auth: + username: admin 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 - - ###### 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);' - - ##### Service to send a command "component_value (Dualstate Button)" directly to the display. Useful for testing ##### - - service: send_command_hide - variables: - component: string - then: - - wait_until: - switch.is_on: nextion_init - - lambda: 'id(disp1).hide_component(component.c_str());' - - ##### Service to send a command "component_value (Dualstate Button)" directly to the display. Useful for testing ##### - - service: send_command_font_color - variables: - component: string - message: int - then: - - wait_until: - switch.is_on: nextion_init - - lambda: 'id(disp1).set_component_font_color(component.c_str(), message);' - ##### Service to send a command "component_value (Dualstate Button)" directly to the display. Useful for testing ##### - - service: send_command_background_color - variables: - component: string - message: int - then: - - wait_until: - switch.is_on: nextion_init - - lambda: 'id(disp1).set_component_background_color(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' - - ##### lastclick State ##### - - id: lastclick_global - type: std::string - restore_value: no - initial_value: '' - - ##### lastclick State ##### - - id: last_click_lightsettings - type: std::string - restore_value: no - initial_value: '' - - ##### lastclick State ##### - - id: last_click_coversettings - type: std::string - restore_value: no - initial_value: '' - - ##### lastclick State ##### - - id: last_click_weathersettings - type: std::string - restore_value: no - initial_value: '' - - ######################################### - # - # - ############################################################# - ##### 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: 13 - internal: true - on_click: + +##### 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 + +###### 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);' + + ##### Service to send a command "component_value (Dualstate Button)" directly to the display. Useful for testing ##### + - service: send_command_hide + variables: + component: string + then: + - wait_until: + switch.is_on: nextion_init + - lambda: 'id(disp1).hide_component(component.c_str());' + + ##### Service to send a command "component_value (Dualstate Button)" directly to the display. Useful for testing ##### + - service: send_command_font_color + variables: + component: string + message: int + then: + - wait_until: + switch.is_on: nextion_init + - lambda: 'id(disp1).set_component_font_color(component.c_str(), message);' + ##### Service to send a command "component_value (Dualstate Button)" directly to the display. Useful for testing ##### + - service: send_command_background_color + variables: + component: string + message: int + then: + - wait_until: + switch.is_on: nextion_init + - lambda: 'id(disp1).set_component_background_color(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' + + ##### lastclick State ##### + - id: lastclick_global + type: std::string + restore_value: no + initial_value: '' + + ##### lastclick State ##### + - id: last_click_lightsettings + type: std::string + restore_value: no + initial_value: '' + + ##### lastclick State ##### + - id: last_click_coversettings + type: std::string + restore_value: no + initial_value: '' + + ##### lastclick State ##### + - id: last_click_weathersettings + type: std::string + restore_value: no + initial_value: '' + +######################################### +# +# +############################################################# +##### 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: 13 + 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: 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 ON / OFF Heating ##### + - platform: nextion + name: ${device_name} Heating Room State + id: heating_room_state + page_id: 6 + component_id: 16 + internal: true + on_click: + - switch.toggle: hvac_mode + + ##### Restart NSPanel Button ##### + - platform: nextion + name: ${device_name} Restart + page_id: 7 + component_id: 10 + internal: true + on_click: + - button.press: restart_nspanel + + ##### Sleep Modus NSPanel Button ##### + - platform: nextion + name: ${device_name} Sleep Modus + page_id: 7 + component_id: 5 + internal: true + on_click: + - switch.toggle: sleep_modus + + ##### Hotwater Charge ##### + - platform: nextion + name: ${device_name} Hotwater Charge + page_id: 6 + component_id: 21 + on_click: + - homeassistant.service: + service: switch.toggle + data: + entity_id: ${ha_hotwater_charge} + +######################################### +# +# +############################################################# +##### CLOSE - BINARY SENSOR ##### +############################################################# +# +## +### +############################################################################################################################################################################################# +### +## +# +############################################################# +##### START - SENSOR ##### +############################################################# +# +# +######################################### + +sensor: + + ##### Uptime ##### + - platform: uptime + name: ${device_name} uptime + disabled_by_default: true + + ##### WIFI Signal stregth + - platform: wifi_signal + name: ${device_name} RSSI + update_interval: 60s + + ##### 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); + + ##### 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) - 0.5; - - ##### THERMOSTAT - BUTTON INCREASES CLIMATE TARGET TEMPERATURE IN HA ##### - - platform: nextion - name: ${device_name} Climate Target UP - 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 ON / OFF Heating ##### - - platform: nextion - name: ${device_name} Heating Room State - id: heating_room_state - page_id: 6 - component_id: 16 - internal: true - on_click: - - switch.toggle: hvac_mode - - ##### Restart NSPanel Button ##### - - platform: nextion - name: ${device_name} Restart - page_id: 7 - component_id: 10 - internal: true - on_click: - - button.press: restart_nspanel - - ##### Sleep Modus NSPanel Button ##### - - platform: nextion - name: ${device_name} Sleep Modus - page_id: 7 - component_id: 5 - internal: true - on_click: - - switch.toggle: sleep_modus - - ##### Hotwater Charge ##### - - platform: nextion - name: ${device_name} Hotwater Charge - page_id: 6 - component_id: 21 - on_click: - - homeassistant.service: - service: switch.toggle - data: - entity_id: ${ha_hotwater_charge} - - ######################################### - # - # - ############################################################# - ##### CLOSE - BINARY SENSOR ##### - ############################################################# - # - ## - ### - ############################################################################################################################################################################################# - ### - ## - # - ############################################################# - ##### START - SENSOR ##### - ############################################################# - # - # - ######################################### - - sensor: - - ##### Uptime ##### - - platform: uptime - name: ${device_name} uptime + 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)); + + ###### Send current page to HA + - platform: nextion + id: current_page + name: "${device_name} Current Page" + variable_name: dp + update_interval: 1s + accuracy_decimals: 0 + filters: + - delta: 1.0 + - lambda: return int(x); + + +######################################### +# +# +############################################################# +##### CLOSE - SENSOR ##### +############################################################# +# +## +### +############################################################################################################################################################################################# +### +## +# +############################################################# +##### START - TEXT SENSOR##### +############################################################# +# +# +######################################### + +text_sensor: + + ##### ESPhome version used to compile the app ##### + - platform: version + name: ${device_name} ESPhome Version + disabled_by_default: true + + - platform: wifi_info + ip_address: + name: ${device_name} IP disabled_by_default: true - - ##### WIFI Signal stregth - - platform: wifi_signal - name: ${device_name} RSSI - update_interval: 60s - - ##### 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); - - ##### 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)); - - ###### Send current page to HA - - platform: nextion - id: current_page - name: "${device_name} Current Page" - variable_name: dp - update_interval: 1s - accuracy_decimals: 0 - filters: - - delta: 1.0 - - lambda: return int(x); - - - ######################################### - # - # - ############################################################# - ##### CLOSE - SENSOR ##### - ############################################################# - # - ## - ### - ############################################################################################################################################################################################# - ### - ## - # - ############################################################# - ##### START - TEXT SENSOR##### - ############################################################# - # - # - ######################################### - - text_sensor: - - ##### ESPhome version used to compile the app ##### - - platform: version - name: ${device_name} ESPhome Version + ssid: + name: ${device_name} SSID disabled_by_default: true - - - platform: wifi_info - ip_address: - name: ${device_name} IP - disabled_by_default: true - ssid: - name: ${device_name} SSID - disabled_by_default: true - bssid: - name: ${device_name} BSSID - disabled_by_default: true - - ##### 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_nextion - update_interval: 50ms - component_name: lastclick - internal: false - filters: - - lambda: |- - if (strcmp(x.c_str(), id(lastclick_global).c_str()) != 0) { - return x; - } else { - return {}; - } - on_value: - then: - - globals.set: - id: lastclick_global - value: !lambda return x; - - ##### 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 - internal: false - filters: - - lambda: |- - if (strcmp(x.c_str(), id(last_click_lightsettings).c_str()) != 0) { - return x; - } else { - return {}; - } - on_value: - then: - - globals.set: - id: last_click_lightsettings - value: !lambda return x; - - ##### 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: coversetting - internal: false - filters: - - lambda: |- - if (strcmp(x.c_str(), id(last_click_coversettings).c_str()) != 0) { - return x; - } else { - return {}; - } - on_value: - then: - - globals.set: - id: last_click_coversettings - value: !lambda return x; - - ##### last click weather page, the main action variable - push to HA ##### - - platform: nextion - nextion_id: disp1 - name: ${device_name} last click weathersettings - id: disp1_last_click_weathersettings - update_interval: 50ms - component_name: weathersetting - internal: false - filters: - - lambda: |- - if (strcmp(x.c_str(), id(last_click_weathersettings).c_str()) != 0) { - return x; - } else { - return {}; - } - on_value: - then: - - globals.set: - id: last_click_weathersettings - value: !lambda return x; - - ##### 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=53; // 53 is a blank image 20x20 - if (id(heating_system).state == "on") { - symbol=64; - } - 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); - } - - ######################################### - # - # - ############################################################# - ##### CLOSE - TEXT SENSOR ##### - ############################################################# - # - ## - ### - ############################################################################################################################################################################################# - ### - ## - # - ############################################################# - ##### START - SWITCH ##### - ############################################################# - # - # - ######################################### - - switch: - - # ##### Restart switch ###### - # - platform: restart - # name: ${device_name} Restart - - # ##### Restart in safe-mode ##### - # - platform: safe_mode - # name: ${device_name} Restart (Safe Mode) - - ##### 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 - - ##### 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); + bssid: + name: ${device_name} BSSID + disabled_by_default: true + + ##### 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_nextion + update_interval: 50ms + component_name: lastclick + internal: false + filters: + - lambda: |- + if (strcmp(x.c_str(), id(lastclick_global).c_str()) != 0) { + return x; + } else { + return {}; + } + on_value: + then: - 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=49"); - - lambda: id(disp1).send_command_printf("home.a51.pic=53"); - - lambda: id(disp1).send_command_printf("thermostat.a51.pic=53"); - on_turn_on: - - lambda: id(disp1).set_component_value("thermostat.a10",1); + id: lastclick_global + value: !lambda return x; + + ##### 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 + internal: false + filters: + - lambda: |- + if (strcmp(x.c_str(), id(last_click_lightsettings).c_str()) != 0) { + return x; + } else { + return {}; + } + on_value: + then: - 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' + id: last_click_lightsettings + value: !lambda return x; + + ##### 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: coversetting + internal: false + filters: + - lambda: |- + if (strcmp(x.c_str(), id(last_click_coversettings).c_str()) != 0) { + return x; + } else { + return {}; + } + on_value: + then: + - globals.set: + id: last_click_coversettings + value: !lambda return x; + + ##### last click weather page, the main action variable - push to HA ##### + - platform: nextion + nextion_id: disp1 + name: ${device_name} last click weathersettings + id: disp1_last_click_weathersettings + update_interval: 50ms + component_name: weathersetting + internal: false + filters: + - lambda: |- + if (strcmp(x.c_str(), id(last_click_weathersettings).c_str()) != 0) { + return x; + } else { + return {}; + } + on_value: + then: + - globals.set: + id: last_click_weathersettings + value: !lambda return x; + + ##### 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: |- - if (id(heating_room_global) == 0) + int symbol=53; // 53 is a blank image 20x20 + if (id(heating_system).state == "on") { + symbol=64; + } + 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); + } + +######################################### +# +# +############################################################# +##### CLOSE - TEXT SENSOR ##### +############################################################# +# +## +### +############################################################################################################################################################################################# +### +## +# +############################################################# +##### START - SWITCH ##### +############################################################# +# +# +######################################### + +switch: + + # ##### Restart switch ###### + # - platform: restart + # name: ${device_name} Restart + + # ##### Restart in safe-mode ##### + # - platform: safe_mode + # name: ${device_name} Restart (Safe Mode) + + ##### 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 + + ##### 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=49"); + - lambda: id(disp1).send_command_printf("home.a51.pic=53"); + - lambda: id(disp1).send_command_printf("thermostat.a51.pic=53"); + 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=50"); + } else if (id(heating_room_global) == 1) { + id(disp1).send_command_printf("thermostat.a06.pic=51"); + } + - lambda: id(disp1).send_command_printf("home.a51.pic=65"); + - lambda: id(disp1).send_command_printf("thermostat.a51.pic=65"); + + ##### 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).send_command_printf("thermostat.a06.pic=50"); - } else if (id(heating_room_global) == 1) { + id(disp1).set_component_value("settings.a02",1); + } + - lambda: |- + id(disp1).send_command_printf("home.a50.pic=53"); + id(disp1).send_command_printf("thermostat.a50.pic=53"); + id(disp1).send_command_printf("thermostat.a06.pic=50"); + if (id(heating_room_global) == 1) + { + id(disp1).send_command_printf("home.a52.pic=66"); + id(disp1).send_command_printf("thermostat.a52.pic=66"); id(disp1).send_command_printf("thermostat.a06.pic=51"); - } - - lambda: id(disp1).send_command_printf("home.a51.pic=65"); - - lambda: id(disp1).send_command_printf("thermostat.a51.pic=65"); - - ##### 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=53"); - id(disp1).send_command_printf("thermostat.a50.pic=53"); - id(disp1).send_command_printf("thermostat.a06.pic=50"); - if (id(heating_room_global) == 1) - { - id(disp1).send_command_printf("home.a52.pic=66"); - id(disp1).send_command_printf("thermostat.a52.pic=66"); - id(disp1).send_command_printf("thermostat.a06.pic=51"); - } - - lambda: |- - if (id(hvac_mode_global) == 0) { - id(disp1).send_command_printf("home.a51.pic=53"); - id(disp1).send_command_printf("thermostat.a51.pic=53"); - id(disp1).send_command_printf("thermostat.a06.pic=49"); - } else if (id(hvac_mode_global) == 1) { - id(disp1).send_command_printf("home.a51.pic=65"); - id(disp1).send_command_printf("thermostat.a51.pic=65"); - id(disp1).set_component_value("thermostat.a10",1); - } - - ############################################################# - ##### CLOSE - DISPLAY START ##### - ############################################################# \ No newline at end of file + } + - lambda: |- + if (id(hvac_mode_global) == 0) { + id(disp1).send_command_printf("home.a51.pic=53"); + id(disp1).send_command_printf("thermostat.a51.pic=53"); + id(disp1).send_command_printf("thermostat.a06.pic=49"); + } else if (id(hvac_mode_global) == 1) { + id(disp1).send_command_printf("home.a51.pic=65"); + id(disp1).send_command_printf("thermostat.a51.pic=65"); + id(disp1).set_component_value("thermostat.a10",1); + } + +############################################################# +##### CLOSE - DISPLAY START ##### +############################################################# \ No newline at end of file