diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 277feeb..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..39f9ace --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +*.tft binary +*.HMI binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7bf2894 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Ignore Mac DS_Store files +.DS_Store +**/.DS_Store diff --git a/blueprint.yaml b/blueprint.yaml deleted file mode 100644 index 5f09737..0000000 --- a/blueprint.yaml +++ /dev/null @@ -1,4249 +0,0 @@ -############################################################# -##### START - INPUT ##### -############################################################# - -blueprint: - name: NSPanel Configuration - description: v2.0.0 - Configuration and synchronization NSpanele via Blueprint - domain: automation - input: - nspanel_name: - name: ESPhome Node Name - description: 'Here you have to enter the exact same name "node_name" as in the ESPHome file. Example nspanel_name' - default: [nspanel_name] - selector: - text: {} - language: - name: Language for NSPanel - description: 'select your language for the NSPanel Display' - selector: - select: - options: - - DE - - EN - tft_path: - name: Nextion TFT File Folder for the service Folder Watcher - description: 'TFT Path where the Nextion TFT File is stored ESPHome Example *"/config/www/nspanel/nspanel.tft"* Attention! The folder watcher must also be configured in the configuration.yaml. Only needed for manual upload of the TFT file. See HowTo' - default: [/config/www/nspanel/nspanel.tft] - selector: - text: {} - delay: - name: Delay to avoid sync problems (coming soon) - description: 'Synchronization Problems may occur due to the NETWORK / WLAN. To avoid this problem enter your value for the delay (milliseconds)' - default: ["10"] - selector: - text: {} - sync_value_ha: - name: Synchronization of all values from HA to NSPanel for Lightsetting and Coversetting Page. - description: 'Synchronization of values between HA and NSPanel for Lightsetting and Coversetting Page -> Maybe causes number jumps' - default: 'No' - selector: - select: - options: - - label: 'No' - value: select_no - - label: 'Yes' - value: select_yes - sync_slider_ha: - name: Synchronization of all Sliders from HA to NSPanel for LIGHTSETTING and COVERSETTING Page. - description: 'Synchronization of sliders between HA and NSPanel for Lightsetting and Coversetting Page -> Maybe causes flickering on the Slider' - default: 'No' - selector: - select: - options: - - label: 'No' - value: select_no - - label: 'Yes' - value: select_yes - weather: - name: Weather Integration - description: 'select our Weather Integration' - selector: - select: - options: - - Default - - AccuWeather - accuweather: - name: Name assigned to the AccuWeather Integration (Optional) - description: 'If you use Accuweather Integration, the name of the Accuweather Integration must be entered here. ATTENTION! You must enter the name as specified in the entity. Example name is *"Home"* Weather then please write *"home_weather"*' - default: [] - selector: - text: {} - outdoortemp: - name: Outdoor Temperature Sensor (Optional) - description: 'If no outdoor sensor is available, leave the field empty. If this field is not filled in, the outdoor temperature will be taken from your selected weather integration. If an entity is selected, the value is displayed on the *"Home Page"* and *"Thermostat Page"*' - default: [] - selector: - entity: - domain: - - sensor - humidity: - name: Humidity Sensor (Optional) - description: 'If an entity is selected, the value is displayed on the *"Home Page"*' - default: [] - selector: - entity: - domain: - - sensor - hotwatertemp: - name: Hot Water Temperature Sensor (Optional) - description: 'If an entity is selected, the value is displayed on the *"Home Page"* and *"Thermostat Page"*' - default: [] - selector: - entity: - domain: - - sensor - left_button_entity: - name: Left Button (Optional) - description: 'Left Hardware Button - Select the entity that should be switched' - default: [] - selector: - entity: - domain: - - light - - switch - - input_boolean - - cover - - left_button_name: - name: Name "Left Button" (Optional) - description: 'Left Button label - 10 characters are supported' - default: [] - selector: - text: {} - right_button_entity: - name: Right Button (Optional) - description: 'Right Hardware Button - Select the entity that should be switched' - default: [] - selector: - entity: - domain: - - light - - switch - - input_boolean - - cover - right_button_name: - name: Name "Right Button" (Optional) - description: 'Right Button label - 10 characters are supported' - default: [] - selector: - text: {} - - ##### Button ##### - entity01: - name: Button 01 (Optional) - description: Nextion Editor - *buttonpage01.button01* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity01_name: - name: Name "Button 01" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity02: - name: Button 02 (Optional) - description: Nextion Editor - *buttonpage01.button02* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity02_name: - name: Name "Button 02" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity03: - name: Button 03 (Optional) - description: Nextion Editor - *buttonpage01.button03* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity03_name: - name: Name "Button 03" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity04: - name: Button 04 (Optional) - description: Nextion Editor - *buttonpage01.button04* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity04_name: - name: Name "Button 04" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity05: - name: Button 05 (Optional) - description: Nextion Editor - *buttonpage01.button05* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity05_name: - name: Name "Button 05" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity06: - name: Button 06 (Optional) - description: Nextion Editor - *buttonpage01.button06* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity06_name: - name: Name "Button 06" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity07: - name: Button 07 (Optional) - description: Nextion Editor - *buttonpage01.button07* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity07_name: - name: Name "Button 07" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity08: - name: Button 08 (Optional) - description: Nextion Editor - *buttonpage01.button08* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity08_name: - name: Name "Button 08" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity09: - name: Button 09 (Optional) - description: Nextion Editor - *buttonpage02.button01* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity09_name: - name: Name "Button 09" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity10: - name: Button 10 (Optional) - description: Nextion Editor - *buttonpage02.button02* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity10_name: - name: Name "Button 10" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity11: - name: Button 11 (Optional) - description: Nextion Editor - *buttonpage02.button03* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity11_name: - name: Name "Button 11" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity12: - name: Button 12 (Optional) - description: Nextion Editor - *buttonpage02.button04* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity12_name: - name: Name "Button 12" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity13: - name: Button 13 (Optional) - description: Nextion Editor - *buttonpage01.button05* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity13_name: - name: Name "Button 13" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity14: - name: Button 14 (Optional) - description: Nextion Editor - *buttonpage02.button06* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity14_name: - name: Name "Button 14" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity15: - name: Button 15 (Optional) - description: Nextion Editor - *buttonpage02.button07* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity15_name: - name: Name "Button 15" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity16: - name: Button 16 (Optional) - description: Nextion Editor - *buttonpage02.button08* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity16_name: - name: Name "Button 16" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity17: - name: Button 17 (Optional) - description: Nextion Editor - *buttonpage03.button01* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity17_name: - name: Name "Button 17" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity18: - name: Button 18 (Optional) - description: Nextion Editor - *buttonpage03.button02* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity18_name: - name: Name "Button 18" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity19: - name: Button 19 (Optional) - description: Nextion Editor - *buttonpage03.button03* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity19_name: - name: Name "Button 19" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity20: - name: Button 20 (Optional) - description: Nextion Editor - *buttonpage03.button04* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity20_name: - name: Name "Button 20" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity21: - name: Button 21 (Optional) - description: Nextion Editor - *buttonpage03.button05* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity21_name: - name: Name "Button 21" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity22: - name: Button 22 (Optional) - description: Nextion Editor - *buttonpage03.button06* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity22_name: - name: Name "Button 22" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity23: - name: Button 23 (Optional) - description: Nextion Editor - *buttonpage03.button07* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity23_name: - name: Name "Button 23" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity24: - name: Button 24 (Optional) - description: Nextion Editor - *buttonpage03.button08* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity24_name: - name: Name "Button 24" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity25: - name: Button 25 (Optional) - description: Nextion Editor - *buttonpage04.button01* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity25_name: - name: Name "Button 25" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity26: - name: Button 26 (Optional) - description: Nextion Editor - *buttonpage04.button02* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity26_name: - name: Name "Button 26" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity27: - name: Button 27 (Optional) - description: Nextion Editor - *buttonpage04.button03* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity27_name: - name: Name "Button 27" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity28: - name: Button 28 (Optional) - description: Nextion Editor - *buttonpage04.button04* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity28_name: - name: Name "Button 28" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity29: - name: Button 29 (Optional) - description: Nextion Editor - *buttonpage04.button05* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity29_name: - name: Name "Button 29" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity30: - name: Button 30 (Optional) - description: Nextion Editor - *buttonpage04.button06* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity30_name: - name: Name "Button 30" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity31: - name: Button 31 (Optional) - description: Nextion Editor - *buttonpage04.button07* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity31_name: - name: Name "Button 31" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - entity32: - name: Button 32 (Optional) - description: Nextion Editor - *buttonpage04.button08* **(ONLY light | switch | cover | input_boolean)** - default: [] - selector: - entity: - domain: - - light - - switch - - cover - - input_boolean - entity32_name: - name: Name "Button 32" (Optional) - description: Button label - 10 characters are supported - default: [] - selector: - text: {} - -mode: parallel -max: 5000 - -############################################################# -##### CLOSE - INPUT ##### -############################################################# - - -############################################################# -##### START - Variables ##### -############################################################# - -trigger_variables: - nspanel_name_trigger: !input "nspanel_name" - last_click: "sensor.{{ nspanel_name_trigger }}_last_click" - last_click_lightsettings: "sensor.{{ nspanel_name_trigger }}_last_click_lightsettings" - last_click_coversettings: "sensor.{{ nspanel_name_trigger }}_last_click_coversettings" - last_click_weathersettings: "sensor.{{ nspanel_name_trigger }}_last_click_weathersettings" - left_button: "binary_sensor.{{ nspanel_name_trigger }}_left_button" - right_button: "binary_sensor.{{ nspanel_name_trigger }}_right_button" - weather_forcast_button: "binary_sensor.{{ nspanel_name_trigger }}_weather_forcast" - nextion_inited_trigger: "switch.{{ nspanel_name_trigger }}_nextion_inited" - entity_long_trigger: "{{ entity_long }}" - -variables: - ##### GENERAL ##### - nspanel_name: !input "nspanel_name" - time: "{{ (as_timestamp(now()) | timestamp_custom('%H:%M')) }}" - weather: !input "weather" - language: !input "language" - - ##### PUSH TO NEXTION DISPLAY ##### - command_text_printf: "esphome.{{ nspanel_name }}_send_command_text_printf" - command_value: "esphome.{{ nspanel_name }}_send_command_value" - command_printf: "esphome.{{ nspanel_name }}_send_command_printf" - command_font_color: "esphome.{{ nspanel_name }}_send_command_font_color" - command_background_color: "esphome.{{ nspanel_name }}_send_command_background_color" - - ###### SYNC SETTINGS ##### - delay_boot: !input "delay" - delay_value: !input "delay" - delay_jump_page: !input "delay" - sync_slider_ha: !input "sync_slider_ha" - sync_value_ha: !input "sync_value_ha" - - ##### TFT UPLOAD ##### - tft_upload: "esphome.{{ nspanel_name }}_upload_tft" - tft_path: !input "tft_path" - - ##### GENERAL ENTITYS ##### - humidity: !input "humidity" - hotwatertemp: !input "hotwatertemp" - outdoortemp: !input "outdoortemp" - - #### HARDWARE BUTTONS ##### - left_button_entity: !input "left_button_entity" - left_button_name: !input "left_button_name" - right_button_entity: !input "right_button_entity" - right_button_name: !input "right_button_name" - - ##### NEXTION PIC MAPPING ##### - cover_pic_closed: "106" - cover_pic_open: "107" - battery_icon: "108" - light_pic_off: "125" - light_pic_on: "126" - - weather_sunny: "2" - weather_cloudy: "3" - weather_rainy: "4" - weather_pouring: "5" - weather_snowy: "6" - weather_hail: "7" - weather_snowy_rainy: "7" - weather_fog: "8" - weather_windy: "9" - weather_windy_variant: "9" - weather_lightning: "10" - weather_partlycloudy_day: "11" - weather_partlycloudy_night: "12" - weather_lightning_rainy_day: "13" - weather_lightning_rainy_night: "14" - weather_execptional_day: "13" - weather_execptional_night: "14" - weather_clear_night: "15" - - weather_icon_blank: "53" - weather_icon_rain: "59" - weather_icon_sun: "60" - weather_icon_protect: "61" - weather_icon_lightning: "62" - weather_icon_wind: "63" - - ###### NEXTION COLOR BUTTON DESIGN ##### - button_light_off: "90" - button_light_on: "91" - button_switch_off: "92" - button_switch_on: "93" - button_cover_off: "94" - button_cover_on: "95" - button_color_1: "65535" - button_color_2: "10597" - - ##### DATE - DE ##### - date01_de: "{{ ((as_timestamp(now())) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }}" - date02_de: "{{ ((as_timestamp(now()) + 86400) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }}" - date03_de: "{{ ((as_timestamp(now()) + 172800) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }}" - date04_de: "{{ ((as_timestamp(now()) + 259200) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }}" - date05_de: "{{ ((as_timestamp(now()) + 345600) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }}" - - ##### DATE - EN ##### - date01_en: "{{ ((as_timestamp(now())) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }}" - date02_en: "{{ ((as_timestamp(now()) + 86400) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }}" - date03_en: "{{ ((as_timestamp(now()) + 172800) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }}" - date04_en: "{{ ((as_timestamp(now()) + 259200) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }}" - date05_en: "{{ ((as_timestamp(now()) + 345600) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }}" - - ##### DAY WEATHER FORCAST - DE ##### - day01_de: "Heute" - day02_de: "Morgen" - day03_de: "in 2 Tagen" - day04_de: "in 3 Tagen" - day05_de: "in 4 tagen" - - ##### DAY WEATHER FORCAST - EN ##### - day01_en: "Today" - day02_en: "Tomorrow" - day03_en: "in 2 Days" - day04_en: "in 3 Days" - day05_en: "in 4 Days" - - ##### WEATHER INTEGRATION - METEOROLOGISK HA DEFAULT ##### - ha_weather: "weather.home" - - ##### WEATHER INTEGRATION _ ACCUWEATHER ##### - accuweather: !input "accuweather" - accuweather_value: "weather.{{ accuweather }}" - - ##### FORCAST ACCUWEATHER - DAY 0 ##### - accuweather_realfeel_temperature_min_0d: "sensor.{{ accuweather }}_realfeel_temperature_min_0d" - accuweather_realfeel_temperature_max_0d: "sensor.{{ accuweather }}_realfeel_temperature_max_0d" - accuweather_hours_of_sun_0d: "sensor.{{ accuweather }}_hours_of_sun_0d" - accuweather_uv_index_0d: "sensor.{{ accuweather }}_uv_index_0d" - accuweather_thunderstorm_probability_day_0d: "sensor.{{ accuweather }}_thunderstorm_probability_day_0d" - accuweather_thunderstorm_probability_night_0d: "sensor.{{ accuweather }}_thunderstorm_probability_night_0d" - accuweather_wind_day_0d: "sensor.{{ accuweather }}_wind_day_0d" - accuweather_wind_night_0d: "sensor.{{ accuweather }}_wind_night_0d" - ##### FORCAST ACCUWEATHER - DAY 1 ##### - accuweather_realfeel_temperature_min_1d: "sensor.{{ accuweather }}_realfeel_temperature_min_1d" - accuweather_realfeel_temperature_max_1d: "sensor.{{ accuweather }}_realfeel_temperature_max_1d" - accuweather_hours_of_sun_1d: "sensor.{{ accuweather }}_hours_of_sun_1d" - accuweather_uv_index_1d: "sensor.{{ accuweather }}_uv_index_1d" - accuweather_thunderstorm_probability_day_1d: "sensor.{{ accuweather }}_thunderstorm_probability_day_1d" - accuweather_thunderstorm_probability_night_1d: "sensor.{{ accuweather }}_thunderstorm_probability_night_1d" - accuweather_wind_day_1d: "sensor.{{ accuweather }}_wind_day_1d" - accuweather_wind_night_1d: "sensor.{{ accuweather }}_wind_night_1d" - ##### FORCAST ACCUWEATHER - DAY 2 ##### - accuweather_realfeel_temperature_min_2d: "sensor.{{ accuweather }}_realfeel_temperature_min_2d" - accuweather_realfeel_temperature_max_2d: "sensor.{{ accuweather }}_realfeel_temperature_max_2d" - accuweather_hours_of_sun_2d: "sensor.{{ accuweather }}_hours_of_sun_2d" - accuweather_uv_index_2d: "sensor.{{ accuweather }}_uv_index_2d" - accuweather_thunderstorm_probability_day_2d: "sensor.{{ accuweather }}_thunderstorm_probability_day_2d" - accuweather_thunderstorm_probability_night_2d: "sensor.{{ accuweather }}_thunderstorm_probability_night_2d" - accuweather_wind_day_2d: "sensor.{{ accuweather }}_wind_day_2d" - accuweather_wind_night_2d: "sensor.{{ accuweather }}_wind_night_2d" - ##### FORCAST ACCUWEATHER - DAY 3 ##### - accuweather_realfeel_temperature_min_3d: "sensor.{{ accuweather }}_realfeel_temperature_min_3d" - accuweather_realfeel_temperature_max_3d: "sensor.{{ accuweather }}_realfeel_temperature_max_3d" - accuweather_hours_of_sun_3d: "sensor.{{ accuweather }}_hours_of_sun_3d" - accuweather_uv_index_3d: "sensor.{{ accuweather }}_uv_index_3d" - accuweather_thunderstorm_probability_day_3d: "sensor.{{ accuweather }}_thunderstorm_probability_day_3d" - accuweather_thunderstorm_probability_night_3d: "sensor.{{ accuweather }}_thunderstorm_probability_night_3d" - accuweather_wind_day_3d: "sensor.{{ accuweather }}_wind_day_3d" - accuweather_wind_night_3d: "sensor.{{ accuweather }}_wind_night_3d" - ##### FORCAST ACCUWEATHER - DAY 4 ##### - accuweather_realfeel_temperature_min_4d: "sensor.{{ accuweather }}_realfeel_temperature_min_4d" - accuweather_realfeel_temperature_max_4d: "sensor.{{ accuweather }}_realfeel_temperature_max_4d" - accuweather_hours_of_sun_4d: "sensor.{{ accuweather }}_hours_of_sun_4d" - accuweather_uv_index_4d: "sensor.{{ accuweather }}_uv_index_4d" - accuweather_thunderstorm_probability_day_4d: "sensor.{{ accuweather }}_thunderstorm_probability_day_4d" - accuweather_thunderstorm_probability_night_4d: "sensor.{{ accuweather }}_thunderstorm_probability_night_4d" - accuweather_wind_day_4d: "sensor.{{ accuweather }}_wind_day_4d" - accuweather_wind_night_4d: "sensor.{{ accuweather }}_wind_night_4d" - - ##### BUTTONS 1- 32 ##### - entity01: !input "entity01" - entity01_name: !input "entity01_name" - entity02: !input "entity02" - entity02_name: !input "entity02_name" - entity03: !input "entity03" - entity03_name: !input "entity03_name" - entity04: !input "entity04" - entity04_name: !input "entity04_name" - entity05: !input "entity05" - entity05_name: !input "entity05_name" - entity06: !input "entity06" - entity06_name: !input "entity06_name" - entity07: !input "entity07" - entity07_name: !input "entity07_name" - entity08: !input "entity08" - entity08_name: !input "entity08_name" - entity09: !input "entity09" - entity09_name: !input "entity09_name" - entity10: !input "entity10" - entity10_name: !input "entity10_name" - entity11: !input "entity11" - entity11_name: !input "entity11_name" - entity12: !input "entity12" - entity12_name: !input "entity12_name" - entity13: !input "entity13" - entity13_name: !input "entity13_name" - entity14: !input "entity14" - entity14_name: !input "entity14_name" - entity15: !input "entity15" - entity15_name: !input "entity15_name" - entity16: !input "entity16" - entity16_name: !input "entity16_name" - entity17: !input "entity17" - entity17_name: !input "entity17_name" - entity18: !input "entity18" - entity18_name: !input "entity18_name" - entity19: !input "entity19" - entity19_name: !input "entity19_name" - entity20: !input "entity20" - entity20_name: !input "entity20_name" - entity21: !input "entity21" - entity21_name: !input "entity21_name" - entity22: !input "entity22" - entity22_name: !input "entity22_name" - entity23: !input "entity23" - entity23_name: !input "entity23_name" - entity24: !input "entity24" - entity24_name: !input "entity24_name" - entity25: !input "entity25" - entity25_name: !input "entity25_name" - entity26: !input "entity26" - entity26_name: !input "entity26_name" - entity27: !input "entity27" - entity27_name: !input "entity27_name" - entity28: !input "entity28" - entity28_name: !input "entity28_name" - entity29: !input "entity29" - entity29_name: !input "entity29_name" - entity30: !input "entity30" - entity30_name: !input "entity30_name" - entity31: !input "entity31" - entity31_name: !input "entity31_name" - entity32: !input "entity32" - entity32_name: !input "entity32_name" - -############################################################# -##### CLOSE - Variables ##### -############################################################# - - -############################################################# -##### START - Trigger ##### -############################################################# - -trigger: - - ##### Trigger - General ################################################################################################################# - - ###### DELME - Trigger "nspanel_boot_init" ###### - - platform: state - entity_id: input_boolean.trigger_nspanel_boot - to: "on" - id: nspanel_boot_init - - ##### Reboot - Trigger "nspanel_boot_init" ##### - - platform: template - value_template: '{{ states(nextion_inited_trigger) is match "on" }}' - id: nspanel_boot_init - - ##### TFT Upload - Trigger "tft_upload" ##### - - platform: event - event_type: folder_watcher - event_data: - event_type: modified - path: !input "tft_path" - id: tft_upload - - ##### Time - Trigger "time_state" ##### - - platform: time_pattern - minutes: "/1" - id: time_state - - #### Weather Temp - Trigger "weather_temp_state" #### - - platform: time_pattern - minutes: "10" - id: weather_temp_state - - #### Weather State - Trigger "weather_update_state" #### - - platform: template - value_template: '{{ states(last_click) is match "weather" }}' - id: weather_update_state - - #### Weather Time - Trigger "weather_update_time" #### -> kann gelöscht werden nah weather umbau - - platform: time_pattern - minutes: "10" - id: weather_update_time - - ##### Humidity - Trigger "humidity_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "humidity" - id: humidity_state - - ##### Hot Water - Trigger "hotwatertemp_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "hotwatertemp" - id: hotwatertemp_state - - ##### Outdoor Temp - Trigger "outdoortemp_state" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: !input "outdoortemp" - id: outdoortemp_state - - ##### Left Button - Trigger "left_button_press" ##### - - platform: template - value_template: '{{ states(left_button) is match "on" }}' - id: left_button_press - - ##### Right Button - Trigger "right_button_press" ##### - - platform: template - value_template: '{{ states(right_button) is match "on" }}' - id: right_button_press - - - - - ##### Trigger - Button General ################################################################################################################# - - ##### Page Button - Trigger "short_press" - SHORT Press via "last_click" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ last_click }}" - id: short_press - - ##### Page Button - Trigger "long_press" - LONG Press via "last_click" - Button LONG Press for jump to Lightsetting or Coversetting Page ##### - - platform: template - value_template: '{{ states(last_click) is match "press" }}' - for: - seconds: 1 - id: long_press - - ##### Page Lightsettings - Trigger "light_settings" - Changes Lightsettings Page via "last_click_lightsettings" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ last_click_lightsettings }}" - id: light_settings - - ##### Page Coversettings - Trigger "cover_settings" - Changes Coversettings Page via "last_click_coversettings" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ last_click_coversettings }}" - id: cover_settings - - ##### Page Weather Forcast - Trigger "weather_settings" - Changes Weather Page via "last_click_weathersettings" ##### - - platform: event - event_type: state_changed - event_data: - entity_id: "{{ last_click_weathersettings }}" - id: weather_settings - - ##### Page Button - Trigger "button_page" Entity sync ##### - - platform: template - value_template: '{{ states(last_click) is match "button" }}' - id: button_page - - - - ##### Trigger - Button State change ################################################################################################################# - - ##### Button01 Sync - Trigger "current_state_entity01" ##### - - platform: state - entity_id: !input "entity01" - id: current_state_entity01 - - ##### Button02 Sync - Trigger "current_state_entity02" ##### - - platform: state - entity_id: !input "entity02" - id: current_state_entity02 - - ##### Button03 Sync - Trigger "current_state_entity03" ##### - - platform: state - entity_id: !input "entity03" - id: current_state_entity03 - - ##### Button04 Sync - Trigger "current_state_entity04" ##### - - platform: state - entity_id: !input "entity04" - id: current_state_entity04 - - ##### Button05 Sync - Trigger "current_state_entity05" ##### - - platform: state - entity_id: !input "entity05" - id: current_state_entity05 - - ##### Button06 Sync - Trigger "current_state_entity06" ##### - - platform: state - entity_id: !input "entity06" - id: current_state_entity06 - - ##### Button07 Sync - Trigger "current_state_entity07" ##### - - platform: state - entity_id: !input "entity07" - id: current_state_entity07 - - ##### Button08 Sync - Trigger "current_state_entity08" ##### - - platform: state - entity_id: !input "entity08" - id: current_state_entity08 - - ##### Button09 Sync - Trigger "current_state_entity09" ##### - - platform: state - entity_id: !input "entity09" - id: current_state_entity09 - - ##### Button10 Sync - Trigger "current_state_entity10" ##### - - platform: state - entity_id: !input "entity10" - id: current_state_entity10 - - ##### Button11 Sync - Trigger "current_state_entity11" ##### - - platform: state - entity_id: !input "entity11" - id: current_state_entity11 - - ##### Button12 Sync - Trigger "current_state_entity12" ##### - - platform: state - entity_id: !input "entity12" - id: current_state_entity12 - - ##### Button13 Sync - Trigger "current_state_entity13" ##### - - platform: state - entity_id: !input "entity13" - id: current_state_entity13 - - ##### Button14 Sync - Trigger "current_state_entity14" ##### - - platform: state - entity_id: !input "entity14" - id: current_state_entity14 - - ##### Button15 Sync - Trigger "current_state_entity15" ##### - - platform: state - entity_id: !input "entity15" - id: current_state_entity15 - - ##### Button16 Sync - Trigger "current_state_entity16" ##### - - platform: state - entity_id: !input "entity16" - id: current_state_entity16 - - ##### Button17 Sync - Trigger "current_state_entity17" ##### - - platform: state - entity_id: !input "entity17" - id: current_state_entity17 - - ##### Button18 Sync - Trigger "current_state_entity18" ##### - - platform: state - entity_id: !input "entity18" - id: current_state_entity18 - - ##### Button19 Sync - Trigger "current_state_entity19" ##### - - platform: state - entity_id: !input "entity19" - id: current_state_entity19 - - ##### Button20 Sync - Trigger "current_state_entity20" ##### - - platform: state - entity_id: !input "entity20" - id: current_state_entity20 - - ##### Button21 Sync - Trigger "current_state_entity21" ##### - - platform: state - entity_id: !input "entity21" - id: current_state_entity21 - - ##### Button22 Sync - Trigger "current_state_entity22" ##### - - platform: state - entity_id: !input "entity22" - id: current_state_entity22 - - ##### Button23 Sync - Trigger "current_state_entity23" ##### - - platform: state - entity_id: !input "entity23" - id: current_state_entity23 - - ##### Button24 Sync - Trigger "current_state_entity24" ##### - - platform: state - entity_id: !input "entity24" - id: current_state_entity24 - - ##### Button25 Sync - Trigger "current_state_entity25" ##### - - platform: state - entity_id: !input "entity25" - id: current_state_entity25 - - ##### Button26 Sync - Trigger "current_state_entity26" ##### - - platform: state - entity_id: !input "entity26" - id: current_state_entity26 - - ##### Button27 Sync - Trigger "current_state_entity27" ##### - - platform: state - entity_id: !input "entity27" - id: current_state_entity27 - - ##### Button28 Sync - Trigger "current_state_entity28" ##### - - platform: state - entity_id: !input "entity28" - id: current_state_entity28 - - ##### Button29 Sync - Trigger "current_state_entity29" ##### - - platform: state - entity_id: !input "entity29" - id: current_state_entity29 - - ##### Button30 Sync - Trigger "current_state_entity30" ##### - - platform: state - entity_id: !input "entity30" - id: current_state_entity30 - - ##### Button31 Sync - Trigger "current_state_entity31" ##### - - platform: state - entity_id: !input "entity31" - id: current_state_entity31 - - ##### Button32 Sync - Trigger "current_state_entity32" ##### - - platform: state - entity_id: !input "entity32" - id: current_state_entity32 - - -############################################################# -##### CLOSE - Trigger ##### -############################################################# - - -############################################################# -##### START - Action ##### -############################################################# - -action: - - variables: - ##### Entity - Page Button - Toggle Entity ##### - entity_short: >- - {%- if states(last_click) == "releasebuttonpage01button01" -%} {{ entity01 }} - {%- elif states(last_click) == "releasebuttonpage01button02" -%} {{ entity02 }} - {%- elif states(last_click) == "releasebuttonpage01button03" -%} {{ entity03 }} - {%- elif states(last_click) == "releasebuttonpage01button04" -%} {{ entity04 }} - {%- elif states(last_click) == "releasebuttonpage01button05" -%} {{ entity05 }} - {%- elif states(last_click) == "releasebuttonpage01button06" -%} {{ entity06 }} - {%- elif states(last_click) == "releasebuttonpage01button07" -%} {{ entity07 }} - {%- elif states(last_click) == "releasebuttonpage01button08" -%} {{ entity08 }} - {%- elif states(last_click) == "releasebuttonpage02button01" -%} {{ entity09 }} - {%- elif states(last_click) == "releasebuttonpage02button02" -%} {{ entity10 }} - {%- elif states(last_click) == "releasebuttonpage02button03" -%} {{ entity11 }} - {%- elif states(last_click) == "releasebuttonpage02button04" -%} {{ entity12 }} - {%- elif states(last_click) == "releasebuttonpage02button05" -%} {{ entity13 }} - {%- elif states(last_click) == "releasebuttonpage02button06" -%} {{ entity14 }} - {%- elif states(last_click) == "releasebuttonpage02button07" -%} {{ entity15 }} - {%- elif states(last_click) == "releasebuttonpage02button08" -%} {{ entity16 }} - {%- elif states(last_click) == "releasebuttonpage03button01" -%} {{ entity17 }} - {%- elif states(last_click) == "releasebuttonpage03button02" -%} {{ entity18 }} - {%- elif states(last_click) == "releasebuttonpage03button03" -%} {{ entity19 }} - {%- elif states(last_click) == "releasebuttonpage03button04" -%} {{ entity20 }} - {%- elif states(last_click) == "releasebuttonpage03button05" -%} {{ entity21 }} - {%- elif states(last_click) == "releasebuttonpage03button06" -%} {{ entity22 }} - {%- elif states(last_click) == "releasebuttonpage03button07" -%} {{ entity23 }} - {%- elif states(last_click) == "releasebuttonpage03button08" -%} {{ entity24 }} - {%- elif states(last_click) == "releasebuttonpage04button01" -%} {{ entity25 }} - {%- elif states(last_click) == "releasebuttonpage04button02" -%} {{ entity26 }} - {%- elif states(last_click) == "releasebuttonpage04button03" -%} {{ entity27 }} - {%- elif states(last_click) == "releasebuttonpage04button04" -%} {{ entity28 }} - {%- elif states(last_click) == "releasebuttonpage04button05" -%} {{ entity29 }} - {%- elif states(last_click) == "releasebuttonpage04button06" -%} {{ entity30 }} - {%- elif states(last_click) == "releasebuttonpage04button07" -%} {{ entity31 }} - {%- elif states(last_click) == "releasebuttonpage04button08" -%} {{ entity32 }} - {%- endif -%} - - ##### Entity - Page Lightsettings ##### - entity_long: >- - {%- if states(last_click) == "pressbuttonpage01button01" -%} {{ entity01 }} - {%- elif states(last_click) == "pressbuttonpage01button02" -%} {{ entity02 }} - {%- elif states(last_click) == "pressbuttonpage01button03" -%} {{ entity03 }} - {%- elif states(last_click) == "pressbuttonpage01button04" -%} {{ entity04 }} - {%- elif states(last_click) == "pressbuttonpage01button05" -%} {{ entity05 }} - {%- elif states(last_click) == "pressbuttonpage01button06" -%} {{ entity06 }} - {%- elif states(last_click) == "pressbuttonpage01button07" -%} {{ entity07 }} - {%- elif states(last_click) == "pressbuttonpage01button08" -%} {{ entity08 }} - {%- elif states(last_click) == "pressbuttonpage02button01" -%} {{ entity09 }} - {%- elif states(last_click) == "pressbuttonpage02button02" -%} {{ entity10 }} - {%- elif states(last_click) == "pressbuttonpage02button03" -%} {{ entity11 }} - {%- elif states(last_click) == "pressbuttonpage02button04" -%} {{ entity12 }} - {%- elif states(last_click) == "pressbuttonpage02button05" -%} {{ entity13 }} - {%- elif states(last_click) == "pressbuttonpage02button06" -%} {{ entity14 }} - {%- elif states(last_click) == "pressbuttonpage02button07" -%} {{ entity15 }} - {%- elif states(last_click) == "pressbuttonpage02button08" -%} {{ entity16 }} - {%- elif states(last_click) == "pressbuttonpage03button01" -%} {{ entity17 }} - {%- elif states(last_click) == "pressbuttonpage03button02" -%} {{ entity18 }} - {%- elif states(last_click) == "pressbuttonpage03button03" -%} {{ entity19 }} - {%- elif states(last_click) == "pressbuttonpage03button04" -%} {{ entity20 }} - {%- elif states(last_click) == "pressbuttonpage03button05" -%} {{ entity21 }} - {%- elif states(last_click) == "pressbuttonpage03button06" -%} {{ entity22 }} - {%- elif states(last_click) == "pressbuttonpage03button07" -%} {{ entity23 }} - {%- elif states(last_click) == "pressbuttonpage03button08" -%} {{ entity24 }} - {%- elif states(last_click) == "pressbuttonpage04button01" -%} {{ entity25 }} - {%- elif states(last_click) == "pressbuttonpage04button02" -%} {{ entity26 }} - {%- elif states(last_click) == "pressbuttonpage04button03" -%} {{ entity27 }} - {%- elif states(last_click) == "pressbuttonpage04button04" -%} {{ entity28 }} - {%- elif states(last_click) == "pressbuttonpage04button05" -%} {{ entity29 }} - {%- elif states(last_click) == "pressbuttonpage04button06" -%} {{ entity30 }} - {%- elif states(last_click) == "pressbuttonpage04button07" -%} {{ entity31 }} - {%- elif states(last_click) == "pressbuttonpage04button08" -%} {{ entity32 }} - {%- endif -%} - - ##### Entity Name - Page Lightsettings ##### - entity_long_name: >- - {%- if states(last_click) == "pressbuttonpage01button01" -%} {{ entity01_name }} - {%- elif states(last_click) == "pressbuttonpage01button02" -%} {{ entity02_name }} - {%- elif states(last_click) == "pressbuttonpage01button03" -%} {{ entity03_name }} - {%- elif states(last_click) == "pressbuttonpage01button04" -%} {{ entity04_name }} - {%- elif states(last_click) == "pressbuttonpage01button05" -%} {{ entity05_name }} - {%- elif states(last_click) == "pressbuttonpage01button06" -%} {{ entity06_name }} - {%- elif states(last_click) == "pressbuttonpage01button07" -%} {{ entity07_name }} - {%- elif states(last_click) == "pressbuttonpage01button08" -%} {{ entity08_name }} - {%- elif states(last_click) == "pressbuttonpage02button01" -%} {{ entity09_name }} - {%- elif states(last_click) == "pressbuttonpage02button02" -%} {{ entity10_name }} - {%- elif states(last_click) == "pressbuttonpage02button03" -%} {{ entity11_name }} - {%- elif states(last_click) == "pressbuttonpage02button04" -%} {{ entity12_name }} - {%- elif states(last_click) == "pressbuttonpage02button05" -%} {{ entity13_name }} - {%- elif states(last_click) == "pressbuttonpage02button06" -%} {{ entity14_name }} - {%- elif states(last_click) == "pressbuttonpage02button07" -%} {{ entity15_name }} - {%- elif states(last_click) == "pressbuttonpage02button08" -%} {{ entity16_name }} - {%- elif states(last_click) == "pressbuttonpage03button01" -%} {{ entity17_name }} - {%- elif states(last_click) == "pressbuttonpage03button02" -%} {{ entity18_name }} - {%- elif states(last_click) == "pressbuttonpage03button03" -%} {{ entity19_name }} - {%- elif states(last_click) == "pressbuttonpage03button04" -%} {{ entity20_name }} - {%- elif states(last_click) == "pressbuttonpage03button05" -%} {{ entity21_name }} - {%- elif states(last_click) == "pressbuttonpage03button06" -%} {{ entity22_name }} - {%- elif states(last_click) == "pressbuttonpage03button07" -%} {{ entity23_name }} - {%- elif states(last_click) == "pressbuttonpage03button08" -%} {{ entity24_name }} - {%- elif states(last_click) == "pressbuttonpage04button01" -%} {{ entity25_name }} - {%- elif states(last_click) == "pressbuttonpage04button02" -%} {{ entity26_name }} - {%- elif states(last_click) == "pressbuttonpage04button03" -%} {{ entity27_name }} - {%- elif states(last_click) == "pressbuttonpage04button04" -%} {{ entity28_name }} - {%- elif states(last_click) == "pressbuttonpage04button05" -%} {{ entity29_name}} - {%- elif states(last_click) == "pressbuttonpage04button06" -%} {{ entity30_name }} - {%- elif states(last_click) == "pressbuttonpage04button07" -%} {{ entity31_name }} - {%- elif states(last_click) == "pressbuttonpage04button08" -%} {{ entity32_name }} - {%- endif -%} - - ##### Entity - Page Lightsettings - Skip Back ##### - entity_back: >- - {%- if states(last_click) == "pressbuttonpage01button01" -%} {{ "page buttonpage01" }} - {%- elif states(last_click) == "pressbuttonpage01button02" -%} {{ "page buttonpage01" }} - {%- elif states(last_click) == "pressbuttonpage01button03" -%} {{ "page buttonpage01" }} - {%- elif states(last_click) == "pressbuttonpage01button04" -%} {{ "page buttonpage01" }} - {%- elif states(last_click) == "pressbuttonpage01button05" -%} {{ "page buttonpage01" }} - {%- elif states(last_click) == "pressbuttonpage01button06" -%} {{ "page buttonpage01" }} - {%- elif states(last_click) == "pressbuttonpage01button07" -%} {{ "page buttonpage01" }} - {%- elif states(last_click) == "pressbuttonpage01button08" -%} {{ "page buttonpage01" }} - {%- elif states(last_click) == "pressbuttonpage02button01" -%} {{ "page buttonpage02" }} - {%- elif states(last_click) == "pressbuttonpage02button02" -%} {{ "page buttonpage02" }} - {%- elif states(last_click) == "pressbuttonpage02button03" -%} {{ "page buttonpage02" }} - {%- elif states(last_click) == "pressbuttonpage02button04" -%} {{ "page buttonpage02" }} - {%- elif states(last_click) == "pressbuttonpage02button05" -%} {{ "page buttonpage02" }} - {%- elif states(last_click) == "pressbuttonpage02button06" -%} {{ "page buttonpage02" }} - {%- elif states(last_click) == "pressbuttonpage02button07" -%} {{ "page buttonpage02" }} - {%- elif states(last_click) == "pressbuttonpage02button08" -%} {{ "page buttonpage02" }} - {%- elif states(last_click) == "pressbuttonpage03button01" -%} {{ "page buttonpage03" }} - {%- elif states(last_click) == "pressbuttonpage03button02" -%} {{ "page buttonpage03" }} - {%- elif states(last_click) == "pressbuttonpage03button03" -%} {{ "page buttonpage03" }} - {%- elif states(last_click) == "pressbuttonpage03button04" -%} {{ "page buttonpage03" }} - {%- elif states(last_click) == "pressbuttonpage03button05" -%} {{ "page buttonpage03" }} - {%- elif states(last_click) == "pressbuttonpage03button06" -%} {{ "page buttonpage03" }} - {%- elif states(last_click) == "pressbuttonpage03button07" -%} {{ "page buttonpage03" }} - {%- elif states(last_click) == "pressbuttonpage03button08" -%} {{ "page buttonpage03" }} - {%- elif states(last_click) == "pressbuttonpage04button01" -%} {{ "page buttonpage04" }} - {%- elif states(last_click) == "pressbuttonpage04button02" -%} {{ "page buttonpage04" }} - {%- elif states(last_click) == "pressbuttonpage04button03" -%} {{ "page buttonpage04" }} - {%- elif states(last_click) == "pressbuttonpage04button04" -%} {{ "page buttonpage04" }} - {%- elif states(last_click) == "pressbuttonpage04button05" -%} {{ "page buttonpage04" }} - {%- elif states(last_click) == "pressbuttonpage04button06" -%} {{ "page buttonpage04" }} - {%- elif states(last_click) == "pressbuttonpage04button07" -%} {{ "page buttonpage04" }} - {%- elif states(last_click) == "pressbuttonpage04button08" -%} {{ "page buttonpage04" }} - {%- endif -%} - - ######################################################################################################################## - - # main - alias: "choose alias (name) - NEW VERSION" - - choose: - - ##### NSPanel boot init ##### DONE - - conditions: - - condition: trigger - id: nspanel_boot_init - sequence: - - ##### NSPanel boot init start ##### - - delay: - milliseconds: 100 - - service: "{{ command_text_printf }}" - data: - component: home.loading - message: "Loading - PLS WAIT!" - - ##### NSPanel boot init language ##### - - delay: - milliseconds: "{{ delay_value }}" - - choose: - ##### NSPanel boot init language DE ##### DONE - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ####### Date ##### - - service: "{{ command_text_printf }}" - data: - component: home.a02 - message: "{{ date01_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather01.a02 - message: "{{ date01_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather02.a02 - message: "{{ date02_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather03.a02 - message: "{{ date03_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather04.a02 - message: "{{ date04_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather05.a02 - message: "{{ date05_de }}" - - ##### NSPanel boot init language EN ##### DONE - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Date ##### - - service: "{{ command_text_printf }}" - data: - component: home.a02 - message: "{{ date01_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather01.a02 - message: "{{ date01_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather02.a02 - message: "{{ date02_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather03.a02 - message: "{{ date03_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather04.a02 - message: "{{ date04_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: weather05.a02 - message: "{{ date05_de }}" - - ##### NSPanel boot init buttons ##### - - delay: - milliseconds: "{{ delay_value }}" - - repeat: - for_each: - - entity: "{{ entity01 }}" - button_label: "{{ entity01_name }}" - button: buttonpage01.button01 - - entity: "{{ entity02 }}" - button_label: "{{ entity02_name }}" - button: buttonpage01.button02 - - entity: "{{ entity03 }}" - button_label: "{{ entity03_name }}" - button: buttonpage01.button03 - - entity: "{{ entity04 }}" - button_label: "{{ entity04_name }}" - button: buttonpage01.button04 - - entity: "{{ entity05 }}" - button_label: "{{ entity05_name }}" - button: buttonpage01.button05 - - entity: "{{ entity06 }}" - button_label: "{{ entity06_name }}" - button: buttonpage01.button06 - - entity: "{{ entity07 }}" - button_label: "{{ entity07_name }}" - button: buttonpage01.button07 - - entity: "{{ entity08 }}" - button_label: "{{ entity08_name }}" - button: buttonpage01.button08 - - entity: "{{ entity09 }}" - button_label: "{{ entity09_name }}" - button: buttonpage02.button01 - - entity: "{{ entity10 }}" - button_label: "{{ entity10_name }}" - button: buttonpage02.button02 - - entity: "{{ entity11 }}" - button_label: "{{ entity11_name }}" - button: buttonpage02.button03 - - entity: "{{ entity12 }}" - button_label: "{{ entity12_name }}" - button: buttonpage02.button04 - - entity: "{{ entity13 }}" - button_label: "{{ entity13_name }}" - button: buttonpage02.button05 - - entity: "{{ entity14 }}" - button_label: "{{ entity14_name }}" - button: buttonpage02.button06 - - entity: "{{ entity15 }}" - button_label: "{{ entity15_name }}" - button: buttonpage02.button07 - - entity: "{{ entity16 }}" - button_label: "{{ entity16_name }}" - button: buttonpage02.button08 - - entity: "{{ entity17 }}" - button_label: "{{ entity17_name }}" - button: buttonpage03.button01 - - entity: "{{ entity18 }}" - button_label: "{{ entity18_name }}" - button: buttonpage03.button02 - - entity: "{{ entity19 }}" - button_label: "{{ entity19_name }}" - button: buttonpage03.button03 - - entity: "{{ entity20 }}" - button_label: "{{ entity20_name }}" - button: buttonpage03.button04 - - entity: "{{ entity21 }}" - button_label: "{{ entity21_name }}" - button: buttonpage03.button05 - - entity: "{{ entity22 }}" - button_label: "{{ entity22_name }}" - button: buttonpage03.button06 - - entity: "{{ entity23 }}" - button_label: "{{ entity23_name }}" - button: buttonpage03.button07 - - entity: "{{ entity24 }}" - button_label: "{{ entity24_name }}" - button: buttonpage03.button08 - - entity: "{{ entity25 }}" - button_label: "{{ entity17_name }}" - button: buttonpage04.button01 - - entity: "{{ entity26 }}" - button_label: "{{ entity26_name }}" - button: buttonpage04.button02 - - entity: "{{ entity27 }}" - button_label: "{{ entity27_name }}" - button: buttonpage04.button03 - - entity: "{{ entity28 }}" - button_label: "{{ entity28_name }}" - button: buttonpage04.button04 - - entity: "{{ entity29 }}" - button_label: "{{ entity29_name }}" - button: buttonpage04.button05 - - entity: "{{ entity30 }}" - button_label: "{{ entity30_name }}" - button: buttonpage04.button06 - - entity: "{{ entity31 }}" - button_label: "{{ entity31_name }}" - button: buttonpage04.button07 - - entity: "{{ entity32 }}" - button_label: "{{ entity32_name }}" - button: buttonpage04.button08 - sequence: - - if: - - condition: template - value_template: '{{ repeat.item.entity|length > 0 }}' - then: - - variables: - component_to_update: "{{ repeat.item.button }}" - # Button PIC - btn_pic: >- - {%- if repeat.item.entity is match "light." and states[repeat.item.entity].state == 'on' -%} {{ button_light_on }} - {%- elif repeat.item.entity is match "light." and states[repeat.item.entity].state == 'off' -%} {{ button_light_off }} - {%- elif repeat.item.entity is match "switch." and states[repeat.item.entity].state == 'on' -%} {{ button_switch_on }} - {%- elif repeat.item.entity is match "switch." and states[repeat.item.entity].state == 'off' -%} {{ button_switch_off }} - {%- elif repeat.item.entity is match "input_boolean." and states[repeat.item.entity].state == 'on' -%} {{ button_switch_on }} - {%- elif repeat.item.entity is match "input_boolean." and states[repeat.item.entity].state == 'off' -%} {{ button_switch_off }} - {%- elif repeat.item.entity is match "cover." and states[repeat.item.entity].state == 'open' -%} {{ button_cover_on }} - {%- elif repeat.item.entity is match "cover." and states[repeat.item.entity].state == 'closed' -%} {{ button_cover_off }} - {%- endif -%} - # TEXT and BRIGHTNESS Background - btn_bg: >- - {%- if states[repeat.item.entity].state == 'on' or states[repeat.item.entity].state == 'open' -%} {{ button_color_1 }} - {%- elif states[repeat.item.entity].state == 'off' or states[repeat.item.entity].state == 'closed' -%} {{ button_color_2 }} - {%- endif -%} - # TEXT Font - btn_txt_font: >- - {%- if states[repeat.item.entity].state == 'on' or states[repeat.item.entity].state == 'open' -%} {{ button_color_2 }} - {%- elif states[repeat.item.entity].state == 'off' or states[repeat.item.entity].state == 'closed' -%} {{ button_color_1 }} - {%- endif -%} - # BRIGHTNESS Font - btn_bri_font: "{{ button_color_2 }}" - # BTN Label - btn_label: "{{ repeat.item.button_label }}" - btn_bri_txt: >- - {%- if repeat.item.entity is match "light." and states(repeat.item.entity) == 'on' and state_attr(repeat.item.entity, "brightness") != None -%} {{ (state_attr(repeat.item.entity, "brightness") | int * 100 /255) | round(0) }}% - {%- elif repeat.item.entity is match "cover." and states(repeat.item.entity) == 'open' and state_attr(repeat.item.entity, "current_position") != None -%} {{ (state_attr(repeat.item.entity, "current_position") | int(100)) | round(0) }}% - {%- else -%} 0 - {%- endif -%} - - ##### SET Buttons #### - # - ##### Button PIC ##### - - service: "{{ command_printf }}" - data: - cmd: "{{ component_to_update }}pic.pic={{ btn_pic }}" - ##### TEXT Background ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_background_color }}" - data: - component: "{{ component_to_update }}text" - message: "{{ btn_bg }}" - ##### TEXT Font Color ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_font_color }}" - data: - component: "{{ component_to_update }}text" - message: "{{ btn_txt_font }}" - ##### BRIGHTNESS Background Color ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_background_color }}" - data: - component: "{{ component_to_update }}bri" - message: "{{ btn_bg }}" - ##### BRIGHTNESS Font Color ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_font_color }}" - data: - component: "{{ component_to_update }}bri" - message: "{{ btn_bri_font }}" - ##### "TEXT" Label ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: "{{ component_to_update }}text" - message: "{{ btn_label }}" - ##### "BRIGHTNESS" Text ##### - - delay: - milliseconds: "{{ delay_value }}" - - if: - - condition: template - value_template: "{{ btn_bri_txt == 0 }}" - then: - - service: "{{ command_text_printf }}" - data: - component: "{{ component_to_update }}bri" - message: " " - else: - - service: "{{ command_text_printf }}" - data: - component: "{{ component_to_update }}bri" - message: "{{ btn_bri_txt }}" - - ##### NSPanel boot init - Time ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: home.a01 - message: "{{ time }}" - - ##### NSPanel boot init - Humidity ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: home.a04 - message: "{{ states(humidity) |round(0) }}%" - - ##### NSPanel boot init - Hotwater ##### - - if: - - condition: template - value_template: '{{ hotwatertemp is match "sensor." }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: home.p01.pic=68 - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: home.a07 - message: "{{ states(hotwatertemp) |round(1) }}°" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: thermostat.a08 - message: "{{ states(hotwatertemp) |round(1) }}°" - - ##### NSPanel boot init - Outdoor Temp ##### - - choose: - ##### Outdoor Temp Entity ##### - - conditions: - - condition: template - value_template: '{{ outdoortemp is match "sensor." }}' - sequence: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: home.a06 - message: "{{ states(outdoortemp) |round(0) }}°" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: thermostat.a07 - message: "{{ states(outdoortemp) |round(0) }}°" - - ##### Outdoor Temp Default ##### - - conditions: - - condition: template - value_template: '{{ outdoortemp != "sensor." and weather == "Default" }}' - sequence: - ##### Outdoor Temp Default ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: home.a06 - message: '{{state_attr(ha_weather,"temperature") | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: thermostat.a07 - message: '{{state_attr(ha_weather,"temperature") | round(0)}}°' - - ##### Outdoor TempAccuweather ##### - - conditions: - - condition: template - value_template: '{{ outdoortemp != "sensor." and weather == "AccuWeather" }}' - sequence: - ### Outdoor TempAccuweather - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: home.a06 - message: "{{states(accuweather_realfeel_temperature_max_0d) | round(0)}}°" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: thermostat.a07 - message: "{{states(accuweather_realfeel_temperature_max_0d) | round(0)}}°" - - ##### Weather Icon Home Page - - choose: - ##### Weather PIC - DEFAULT HA ##### - - conditions: - - condition: template - value_template: '{{ weather == "Default" }}' - sequence: - - variables: - # weather PIC - weather_pic: >- - {%- if states(ha_weather) == 'sunny' -%} {{ weather_sunny }} - {%- elif states(ha_weather) == 'cloudy' -%} {{ weather_cloudy }} - {%- elif states(ha_weather) == 'rainy' -%} {{ weather_rainy }} - {%- elif states(ha_weather) == 'pouring' -%} {{ weather_pouring }} - {%- elif states(ha_weather) == 'snowy' -%} {{ weather_snowy }} - {%- elif states(ha_weather) == 'hail' -%} {{ weather_hail }} - {%- elif states(ha_weather) == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif states(ha_weather) == 'fog' -%} {{ weather_fog }} - {%- elif states(ha_weather) == 'windy' -%} {{ weather_windy }} - {%- elif states(ha_weather) == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif states(ha_weather) == 'lightning' -%} {{ weather_lightning }} - {%- elif states(ha_weather) == 'partlycloudy' and states('sun.sun') == 'above_horizon' -%} {{ weather_partlycloudy_day }} - {%- elif states(ha_weather) == 'partlycloudy' and states('sun.sun') == 'below_horizon' -%} {{ weather_partlycloudy_night }} - {%- elif states(ha_weather) == 'lightning-rainy' and states('sun.sun') == 'above_horizon' -%} {{ weather_lightning_rainy_day }} - {%- elif states(ha_weather) == 'lightning-rainy' and states('sun.sun') == 'below_horizon' -%} {{ weather_lightning_rainy_night }} - {%- elif states(ha_weather) == 'execptional' and states('sun.sun') == 'above_horizon' -%} {{ weather_execptional_day }} - {%- elif states(ha_weather) == 'execptional' and states('sun.sun') == 'below_horizon' -%} {{ weather_execptional_night }} - {%- elif states(ha_weather) == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: home.a05.pic={{ weather_pic }} - - ##### Weather PIC - ACCUWEATHER ##### - - conditions: - - condition: template - value_template: '{{ weather == "AccuWeather" }}' - sequence: - - variables: - # weather PIC - weather_pic: >- - {%- if states(accuweather_value) == 'sunny' -%} {{ weather_sunny }} - {%- elif states(accuweather_value) == 'cloudy' -%} {{ weather_cloudy }} - {%- elif states(accuweather_value) == 'rainy' -%} {{ weather_rainy }} - {%- elif states(accuweather_value) == 'pouring' -%} {{ weather_pouring }} - {%- elif states(accuweather_value) == 'snowy' -%} {{ weather_snowy }} - {%- elif states(accuweather_value) == 'hail' -%} {{ weather_hail }} - {%- elif states(accuweather_value) == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif states(accuweather_value) == 'fog' -%} {{ weather_fog }} - {%- elif states(accuweather_value) == 'windy' -%} {{ weather_windy }} - {%- elif states(accuweather_value) == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif states(accuweather_value) == 'lightning' -%} {{ weather_lightning }} - {%- elif states(accuweather_value) == 'partlycloudy' and states('sun.sun') == 'above_horizon' -%} {{ weather_partlycloudy_day }} - {%- elif states(accuweather_value) == 'partlycloudy' and states('sun.sun') == 'below_horizon' -%} {{ weather_partlycloudy_night }} - {%- elif states(accuweather_value) == 'lightning-rainy' and states('sun.sun') == 'above_horizon' -%} {{ weather_lightning_rainy_day }} - {%- elif states(accuweather_value) == 'lightning-rainy' and states('sun.sun') == 'below_horizon' -%} {{ weather_lightning_rainy_night }} - {%- elif states(accuweather_value) == 'execptional' and states('sun.sun') == 'above_horizon' -%} {{ weather_execptional_day }} - {%- elif states(accuweather_value) == 'execptional' and states('sun.sun') == 'below_horizon' -%} {{ weather_execptional_night }} - {%- elif states(accuweather_value) == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: home.a05.pic={{ weather_pic }} - - ##### NSPanel boot init finished ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: home.loading - message: " " - - - #### TFT Upload Automation ##### DONE - - conditions: - - condition: trigger - id: tft_upload - sequence: - - delay: - seconds: 2 - - service: "{{ tft_upload }}" - data: {} - - - - ##### Update Button Page and Lightsettings / Coversettings Page ##### DONE - - conditions: - - condition: trigger - id: - - current_state_entity01 - - current_state_entity02 - - current_state_entity03 - - current_state_entity04 - - current_state_entity05 - - current_state_entity06 - - current_state_entity07 - - current_state_entity08 - - current_state_entity09 - - current_state_entity10 - - current_state_entity11 - - current_state_entity12 - - current_state_entity13 - - current_state_entity14 - - current_state_entity15 - - current_state_entity16 - - current_state_entity17 - - current_state_entity18 - - current_state_entity19 - - current_state_entity20 - - current_state_entity21 - - current_state_entity22 - - current_state_entity23 - - current_state_entity24 - - current_state_entity25 - - current_state_entity26 - - current_state_entity27 - - current_state_entity28 - - current_state_entity29 - - current_state_entity30 - - current_state_entity31 - - current_state_entity32 - sequence: - - alias: "Set variable(s) for entity change" - variables: - component_to_update: >- - {%- if trigger.entity_id == entity01 -%} buttonpage01.button01 - {%- elif trigger.entity_id == entity02 -%} buttonpage01.button02 - {%- elif trigger.entity_id == entity03 -%} buttonpage01.button03 - {%- elif trigger.entity_id == entity04 -%} buttonpage01.button04 - {%- elif trigger.entity_id == entity05 -%} buttonpage01.button05 - {%- elif trigger.entity_id == entity06 -%} buttonpage01.button06 - {%- elif trigger.entity_id == entity07 -%} buttonpage01.button07 - {%- elif trigger.entity_id == entity08 -%} buttonpage01.button08 - {%- elif trigger.entity_id == entity09 -%} buttonpage02.button01 - {%- elif trigger.entity_id == entity10 -%} buttonpage02.button02 - {%- elif trigger.entity_id == entity11 -%} buttonpage02.button03 - {%- elif trigger.entity_id == entity12 -%} buttonpage02.button04 - {%- elif trigger.entity_id == entity13 -%} buttonpage02.button05 - {%- elif trigger.entity_id == entity14 -%} buttonpage02.button06 - {%- elif trigger.entity_id == entity15 -%} buttonpage02.button07 - {%- elif trigger.entity_id == entity16 -%} buttonpage02.button08 - {%- elif trigger.entity_id == entity17 -%} buttonpage03.button01 - {%- elif trigger.entity_id == entity18 -%} buttonpage03.button02 - {%- elif trigger.entity_id == entity19 -%} buttonpage03.button03 - {%- elif trigger.entity_id == entity20 -%} buttonpage03.button04 - {%- elif trigger.entity_id == entity21 -%} buttonpage03.button05 - {%- elif trigger.entity_id == entity22 -%} buttonpage03.button06 - {%- elif trigger.entity_id == entity23 -%} buttonpage03.button07 - {%- elif trigger.entity_id == entity24 -%} buttonpage03.button08 - {%- elif trigger.entity_id == entity25 -%} buttonpage04.button01 - {%- elif trigger.entity_id == entity26 -%} buttonpage04.button02 - {%- elif trigger.entity_id == entity27 -%} buttonpage04.button03 - {%- elif trigger.entity_id == entity28 -%} buttonpage04.button04 - {%- elif trigger.entity_id == entity29 -%} buttonpage04.button05 - {%- elif trigger.entity_id == entity30 -%} buttonpage04.button06 - {%- elif trigger.entity_id == entity31 -%} buttonpage04.button07 - {%- elif trigger.entity_id == entity32 -%} buttonpage04.button08 - {%- endif -%} - # Button PIC - btn_pic: >- - {%- if trigger.to_state.entity_id is match "light." and trigger.to_state.state == 'on' -%} {{ button_light_on }} - {%- elif trigger.to_state.entity_id is match "light." and trigger.to_state.state == 'off' -%} {{ button_light_off }} - {%- elif trigger.to_state.entity_id is match "switch." and trigger.to_state.state == 'on' -%} {{ button_switch_on }} - {%- elif trigger.to_state.entity_id is match "switch." and trigger.to_state.state == 'off' -%} {{ button_switch_off }} - {%- elif trigger.to_state.entity_id is match "input_boolean." and trigger.to_state.state == 'on' -%} {{ button_switch_on }} - {%- elif trigger.to_state.entity_id is match "input_boolean." and trigger.to_state.state == 'off' -%} {{ button_switch_off }} - {%- elif trigger.to_state.entity_id is match "cover." and trigger.to_state.state == 'open' -%} {{ button_cover_on }} - {%- elif trigger.to_state.entity_id is match "cover." and trigger.to_state.state == 'closed' -%} {{ button_cover_off }} - {%- endif -%} - # TEXT and BRIGHTNESS Background - btn_bg: >- - {%- if trigger.to_state.state == 'on' or trigger.to_state.state == 'open' -%} {{ button_color_1 }} - {%- elif trigger.to_state.state == 'off' or trigger.to_state.state == 'closed' -%} {{ button_color_2 }} - {%- endif -%} - # TEXT Font - btn_txt_font: >- - {%- if trigger.to_state.state == 'on' or trigger.to_state.state == 'open' -%} {{ button_color_2 }} - {%- elif trigger.to_state.state == 'off' or trigger.to_state.state == 'closed' -%} {{ button_color_1 }} - {%- endif -%} - # BRIGHTNESS Font - btn_bri_font: "{{ button_color_2 }}" - # BTN Label - btn_label: >- - {%- if trigger.entity_id == entity01 -%} {{ entity01_name }} - {%- elif trigger.entity_id == entity02 -%} {{ entity02_name }} - {%- elif trigger.entity_id == entity03 -%} {{ entity03_name }} - {%- elif trigger.entity_id == entity04 -%} {{ entity04_name }} - {%- elif trigger.entity_id == entity05 -%} {{ entity05_name }} - {%- elif trigger.entity_id == entity06 -%} {{ entity06_name }} - {%- elif trigger.entity_id == entity07 -%} {{ entity07_name }} - {%- elif trigger.entity_id == entity08 -%} {{ entity08_name }} - {%- elif trigger.entity_id == entity09 -%} {{ entity09_name }} - {%- elif trigger.entity_id == entity10 -%} {{ entity10_name }} - {%- elif trigger.entity_id == entity11 -%} {{ entity11_name }} - {%- elif trigger.entity_id == entity12 -%} {{ entity12_name }} - {%- elif trigger.entity_id == entity13 -%} {{ entity13_name }} - {%- elif trigger.entity_id == entity14 -%} {{ entity14_name }} - {%- elif trigger.entity_id == entity15 -%} {{ entity15_name }} - {%- elif trigger.entity_id == entity16 -%} {{ entity16_name }} - {%- elif trigger.entity_id == entity17 -%} {{ entity17_name }} - {%- elif trigger.entity_id == entity18 -%} {{ entity18_name }} - {%- elif trigger.entity_id == entity19 -%} {{ entity19_name }} - {%- elif trigger.entity_id == entity20 -%} {{ entity20_name }} - {%- elif trigger.entity_id == entity21 -%} {{ entity21_name }} - {%- elif trigger.entity_id == entity22 -%} {{ entity22_name }} - {%- elif trigger.entity_id == entity23 -%} {{ entity23_name }} - {%- elif trigger.entity_id == entity24 -%} {{ entity24_name }} - {%- elif trigger.entity_id == entity25 -%} {{ entity25_name }} - {%- elif trigger.entity_id == entity26 -%} {{ entity26_name }} - {%- elif trigger.entity_id == entity27 -%} {{ entity27_name }} - {%- elif trigger.entity_id == entity28 -%} {{ entity28_name }} - {%- elif trigger.entity_id == entity29 -%} {{ entity29_name }} - {%- elif trigger.entity_id == entity30 -%} {{ entity30_name }} - {%- elif trigger.entity_id == entity31 -%} {{ entity31_name }} - {%- elif trigger.entity_id == entity32 -%} {{ entity32_name }} - {%- endif -%} - btn_bri_txt: >- - {%- if trigger.to_state.entity_id is match "light." and trigger.to_state.state == 'on' and trigger.to_state.attributes.brightness is defined -%} {{ (trigger.to_state.attributes.brightness | int * 100 /255) | round(0) }}% - {%- elif trigger.to_state.entity_id is match "cover." and trigger.to_state.state == 'open' and trigger.to_state.attributes.current_position is defined -%} {{ (trigger.to_state.attributes.current_position | int) | round(0) }}% - {%- else -%} 0 - {%- endif -%} - - ##### Button PIC ##### - - service: "{{ command_printf }}" - data: - cmd: "{{ component_to_update }}pic.pic={{ btn_pic }}" - - ##### TEXT Background ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_background_color }}" - data: - component: "{{ component_to_update }}text" - message: "{{ btn_bg }}" - - ##### TEXT Font Color ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_font_color }}" - data: - component: "{{ component_to_update }}text" - message: "{{ btn_txt_font }}" - - ##### BRIGHTNESS Background Color ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_background_color }}" - data: - component: "{{ component_to_update }}bri" - message: "{{ btn_bg }}" - - ##### BRIGHTNESS Font Color ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_font_color }}" - data: - component: "{{ component_to_update }}bri" - message: "{{ btn_bri_font }}" - - ##### "TEXT" Label ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: "{{ component_to_update }}text" - message: "{{ btn_label }}" - - ##### "BRIGHTNESS" Text ##### - - if: - - condition: template - value_template: "{{ btn_bri_txt == 0 }}" - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: "{{ component_to_update }}bri" - message: " " - else: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: "{{ component_to_update }}bri" - message: "{{ btn_bri_txt }}" - - ##### UPDATE LIGHTSETTING / COVERSETTING PAGE - - choose: - ##### LIGHTSETTINGS PAGE - LIGHT Entity ##### - - conditions: - - condition: template - value_template: '{{ entity_long is match "light." }}' - sequence: - - choose: - ##### LIGHT ON / OFF - - conditions: - - condition: template - value_template: '{{ states(entity_long) == "on" }}' - sequence: - ##### LIGHT PIC - ON ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: lightsettings.light_status.pic={{ light_pic_on }} - - ##### LIGHT Brightness Slider HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_slider_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_value }}" - data: - component: lightsettings.lightslider - message: '{{ (state_attr(entity_long, "brightness") | int ) |round(0) }}' - - ##### LIGHT Temp Slider HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_slider_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_value }}" - data: - component: lightsettings.tempslider - message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' - - ##### LIGHT Brightness Value HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_value_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value - message: '{{ (state_attr(entity_long, "brightness") | int * 100 / 255) |round(0) }}%' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value_2 - message: '{{ (state_attr(entity_long, "brightness") | int * 100 / 255) |round(0) }}%' - - ##### LIGHT Temp Value HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_value_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.temp_value - message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.temp_value_2 - message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' - - ##### LIGHT - OFF ##### - - conditions: - - condition: template - value_template: '{{ states(entity_long) == "off" }}' - sequence: - ##### LIGHT PIC - OFF ##### - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: lightsettings.light_status.pic={{ light_pic_off }} - - ##### LIGHT Brightness Slider HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_slider_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_value }}" - data: - component: lightsettings.lightslider - message: '0' - - ##### LIGHT Brightness Value HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_value_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value - message: '0 %' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value_2 - message: '0 %' - - ##### COVERSETTINGS PAGE - COVER Entity ##### - - conditions: - - condition: template - value_template: '{{ entity_long is match "cover." }}' - sequence: - ##### COVER OPEN ##### - - choose: - ##### Cover PIC - OPEN ##### - - conditions: - - condition: template - value_template: '{{ states(entity_long) == "open" }}' - sequence: - ##### COVER PIC - OPEN - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: coversettings.cover_status.pic={{ cover_pic_open }} - - ##### Cover Slider HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_slider_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_value }}" - data: - component: coversettings.coverslider - message: '{{ (state_attr(entity_long, "current_position") | int ) |round(0) }}' - - ##### Cover Value HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_value_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: coversettings.cover_value - message: '{{ (state_attr(entity_long, "current_position") | int ) |round(0) }} %' - - ##### Cover - Closed ##### - - conditions: - - condition: template - value_template: '{{ states(entity_long) == "closed" }}' - sequence: - ##### COVER PIC - CLOSED - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: coversettings.cover_status.pic={{ cover_pic_closed }} - - ##### Cover Slider HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_slider_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_value }}" - data: - component: coversettings.coverslider - message: '0' - - ##### Cover Value HA Sync - YES ##### - - if: - - condition: template - value_template: '{{ sync_value_ha == "select_yes" }}' - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: coversettings.cover_value - message: '0 %' - - - - ##### Page Button - SHORT Press - Toggle Enities ##### DONE - - conditions: - - condition: trigger - id: short_press - sequence: - - service: >- - {% if entity_short is match 'light.' %} - light.toggle - {% elif entity_short is match 'switch.' %} - switch.toggle - {% elif entity_short is match 'cover.' %} - cover.toggle - {% elif entity_short is match 'input_boolean.' %} - input_boolean.toggle - {% endif %} - data: - entity_id: "{{ entity_short }}" - - - - ##### Page Button - LONG Press - JUMP to Page Lightsettings / Coversettings ##### DONE - - conditions: - - condition: trigger - id: long_press - sequence: - - choose: - ##### LONG Press - LIGHT Entity ##### - - conditions: - - condition: template - value_template: '{{ entity_long is match "light." }}' - sequence: - ##### LIGHT Generel Values ##### - - service: "{{ command_printf }}" - data: - cmd: page lightsettings - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_name - message: '{{ entity_long_name }}' - - delay: - milliseconds: "{{ delay_value }}" - - if: - - condition: template - value_template: "{{ state_attr(entity_long, 'brightness') != none }}" - then: - - service: "{{ command_value }}" - data: - component: lightsettings.lightslider - message: '{{ (state_attr(entity_long, "brightness") | int ) |round(0) }}' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value - message: '{{ (state_attr(entity_long, "brightness") | int * 100 /255) | round(0) }}%' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value_2 - message: '{{ (state_attr(entity_long, "brightness") | int * 100 /255) | round(0) }}%' - else: - - service: "{{ command_value }}" - data: - component: lightsettings.lightslider - message: '0' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value - message: '0 %' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value_2 - message: '0 %' - - ##### LIGHT Check Color_Temp Value is available when yes send some current Values ##### - - if: - - condition: template - value_template: "{{ state_attr(entity_long, 'color_temp') != none }}" - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.temp_value - message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.temp_value_2 - message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_value }}" - data: - component: lightsettings.tempslider - message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' - - ##### LIGHT ON / OFF ##### - - choose: - ##### LIGHT PIC - ON ##### - - conditions: - - condition: template - value_template: '{{ states(entity_long) == "on" }}' - sequence: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: lightsettings.light_status.pic={{ light_pic_on }} - - ##### LIGHT PIC - OFF ##### - - conditions: - - condition: template - value_template: '{{ states(entity_long) == "off" }}' - sequence: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: lightsettings.light_status.pic={{ light_pic_off }} - - ##### LONG Press - COVER Entity ##### - - conditions: - - condition: template - value_template: '{{ entity_long is match "cover." }}' - sequence: - ##### COVER Generel Values ##### - - service: "{{ command_printf }}" - data: - cmd: page coversettings - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_value }}" - data: - component: coversettings.coverslider - message: '{{ (state_attr(entity_long, "current_position") | int ) |round(0) }}' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: coversettings.cover_value - message: '{{ (state_attr(entity_long, "current_position") | int ) |round(0) }} %' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: coversettings.cover_name - message: '{{ entity_long_name }}' - - ##### COVER Battery ICON Yes / NO ##### - - if: - - condition: template - value_template: "{{ state_attr(entity_long, 'battery') != none }}" - then: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: coversettings.battery_value - message: '{{ (state_attr(entity_long, "battery") | int ) |round(0) }} %' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: coversettings.battery_icon.pic={{ battery_icon }} - - ##### COVER OPEN / CLOSE - - choose: - ##### COVER PIC - open ##### - - conditions: - - condition: template - value_template: '{{ states(entity_long) == "open" }}' - sequence: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: coversettings.cover_status.pic={{ cover_pic_open }} - - ##### COVER PIC - Closed - - conditions: - - condition: template - value_template: '{{ states(entity_long) == "closed" }}' - sequence: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: coversettings.cover_status.pic={{ cover_pic_closed }} - - - - ##### LAST_CLICK_LIGHTSETTINGS - Changes on page Light-Settings ##### DONE - - conditions: - - condition: trigger - id: light_settings - sequence: - - choose: - ##### Page Lightsettings - Brightness Slider MOVE ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_lightsettings) is match "brightness\d+" }}' - sequence: - - service: light.turn_on - data: - entity_id: "{{ entity_long }}" - brightness: '{{ states(last_click_lightsettings) |replace("brightness","") | int }}' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value - message: '{{ (states(last_click_lightsettings) |replace("brightness","") | int * 100 /255) |round(0) }}%' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.light_value_2 - message: '{{ (states(last_click_lightsettings) |replace("brightness","") | int * 100 /255) |round(0) }}%' - - ##### Page Lightsettings - color_Temp Slider MOVE ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_lightsettings) is match "colortemp\d+" }}' - sequence: - - service: light.turn_on - data: - entity_id: "{{ entity_long }}" - color_temp: '{{ states(last_click_lightsettings) |replace("colortemp","") | int }}' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.temp_value - message: '{{ states(last_click_lightsettings) |replace("colortemp","") | int }}' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: lightsettings.temp_value_2 - message: '{{ states(last_click_lightsettings) |replace("colortemp","") | int }}' - - ##### Page Lightsettings - Color RGB Slider MOVE ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_lightsettings) is match "\d+,\d+,\d+" }}' - sequence: - - service: light.turn_on - data: - entity_id: "{{ entity_long }}" - rgb_color: '{{ states(last_click_lightsettings).split(",") }}' - - ##### Page Lightsettings - Close Lightsetting Page ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_lightsettings) == "releaselightsettingsclose" }}' - sequence: - - service: "{{ command_printf }}" - data: - cmd: "{{ entity_back }}" - - - - ##### LAST_CLICK_COVERSETTINGS - Changes on page Cover-Settings ##### DONE - - conditions: - - condition: trigger - id: cover_settings - sequence: - - choose: - ##### Page Coversettings - Cover Slider MOVE ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_coversettings) is match "coverposition\d+" }}' - sequence: - - service: cover.set_cover_position - data: - entity_id: "{{ entity_long }}" - position: '{{ states(last_click_coversettings) |replace("coverposition","") | int }}' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: coversettings.cover_value - message: '{{ states(last_click_coversettings) |replace("coverposition","") | int }} %' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: coversettings.cover_value_2 - message: '{{ states(last_click_coversettings) |replace("coverposition","") | int }} %' - - ##### Page Coversettings - Cover CLOSE Button ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_coversettings) == "cover_close_press" }}' - sequence: - - service: cover.close_cover - data: - entity_id: "{{ entity_long }}" - - ##### Page Coversettings - Cover OPEN Button ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_coversettings) == "cover_open_press" }}' - sequence: - - service: cover.open_cover - data: - entity_id: "{{ entity_long }}" - - ##### Page Coversettings - Cover STOP Button ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_coversettings) == "cover_stop_press" }}' - sequence: - - service: cover.stop_cover - data: - entity_id: "{{ entity_long }}" - - ##### Page Coversettings - Close Coversettings Page ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_coversettings) == "releasecoversettingsclose" }}' - sequence: - - service: "{{ command_printf }}" - data: - cmd: "{{ entity_back }}" - - - ##### Left button press ##### DONE - - conditions: - - condition: trigger - id: left_button_press - sequence: - - service: >- - {% if left_button_entity is match 'light.' %} - light.toggle - {% elif left_button_entity is match 'switch.' %} - switch.toggle - {% elif left_button_entity is match 'cover.' %} - cover.toggle - {% elif left_button_entity is match 'input_boolean.' %} - input_boolean.toggle - {% endif %} - data: - entity_id: "{{ left_button_entity }}" - - - - ##### Right button press ##### DONE - - conditions: - - condition: trigger - id: right_button_press - sequence: - - service: >- - {% if right_button_entity is match 'light.' %} - light.toggle - {% elif right_button_entity is match 'switch.' %} - switch.toggle - {% elif right_button_entity is match 'cover.' %} - cover.toggle - {% elif right_button_entity is match 'input_boolean.' %} - input_boolean.toggle - {% endif %} - data: - entity_id: "{{ right_button_entity }}" - - - - ##### Date and Time Home Page ##### DONE - - conditions: - - condition: trigger - id: time_state - sequence: - ##### Time Home Page ##### - - service: "{{ command_text_printf }}" - data: - component: home.a01 - message: "{{ time }}" - - - choose: - ##### Date Home Page + Forcast DE ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: home.a02 - message: "{{ date01_de }}" - - ##### Date Home Page + Forcast EN ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: home.a02 - message: "{{ date0_en }}" - - - - ##### Humidity ##### DONE - - conditions: - - condition: trigger - id: humidity_state - sequence: - - service: "{{ command_text_printf }}" - data: - component: home.a04 - message: "{{ states(humidity) |round(0) }}%" - - - - ##### Hotwater Temp ##### DONE - - conditions: - - condition: trigger - id: hotwatertemp_state - sequence: - - service: "{{ command_text_printf }}" - data: - component: home.a07 - message: "{{ states(hotwatertemp) |round(1) }}°" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: thermostat.a08 - message: "{{ states(hotwatertemp) |round(1) }}°" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: home.p01.pic=68 - - - - ##### Outdoor Temp Entity ##### DONE - - conditions: - - condition: trigger - id: outdoortemp_state - sequence: - - service: "{{ command_text_printf }}" - data: - component: home.a06 - message: "{{ states(outdoortemp) |round(0) }}°" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: thermostat.a07 - message: "{{ states(outdoortemp) |round(0) }}°" - - - ##### Outdoor Temp Weather Integration ##### DONE - - conditions: - - condition: trigger - id: weather_temp_time - sequence: - - choose: - - conditions: - ##### Outdoor Temp Default ##### - - condition: template - value_template: '{{ outdoortemp != "sensor." and weather == "Default" }}' - sequence: - - service: "{{ command_text_printf }}" - data: - component: home.a06 - message: '{{state_attr(ha_weather,"temperature") | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: thermostat.a07 - message: '{{state_attr(ha_weather,"temperature") | round(0)}}°' - - ##### Outdoor Temp Accuweather ##### - - conditions: - - condition: template - value_template: '{{ outdoortemp != "sensor." and weather == "AccuWeather" }}' - sequence: - - service: "{{ command_text_printf }}" - data: - component: home.a06 - message: "{{states(accuweather_realfeel_temperature_max_0d) | round(0)}}°" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_text_printf }}" - data: - component: thermostat.a07 - message: "{{states(accuweather_realfeel_temperature_max_0d) | round(0)}}°" - - - - ##### Weather Forcast ##### - - conditions: - - condition: trigger - id: weather_settings - sequence: - - choose: - ##### Weather - DEFAULT HA ##### - - conditions: - - condition: template - value_template: '{{ weather == "Default" }}' - sequence: - - choose: - ##### Weather Page - 01 - HA DEFAULT ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather01" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if states(ha_weather) == 'sunny' -%} {{ weather_sunny }} - {%- elif states(ha_weather) == 'cloudy' -%} {{ weather_cloudy }} - {%- elif states(ha_weather) == 'rainy' -%} {{ weather_rainy }} - {%- elif states(ha_weather) == 'pouring' -%} {{ weather_pouring }} - {%- elif states(ha_weather) == 'snowy' -%} {{ weather_snowy }} - {%- elif states(ha_weather) == 'hail' -%} {{ weather_hail }} - {%- elif states(ha_weather) == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif states(ha_weather) == 'fog' -%} {{ weather_fog }} - {%- elif states(ha_weather) == 'windy' -%} {{ weather_windy }} - {%- elif states(ha_weather) == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif states(ha_weather) == 'lightning' -%} {{ weather_lightning }} - {%- elif states(ha_weather) == 'partlycloudy' and states('sun.sun') == 'above_horizon' -%} {{ weather_partlycloudy_day }} - {%- elif states(ha_weather) == 'partlycloudy' and states('sun.sun') == 'below_horizon' -%} {{ weather_partlycloudy_night }} - {%- elif states(ha_weather) == 'lightning-rainy' and states('sun.sun') == 'above_horizon' -%} {{ weather_lightning_rainy_day }} - {%- elif states(ha_weather) == 'lightning-rainy' and states('sun.sun') == 'below_horizon' -%} {{ weather_lightning_rainy_night }} - {%- elif states(ha_weather) == 'execptional' and states('sun.sun') == 'above_horizon' -%} {{ weather_execptional_day }} - {%- elif states(ha_weather) == 'execptional' and states('sun.sun') == 'below_horizon' -%} {{ weather_execptional_night }} - {%- elif states(ha_weather) == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather01.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather01.temp_max ### Temperature MAX ### - message: '{{state_attr(ha_weather,"temperature") | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.day - message: "{{ day01_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.date - message: "{{ date01_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.day - message: "{{ day01_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.date - message: "{{ date01_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - ##### field 2 ##### - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.value03 - message: '{{state_attr(ha_weather,"wind_speed") | round(0)}} km/h' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather01.value03_pic.pic={{ weather_icon_wind }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - ##### field 5 ##### - - ##### Weather Page - 02 - HA DEFAULT ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather02" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if state_attr(ha_weather,"forecast")[0].condition == 'sunny' -%} {{ weather_sunny }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'cloudy' -%} {{ weather_cloudy }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'rainy' -%} {{ weather_rainy }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'pouring' -%} {{ weather_pouring }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'snowy' -%} {{ weather_snowy }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'hail' -%} {{ weather_hail }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'fog' -%} {{ weather_fog }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'windy' -%} {{ weather_windy }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'lightning' -%} {{ weather_lightning }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'execptional' -%} {{ weather_execptional_day }} - {%- elif state_attr(ha_weather,"forecast")[0].condition == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather02.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MIN #### - - service: "{{ command_text_printf }}" - data: - component: weather02.temp_min ### Temperature MIN ### - message: '{{state_attr(ha_weather,"forecast")[0].templow | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### Slash ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.slash - message: '/' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather02.temp_max ### Temperature MAX ### - message: '{{state_attr(ha_weather,"forecast")[0].temperature | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.day - message: "{{ day02_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.date - message: "{{ date02_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.day - message: "{{ day02_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.date - message: "{{ date02_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - ##### field 2 ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.value02 - message: '{{state_attr(ha_weather,"forecast")[0].precipitation| round(1)}} mm' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather02.value02_pic.pic={{ weather_icon_rain }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.value03 - message: '{{state_attr(ha_weather,"forecast")[0].wind_speed | round(1)}} km/h' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather02.value03_pic.pic={{ weather_icon_wind }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - ##### field 5 ##### - - ##### Weather Page - 03 - HA DEFAULT ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather03" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if state_attr(ha_weather,"forecast")[1].condition == 'sunny' -%} {{ weather_sunny }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'cloudy' -%} {{ weather_cloudy }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'rainy' -%} {{ weather_rainy }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'pouring' -%} {{ weather_pouring }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'snowy' -%} {{ weather_snowy }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'hail' -%} {{ weather_hail }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'fog' -%} {{ weather_fog }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'windy' -%} {{ weather_windy }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'lightning' -%} {{ weather_lightning }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'execptional' -%} {{ weather_execptional_day }} - {%- elif state_attr(ha_weather,"forecast")[1].condition == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather03.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MIN #### - - service: "{{ command_text_printf }}" - data: - component: weather03.temp_min ### Temperature MIN ### - message: '{{state_attr(ha_weather,"forecast")[1].templow | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### Slash ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.slash - message: '/' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather03.temp_max ### Temperature MAX ### - message: '{{state_attr(ha_weather,"forecast")[1].temperature | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.day - message: "{{ day03_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.date - message: "{{ date03_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.day - message: "{{ day03_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.date - message: "{{ date03_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - ##### field 2 ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.value02 - message: '{{state_attr(ha_weather,"forecast")[1].precipitation| round(1)}} mm' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather03.value02_pic.pic={{ weather_icon_rain }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.value03 - message: '{{state_attr(ha_weather,"forecast")[1].wind_speed | round(1)}} km/h' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather03.value03_pic.pic={{ weather_icon_wind }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - ##### field 5 ##### - - ##### Weather Page - 04 - HA DEFAULT ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather04" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if state_attr(ha_weather,"forecast")[2].condition == 'sunny' -%} {{ weather_sunny }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'cloudy' -%} {{ weather_cloudy }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'rainy' -%} {{ weather_rainy }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'pouring' -%} {{ weather_pouring }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'snowy' -%} {{ weather_snowy }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'hail' -%} {{ weather_hail }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'fog' -%} {{ weather_fog }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'windy' -%} {{ weather_windy }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'lightning' -%} {{ weather_lightning }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'execptional' -%} {{ weather_execptional_day }} - {%- elif state_attr(ha_weather,"forecast")[2].condition == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather04.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MIN #### - - service: "{{ command_text_printf }}" - data: - component: weather04.temp_min ### Temperature MIN ### - message: '{{state_attr(ha_weather,"forecast")[2].templow | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### Slash ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.slash - message: '/' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather04.temp_max ### Temperature MAX ### - message: '{{state_attr(ha_weather,"forecast")[2].temperature | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.day - message: "{{ day04_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.date - message: "{{ date04_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.day - message: "{{ day04_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.date - message: "{{ date04_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - ##### field 2 ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.value02 - message: '{{state_attr(ha_weather,"forecast")[2].precipitation| round(1)}} mm' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather04.value02_pic.pic={{ weather_icon_rain }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.value03 - message: '{{state_attr(ha_weather,"forecast")[2].wind_speed | round(1)}} km/h' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather04.value03_pic.pic={{ weather_icon_wind }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - ##### field 5 ##### - - ##### Weather Page - 05 - HA DEFAULT ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather05" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if state_attr(ha_weather,"forecast")[3].condition == 'sunny' -%} {{ weather_sunny }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'cloudy' -%} {{ weather_cloudy }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'rainy' -%} {{ weather_rainy }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'pouring' -%} {{ weather_pouring }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'snowy' -%} {{ weather_snowy }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'hail' -%} {{ weather_hail }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'fog' -%} {{ weather_fog }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'windy' -%} {{ weather_windy }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'lightning' -%} {{ weather_lightning }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'execptional' -%} {{ weather_execptional_day }} - {%- elif state_attr(ha_weather,"forecast")[3].condition == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather05.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MIN #### - - service: "{{ command_text_printf }}" - data: - component: weather05.temp_min ### Temperature MIN ### - message: '{{state_attr(ha_weather,"forecast")[3].templow | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### Slash ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.slash - message: '/' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather05.temp_max ### Temperature MAX ### - message: '{{state_attr(ha_weather,"forecast")[3].temperature | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.day - message: "{{ day05_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.date - message: "{{ date05_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.day - message: "{{ day05_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.date - message: "{{ date05_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - ##### field 2 ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.value02 - message: '{{state_attr(ha_weather,"forecast")[3].precipitation| round(1)}} mm' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather05.value02_pic.pic={{ weather_icon_rain }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.value03 - message: '{{state_attr(ha_weather,"forecast")[3].wind_speed | round(1)}} km/h' - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather05.value03_pic.pic={{ weather_icon_wind }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - ##### field 5 ##### - - ##### Weather - Accuweather ##### - - conditions: - - condition: template - value_template: '{{ weather == "AccuWeather" }}' - sequence: - - choose: - ##### Weather Page - 01 - ACCUWEATHER ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather01" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if state_attr(accuweather_value,"forecast")[0].condition == 'sunny' -%} {{ weather_sunny }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'cloudy' -%} {{ weather_cloudy }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'rainy' -%} {{ weather_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'pouring' -%} {{ weather_pouring }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'snowy' -%} {{ weather_snowy }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'hail' -%} {{ weather_hail }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'fog' -%} {{ weather_fog }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'windy' -%} {{ weather_windy }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'lightning' -%} {{ weather_lightning }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'execptional' -%} {{ weather_execptional_day }} - {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather01.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MIN #### - - service: "{{ command_text_printf }}" - data: - component: weather01.temp_min ### Temperature MIN ### - message: '{{states(accuweather_realfeel_temperature_min_0d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### Slash ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.slash - message: '/' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather01.temp_max ### Temperature MAX ### - message: '{{states(accuweather_realfeel_temperature_max_0d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.day - message: "{{ day01_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.date - message: "{{ date01_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.day - message: "{{ day01_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.date - message: "{{ date01_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.value01 - message: "{{ state_attr(accuweather_value,'forecast')[0].precipitation_probability}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather01.value01_pic.pic={{ weather_icon_rain }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 2 ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.value02 - message: "{{states(accuweather_hours_of_sun_0d) | round(0)}} h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather01.value02_pic.pic={{ weather_icon_sun }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.value03 - message: "{{state_attr(accuweather_uv_index_0d, 'level')}} {{states(accuweather_uv_index_0d) | round(0)}}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather01.value03_pic.pic={{ weather_icon_protect }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.value04 - message: "{{states(accuweather_thunderstorm_probability_day_0d) | round(0)}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather01.value04_pic.pic={{ weather_icon_lightning }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 5 ##### - - service: "{{ command_text_printf }}" - data: - component: weather01.value05 - message: "{{states(accuweather_wind_day_0d) | round(0)}} km/h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather01.value05_pic.pic={{ weather_icon_wind }} - - ##### Weather Page - 02 - ACCUWEATHER ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather02" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if state_attr(accuweather_value,"forecast")[1].condition == 'sunny' -%} {{ weather_sunny }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'cloudy' -%} {{ weather_cloudy }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'rainy' -%} {{ weather_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'pouring' -%} {{ weather_pouring }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'snowy' -%} {{ weather_snowy }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'hail' -%} {{ weather_hail }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'fog' -%} {{ weather_fog }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'windy' -%} {{ weather_windy }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'lightning' -%} {{ weather_lightning }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'execptional' -%} {{ weather_execptional_day }} - {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather02.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MIN #### - - service: "{{ command_text_printf }}" - data: - component: weather02.temp_min ### Temperature MIN ### - message: '{{states(accuweather_realfeel_temperature_min_1d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### Slash ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.slash - message: '/' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather02.temp_max ### Temperature MAX ### - message: '{{states(accuweather_realfeel_temperature_max_1d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.day - message: "{{ day02_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.date - message: "{{ date02_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.day - message: "{{ day02_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.date - message: "{{ date02_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.value01 - message: "{{ state_attr(accuweather_value,'forecast')[1].precipitation_probability}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather02.value01_pic.pic={{ weather_icon_rain }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 2 ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.value02 - message: "{{states(accuweather_hours_of_sun_1d) | round(0)}} h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather02.value02_pic.pic={{ weather_icon_sun }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.value03 - message: "{{state_attr(accuweather_uv_index_1d, 'level')}} {{states(accuweather_uv_index_1d) | round(0)}}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather02.value03_pic.pic={{ weather_icon_protect }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.value04 - message: "{{states(accuweather_thunderstorm_probability_day_1d) | round(0)}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather02.value04_pic.pic={{ weather_icon_lightning }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 5 ##### - - service: "{{ command_text_printf }}" - data: - component: weather02.value05 - message: "{{states(accuweather_wind_day_1d) | round(0)}} km/h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather02.value05_pic.pic={{ weather_icon_wind }} - - ##### Weather Page - 03 - ACCUWEATHER ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather03" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if state_attr(accuweather_value,"forecast")[2].condition == 'sunny' -%} {{ weather_sunny }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'cloudy' -%} {{ weather_cloudy }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'rainy' -%} {{ weather_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'pouring' -%} {{ weather_pouring }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'snowy' -%} {{ weather_snowy }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'hail' -%} {{ weather_hail }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'fog' -%} {{ weather_fog }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'windy' -%} {{ weather_windy }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'lightning' -%} {{ weather_lightning }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'execptional' -%} {{ weather_execptional_day }} - {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather03.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MIN #### - - service: "{{ command_text_printf }}" - data: - component: weather03.temp_min ### Temperature MIN ### - message: '{{states(accuweather_realfeel_temperature_min_2d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### Slash ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.slash - message: '/' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather03.temp_max ### Temperature MAX ### - message: '{{states(accuweather_realfeel_temperature_max_2d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.day - message: "{{ day03_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.date - message: "{{ date03_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.day - message: "{{ day03_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.date - message: "{{ date03_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.value01 - message: "{{ state_attr(accuweather_value,'forecast')[2].precipitation_probability}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather03.value01_pic.pic={{ weather_icon_rain }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 2 ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.value02 - message: "{{states(accuweather_hours_of_sun_2d) | round(0)}} h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather03.value02_pic.pic={{ weather_icon_sun }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.value03 - message: "{{state_attr(accuweather_uv_index_2d, 'level')}} {{states(accuweather_uv_index_2d) | round(0)}}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather03.value03_pic.pic={{ weather_icon_protect }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.value04 - message: "{{states(accuweather_thunderstorm_probability_day_2d) | round(0)}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather03.value04_pic.pic={{ weather_icon_lightning }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 5 ##### - - service: "{{ command_text_printf }}" - data: - component: weather03.value05 - message: "{{states(accuweather_wind_day_2d) | round(0)}} km/h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather03.value05_pic.pic={{ weather_icon_wind }} - - ##### Weather Page - 04 - ACCUWEATHER ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather04" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if state_attr(accuweather_value,"forecast")[3].condition == 'sunny' -%} {{ weather_sunny }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'cloudy' -%} {{ weather_cloudy }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'rainy' -%} {{ weather_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'pouring' -%} {{ weather_pouring }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'snowy' -%} {{ weather_snowy }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'hail' -%} {{ weather_hail }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'fog' -%} {{ weather_fog }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'windy' -%} {{ weather_windy }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'lightning' -%} {{ weather_lightning }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'execptional' -%} {{ weather_execptional_day }} - {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather04.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MIN #### - - service: "{{ command_text_printf }}" - data: - component: weather04.temp_min ### Temperature MIN ### - message: '{{states(accuweather_realfeel_temperature_min_3d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### Slash ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.slash - message: '/' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather04.temp_max ### Temperature MAX ### - message: '{{states(accuweather_realfeel_temperature_max_3d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.day - message: "{{ day04_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.date - message: "{{ date04_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.day - message: "{{ day04_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.date - message: "{{ date04_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.value01 - message: "{{ state_attr(accuweather_value,'forecast')[3].precipitation_probability}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather04.value01_pic.pic={{ weather_icon_rain }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 2 ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.value02 - message: "{{states(accuweather_hours_of_sun_3d) | round(0)}} h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather04.value02_pic.pic={{ weather_icon_sun }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.value03 - message: "{{state_attr(accuweather_uv_index_3d, 'level')}} {{states(accuweather_uv_index_3d) | round(0)}}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather04.value03_pic.pic={{ weather_icon_protect }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.value04 - message: "{{states(accuweather_thunderstorm_probability_day_3d) | round(0)}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather04.value04_pic.pic={{ weather_icon_lightning }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 5 ##### - - service: "{{ command_text_printf }}" - data: - component: weather04.value05 - message: "{{states(accuweather_wind_day_3d) | round(0)}} km/h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather04.value05_pic.pic={{ weather_icon_wind }} - - ##### Weather Page - 05 - ACCUWEATHER ##### - - conditions: - - condition: template - value_template: '{{ states(last_click_weathersettings) == "weather05" }}' - sequence: - - variables: - # weather PIC - weather_icon: >- - {%- if state_attr(accuweather_value,"forecast")[4].condition == 'sunny' -%} {{ weather_sunny }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'cloudy' -%} {{ weather_cloudy }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'rainy' -%} {{ weather_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'pouring' -%} {{ weather_pouring }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'snowy' -%} {{ weather_snowy }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'hail' -%} {{ weather_hail }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'fog' -%} {{ weather_fog }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'windy' -%} {{ weather_windy }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'windy-variant' -%} {{ weather_windy-variant }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'lightning' -%} {{ weather_lightning }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'execptional' -%} {{ weather_execptional_day }} - {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'clear-night' -%} {{ weather_clear_night }} - {%- endif -%} - - ##### SET weather PIC on Home Page #### - - service: "{{ command_printf }}" - data: - cmd: weather05.weather_icon.pic={{ weather_icon }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MIN #### - - service: "{{ command_text_printf }}" - data: - component: weather05.temp_min ### Temperature MIN ### - message: '{{states(accuweather_realfeel_temperature_min_4d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### Slash ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.slash - message: '/' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET TEMP MAX #### - - service: "{{ command_text_printf }}" - data: - component: weather05.temp_max ### Temperature MAX ### - message: '{{states(accuweather_realfeel_temperature_max_4d) | round(0)}}°' - - delay: - milliseconds: "{{ delay_value }}" - - ##### SET Language DE / EN ##### - - choose: - ##### Language DE for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "DE" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.day - message: "{{ day05_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.date - message: "{{ date05_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Language EN for Day Name and Date ##### - - conditions: - - condition: template - value_template: '{{ language == "EN" }}' - sequence: - ##### Day Name ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.day - message: "{{ day05_de }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### Day Date ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.date - message: "{{ date05_en }}" - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 1 ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.value01 - message: "{{ state_attr(accuweather_value,'forecast')[4].precipitation_probability}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather05.value01_pic.pic={{ weather_icon_rain }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 2 ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.value02 - message: "{{states(accuweather_hours_of_sun_4d) | round(0)}} h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather05.value02_pic.pic={{ weather_icon_sun }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 3 ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.value03 - message: "{{state_attr(accuweather_uv_index_4d, 'level')}} {{states(accuweather_uv_index_4d) | round(0)}}" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather05.value03_pic.pic={{ weather_icon_protect }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 4 ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.value04 - message: "{{states(accuweather_thunderstorm_probability_day_4d) | round(0)}} %" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather05.value04_pic.pic={{ weather_icon_lightning }} - - delay: - milliseconds: "{{ delay_value }}" - - ##### field 5 ##### - - service: "{{ command_text_printf }}" - data: - component: weather05.value05 - message: "{{states(accuweather_wind_day_4d) | round(0)}} km/h" - - delay: - milliseconds: "{{ delay_value }}" - - service: "{{ command_printf }}" - data: - cmd: weather05.value05_pic.pic={{ weather_icon_wind }} - -############################################################# -##### CLOSE - Action ##### -############################################################# \ No newline at end of file diff --git a/custom_configuration/.DS_Store b/custom_configuration/.DS_Store deleted file mode 100644 index 274517d..0000000 Binary files a/custom_configuration/.DS_Store and /dev/null differ diff --git a/esphome.yaml b/esphome.yaml deleted file mode 100644 index e2da7da..0000000 --- a/esphome.yaml +++ /dev/null @@ -1,1164 +0,0 @@ -############################################################# -##### START - SUBSTITUTIONS ##### -############################################################# - - - ##### 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} - comment: ${friendly_name} - - ##### 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} - - captive_portal: - - web_server: - port: 80 - auth: - username: admin - password: ${ota_password} - - ##### 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); - - ###### 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 - 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); - - 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).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 diff --git a/nspanel.HMI b/nspanel.HMI index 21f9598..9e5cfc3 100644 Binary files a/nspanel.HMI and b/nspanel.HMI differ diff --git a/nspanel.tft b/nspanel.tft index 609abe0..6a7989d 100644 Binary files a/nspanel.tft and b/nspanel.tft differ diff --git a/nspanel_esphome.yaml b/nspanel_esphome.yaml new file mode 100644 index 0000000..57b2b14 --- /dev/null +++ b/nspanel_esphome.yaml @@ -0,0 +1,816 @@ +##################################################################################################### +##### NSPANEL ESPHOME created by Blackymas - https://github.com/Blackymas/NSPanel_HA_Blueprint ##### +##### ADVANCED CONFIG + FULL ESPHOME CODE! ##### +##### PLEASE only make changes if it is necessary and also the required knowledge is available. ##### +##### For normal use with the Blueprint, no changes are necessary. ##### +##################################################################################################### + + +##### ADVANCED CONFIGURATION - 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! + # 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 CONFIGURATION ############################################################## + +##### 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} + +##### Functionality for the Nextion display ##### +external_components: + - source: github://pr#2956 + components: [nextion] + refresh: 1h + +##### ESPHOME CONFIGURATION ##### +esphome: + name: ${device_name} + min_version: 2022.10.2 + +##### TYPE OF ESP BOARD ##### +esp32: + board: esp32dev + +captive_portal: + +web_server: + port: 80 + auth: + username: admin + password: ${ota_password} + +##### OTA 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 + +###### REBOOT BUTTON ##### +button: + - platform: restart + name: ${device_name} Restart + id: restart_nspanel + + +##### START - API CONFIGURATION ##### +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 ##### + - 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 ##### + - 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 ##### + - 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 "hide componente" directly to the display ##### + - 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 "show componente" directly to the display ##### + - service: send_command_show + variables: + component: string + then: + - wait_until: + switch.is_on: nextion_init + - lambda: 'id(disp1).show_component(component.c_str());' + + ##### Service to send a command "font color" directly to the display ##### + - 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 "background color" directly to the display ##### + - 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);' + + #### Service to send thermostat cycle state #### + - service: send_thermostat_cycle_state + variables: + value: float + then: + - wait_until: + switch.is_on: nextion_init + - lambda: |- + //ESP_LOGD("nextion", "thermostat sendig value %f", value); + int left=16; // 16 is empty left. + int mid=17; // 17 is empty mid. + int right=18; // 18 is empty right. + if (value < 13.5) { + left=16; + mid=17; + right=18; + } else if (value >= 13.5 and value < 14) { + left=19; + mid=17; + right=18; + } else if (value >= 14 and value < 14.5) { + left=20; + mid=17; + right=18; + } else if (value >= 14.5 and value < 15) { + left=21; + mid=17; + right=18; + } else if (value >= 15 and value < 15.5) { + left=22; + mid=17; + right=18; + } else if (value >= 15.5 and value < 16) { + left=23; + mid=17; + right=18; + } else if (value >= 16 and value < 16.5) { + left=24; + mid=17; + right=18; + } else if (value >= 16.5 and value < 17) { + left=25; + mid=17; + right=18; + } else if (value >= 17 and value < 17.5) { + left=26; + mid=17; + right=18; + } else if (value >= 17.5 and value < 18) { + left=27; + mid=17; + right=18; + } else if (value >= 18 and value < 18.5) { + left=28; + mid=17; + right=18; + } else if (value >= 18.5 and value < 19) { + left=29; + mid=30; + right=18; + } else if (value >= 19 and value < 19.5) { + left=29; + mid=31; + right=18; + } else if (value >= 19.5 and value < 20) { + left=29; + mid=32; + right=18; + } else if (value >= 20 and value < 20.5) { + left=29; + mid=33; + right=18; + } else if (value >= 20.5 and value < 21) { + left=29; + mid=34; + right=18; + } else if (value >= 21 and value < 21.5) { + left=29; + mid=35; + right=18; + } else if (value >= 21.5 and value < 22) { + left=29; + mid=36; + right=18; + } else if (value >= 22 and value < 22.5) { + left=29; + mid=37; + right=38; + } else if (value >= 22.5 and value < 23) { + left=29; + mid=37; + right=39; + } else if (value >= 23 and value < 23.5) { + left=29; + mid=37; + right=40; + } else if (value >= 23.5 and value < 24) { + left=29; + mid=37; + right=41; + } else if (value >= 24 and value < 24.5) { + left=29; + mid=37; + right=42; + } else if (value >= 24.5 and value < 25) { + left=29; + mid=37; + right=43; + } else if (value >= 25 and value < 25.5) { + left=29; + mid=37; + right=44; + } else if (value >= 25.5 and value < 26) { + left=29; + mid=37; + right=45; + } else if (value >= 26 and value < 26.5) { + left=29; + mid=37; + right=46; + } else if (value >= 26.5 and value < 27) { + left=29; + mid=37; + right=47; + } else if (value >= 27) { + left=29; + mid=37; + right=48; + } + // sends the 3 images to the display + //ESP_LOGD("nextion", "thermostat left %i", left); + //ESP_LOGD("nextion", "thermostat mid %i", mid); + //ESP_LOGD("nextion", "thermostat right %i", right); + id(disp1).send_command_printf("climate_left.pic=%i", left); + id(disp1).send_command_printf("climate_middle.pic=%i", mid); + id(disp1).send_command_printf("climate_right.pic=%i", right); + // send target-temp + id(disp1).set_component_text_printf("target_temp", "%.1f°", value); + id(display_target_temp).publish_state(value); + + +##### START - GLOBALS CONFIGURATION ##### +globals: + + ##### 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' + + ##### Temperature Correction ##### + - id: temperature_correction_global + type: float + restore_value: true + initial_value: '0.0' + + ##### Save Display DIM Brightness for NSPanel reboot + - id: sleep_modus_global + type: int + restore_value: true + initial_value: '0' + + ##### lastclick_general State ##### + - id: lastclick_general_global + type: std::string + restore_value: no + initial_value: '' + + ##### lastclick_lightsettings State ##### + - id: lastclick_lightsettings_global + type: std::string + restore_value: no + initial_value: '' + + ##### lastclick_coversettings State ##### + - id: lastclick_coversettings_global + type: std::string + restore_value: no + initial_value: '' + + ##### lastclick_climatesettings State ##### + - id: lastclick_climatesettings_global + type: std::string + restore_value: no + initial_value: '' + + ##### lastclick_ccurrentpage State ##### + - id: currentpage_global + type: std::string + restore_value: no + initial_value: '' + +##### START - BINARY SENSOR CONFIGURATION ##### +binary_sensor: + + ###### LEFT BUTTON BELOW DISPLAY TO TOGGLE RELAY##### + - platform: gpio + name: ${device_name} Left Button + pin: + number: 14 + inverted: true + + ##### RIGHT BUTTON BELOW DISPLAY TO TOGGLE RELAY ##### + - platform: gpio + name: ${device_name} Right Button + pin: + number: 27 + inverted: true + + ##### Restart NSPanel Button ##### + - platform: nextion + name: ${device_name} Restart + page_id: 7 + component_id: 9 + internal: true + on_click: + - button.press: restart_nspanel + + ##### Sleep Modus NSPanel Button ##### + - platform: nextion + name: ${device_name} Sleep Modus + page_id: 7 + component_id: 4 + internal: true + on_click: + - switch.toggle: sleep_modus + + ##### Hotwater Charge ##### + # - platform: nextion + # name: ${device_name} Hotwater Charge + # page_id: 6 + # component_id: 20 + # on_click: + # - homeassistant.service: + # service: switch.toggle + # data: + # entity_id: ${ha_hotwater_charge} + + +##### START - SENSOR CONFIGURATION ##### +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 + filters: + - lambda: return x + id(temperature_correction_global); + on_value: + then: + - wait_until: + switch.is_on: nextion_init + - lambda: id(disp1).set_component_text_printf("home.current_temp", "%.1f°", id(temp_nspanel).state); # onboard temp (thermostat temp) to home page. + # - lambda: id(disp1).set_component_text_printf("climate.current_temp", "%.1f", id(temp_nspanel).state); + + ##### current value of page-climate target_temp ##### + - platform: template + name: ${device_name} Display Target Temperature + id: display_target_temp + lambda: return {}; + update_interval: 10s + + ###### 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); + + +##### START - TEXT SENSOR CONFIGURATION ##### +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 + ssid: + name: ${device_name} SSID + disabled_by_default: true + bssid: + name: ${device_name} BSSID + disabled_by_default: true + + ##### last click sensor, the main action variable - push to HA ##### + - platform: nextion + nextion_id: disp1 + name: ${device_name} Last Click + id: disp1_lastclick_general + update_interval: 50ms + component_name: lastclick + internal: false + filters: + - lambda: |- + if (strcmp(x.c_str(), id(lastclick_general_global).c_str()) != 0) { + return x; + } else { + return {}; + } + on_value: + then: + - globals.set: + id: lastclick_general_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_lastclick_lightsettings + update_interval: 50ms + component_name: lightsetting + internal: false + filters: + - lambda: |- + if (strcmp(x.c_str(), id(lastclick_lightsettings_global).c_str()) != 0) { + return x; + } else { + return {}; + } + on_value: + then: + - globals.set: + id: lastclick_lightsettings_global + 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_lastclick_coversettings + update_interval: 50ms + component_name: coversetting + internal: false + filters: + - lambda: |- + if (strcmp(x.c_str(), id(lastclick_coversettings_global).c_str()) != 0) { + return x; + } else { + return {}; + } + on_value: + then: + - globals.set: + id: lastclick_coversettings_global + value: !lambda return x; + + ##### last click climate page, the main action variable - push to HA ##### + - platform: nextion + nextion_id: disp1 + name: ${device_name} last click climatesettings + id: disp1_lastclick_climatesettings + update_interval: 50ms + component_name: climatesetting + internal: false + filters: + - lambda: |- + if (strcmp(x.c_str(), id(lastclick_climatesettings_global).c_str()) != 0) { + return x; + } else { + return {}; + } + on_value: + then: + - globals.set: + id: lastclick_climatesettings_global + value: !lambda return x; + + ##### currentpage sensor, the main action variable - push to HA ##### + - platform: nextion + nextion_id: disp1 + name: ${device_name} currentpage + id: disp1_currentpage + update_interval: 50ms + component_name: currentpage + internal: false + filters: + - lambda: |- + if (strcmp(x.c_str(), id(currentpage_global).c_str()) != 0) { + return x; + } else { + return {}; + } + on_value: + then: + - globals.set: + id: currentpage_global + value: !lambda return x; + + +##### START - SWITCH CONFIGURATION ##### +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 + entity_category: config + 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 + + ##### 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 + entity_category: config + 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); + + +##### START - NUMBER CONFIGURATION ##### +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);' + + ##### Temperature Correction ##### + - platform: template + name: ${device_name} Temperature Correction + id: temperature_correction + entity_category: config + unit_of_measurement: '°C' + min_value: -10 + max_value: 10 + step: 0.5 + restore_value: true + optimistic: true + set_action: + then: + - globals.set: + id: temperature_correction_global + value: !lambda 'return x;' + + +##### START - DISPLAY START CONFIGURATION ##### +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); + } diff --git a/nspnael_blueprint.yaml b/nspnael_blueprint.yaml new file mode 100644 index 0000000..b8b6bba --- /dev/null +++ b/nspnael_blueprint.yaml @@ -0,0 +1,4683 @@ +############################################################# +##### START - INPUT ##### +############################################################# + +blueprint: + name: NSPanel Configuration + description: v2.0.0 - Configuration and synchronization NSpanele via Blueprint + domain: automation + homeassistant: + min_version: 2022.11.1 + input: + + ##### MAIN NAME ##### + nspanel_name: + name: ESPhome Node Name + description: '* *here you have to enter the exact same name **"device_name"** as in the ESPHome file*' + default: [nspanel_name] + selector: + text: {} + + ##### SYSTEM SETTINGS ##### + language: + name: Language for NSPanel + description: '* *select the language for your NSPanel*' + default: 'EN' + selector: + select: + options: + - DE + - EN + tft_path: + name: Nextion TFT File Folder (Optional) + description: '* *TFT Path where the Nextion TFT File is stored. Attention! The **"Folder-Watcher"** must also be configured in the configuration.yaml. **Only necessary for manual upload of TFT file in ESPHome Advaced mode.** See HowTo*' + default: [] + selector: + text: {} + delay: + name: Delay to avoid synchronization problem + description: '* *Synchronization Problems may occur due to the **NETWORK / WLAN**. To avoid this problem enter your value for the delay (milliseconds)*' + default: '10' + selector: + number: + min: 0 + max: 100 + sync_value_ha: + name: Synchronization of all values (Optional) + description: '* *Synchronization of values between HA and NSPanel for Lightsetting and Coversetting Page -> Maybe causes number jumps*' + default: 'select_no' + selector: + select: + options: + - label: 'No' + value: select_no + - label: 'Yes' + value: select_yes + sync_slider_ha: + name: Synchronization of all Sliders (Optional) + description: '* *Synchronization of sliders between HA and NSPanel for Lightsetting and Coversetting Page -> Maybe causes flickering on the Slider*' + default: 'select_no' + selector: + select: + options: + - label: 'No' + value: select_no + - label: 'Yes' + value: select_yes + + ##### WEATHER ##### + weather: + name: Weather Integration + description: '* *select our Weather Integration*' + default: 'Default' + selector: + select: + options: + - Default + - AccuWeather + accuweather: + name: Name assigned to the AccuWeather Integration (Optional) + description: '* *If you use Accuweather Integration, the name of the Accuweather Integration must be entered here. ATTENTION! You must enter the name as specified in the entity. Example: Name of Accuweather is **"Home Weather"** then please write **"home_weather"** in the field*' + default: [] + selector: + text: {} + + ##### GENERAL ENTITYS ##### + outdoortemp: + name: Outdoor Temperature Sensor (Optional) + description: '* *If no outdoor sensor is available, leave the field empty and the value from your selected weather integration will be used automatically.*' + default: [] + selector: + entity: + domain: + - sensor + humidity: + name: Humidity Sensor (Optional) + description: '* *Choose your humidity sensor*' + default: [] + selector: + entity: + domain: + - sensor + hotwatertemp: + name: Hot Water Temperature Sensor (Optional) + description: '* *Choose your hot water sensor*' + default: [] + selector: + entity: + domain: + - sensor + hotwatercharge: + name: Hot Water Charge (Optional) + description: '* *Choose your switch to turn your hot water ON or OFF*' + default: [] + selector: + entity: + domain: + - switch + - input_boolean + heatingsystemflame: + name: Top Menu 04 (Optional) + description: '* *Top Menu 04 is a Flame icon. When your selected sensor is on, a flame icon is displayed*' + default: [] + selector: + entity: + domain: + - binary_sensor + climate: + name: Climate to control (Optional) + description: '* *If an entity is selected, the **"Thermostat page"** is activated and enabled. If you have **"Underfloor Heating System"** and want to switch it via the relay, you must create a separate climate in HA. See HowTo*' + default: [] + selector: + entity: + domain: climate + climate_optimistic: + name: Climate control optimistic mode (Optional) + default: true + description: '* *Depends on your climate device and HA-Integration. If optimisitc mode is **OFF** then changes are made will wait for response from device to update temperature in the display. This can cause delays or jumping values. If **ON** the script update the display immediately but apply changes after closing climate-page* ' + selector: + boolean: + + ##### HARDWARE BUTTONS ##### + left_button_entity: + name: Left Button (Optional) + description: '* *Left Hardware Button - Select the entity that should be switched*' + default: [] + selector: + entity: + domain: + - light + - switch + - input_boolean + - cover + left_button_name: + name: Name "Left Button" (Optional) + description: '* *Left Button label - 10 characters are supported*' + default: [] + selector: + text: {} + right_button_entity: + name: Right Button (Optional) + description: '* *Right Hardware Button - Select the entity that should be switched*' + default: [] + selector: + entity: + domain: + - light + - switch + - input_boolean + - cover + right_button_name: + name: Name "Right Button" (Optional) + description: '* *Right Button label - 10 characters are supported*' + default: [] + selector: + text: {} + + ##### BUTTONS ##### + entity01: + name: Button 01 (Optional) + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity01_name: + name: Name "Button 01" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity02: + name: Button 02 (Optional) + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity02_name: + name: Name "Button 02" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity03: + name: Button 03 (Optional) + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity03_name: + name: Name "Button 03" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity04: + name: Button 04 (Optional) + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity04_name: + name: Name "Button 04" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity05: + name: Button 05 (Optional) + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity05_name: + name: Name "Button 05" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity06: + name: Button 06 (Optional) + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity06_name: + name: Name "Button 06" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity07: + name: Button 07 (Optional) + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity07_name: + name: Name "Button 07" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity08: + name: Button 08 (Optional) + description: '* *Displayed on **"Button Page 1"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity08_name: + name: Name "Button 08" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity09: + name: Button 09 (Optional) + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity09_name: + name: Name "Button 09" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity10: + name: Button 10 (Optional) + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity10_name: + name: Name "Button 10" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity11: + name: Button 11 (Optional) + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity11_name: + name: Name "Button 11" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity12: + name: Button 12 (Optional) + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity12_name: + name: Name "Button 12" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity13: + name: Button 13 (Optional) + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity13_name: + name: Name "Button 13" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity14: + name: Button 14 (Optional) + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity14_name: + name: Name "Button 14" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity15: + name: Button 15 (Optional) + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity15_name: + name: Name "Button 15" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity16: + name: Button 16 (Optional) + description: '* *Displayed on **"Button Page 2"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity16_name: + name: Name "Button 16" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity17: + name: Button 17 (Optional) + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity17_name: + name: Name "Button 17" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity18: + name: Button 18 (Optional) + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity18_name: + name: Name "Button 18" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity19: + name: Button 19 (Optional) + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity19_name: + name: Name "Button 19" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity20: + name: Button 20 (Optional) + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity20_name: + name: Name "Button 20" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity21: + name: Button 21 (Optional) + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity21_name: + name: Name "Button 21" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity22: + name: Button 22 (Optional) + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity22_name: + name: Name "Button 22" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity23: + name: Button 23 (Optional) + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity23_name: + name: Name "Button 23" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity24: + name: Button 24 (Optional) + description: '* *Displayed on **"Button Page 3"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity24_name: + name: Name "Button 24" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity25: + name: Button 25 (Optional) + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity25_name: + name: Name "Button 25" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity26: + name: Button 26 (Optional) + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity26_name: + name: Name "Button 26" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity27: + name: Button 27 (Optional) + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity27_name: + name: Name "Button 27" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity28: + name: Button 28 (Optional) + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity28_name: + name: Name "Button 28" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity29: + name: Button 29 (Optional) + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity29_name: + name: Name "Button 29" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity30: + name: Button 30 (Optional) + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity30_name: + name: Name "Button 30" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity31: + name: Button 31 (Optional) + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity31_name: + name: Name "Button 31" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + entity32: + name: Button 32 (Optional) + description: '* *Displayed on **"Button Page 4"** - (ONLY light | switch | cover | input_boolean)*' + default: [] + selector: + entity: + domain: + - light + - switch + - cover + - input_boolean + entity32_name: + name: Name "Button 32" (Optional) + description: '* *Button label - 10 characters are supported*' + default: [] + selector: + text: {} + +mode: parallel +max: 5000 + +############################################################# +##### CLOSE - INPUT ##### +############################################################# + + +############################################################# +##### START - Variables ##### +############################################################# + +trigger_variables: + nspanel_name_trigger: !input "nspanel_name" + last_click: "sensor.{{ nspanel_name_trigger }}_last_click" + last_click_lightsettings: "sensor.{{ nspanel_name_trigger }}_last_click_lightsettings" + last_click_coversettings: "sensor.{{ nspanel_name_trigger }}_last_click_coversettings" + last_click_climatesettings: "sensor.{{ nspanel_name_trigger }}_last_click_climatesettings" + left_button: "binary_sensor.{{ nspanel_name_trigger }}_left_button" + right_button: "binary_sensor.{{ nspanel_name_trigger }}_right_button" + weather_forcast_button: "binary_sensor.{{ nspanel_name_trigger }}_weather_forcast" + nextion_inited_trigger: "switch.{{ nspanel_name_trigger }}_nextion_inited" + # current_page: "sensor.{{ nspanel_name_trigger }}_current_page" + current_page: "sensor.{{ nspanel_name_trigger }}_currentpage" + hotwatercharge: !input "hotwatercharge" + heatingsystemflame: !input "heatingsystemflame" + display_target_temperature: "sensor.{{ nspanel_name_trigger }}_display_target_temperature" + relay01_entity: "switch.{{ nspanel_name_trigger }}_relay_1" + relay02_entity: "switch.{{ nspanel_name_trigger }}_relay_2" + + ##### WEATHER Trigger ##### + weather: !input "weather" + ha_weather: "weather.home" + accuweather: !input "accuweather" + accuweather_value: "weather.{{ accuweather }}" + weather_entity: >- + {%- if weather == "Default" -%} {{ ha_weather }} + {%- elif weather == "AccuWeather" -%} {{ accuweather_value }} + {%- endif -%} + +variables: + ##### GENERAL ##### + nspanel_name: !input "nspanel_name" + time: "{{ (as_timestamp(now()) | timestamp_custom('%H:%M')) }}" + language: !input "language" + + ##### PUSH TO NEXTION DISPLAY ##### + command_text_printf: "esphome.{{ nspanel_name }}_send_command_text_printf" + command_value: "esphome.{{ nspanel_name }}_send_command_value" + command_printf: "esphome.{{ nspanel_name }}_send_command_printf" + command_font_color: "esphome.{{ nspanel_name }}_send_command_font_color" + command_background_color: "esphome.{{ nspanel_name }}_send_command_background_color" + command_thermostat_cycle: "esphome.{{ nspanel_name }}_send_thermostat_cycle_state" + + ###### SYNC SETTINGS ##### + delay_boot: !input "delay" + delay_value: !input "delay" + delay_jump_page: !input "delay" + sync_slider_ha: !input "sync_slider_ha" + sync_value_ha: !input "sync_value_ha" + climate_optimistic: !input "climate_optimistic" + + ##### TFT UPLOAD ##### + tft_upload: "esphome.{{ nspanel_name }}_upload_tft" + tft_path: !input "tft_path" + + ##### GENERAL ENTITYS ##### + humidity: !input "humidity" + hotwatertemp: !input "hotwatertemp" + outdoortemp: !input "outdoortemp" + climate: !input "climate" + + #### HARDWARE BUTTONS ##### + left_button_entity: !input "left_button_entity" + left_button_name: !input "left_button_name" + right_button_entity: !input "right_button_entity" + right_button_name: !input "right_button_name" + + ##### NEXTION PIC MAPPING ##### + button_light_off: "62" + button_light_on: "63" + button_switch_off: "64" + button_switch_on: "65" + button_cover_off: "66" + button_cover_on: "67" + hardware_button_pic_off: "98" + hardware_button_pic_on: "99" + cover_pic_closed: "78" + cover_pic_open: "79" + battery_icon: "80" + light_pic_off: "96" + light_pic_on: "97" + # hotwater_pic_off: "60" + hotwater_pic_on: "61" + flame_pic_on: "57" + # flame_pic_off: "60" + top_menu_blank: "60" + thermostat_pic_on: "58" + heat_pic_on: "59" + relay01_pic_on: "105" + relay02_pic_on: "106" + + + weather_sunny: "2" + weather_cloudy: "3" + weather_rainy: "4" + weather_pouring: "5" + weather_snowy: "6" + weather_hail: "7" + weather_snowy_rainy: "7" + weather_fog: "8" + weather_windy: "9" + weather_windy_variant: "9" + weather_lightning: "10" + weather_partlycloudy_day: "11" + weather_partlycloudy_night: "12" + weather_lightning_rainy_day: "13" + weather_lightning_rainy_night: "14" + weather_execptional_day: "13" + weather_execptional_night: "14" + weather_clear_night: "15" + + weather_icon_blank: "51" + weather_icon_rain: "52" + weather_icon_sun: "53" + weather_icon_protect: "54" + weather_icon_lightning: "55" + weather_icon_wind: "56" + + # hotw_bt_pic + hotw_bt_blank: "100" + hotw_bt_off: "101" + hotw_bt_on: "102" + + # heating_bt_pic + heating_bt_pic_off: "103" + heating_bt_pic_on: "104" + + ###### NEXTION COLOR MAPPING ##### + button_color_1: "65535" + button_color_2: "10597" + + ###### NEXTION PAGE MAPPING ##### + page_home: "home" + page_weather01: "weather01" + page_weather02: "weather02" + page_weather03: "weather03" + page_weather04: "weather04" + page_weather05: "weather05" + page_climate: "climate" + page_settings: "settings" + page_boot: "boot" + page_screensaver: "screensaver" + page_lightsettings: "lightsettings" + page_coversettings: "coversettings" + page_buttonpage01: "buttonpage01" + page_buttonpage02: "buttonpage02" + page_buttonpage03: "buttonpage03" + page_buttonpage04: "buttonpage04" + + + ##### MUI Multilingual User Interface (DE/EN) ##### + date01_mui: >- + {%- if language == "DE" -%} {{ ((as_timestamp(now())) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }} + {%- elif language == "EN" -%} {{ ((as_timestamp(now())) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }} + {%- endif -%} + date02_mui: >- + {%- if language == "DE" -%} {{ ((as_timestamp(now()) + 86400) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }} + {%- elif language == "EN" -%} {{ ((as_timestamp(now()) + 86400) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }} + {%- endif -%} + date03_mui: >- + {%- if language == "DE" -%} {{ ((as_timestamp(now()) + 172800) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }} + {%- elif language == "EN" -%} {{ ((as_timestamp(now()) + 172800) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }} + {%- endif -%} + date04_mui: >- + {%- if language == "DE" -%} {{ ((as_timestamp(now()) + 259200) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }} + {%- elif language == "EN" -%} {{ ((as_timestamp(now()) + 259200) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }} + {%- endif -%} + date05_mui: >- + {%- if language == "DE" -%} {{ ((as_timestamp(now()) + 345600) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Montag,')| replace('Tue', 'Dienstag,')| replace('Wed', 'Mittwoch,')| replace('Thu', 'Donnerstag,')| replace('Fri', 'Freitag,')| replace('Sat', 'Samstag,')| replace('Sun', 'Sonntag,') }} + {%- elif language == "EN" -%} {{ ((as_timestamp(now()) + 345600) | timestamp_custom('%a %d.%m' )) | replace('Mon', 'Monday,')| replace('Tue', 'Tuesday,')| replace('Wed', 'Wednesday,')| replace('Thu', 'Thursday,')| replace('Fri', 'Friday,')| replace('Sat', 'Saturday,')| replace('Sun', 'Sunday,') }} + {%- endif -%} + day01_mui: >- + {%- if language == "DE" -%} Heute + {%- elif language == "EN" -%} Today + {%- endif -%} + day02_mui: >- + {%- if language == "DE" -%} Morgen + {%- elif language == "EN" -%} Tomorrow + {%- endif -%} + day03_mui: >- + {%- if language == "DE" -%} in 2 Tagen + {%- elif language == "EN" -%} in 2 Days + {%- endif -%} + day04_mui: >- + {%- if language == "DE" -%} in 3 Tagen + {%- elif language == "EN" -%} in 3 Days + {%- endif -%} + day05_mui: >- + {%- if language == "DE" -%} in 4 Tagen + {%- elif language == "EN" -%} in 4 Days + {%- endif -%} + on_mui: >- + {%- if language == "DE" -%} ein + {%- elif language == "EN" -%} on + {%- endif -%} + off_mui: >- + {%- if language == "DE" -%} aus + {%- elif language == "EN" -%} off + {%- endif -%} + heat_mui: >- + {%- if language == "DE" -%} heizen + {%- elif language == "EN" -%} heat + {%- endif -%} + + + ##### FORCAST ACCUWEATHER - DAY 0 ##### + accuweather_realfeel_temperature_min_0d: "sensor.{{ accuweather }}_realfeel_temperature_min_0d" + accuweather_realfeel_temperature_max_0d: "sensor.{{ accuweather }}_realfeel_temperature_max_0d" + accuweather_hours_of_sun_0d: "sensor.{{ accuweather }}_hours_of_sun_0d" + accuweather_uv_index_0d: "sensor.{{ accuweather }}_uv_index_0d" + accuweather_thunderstorm_probability_day_0d: "sensor.{{ accuweather }}_thunderstorm_probability_day_0d" + accuweather_thunderstorm_probability_night_0d: "sensor.{{ accuweather }}_thunderstorm_probability_night_0d" + accuweather_wind_day_0d: "sensor.{{ accuweather }}_wind_day_0d" + accuweather_wind_night_0d: "sensor.{{ accuweather }}_wind_night_0d" + ##### FORCAST ACCUWEATHER - DAY 1 ##### + accuweather_realfeel_temperature_min_1d: "sensor.{{ accuweather }}_realfeel_temperature_min_1d" + accuweather_realfeel_temperature_max_1d: "sensor.{{ accuweather }}_realfeel_temperature_max_1d" + accuweather_hours_of_sun_1d: "sensor.{{ accuweather }}_hours_of_sun_1d" + accuweather_uv_index_1d: "sensor.{{ accuweather }}_uv_index_1d" + accuweather_thunderstorm_probability_day_1d: "sensor.{{ accuweather }}_thunderstorm_probability_day_1d" + accuweather_thunderstorm_probability_night_1d: "sensor.{{ accuweather }}_thunderstorm_probability_night_1d" + accuweather_wind_day_1d: "sensor.{{ accuweather }}_wind_day_1d" + accuweather_wind_night_1d: "sensor.{{ accuweather }}_wind_night_1d" + ##### FORCAST ACCUWEATHER - DAY 2 ##### + accuweather_realfeel_temperature_min_2d: "sensor.{{ accuweather }}_realfeel_temperature_min_2d" + accuweather_realfeel_temperature_max_2d: "sensor.{{ accuweather }}_realfeel_temperature_max_2d" + accuweather_hours_of_sun_2d: "sensor.{{ accuweather }}_hours_of_sun_2d" + accuweather_uv_index_2d: "sensor.{{ accuweather }}_uv_index_2d" + accuweather_thunderstorm_probability_day_2d: "sensor.{{ accuweather }}_thunderstorm_probability_day_2d" + accuweather_thunderstorm_probability_night_2d: "sensor.{{ accuweather }}_thunderstorm_probability_night_2d" + accuweather_wind_day_2d: "sensor.{{ accuweather }}_wind_day_2d" + accuweather_wind_night_2d: "sensor.{{ accuweather }}_wind_night_2d" + ##### FORCAST ACCUWEATHER - DAY 3 ##### + accuweather_realfeel_temperature_min_3d: "sensor.{{ accuweather }}_realfeel_temperature_min_3d" + accuweather_realfeel_temperature_max_3d: "sensor.{{ accuweather }}_realfeel_temperature_max_3d" + accuweather_hours_of_sun_3d: "sensor.{{ accuweather }}_hours_of_sun_3d" + accuweather_uv_index_3d: "sensor.{{ accuweather }}_uv_index_3d" + accuweather_thunderstorm_probability_day_3d: "sensor.{{ accuweather }}_thunderstorm_probability_day_3d" + accuweather_thunderstorm_probability_night_3d: "sensor.{{ accuweather }}_thunderstorm_probability_night_3d" + accuweather_wind_day_3d: "sensor.{{ accuweather }}_wind_day_3d" + accuweather_wind_night_3d: "sensor.{{ accuweather }}_wind_night_3d" + ##### FORCAST ACCUWEATHER - DAY 4 ##### + accuweather_realfeel_temperature_min_4d: "sensor.{{ accuweather }}_realfeel_temperature_min_4d" + accuweather_realfeel_temperature_max_4d: "sensor.{{ accuweather }}_realfeel_temperature_max_4d" + accuweather_hours_of_sun_4d: "sensor.{{ accuweather }}_hours_of_sun_4d" + accuweather_uv_index_4d: "sensor.{{ accuweather }}_uv_index_4d" + accuweather_thunderstorm_probability_day_4d: "sensor.{{ accuweather }}_thunderstorm_probability_day_4d" + accuweather_thunderstorm_probability_night_4d: "sensor.{{ accuweather }}_thunderstorm_probability_night_4d" + accuweather_wind_day_4d: "sensor.{{ accuweather }}_wind_day_4d" + accuweather_wind_night_4d: "sensor.{{ accuweather }}_wind_night_4d" + + ##### BUTTONS 1- 32 ##### + entity01: !input "entity01" + entity01_name: !input "entity01_name" + entity02: !input "entity02" + entity02_name: !input "entity02_name" + entity03: !input "entity03" + entity03_name: !input "entity03_name" + entity04: !input "entity04" + entity04_name: !input "entity04_name" + entity05: !input "entity05" + entity05_name: !input "entity05_name" + entity06: !input "entity06" + entity06_name: !input "entity06_name" + entity07: !input "entity07" + entity07_name: !input "entity07_name" + entity08: !input "entity08" + entity08_name: !input "entity08_name" + entity09: !input "entity09" + entity09_name: !input "entity09_name" + entity10: !input "entity10" + entity10_name: !input "entity10_name" + entity11: !input "entity11" + entity11_name: !input "entity11_name" + entity12: !input "entity12" + entity12_name: !input "entity12_name" + entity13: !input "entity13" + entity13_name: !input "entity13_name" + entity14: !input "entity14" + entity14_name: !input "entity14_name" + entity15: !input "entity15" + entity15_name: !input "entity15_name" + entity16: !input "entity16" + entity16_name: !input "entity16_name" + entity17: !input "entity17" + entity17_name: !input "entity17_name" + entity18: !input "entity18" + entity18_name: !input "entity18_name" + entity19: !input "entity19" + entity19_name: !input "entity19_name" + entity20: !input "entity20" + entity20_name: !input "entity20_name" + entity21: !input "entity21" + entity21_name: !input "entity21_name" + entity22: !input "entity22" + entity22_name: !input "entity22_name" + entity23: !input "entity23" + entity23_name: !input "entity23_name" + entity24: !input "entity24" + entity24_name: !input "entity24_name" + entity25: !input "entity25" + entity25_name: !input "entity25_name" + entity26: !input "entity26" + entity26_name: !input "entity26_name" + entity27: !input "entity27" + entity27_name: !input "entity27_name" + entity28: !input "entity28" + entity28_name: !input "entity28_name" + entity29: !input "entity29" + entity29_name: !input "entity29_name" + entity30: !input "entity30" + entity30_name: !input "entity30_name" + entity31: !input "entity31" + entity31_name: !input "entity31_name" + entity32: !input "entity32" + entity32_name: !input "entity32_name" + +############################################################# +##### CLOSE - Variables ##### +############################################################# + + +############################################################# +##### START - Trigger ##### +############################################################# + +trigger: + + ##### Trigger - General ################################################################################################################# + + ###### DELME - Trigger "nspanel_boot_init" ###### + - platform: state + entity_id: input_boolean.trigger_nspanel_boot + to: "on" + id: nspanel_boot_init + + ##### Reboot - Trigger "nspanel_boot_init" ##### + - platform: template + value_template: '{{ states(nextion_inited_trigger) is match "on" }}' + id: nspanel_boot_init + + ##### TFT Upload - Trigger "tft_upload" ##### + - platform: event + event_type: folder_watcher + event_data: + event_type: modified + path: !input "tft_path" + id: tft_upload + + ##### Time - Trigger "time_state" ##### + - platform: time_pattern + minutes: "/1" + id: time_state + + #### Weather state changed ####### + - platform: event + event_type: state_changed + event_data: + entity_id: '{{ weather_entity }}' + id: weather_state_change + + ##### Humidity - Trigger "humidity_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "humidity" + id: humidity_state + + ##### Climate - Trigger "climate_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "climate" + id: climate_state + + ##### Hot Water - Trigger "hotwatertemp_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "hotwatertemp" + id: hotwatertemp_state + + ##### Outdoor Temp - Trigger "outdoortemp_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "outdoortemp" + id: outdoortemp_state + + ##### Hot Water Charge - Trigger "hotwatercharge_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "hotwatercharge" + id: hotwatercharge_state + + ##### Heating System Flame - Trigger "heatingsystemflame_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "heatingsystemflame" + id: heatingsystemflame_state + + ##### Relay01 - Trigger "relay01_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: '{{ relay01_entity }}' + id: relay01_state + + ##### Relay02 - Trigger "relay02_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: '{{ relay02_entity }}' + id: relay02_state + + ##### Left Button - Trigger "left_button_press" ##### + - platform: template + value_template: '{{ states(left_button) is match "on" }}' + id: left_button_press + + ##### Right Button - Trigger "right_button_press" ##### + - platform: template + value_template: '{{ states(right_button) is match "on" }}' + id: right_button_press + + ##### Left Button - State "left_button_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "left_button_entity" + id: left_button_state + + ##### Right Button - State "right_button_state" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: !input "right_button_entity" + id: right_button_state + + #### Climate - Trigger #### + - platform: template + value_template: '{{ states(last_click) is match "releaseclimate" }}' + id: open_climate_settings + + ##### Trigger - Button General ################################################################################################################# + + ##### Page Button - Trigger "short_press" - SHORT Press via "last_click" ##### + - platform: template + value_template: '{{ states(last_click) is match "releasebutton" }}' + id: short_press + + ##### Page Button - Trigger "long_press" - LONG Press via "last_click" - Button LONG Press for jump to Lightsetting or Coversetting Page ##### + - platform: template + value_template: '{{ states(last_click) is match "press" }}' + for: + seconds: 1 + id: long_press + + ##### Page Lightsettings - Trigger "light_settings" - Changes Lightsettings Page via "last_click_lightsettings" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ last_click_lightsettings }}" + id: light_settings + + ##### Page Coversettings - Trigger "cover_settings" - Changes Coversettings Page via "last_click_coversettings" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ last_click_coversettings }}" + id: cover_settings + + ##### Page Climatesettings - Trigger "climate_settings" - Changes Climatesettings Page via "last_click_climatesettings" ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ last_click_climatesettings }}" + id: climate_settings + + ##### Current page changed ##### + - platform: event + event_type: state_changed + event_data: + entity_id: "{{ current_page }}" + id: current_page_changed + + ##### Page Button - Trigger "button_page" Entity sync ##### + - platform: template + value_template: '{{ states(last_click) is match "button" }}' + id: button_page + + + + ##### Trigger - Button State change ################################################################################################################# + + ##### Button01 Sync - Trigger "current_state_entity01" ##### + - platform: state + entity_id: !input "entity01" + id: current_state_entity01 + + ##### Button02 Sync - Trigger "current_state_entity02" ##### + - platform: state + entity_id: !input "entity02" + id: current_state_entity02 + + ##### Button03 Sync - Trigger "current_state_entity03" ##### + - platform: state + entity_id: !input "entity03" + id: current_state_entity03 + + ##### Button04 Sync - Trigger "current_state_entity04" ##### + - platform: state + entity_id: !input "entity04" + id: current_state_entity04 + + ##### Button05 Sync - Trigger "current_state_entity05" ##### + - platform: state + entity_id: !input "entity05" + id: current_state_entity05 + + ##### Button06 Sync - Trigger "current_state_entity06" ##### + - platform: state + entity_id: !input "entity06" + id: current_state_entity06 + + ##### Button07 Sync - Trigger "current_state_entity07" ##### + - platform: state + entity_id: !input "entity07" + id: current_state_entity07 + + ##### Button08 Sync - Trigger "current_state_entity08" ##### + - platform: state + entity_id: !input "entity08" + id: current_state_entity08 + + ##### Button09 Sync - Trigger "current_state_entity09" ##### + - platform: state + entity_id: !input "entity09" + id: current_state_entity09 + + ##### Button10 Sync - Trigger "current_state_entity10" ##### + - platform: state + entity_id: !input "entity10" + id: current_state_entity10 + + ##### Button11 Sync - Trigger "current_state_entity11" ##### + - platform: state + entity_id: !input "entity11" + id: current_state_entity11 + + ##### Button12 Sync - Trigger "current_state_entity12" ##### + - platform: state + entity_id: !input "entity12" + id: current_state_entity12 + + ##### Button13 Sync - Trigger "current_state_entity13" ##### + - platform: state + entity_id: !input "entity13" + id: current_state_entity13 + + ##### Button14 Sync - Trigger "current_state_entity14" ##### + - platform: state + entity_id: !input "entity14" + id: current_state_entity14 + + ##### Button15 Sync - Trigger "current_state_entity15" ##### + - platform: state + entity_id: !input "entity15" + id: current_state_entity15 + + ##### Button16 Sync - Trigger "current_state_entity16" ##### + - platform: state + entity_id: !input "entity16" + id: current_state_entity16 + + ##### Button17 Sync - Trigger "current_state_entity17" ##### + - platform: state + entity_id: !input "entity17" + id: current_state_entity17 + + ##### Button18 Sync - Trigger "current_state_entity18" ##### + - platform: state + entity_id: !input "entity18" + id: current_state_entity18 + + ##### Button19 Sync - Trigger "current_state_entity19" ##### + - platform: state + entity_id: !input "entity19" + id: current_state_entity19 + + ##### Button20 Sync - Trigger "current_state_entity20" ##### + - platform: state + entity_id: !input "entity20" + id: current_state_entity20 + + ##### Button21 Sync - Trigger "current_state_entity21" ##### + - platform: state + entity_id: !input "entity21" + id: current_state_entity21 + + ##### Button22 Sync - Trigger "current_state_entity22" ##### + - platform: state + entity_id: !input "entity22" + id: current_state_entity22 + + ##### Button23 Sync - Trigger "current_state_entity23" ##### + - platform: state + entity_id: !input "entity23" + id: current_state_entity23 + + ##### Button24 Sync - Trigger "current_state_entity24" ##### + - platform: state + entity_id: !input "entity24" + id: current_state_entity24 + + ##### Button25 Sync - Trigger "current_state_entity25" ##### + - platform: state + entity_id: !input "entity25" + id: current_state_entity25 + + ##### Button26 Sync - Trigger "current_state_entity26" ##### + - platform: state + entity_id: !input "entity26" + id: current_state_entity26 + + ##### Button27 Sync - Trigger "current_state_entity27" ##### + - platform: state + entity_id: !input "entity27" + id: current_state_entity27 + + ##### Button28 Sync - Trigger "current_state_entity28" ##### + - platform: state + entity_id: !input "entity28" + id: current_state_entity28 + + ##### Button29 Sync - Trigger "current_state_entity29" ##### + - platform: state + entity_id: !input "entity29" + id: current_state_entity29 + + ##### Button30 Sync - Trigger "current_state_entity30" ##### + - platform: state + entity_id: !input "entity30" + id: current_state_entity30 + + ##### Button31 Sync - Trigger "current_state_entity31" ##### + - platform: state + entity_id: !input "entity31" + id: current_state_entity31 + + ##### Button32 Sync - Trigger "current_state_entity32" ##### + - platform: state + entity_id: !input "entity32" + id: current_state_entity32 + + +############################################################# +##### CLOSE - Trigger ##### +############################################################# + + +############################################################# +##### START - Action ##### +############################################################# + +action: + - variables: + ##### Entity - Page Lightsettings ##### + entity_long: >- + {%- if states(last_click) == "pressbuttonpage01button01" -%} {{ entity01 }} + {%- elif states(last_click) == "pressbuttonpage01button02" -%} {{ entity02 }} + {%- elif states(last_click) == "pressbuttonpage01button03" -%} {{ entity03 }} + {%- elif states(last_click) == "pressbuttonpage01button04" -%} {{ entity04 }} + {%- elif states(last_click) == "pressbuttonpage01button05" -%} {{ entity05 }} + {%- elif states(last_click) == "pressbuttonpage01button06" -%} {{ entity06 }} + {%- elif states(last_click) == "pressbuttonpage01button07" -%} {{ entity07 }} + {%- elif states(last_click) == "pressbuttonpage01button08" -%} {{ entity08 }} + {%- elif states(last_click) == "pressbuttonpage02button01" -%} {{ entity09 }} + {%- elif states(last_click) == "pressbuttonpage02button02" -%} {{ entity10 }} + {%- elif states(last_click) == "pressbuttonpage02button03" -%} {{ entity11 }} + {%- elif states(last_click) == "pressbuttonpage02button04" -%} {{ entity12 }} + {%- elif states(last_click) == "pressbuttonpage02button05" -%} {{ entity13 }} + {%- elif states(last_click) == "pressbuttonpage02button06" -%} {{ entity14 }} + {%- elif states(last_click) == "pressbuttonpage02button07" -%} {{ entity15 }} + {%- elif states(last_click) == "pressbuttonpage02button08" -%} {{ entity16 }} + {%- elif states(last_click) == "pressbuttonpage03button01" -%} {{ entity17 }} + {%- elif states(last_click) == "pressbuttonpage03button02" -%} {{ entity18 }} + {%- elif states(last_click) == "pressbuttonpage03button03" -%} {{ entity19 }} + {%- elif states(last_click) == "pressbuttonpage03button04" -%} {{ entity20 }} + {%- elif states(last_click) == "pressbuttonpage03button05" -%} {{ entity21 }} + {%- elif states(last_click) == "pressbuttonpage03button06" -%} {{ entity22 }} + {%- elif states(last_click) == "pressbuttonpage03button07" -%} {{ entity23 }} + {%- elif states(last_click) == "pressbuttonpage03button08" -%} {{ entity24 }} + {%- elif states(last_click) == "pressbuttonpage04button01" -%} {{ entity25 }} + {%- elif states(last_click) == "pressbuttonpage04button02" -%} {{ entity26 }} + {%- elif states(last_click) == "pressbuttonpage04button03" -%} {{ entity27 }} + {%- elif states(last_click) == "pressbuttonpage04button04" -%} {{ entity28 }} + {%- elif states(last_click) == "pressbuttonpage04button05" -%} {{ entity29 }} + {%- elif states(last_click) == "pressbuttonpage04button06" -%} {{ entity30 }} + {%- elif states(last_click) == "pressbuttonpage04button07" -%} {{ entity31 }} + {%- elif states(last_click) == "pressbuttonpage04button08" -%} {{ entity32 }} + {%- endif -%} + + ##### Entity Name - Page Lightsettings ##### + entity_long_name: >- + {%- if states(last_click) == "pressbuttonpage01button01" -%} {{ entity01_name }} + {%- elif states(last_click) == "pressbuttonpage01button02" -%} {{ entity02_name }} + {%- elif states(last_click) == "pressbuttonpage01button03" -%} {{ entity03_name }} + {%- elif states(last_click) == "pressbuttonpage01button04" -%} {{ entity04_name }} + {%- elif states(last_click) == "pressbuttonpage01button05" -%} {{ entity05_name }} + {%- elif states(last_click) == "pressbuttonpage01button06" -%} {{ entity06_name }} + {%- elif states(last_click) == "pressbuttonpage01button07" -%} {{ entity07_name }} + {%- elif states(last_click) == "pressbuttonpage01button08" -%} {{ entity08_name }} + {%- elif states(last_click) == "pressbuttonpage02button01" -%} {{ entity09_name }} + {%- elif states(last_click) == "pressbuttonpage02button02" -%} {{ entity10_name }} + {%- elif states(last_click) == "pressbuttonpage02button03" -%} {{ entity11_name }} + {%- elif states(last_click) == "pressbuttonpage02button04" -%} {{ entity12_name }} + {%- elif states(last_click) == "pressbuttonpage02button05" -%} {{ entity13_name }} + {%- elif states(last_click) == "pressbuttonpage02button06" -%} {{ entity14_name }} + {%- elif states(last_click) == "pressbuttonpage02button07" -%} {{ entity15_name }} + {%- elif states(last_click) == "pressbuttonpage02button08" -%} {{ entity16_name }} + {%- elif states(last_click) == "pressbuttonpage03button01" -%} {{ entity17_name }} + {%- elif states(last_click) == "pressbuttonpage03button02" -%} {{ entity18_name }} + {%- elif states(last_click) == "pressbuttonpage03button03" -%} {{ entity19_name }} + {%- elif states(last_click) == "pressbuttonpage03button04" -%} {{ entity20_name }} + {%- elif states(last_click) == "pressbuttonpage03button05" -%} {{ entity21_name }} + {%- elif states(last_click) == "pressbuttonpage03button06" -%} {{ entity22_name }} + {%- elif states(last_click) == "pressbuttonpage03button07" -%} {{ entity23_name }} + {%- elif states(last_click) == "pressbuttonpage03button08" -%} {{ entity24_name }} + {%- elif states(last_click) == "pressbuttonpage04button01" -%} {{ entity25_name }} + {%- elif states(last_click) == "pressbuttonpage04button02" -%} {{ entity26_name }} + {%- elif states(last_click) == "pressbuttonpage04button03" -%} {{ entity27_name }} + {%- elif states(last_click) == "pressbuttonpage04button04" -%} {{ entity28_name }} + {%- elif states(last_click) == "pressbuttonpage04button05" -%} {{ entity29_name}} + {%- elif states(last_click) == "pressbuttonpage04button06" -%} {{ entity30_name }} + {%- elif states(last_click) == "pressbuttonpage04button07" -%} {{ entity31_name }} + {%- elif states(last_click) == "pressbuttonpage04button08" -%} {{ entity32_name }} + {%- endif -%} + + ##### Entity - Page Lightsettings - Skip Back ##### + entity_back: >- + {%- if states(last_click) == "pressbuttonpage01button01" -%} {{ "page buttonpage01" }} + {%- elif states(last_click) == "pressbuttonpage01button02" -%} {{ "page buttonpage01" }} + {%- elif states(last_click) == "pressbuttonpage01button03" -%} {{ "page buttonpage01" }} + {%- elif states(last_click) == "pressbuttonpage01button04" -%} {{ "page buttonpage01" }} + {%- elif states(last_click) == "pressbuttonpage01button05" -%} {{ "page buttonpage01" }} + {%- elif states(last_click) == "pressbuttonpage01button06" -%} {{ "page buttonpage01" }} + {%- elif states(last_click) == "pressbuttonpage01button07" -%} {{ "page buttonpage01" }} + {%- elif states(last_click) == "pressbuttonpage01button08" -%} {{ "page buttonpage01" }} + {%- elif states(last_click) == "pressbuttonpage02button01" -%} {{ "page buttonpage02" }} + {%- elif states(last_click) == "pressbuttonpage02button02" -%} {{ "page buttonpage02" }} + {%- elif states(last_click) == "pressbuttonpage02button03" -%} {{ "page buttonpage02" }} + {%- elif states(last_click) == "pressbuttonpage02button04" -%} {{ "page buttonpage02" }} + {%- elif states(last_click) == "pressbuttonpage02button05" -%} {{ "page buttonpage02" }} + {%- elif states(last_click) == "pressbuttonpage02button06" -%} {{ "page buttonpage02" }} + {%- elif states(last_click) == "pressbuttonpage02button07" -%} {{ "page buttonpage02" }} + {%- elif states(last_click) == "pressbuttonpage02button08" -%} {{ "page buttonpage02" }} + {%- elif states(last_click) == "pressbuttonpage03button01" -%} {{ "page buttonpage03" }} + {%- elif states(last_click) == "pressbuttonpage03button02" -%} {{ "page buttonpage03" }} + {%- elif states(last_click) == "pressbuttonpage03button03" -%} {{ "page buttonpage03" }} + {%- elif states(last_click) == "pressbuttonpage03button04" -%} {{ "page buttonpage03" }} + {%- elif states(last_click) == "pressbuttonpage03button05" -%} {{ "page buttonpage03" }} + {%- elif states(last_click) == "pressbuttonpage03button06" -%} {{ "page buttonpage03" }} + {%- elif states(last_click) == "pressbuttonpage03button07" -%} {{ "page buttonpage03" }} + {%- elif states(last_click) == "pressbuttonpage03button08" -%} {{ "page buttonpage03" }} + {%- elif states(last_click) == "pressbuttonpage04button01" -%} {{ "page buttonpage04" }} + {%- elif states(last_click) == "pressbuttonpage04button02" -%} {{ "page buttonpage04" }} + {%- elif states(last_click) == "pressbuttonpage04button03" -%} {{ "page buttonpage04" }} + {%- elif states(last_click) == "pressbuttonpage04button04" -%} {{ "page buttonpage04" }} + {%- elif states(last_click) == "pressbuttonpage04button05" -%} {{ "page buttonpage04" }} + {%- elif states(last_click) == "pressbuttonpage04button06" -%} {{ "page buttonpage04" }} + {%- elif states(last_click) == "pressbuttonpage04button07" -%} {{ "page buttonpage04" }} + {%- elif states(last_click) == "pressbuttonpage04button08" -%} {{ "page buttonpage04" }} + {%- endif -%} + + ######################################################################################################################## + + # main - alias: "choose alias (name)" + - choose: + + ##### NSPanel boot init ##### + - conditions: + - condition: trigger + id: nspanel_boot_init + sequence: + + ##### NSPanel boot init start ##### + - delay: + milliseconds: 100 + - service: "{{ command_text_printf }}" + data: + component: home.loading + message: "Loading - PLS WAIT!" + + ##### NSPanel boot init Date ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.date + message: "{{ date01_mui }}" + + ##### NSPanel boot init buttons ##### + - delay: + milliseconds: "{{ delay_value }}" + - repeat: + for_each: + - entity: "{{ entity01 }}" + button_label: "{{ entity01_name }}" + button: buttonpage01.button01 + - entity: "{{ entity02 }}" + button_label: "{{ entity02_name }}" + button: buttonpage01.button02 + - entity: "{{ entity03 }}" + button_label: "{{ entity03_name }}" + button: buttonpage01.button03 + - entity: "{{ entity04 }}" + button_label: "{{ entity04_name }}" + button: buttonpage01.button04 + - entity: "{{ entity05 }}" + button_label: "{{ entity05_name }}" + button: buttonpage01.button05 + - entity: "{{ entity06 }}" + button_label: "{{ entity06_name }}" + button: buttonpage01.button06 + - entity: "{{ entity07 }}" + button_label: "{{ entity07_name }}" + button: buttonpage01.button07 + - entity: "{{ entity08 }}" + button_label: "{{ entity08_name }}" + button: buttonpage01.button08 + - entity: "{{ entity09 }}" + button_label: "{{ entity09_name }}" + button: buttonpage02.button01 + - entity: "{{ entity10 }}" + button_label: "{{ entity10_name }}" + button: buttonpage02.button02 + - entity: "{{ entity11 }}" + button_label: "{{ entity11_name }}" + button: buttonpage02.button03 + - entity: "{{ entity12 }}" + button_label: "{{ entity12_name }}" + button: buttonpage02.button04 + - entity: "{{ entity13 }}" + button_label: "{{ entity13_name }}" + button: buttonpage02.button05 + - entity: "{{ entity14 }}" + button_label: "{{ entity14_name }}" + button: buttonpage02.button06 + - entity: "{{ entity15 }}" + button_label: "{{ entity15_name }}" + button: buttonpage02.button07 + - entity: "{{ entity16 }}" + button_label: "{{ entity16_name }}" + button: buttonpage02.button08 + - entity: "{{ entity17 }}" + button_label: "{{ entity17_name }}" + button: buttonpage03.button01 + - entity: "{{ entity18 }}" + button_label: "{{ entity18_name }}" + button: buttonpage03.button02 + - entity: "{{ entity19 }}" + button_label: "{{ entity19_name }}" + button: buttonpage03.button03 + - entity: "{{ entity20 }}" + button_label: "{{ entity20_name }}" + button: buttonpage03.button04 + - entity: "{{ entity21 }}" + button_label: "{{ entity21_name }}" + button: buttonpage03.button05 + - entity: "{{ entity22 }}" + button_label: "{{ entity22_name }}" + button: buttonpage03.button06 + - entity: "{{ entity23 }}" + button_label: "{{ entity23_name }}" + button: buttonpage03.button07 + - entity: "{{ entity24 }}" + button_label: "{{ entity24_name }}" + button: buttonpage03.button08 + - entity: "{{ entity25 }}" + button_label: "{{ entity17_name }}" + button: buttonpage04.button01 + - entity: "{{ entity26 }}" + button_label: "{{ entity26_name }}" + button: buttonpage04.button02 + - entity: "{{ entity27 }}" + button_label: "{{ entity27_name }}" + button: buttonpage04.button03 + - entity: "{{ entity28 }}" + button_label: "{{ entity28_name }}" + button: buttonpage04.button04 + - entity: "{{ entity29 }}" + button_label: "{{ entity29_name }}" + button: buttonpage04.button05 + - entity: "{{ entity30 }}" + button_label: "{{ entity30_name }}" + button: buttonpage04.button06 + - entity: "{{ entity31 }}" + button_label: "{{ entity31_name }}" + button: buttonpage04.button07 + - entity: "{{ entity32 }}" + button_label: "{{ entity32_name }}" + button: buttonpage04.button08 + sequence: + - if: + - condition: template + value_template: '{{ repeat.item.entity|length > 0 and states[repeat.item.entity].state != "unavailable" }}' + then: + - variables: + component_to_update: "{{ repeat.item.button }}" + # Button PIC + btn_pic: >- + {%- if repeat.item.entity is match "light." and states[repeat.item.entity].state == 'on' -%} {{ button_light_on }} + {%- elif repeat.item.entity is match "light." and states[repeat.item.entity].state == 'off' -%} {{ button_light_off }} + {%- elif repeat.item.entity is match "switch." and states[repeat.item.entity].state == 'on' -%} {{ button_switch_on }} + {%- elif repeat.item.entity is match "switch." and states[repeat.item.entity].state == 'off' -%} {{ button_switch_off }} + {%- elif repeat.item.entity is match "input_boolean." and states[repeat.item.entity].state == 'on' -%} {{ button_switch_on }} + {%- elif repeat.item.entity is match "input_boolean." and states[repeat.item.entity].state == 'off' -%} {{ button_switch_off }} + {%- elif repeat.item.entity is match "cover." and states[repeat.item.entity].state == 'open' -%} {{ button_cover_on }} + {%- elif repeat.item.entity is match "cover." and states[repeat.item.entity].state == 'closed' -%} {{ button_cover_off }} + {%- endif -%} + # TEXT and BRIGHTNESS Background + btn_bg: >- + {%- if states[repeat.item.entity].state == 'on' or states[repeat.item.entity].state == 'open' -%} {{ button_color_1 }} + {%- elif states[repeat.item.entity].state == 'off' or states[repeat.item.entity].state == 'closed' -%} {{ button_color_2 }} + {%- endif -%} + # TEXT Font + btn_txt_font: >- + {%- if states[repeat.item.entity].state == 'on' or states[repeat.item.entity].state == 'open' -%} {{ button_color_2 }} + {%- elif states[repeat.item.entity].state == 'off' or states[repeat.item.entity].state == 'closed' -%} {{ button_color_1 }} + {%- endif -%} + # BRIGHTNESS Font + btn_bri_font: "{{ button_color_2 }}" + # BTN Label + btn_label: "{{ repeat.item.button_label }}" + btn_bri_txt: >- + {%- if repeat.item.entity is match "light." and states(repeat.item.entity) == 'on' and state_attr(repeat.item.entity, "brightness") != None -%} {{ (state_attr(repeat.item.entity, "brightness") | int * 100 /255) | round(0) }}% + {%- elif repeat.item.entity is match "cover." and states(repeat.item.entity) == 'open' and state_attr(repeat.item.entity, "current_position") != None -%} {{ (state_attr(repeat.item.entity, "current_position") | int(100)) | round(0) }}% + {%- else -%} 0 + {%- endif -%} + + ##### SET Buttons #### + # + ##### Button PIC ##### + - service: "{{ command_printf }}" + data: + cmd: "{{ component_to_update }}pic.pic={{ btn_pic }}" + ##### TEXT Background ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_background_color }}" + data: + component: "{{ component_to_update }}text" + message: "{{ btn_bg }}" + ##### TEXT Font Color ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_font_color }}" + data: + component: "{{ component_to_update }}text" + message: "{{ btn_txt_font }}" + ##### BRIGHTNESS Background Color ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_background_color }}" + data: + component: "{{ component_to_update }}bri" + message: "{{ btn_bg }}" + ##### BRIGHTNESS Font Color ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_font_color }}" + data: + component: "{{ component_to_update }}bri" + message: "{{ btn_bri_font }}" + ##### "TEXT" Label ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: "{{ component_to_update }}text" + message: "{{ btn_label }}" + ##### "BRIGHTNESS" Text ##### + - delay: + milliseconds: "{{ delay_value }}" + - if: + - condition: template + value_template: "{{ btn_bri_txt == 0 }}" + then: + - service: "{{ command_text_printf }}" + data: + component: "{{ component_to_update }}bri" + message: " " + else: + - service: "{{ command_text_printf }}" + data: + component: "{{ component_to_update }}bri" + message: "{{ btn_bri_txt }}" + + ##### NSPanel boot init - Time ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.time + message: "{{ time }}" + + ##### NSPanel boot init - Humidity ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.humidity_state + message: "{{ states(humidity) |round(0) }}%" + + ##### NSPanel boot init - Hotwater ##### + - if: + - condition: template + value_template: '{{ hotwatertemp is match "sensor." and states(hotwatertemp).state != "unavailable" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.hotwater_pic.pic={{ hotwater_pic_on }} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.hotwater_temp + message: "{{ states(hotwatertemp) |round(1) }}°" + + ##### NSPanel boot init - Outdoor Temp ##### + - variables: + outdoor_temp: >- + {%- if outdoortemp is match "sensor." -%} {{ states(outdoortemp) |round(0) }} + {%- elif weather == "Default" -%} {{state_attr(ha_weather,"temperature") | round(0)}} + {%- elif weather == "AccuWeather" -%} {{state_attr(accuweather_value,"temperature") | round(0)}} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.outdoor_temp + message: "{{ outdoor_temp }}°" + + ##### Weather Icon Home Page + - variables: + weather_pic: >- + {%- if states(weather_entity) == 'sunny' -%} {{ weather_sunny }} + {%- elif states(weather_entity) == 'cloudy' -%} {{ weather_cloudy }} + {%- elif states(weather_entity) == 'rainy' -%} {{ weather_rainy }} + {%- elif states(weather_entity) == 'pouring' -%} {{ weather_pouring }} + {%- elif states(weather_entity) == 'snowy' -%} {{ weather_snowy }} + {%- elif states(weather_entity) == 'hail' -%} {{ weather_hail }} + {%- elif states(weather_entity) == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif states(weather_entity) == 'fog' -%} {{ weather_fog }} + {%- elif states(weather_entity) == 'windy' -%} {{ weather_windy }} + {%- elif states(weather_entity) == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif states(weather_entity) == 'lightning' -%} {{ weather_lightning }} + {%- elif states(weather_entity) == 'partlycloudy' and states('sun.sun') == 'above_horizon' -%} {{ weather_partlycloudy_day }} + {%- elif states(weather_entity) == 'partlycloudy' and states('sun.sun') == 'below_horizon' -%} {{ weather_partlycloudy_night }} + {%- elif states(weather_entity) == 'lightning-rainy' and states('sun.sun') == 'above_horizon' -%} {{ weather_lightning_rainy_day }} + {%- elif states(weather_entity) == 'lightning-rainy' and states('sun.sun') == 'below_horizon' -%} {{ weather_lightning_rainy_night }} + {%- elif states(weather_entity) == 'execptional' and states('sun.sun') == 'above_horizon' -%} {{ weather_execptional_day }} + {%- elif states(weather_entity) == 'execptional' and states('sun.sun') == 'below_horizon' -%} {{ weather_execptional_night }} + {%- elif states(weather_entity) == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.weather.pic={{ weather_pic }} + + ##### NSPanel boot init - Left Button Name ##### + - if: + - condition: template + value_template: '{{ left_button_name |length > 0 }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.left_bt_text + message: "{{ left_button_name }}" + + ##### SET Left Hardware Button PIC on Home Page #### + - if: + - condition: template + value_template: '{{ left_button_entity |length > 0 and states(left_button_entity).state != "unavailable" }}' + then: + - variables: + # Hardware Button PIC + left_hardware_button_state: >- + {%- if states(left_button_entity) == 'off' -%} {{ hardware_button_pic_off }} + {%- elif states(left_button_entity) == 'on' -%} {{ hardware_button_pic_on }} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.left_bt_pic.pic={{ left_hardware_button_state }} + + ##### NSPanel boot init - Right Button Name ##### + - if: + - condition: template + value_template: '{{ right_button_name |length > 0 }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.right_bt_text + message: "{{ right_button_name }}" + + ###### SET Right Hardware Button PIC on Home Page ##### + - if: + - condition: template + value_template: '{{ right_button_entity |length > 0 and states(right_button_entity).state != "unavailable" }}' + then: + - variables: + # Hardware Button PIC + right_hardware_button_state: >- + {%- if states(right_button_entity) == 'off' -%} {{ hardware_button_pic_off }} + {%- elif states(right_button_entity) == 'on' -%} {{ hardware_button_pic_on }} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.right_bt_pic.pic={{ right_hardware_button_state }} + + ###### StatusBar - Climate Symbol ###### + - if: + - condition: template + value_template: '{{ climate |length > 0 }}' + then: + - variables: + top_menu_climate: >- + {%- if states(climate) == "heat" and state_attr(climate, "hvac_action") != None and state_attr(climate, "hvac_action") == "heating" -%} {{ heat_pic_on }} + {%- elif states(climate) == "heat" -%} {{ thermostat_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_03.pic={{ top_menu_climate }} + + ###### StatusBar - Relay Symbols ###### + - variables: + relay01_pic: >- + {%- if states(relay01_entity) == 'on' -%} {{ relay01_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + relay02_pic: >- + {%- if states(relay02_entity) == 'on' -%} {{ relay02_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_01.pic={{ relay01_pic }} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_02.pic={{ relay02_pic }} + + ##### NSPanel boot init finished ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.loading + message: " " + + + #### TFT Upload Automation ##### + - conditions: + - condition: trigger + id: tft_upload + sequence: + - delay: + seconds: 2 + - service: "{{ tft_upload }}" + data: {} + + + ##### Update Button Page and Lightsettings / Coversettings Page ##### + - conditions: + - condition: trigger + id: + - current_state_entity01 + - current_state_entity02 + - current_state_entity03 + - current_state_entity04 + - current_state_entity05 + - current_state_entity06 + - current_state_entity07 + - current_state_entity08 + - current_state_entity09 + - current_state_entity10 + - current_state_entity11 + - current_state_entity12 + - current_state_entity13 + - current_state_entity14 + - current_state_entity15 + - current_state_entity16 + - current_state_entity17 + - current_state_entity18 + - current_state_entity19 + - current_state_entity20 + - current_state_entity21 + - current_state_entity22 + - current_state_entity23 + - current_state_entity24 + - current_state_entity25 + - current_state_entity26 + - current_state_entity27 + - current_state_entity28 + - current_state_entity29 + - current_state_entity30 + - current_state_entity31 + - current_state_entity32 + sequence: + - alias: "Set variable(s) for entity change" + variables: + component_to_update: >- + {%- if trigger.entity_id == entity01 -%} buttonpage01.button01 + {%- elif trigger.entity_id == entity02 -%} buttonpage01.button02 + {%- elif trigger.entity_id == entity03 -%} buttonpage01.button03 + {%- elif trigger.entity_id == entity04 -%} buttonpage01.button04 + {%- elif trigger.entity_id == entity05 -%} buttonpage01.button05 + {%- elif trigger.entity_id == entity06 -%} buttonpage01.button06 + {%- elif trigger.entity_id == entity07 -%} buttonpage01.button07 + {%- elif trigger.entity_id == entity08 -%} buttonpage01.button08 + {%- elif trigger.entity_id == entity09 -%} buttonpage02.button01 + {%- elif trigger.entity_id == entity10 -%} buttonpage02.button02 + {%- elif trigger.entity_id == entity11 -%} buttonpage02.button03 + {%- elif trigger.entity_id == entity12 -%} buttonpage02.button04 + {%- elif trigger.entity_id == entity13 -%} buttonpage02.button05 + {%- elif trigger.entity_id == entity14 -%} buttonpage02.button06 + {%- elif trigger.entity_id == entity15 -%} buttonpage02.button07 + {%- elif trigger.entity_id == entity16 -%} buttonpage02.button08 + {%- elif trigger.entity_id == entity17 -%} buttonpage03.button01 + {%- elif trigger.entity_id == entity18 -%} buttonpage03.button02 + {%- elif trigger.entity_id == entity19 -%} buttonpage03.button03 + {%- elif trigger.entity_id == entity20 -%} buttonpage03.button04 + {%- elif trigger.entity_id == entity21 -%} buttonpage03.button05 + {%- elif trigger.entity_id == entity22 -%} buttonpage03.button06 + {%- elif trigger.entity_id == entity23 -%} buttonpage03.button07 + {%- elif trigger.entity_id == entity24 -%} buttonpage03.button08 + {%- elif trigger.entity_id == entity25 -%} buttonpage04.button01 + {%- elif trigger.entity_id == entity26 -%} buttonpage04.button02 + {%- elif trigger.entity_id == entity27 -%} buttonpage04.button03 + {%- elif trigger.entity_id == entity28 -%} buttonpage04.button04 + {%- elif trigger.entity_id == entity29 -%} buttonpage04.button05 + {%- elif trigger.entity_id == entity30 -%} buttonpage04.button06 + {%- elif trigger.entity_id == entity31 -%} buttonpage04.button07 + {%- elif trigger.entity_id == entity32 -%} buttonpage04.button08 + {%- endif -%} + # Button PIC + btn_pic: >- + {%- if trigger.to_state.entity_id is match "light." and trigger.to_state.state == 'on' -%} {{ button_light_on }} + {%- elif trigger.to_state.entity_id is match "light." and trigger.to_state.state == 'off' -%} {{ button_light_off }} + {%- elif trigger.to_state.entity_id is match "switch." and trigger.to_state.state == 'on' -%} {{ button_switch_on }} + {%- elif trigger.to_state.entity_id is match "switch." and trigger.to_state.state == 'off' -%} {{ button_switch_off }} + {%- elif trigger.to_state.entity_id is match "input_boolean." and trigger.to_state.state == 'on' -%} {{ button_switch_on }} + {%- elif trigger.to_state.entity_id is match "input_boolean." and trigger.to_state.state == 'off' -%} {{ button_switch_off }} + {%- elif trigger.to_state.entity_id is match "cover." and trigger.to_state.state == 'open' -%} {{ button_cover_on }} + {%- elif trigger.to_state.entity_id is match "cover." and trigger.to_state.state == 'closed' -%} {{ button_cover_off }} + {%- endif -%} + # TEXT and BRIGHTNESS Background + btn_bg: >- + {%- if trigger.to_state.state == 'on' or trigger.to_state.state == 'open' -%} {{ button_color_1 }} + {%- elif trigger.to_state.state == 'off' or trigger.to_state.state == 'closed' -%} {{ button_color_2 }} + {%- endif -%} + # TEXT Font + btn_txt_font: >- + {%- if trigger.to_state.state == 'on' or trigger.to_state.state == 'open' -%} {{ button_color_2 }} + {%- elif trigger.to_state.state == 'off' or trigger.to_state.state == 'closed' -%} {{ button_color_1 }} + {%- endif -%} + # BRIGHTNESS Font + btn_bri_font: "{{ button_color_2 }}" + # BTN Label + btn_label: >- + {%- if trigger.entity_id == entity01 -%} {{ entity01_name }} + {%- elif trigger.entity_id == entity02 -%} {{ entity02_name }} + {%- elif trigger.entity_id == entity03 -%} {{ entity03_name }} + {%- elif trigger.entity_id == entity04 -%} {{ entity04_name }} + {%- elif trigger.entity_id == entity05 -%} {{ entity05_name }} + {%- elif trigger.entity_id == entity06 -%} {{ entity06_name }} + {%- elif trigger.entity_id == entity07 -%} {{ entity07_name }} + {%- elif trigger.entity_id == entity08 -%} {{ entity08_name }} + {%- elif trigger.entity_id == entity09 -%} {{ entity09_name }} + {%- elif trigger.entity_id == entity10 -%} {{ entity10_name }} + {%- elif trigger.entity_id == entity11 -%} {{ entity11_name }} + {%- elif trigger.entity_id == entity12 -%} {{ entity12_name }} + {%- elif trigger.entity_id == entity13 -%} {{ entity13_name }} + {%- elif trigger.entity_id == entity14 -%} {{ entity14_name }} + {%- elif trigger.entity_id == entity15 -%} {{ entity15_name }} + {%- elif trigger.entity_id == entity16 -%} {{ entity16_name }} + {%- elif trigger.entity_id == entity17 -%} {{ entity17_name }} + {%- elif trigger.entity_id == entity18 -%} {{ entity18_name }} + {%- elif trigger.entity_id == entity19 -%} {{ entity19_name }} + {%- elif trigger.entity_id == entity20 -%} {{ entity20_name }} + {%- elif trigger.entity_id == entity21 -%} {{ entity21_name }} + {%- elif trigger.entity_id == entity22 -%} {{ entity22_name }} + {%- elif trigger.entity_id == entity23 -%} {{ entity23_name }} + {%- elif trigger.entity_id == entity24 -%} {{ entity24_name }} + {%- elif trigger.entity_id == entity25 -%} {{ entity25_name }} + {%- elif trigger.entity_id == entity26 -%} {{ entity26_name }} + {%- elif trigger.entity_id == entity27 -%} {{ entity27_name }} + {%- elif trigger.entity_id == entity28 -%} {{ entity28_name }} + {%- elif trigger.entity_id == entity29 -%} {{ entity29_name }} + {%- elif trigger.entity_id == entity30 -%} {{ entity30_name }} + {%- elif trigger.entity_id == entity31 -%} {{ entity31_name }} + {%- elif trigger.entity_id == entity32 -%} {{ entity32_name }} + {%- endif -%} + btn_bri_txt: >- + {%- if trigger.to_state.entity_id is match "light." and trigger.to_state.state == 'on' and trigger.to_state.attributes.brightness is defined -%} {{ (trigger.to_state.attributes.brightness | int * 100 /255) | round(0) }}% + {%- elif trigger.to_state.entity_id is match "cover." and trigger.to_state.state == 'open' and trigger.to_state.attributes.current_position is defined -%} {{ (trigger.to_state.attributes.current_position | int) | round(0) }}% + {%- else -%} 0 + {%- endif -%} + + ##### Button PIC ##### + - service: "{{ command_printf }}" + data: + cmd: "{{ component_to_update }}pic.pic={{ btn_pic }}" + + ##### TEXT Background ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_background_color }}" + data: + component: "{{ component_to_update }}text" + message: "{{ btn_bg }}" + + ##### TEXT Font Color ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_font_color }}" + data: + component: "{{ component_to_update }}text" + message: "{{ btn_txt_font }}" + + ##### BRIGHTNESS Background Color ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_background_color }}" + data: + component: "{{ component_to_update }}bri" + message: "{{ btn_bg }}" + + ##### BRIGHTNESS Font Color ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_font_color }}" + data: + component: "{{ component_to_update }}bri" + message: "{{ btn_bri_font }}" + + ##### "TEXT" Label ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: "{{ component_to_update }}text" + message: "{{ btn_label }}" + + ##### "BRIGHTNESS" Text ##### + - if: + - condition: template + value_template: "{{ btn_bri_txt == 0 }}" + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: "{{ component_to_update }}bri" + message: " " + else: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: "{{ component_to_update }}bri" + message: "{{ btn_bri_txt }}" + + ##### UPDATE LIGHTSETTING / COVERSETTING PAGE + - choose: + ##### LIGHTSETTINGS PAGE - LIGHT Entity ##### + - conditions: + - condition: template + value_template: '{{ entity_long is match "light." }}' + sequence: + - choose: + ##### LIGHT ON / OFF + - conditions: + - condition: template + value_template: '{{ states(entity_long) == "on" }}' + sequence: + ##### LIGHT PIC - ON ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: lightsettings.light_status.pic={{ light_pic_on }} + + ##### LIGHT Brightness Slider HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_slider_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_value }}" + data: + component: lightsettings.lightslider + message: '{{ (state_attr(entity_long, "brightness") | int ) |round(0) }}' + + ##### LIGHT Temp Slider HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_slider_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_value }}" + data: + component: lightsettings.tempslider + message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' + + ##### LIGHT Brightness Value HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_value_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value + message: '{{ (state_attr(entity_long, "brightness") | int * 100 / 255) |round(0) }}%' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value_2 + message: '{{ (state_attr(entity_long, "brightness") | int * 100 / 255) |round(0) }}%' + + ##### LIGHT Temp Value HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_value_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.temp_value + message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.temp_value_2 + message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' + + ##### LIGHT - OFF ##### + - conditions: + - condition: template + value_template: '{{ states(entity_long) == "off" }}' + sequence: + ##### LIGHT PIC - OFF ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: lightsettings.light_status.pic={{ light_pic_off }} + + ##### LIGHT Brightness Slider HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_slider_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_value }}" + data: + component: lightsettings.lightslider + message: '0' + + ##### LIGHT Brightness Value HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_value_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value + message: '0 %' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value_2 + message: '0 %' + + ##### COVERSETTINGS PAGE - COVER Entity ##### + - conditions: + - condition: template + value_template: '{{ entity_long is match "cover." }}' + sequence: + ##### COVER OPEN ##### + - choose: + ##### Cover PIC - OPEN ##### + - conditions: + - condition: template + value_template: '{{ states(entity_long) == "open" }}' + sequence: + ##### COVER PIC - OPEN + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: coversettings.cover_status.pic={{ cover_pic_open }} + + ##### Cover Slider HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_slider_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_value }}" + data: + component: coversettings.coverslider + message: '{{ (state_attr(entity_long, "current_position") | int ) |round(0) }}' + + ##### Cover Value HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_value_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: coversettings.cover_value + message: '{{ (state_attr(entity_long, "current_position") | int ) |round(0) }} %' + + ##### Cover - Closed ##### + - conditions: + - condition: template + value_template: '{{ states(entity_long) == "closed" }}' + sequence: + ##### COVER PIC - CLOSED + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: coversettings.cover_status.pic={{ cover_pic_closed }} + + ##### Cover Slider HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_slider_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_value }}" + data: + component: coversettings.coverslider + message: '0' + + ##### Cover Value HA Sync - YES ##### + - if: + - condition: template + value_template: '{{ sync_value_ha == "select_yes" }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: coversettings.cover_value + message: '0 %' + + + ##### Page Button - SHORT Press - Toggle Enities ##### + - conditions: + - condition: trigger + id: short_press + sequence: + - variables: + ##### Entity - Page Button - Toggle Entity ##### + entity_short: >- + {%- if states(last_click) == "releasebuttonpage01button01" -%} {{ entity01 }} + {%- elif states(last_click) == "releasebuttonpage01button02" -%} {{ entity02 }} + {%- elif states(last_click) == "releasebuttonpage01button03" -%} {{ entity03 }} + {%- elif states(last_click) == "releasebuttonpage01button04" -%} {{ entity04 }} + {%- elif states(last_click) == "releasebuttonpage01button05" -%} {{ entity05 }} + {%- elif states(last_click) == "releasebuttonpage01button06" -%} {{ entity06 }} + {%- elif states(last_click) == "releasebuttonpage01button07" -%} {{ entity07 }} + {%- elif states(last_click) == "releasebuttonpage01button08" -%} {{ entity08 }} + {%- elif states(last_click) == "releasebuttonpage02button01" -%} {{ entity09 }} + {%- elif states(last_click) == "releasebuttonpage02button02" -%} {{ entity10 }} + {%- elif states(last_click) == "releasebuttonpage02button03" -%} {{ entity11 }} + {%- elif states(last_click) == "releasebuttonpage02button04" -%} {{ entity12 }} + {%- elif states(last_click) == "releasebuttonpage02button05" -%} {{ entity13 }} + {%- elif states(last_click) == "releasebuttonpage02button06" -%} {{ entity14 }} + {%- elif states(last_click) == "releasebuttonpage02button07" -%} {{ entity15 }} + {%- elif states(last_click) == "releasebuttonpage02button08" -%} {{ entity16 }} + {%- elif states(last_click) == "releasebuttonpage03button01" -%} {{ entity17 }} + {%- elif states(last_click) == "releasebuttonpage03button02" -%} {{ entity18 }} + {%- elif states(last_click) == "releasebuttonpage03button03" -%} {{ entity19 }} + {%- elif states(last_click) == "releasebuttonpage03button04" -%} {{ entity20 }} + {%- elif states(last_click) == "releasebuttonpage03button05" -%} {{ entity21 }} + {%- elif states(last_click) == "releasebuttonpage03button06" -%} {{ entity22 }} + {%- elif states(last_click) == "releasebuttonpage03button07" -%} {{ entity23 }} + {%- elif states(last_click) == "releasebuttonpage03button08" -%} {{ entity24 }} + {%- elif states(last_click) == "releasebuttonpage04button01" -%} {{ entity25 }} + {%- elif states(last_click) == "releasebuttonpage04button02" -%} {{ entity26 }} + {%- elif states(last_click) == "releasebuttonpage04button03" -%} {{ entity27 }} + {%- elif states(last_click) == "releasebuttonpage04button04" -%} {{ entity28 }} + {%- elif states(last_click) == "releasebuttonpage04button05" -%} {{ entity29 }} + {%- elif states(last_click) == "releasebuttonpage04button06" -%} {{ entity30 }} + {%- elif states(last_click) == "releasebuttonpage04button07" -%} {{ entity31 }} + {%- elif states(last_click) == "releasebuttonpage04button08" -%} {{ entity32 }} + {%- endif -%} + - service: >- + {% if entity_short is match 'light.' %} + light.toggle + {% elif entity_short is match 'switch.' %} + switch.toggle + {% elif entity_short is match 'cover.' %} + cover.toggle + {% elif entity_short is match 'input_boolean.' %} + input_boolean.toggle + {% endif %} + data: + entity_id: "{{ entity_short }}" + + + ##### Page Button - LONG Press - JUMP to Page Lightsettings / Coversettings ##### + - conditions: + - condition: trigger + id: long_press + sequence: + - choose: + ##### LONG Press - LIGHT Entity ##### + - conditions: + - condition: template + value_template: '{{ entity_long is match "light." }}' + sequence: + ##### LIGHT Generel Values ##### + - service: "{{ command_printf }}" + data: + cmd: page lightsettings + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_name + message: '{{ entity_long_name }}' + - delay: + milliseconds: "{{ delay_value }}" + - if: + - condition: template + value_template: "{{ state_attr(entity_long, 'brightness') != none }}" + then: + - service: "{{ command_value }}" + data: + component: lightsettings.lightslider + message: '{{ (state_attr(entity_long, "brightness") | int ) |round(0) }}' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value + message: '{{ (state_attr(entity_long, "brightness") | int * 100 /255) | round(0) }}%' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value_2 + message: '{{ (state_attr(entity_long, "brightness") | int * 100 /255) | round(0) }}%' + else: + - service: "{{ command_value }}" + data: + component: lightsettings.lightslider + message: '0' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value + message: '0 %' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value_2 + message: '0 %' + + ##### LIGHT Check Color_Temp Value is available when yes send some current Values ##### + - if: + - condition: template + value_template: "{{ state_attr(entity_long, 'color_temp') != none }}" + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.temp_value + message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.temp_value_2 + message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_value }}" + data: + component: lightsettings.tempslider + message: '{{ (state_attr(entity_long, "color_temp") | int ) |round(0) }}' + + ##### LIGHT ON / OFF ##### + - choose: + ##### LIGHT PIC - ON ##### + - conditions: + - condition: template + value_template: '{{ states(entity_long) == "on" }}' + sequence: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: lightsettings.light_status.pic={{ light_pic_on }} + + ##### LIGHT PIC - OFF ##### + - conditions: + - condition: template + value_template: '{{ states(entity_long) == "off" }}' + sequence: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: lightsettings.light_status.pic={{ light_pic_off }} + + ##### LONG Press - COVER Entity ##### + - conditions: + - condition: template + value_template: '{{ entity_long is match "cover." }}' + sequence: + ##### COVER Generel Values ##### + - service: "{{ command_printf }}" + data: + cmd: page coversettings + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_value }}" + data: + component: coversettings.coverslider + message: '{{ (state_attr(entity_long, "current_position") | int ) |round(0) }}' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: coversettings.cover_value + message: '{{ (state_attr(entity_long, "current_position") | int ) |round(0) }} %' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: coversettings.cover_name + message: '{{ entity_long_name }}' + + ##### COVER Battery ICON Yes / NO ##### + - if: + - condition: template + value_template: "{{ state_attr(entity_long, 'battery') != none }}" + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: coversettings.battery_value + message: '{{ (state_attr(entity_long, "battery") | int ) |round(0) }} %' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: coversettings.battery_icon.pic={{ battery_icon }} + + ##### COVER OPEN / CLOSE + - choose: + ##### COVER PIC - open ##### + - conditions: + - condition: template + value_template: '{{ states(entity_long) == "open" }}' + sequence: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: coversettings.cover_status.pic={{ cover_pic_open }} + + ##### COVER PIC - Closed + - conditions: + - condition: template + value_template: '{{ states(entity_long) == "closed" }}' + sequence: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: coversettings.cover_status.pic={{ cover_pic_closed }} + + + ##### LASTCLICK_LIGHTSETTINGS - Changes on page Light-Settings ##### + - conditions: + - condition: trigger + id: light_settings + sequence: + - choose: + ##### Page Lightsettings - Brightness Slider MOVE ##### + - conditions: + - condition: template + value_template: '{{ trigger.event.data.new_state.state is match "brightness\d+" and trigger.event.data.new_state.state == states(last_click_lightsettings) }}' + sequence: + - service: light.turn_on + data: + entity_id: "{{ entity_long }}" + brightness: '{{ trigger.event.data.new_state.state |replace("brightness","") | int }}' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value + message: '{{ (trigger.event.data.new_state.state |replace("brightness","") | int * 100 /255) |round(0) }}%' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.light_value_2 + message: '{{ (trigger.event.data.new_state.state |replace("brightness","") | int * 100 /255) |round(0) }}%' + + ##### Page Lightsettings - color_Temp Slider MOVE ##### + - conditions: + - condition: template + value_template: '{{ trigger.event.data.new_state.state is match "colortemp\d+" and trigger.event.data.new_state.state == states(last_click_lightsettings) }}' + sequence: + - service: light.turn_on + data: + entity_id: "{{ entity_long }}" + color_temp: '{{ trigger.event.data.new_state.state |replace("colortemp","") | int }}' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.temp_value + message: '{{ trigger.event.data.new_state.state |replace("colortemp","") | int }}' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: lightsettings.temp_value_2 + message: '{{ trigger.event.data.new_state.state |replace("colortemp","") | int }}' + + ##### Page Lightsettings - Color RGB Slider MOVE ##### + - conditions: + - condition: template + value_template: '{{ trigger.event.data.new_state.state is match "\d+,\d+,\d+" }}' + sequence: + - service: light.turn_on + data: + entity_id: "{{ entity_long }}" + rgb_color: '{{ trigger.event.data.new_state.state.split(",") }}' + + ##### Page Lightsettings - Close Lightsetting Page ##### + - conditions: + - condition: template + value_template: '{{ trigger.event.data.new_state.state == "releaselightsettingsclose" }}' + sequence: + - service: "{{ command_printf }}" + data: + cmd: "{{ entity_back }}" + + + ##### LASTCLICK_COVERSETTINGS - Changes on page Cover-Settings ##### + - conditions: + - condition: trigger + id: cover_settings + sequence: + - choose: + ##### Page Coversettings - Cover Slider MOVE ##### + - conditions: + - condition: template + value_template: '{{ trigger.event.data.new_state.state is match "coverposition\d+" and trigger.event.data.new_state.state == states(last_click_coversettings) }}' + sequence: + - service: cover.set_cover_position + data: + entity_id: "{{ entity_long }}" + position: '{{ trigger.event.data.new_state.state |replace("coverposition","") | int }}' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: coversettings.cover_value + message: '{{ trigger.event.data.new_state.state |replace("coverposition","") | int }} %' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: coversettings.cover_value_2 + message: '{{ trigger.event.data.new_state.state |replace("coverposition","") | int }} %' + + ##### Page Coversettings - Cover CLOSE Button ##### + - conditions: + - condition: template + value_template: '{{ trigger.event.data.new_state.state == "cover_close_press" }}' + sequence: + - service: cover.close_cover + data: + entity_id: "{{ entity_long }}" + + ##### Page Coversettings - Cover OPEN Button ##### + - conditions: + - condition: template + value_template: '{{ trigger.event.data.new_state.state == "cover_open_press" }}' + sequence: + - service: cover.open_cover + data: + entity_id: "{{ entity_long }}" + + ##### Page Coversettings - Cover STOP Button ##### + - conditions: + - condition: template + value_template: '{{ trigger.event.data.new_state.state == "cover_stop_press" }}' + sequence: + - service: cover.stop_cover + data: + entity_id: "{{ entity_long }}" + + ##### Page Coversettings - Close Coversettings Page ##### + - conditions: + - condition: template + value_template: '{{ trigger.event.data.new_state.state == "releasecoversettingsclose" }}' + sequence: + - service: "{{ command_printf }}" + data: + cmd: "{{ entity_back }}" + + + ##### LASTCLICK_CLIMATESETTINGS - Changes on page Climate-Settings ##### + - conditions: + - condition: trigger + id: climate_settings + sequence: + - choose: + ##### Page Climatesettings - hotwater ##### + - conditions: '{{ trigger.event.data.new_state.state == "releasehotwater" }}' + sequence: + - service: >- + {% if hotwatercharge is match 'switch.' %} + switch.toggle + {% elif hotwatercharge is match 'input_boolean.' %} + input_boolean.toggle + {% endif %} + data: + entity_id: "{{ hotwatercharge }}" + + ##### Page Climatesettings - heating ##### + - conditions: '{{ trigger.event.data.new_state.state == "releaseheating" }}' + sequence: + - if: + - condition: template + value_template: '{{ states(climate) == "off" }}' + then: + - service: climate.turn_on ############ + data: + entity_id: !input climate + # - service: climate.set_temperature + # data: + # entity_id: !input climate + # hvac_mode: 'heat' + # temperature: "{{ state_attr(climate, 'temperature') }}" + else: + - service: climate.turn_off ############ + data: + entity_id: !input climate + # - service: climate.set_temperature + # data: + # entity_id: !input climate + # hvac_mode: 'off' + # temperature: "{{ state_attr(climate, 'temperature') }}" + + ##### Page Climatesettings - decreasetemp ##### + - conditions: '{{ trigger.event.data.new_state.state == "releasedecreasetemp" }}' + sequence: + - if: + - condition: template + value_template: '{{ states(climate) != "off" }}' + then: + - if: + - condition: template + value_template: '{{ climate_optimistic == true }}' + then: + - variables: + current_setpoint: "{{states(display_target_temperature) | round(1)}}" + - service: "{{ command_thermostat_cycle }}" + data: + value: "{{ current_setpoint -0.5 }}" + else: + - variables: + current_setpoint: "{{state_attr(climate, 'temperature') | round(1)}}" + - service: climate.set_temperature + data: + entity_id: !input climate + #hvac_mode: 'heat' + temperature: "{{ current_setpoint -0.5 }}" + + + ##### Page Climatesettings - increasetemp ##### + - conditions: '{{ trigger.event.data.new_state.state == "releaseincreasetemp" }}' + sequence: + - if: + - condition: template + value_template: '{{ states(climate) != "off" }}' + then: + - variables: + current_setpoint: "{{state_attr(climate, 'temperature') | round(1)}}" + - if: + - condition: template + value_template: '{{ climate_optimistic == true }}' + then: + - variables: + current_setpoint: "{{states(display_target_temperature) | round(1)}}" + - service: "{{ command_thermostat_cycle }}" + data: + value: "{{ current_setpoint +0.5 }}" + else: + - variables: + current_setpoint: "{{state_attr(climate, 'temperature') | round(1)}}" + - service: climate.set_temperature + data: + entity_id: !input climate + #hvac_mode: 'heat' + temperature: "{{ current_setpoint +0.5 }}" + + + ##### Page Climatesettings - climateslider ##### + - conditions: '{{ trigger.event.data.new_state.state is match "climateslider\d+" and trigger.event.data.new_state.state == states(last_click_climatesettings) }}' + sequence: + - if: + - condition: template + value_template: '{{ states(climate) != "off" }}' + then: + - variables: + #climateslider: '{{ trigger.event.data.new_state.state |replace("climateslider","") | int }}' + new_setpoint: >- + {%- if trigger.event.data.new_state.state == "climateslider0" -%} 13.0 + {%- elif trigger.event.data.new_state.state == "climateslider1" -%} 13.5 + {%- elif trigger.event.data.new_state.state == "climateslider2" -%} 14 + {%- elif trigger.event.data.new_state.state == "climateslider3" -%} 14.5 + {%- elif trigger.event.data.new_state.state == "climateslider4" -%} 15 + {%- elif trigger.event.data.new_state.state == "climateslider5" -%} 15.5 + {%- elif trigger.event.data.new_state.state == "climateslider6" -%} 16 + {%- elif trigger.event.data.new_state.state == "climateslider7" -%} 16.5 + {%- elif trigger.event.data.new_state.state == "climateslider8" -%} 17 + {%- elif trigger.event.data.new_state.state == "climateslider9" -%} 17.5 + {%- elif trigger.event.data.new_state.state == "climateslider10" -%} 18 + {%- elif trigger.event.data.new_state.state == "climateslider11" -%} 18.5 + {%- elif trigger.event.data.new_state.state == "climateslider12" -%} 19 + {%- elif trigger.event.data.new_state.state == "climateslider13" -%} 19.5 + {%- elif trigger.event.data.new_state.state == "climateslider14" -%} 20 + {%- elif trigger.event.data.new_state.state == "climateslider15" -%} 20.5 + {%- elif trigger.event.data.new_state.state == "climateslider16" -%} 21 + {%- elif trigger.event.data.new_state.state == "climateslider17" -%} 21.5 + {%- elif trigger.event.data.new_state.state == "climateslider18" -%} 22 + {%- elif trigger.event.data.new_state.state == "climateslider19" -%} 22.5 + {%- elif trigger.event.data.new_state.state == "climateslider20" -%} 23 + {%- elif trigger.event.data.new_state.state == "climateslider21" -%} 23.5 + {%- elif trigger.event.data.new_state.state == "climateslider22" -%} 24 + {%- elif trigger.event.data.new_state.state == "climateslider23" -%} 24.5 + {%- elif trigger.event.data.new_state.state == "climateslider24" -%} 25 + {%- elif trigger.event.data.new_state.state == "climateslider25" -%} 25.5 + {%- elif trigger.event.data.new_state.state == "climateslider26" -%} 26 + {%- elif trigger.event.data.new_state.state == "climateslider27" -%} 26.5 + {%- elif trigger.event.data.new_state.state == "climateslider28" -%} 27 + {%- endif -%} + - if: + - condition: template + value_template: '{{ climate_optimistic == true }}' + then: + - service: "{{ command_thermostat_cycle }}" + data: + value: "{{ new_setpoint }}" + else: + - service: climate.set_temperature + data: + entity_id: !input climate + #hvac_mode: 'heat' + temperature: "{{ new_setpoint }}" + + + ##### Left button press ##### + - conditions: + - condition: trigger + id: left_button_press + sequence: + - service: >- + {% if left_button_entity is match 'light.' %} + light.toggle + {% elif left_button_entity is match 'switch.' %} + switch.toggle + {% elif left_button_entity is match 'cover.' %} + cover.toggle + {% elif left_button_entity is match 'input_boolean.' %} + input_boolean.toggle + {% endif %} + data: + entity_id: "{{ left_button_entity }}" + - delay: + milliseconds: "{{ delay_value }}" + + + ##### Left button State ##### + - conditions: + - condition: trigger + id: left_button_state + sequence: + + ###### Left Hardware Button PIC ##### + - variables: + # Hardware Button PIC + left_hardware_button_state: >- + {%- if trigger.event.data.new_state.state == 'off' -%} {{ hardware_button_pic_off }} + {%- elif trigger.event.data.new_state.state == 'on' -%} {{ hardware_button_pic_on }} + {%- endif -%} + + ##### SET Right hardware Button PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: home.left_bt_pic.pic={{ left_hardware_button_state }} + + + ##### Right button press ##### + - conditions: + - condition: trigger + id: right_button_press + sequence: + - service: >- + {% if right_button_entity is match 'light.' %} + light.toggle + {% elif right_button_entity is match 'switch.' %} + switch.toggle + {% elif right_button_entity is match 'cover.' %} + cover.toggle + {% elif right_button_entity is match 'input_boolean.' %} + input_boolean.toggle + {% endif %} + data: + entity_id: "{{ right_button_entity }}" + + + ##### Right button State ##### + - conditions: + - condition: trigger + id: right_button_state + sequence: + + ###### Left Hardware Button PIC ##### + - variables: + # Hardware Button PIC + right_hardware_button_state: >- + {%- if trigger.event.data.new_state.state == 'off' -%} {{ hardware_button_pic_off }} + {%- elif trigger.event.data.new_state.state == 'on' -%} {{ hardware_button_pic_on }} + {%- endif -%} + + ##### SET Right hardware Button PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: home.right_bt_pic.pic={{ right_hardware_button_state }} + + + ##### Date and Time Home Page ##### + - conditions: + - condition: trigger + id: time_state + sequence: + ##### Time Home Page ##### + - service: "{{ command_text_printf }}" + data: + component: home.time + message: "{{ time }}" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.date + message: "{{ date01_mui }}" + + + ##### Humidity ##### + - conditions: + - condition: trigger + id: humidity_state + sequence: + - service: "{{ command_text_printf }}" + data: + component: home.humidity_state + message: "{{ trigger.event.data.new_state.state |round(0) }}%" + + + ##### Hotwater Temp ##### + - conditions: + - condition: trigger + id: hotwatertemp_state + sequence: + - service: "{{ command_text_printf }}" + data: + component: home.hotwater_temp + message: "{{ trigger.event.data.new_state.state |round(1) }}°" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: climate.hotwater_temp + message: "{{ trigger.event.data.new_state.state |round(1) }}°" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.hotwater_pic.pic={{ hotwater_pic_on }} + + + ##### Outdoor Temp Entity ##### + - conditions: + - condition: trigger + id: outdoortemp_state + sequence: + - service: "{{ command_text_printf }}" + data: + component: home.outdoor_temp + message: "{{ trigger.event.data.new_state.state |round(0) }}°" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: climate.outdoor_temp + message: "{{ trigger.event.data.new_state.state |round(0) }}°" + + + ##### Weather state change update ##### + - conditions: + - condition: trigger + id: weather_state_change + sequence: + - if: + - condition: template + value_template: '{{ outdoortemp is not match "sensor." }}' + then: + - service: "{{ command_text_printf }}" + data: + component: home.outdoor_temp + message: '{{trigger.event.data.new_state.attributes.temperature | round(0)}}°' + - service: "{{ command_text_printf }}" + data: + component: climate.outdoor_temp + message: '{{trigger.event.data.new_state.attributes.temperature | round(0)}}°' + + - variables: + weather_pic: >- + {%- if trigger.event.data.new_state.state == 'sunny' -%} {{ weather_sunny }} + {%- elif trigger.event.data.new_state.state == 'cloudy' -%} {{ weather_cloudy }} + {%- elif trigger.event.data.new_state.state == 'rainy' -%} {{ weather_rainy }} + {%- elif trigger.event.data.new_state.state == 'pouring' -%} {{ weather_pouring }} + {%- elif trigger.event.data.new_state.state == 'snowy' -%} {{ weather_snowy }} + {%- elif trigger.event.data.new_state.state == 'hail' -%} {{ weather_hail }} + {%- elif trigger.event.data.new_state.state == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif trigger.event.data.new_state.state == 'fog' -%} {{ weather_fog }} + {%- elif trigger.event.data.new_state.state == 'windy' -%} {{ weather_windy }} + {%- elif trigger.event.data.new_state.state == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif trigger.event.data.new_state.state == 'lightning' -%} {{ weather_lightning }} + {%- elif trigger.event.data.new_state.state == 'partlycloudy' and states('sun.sun') == 'above_horizon' -%} {{ weather_partlycloudy_day }} + {%- elif trigger.event.data.new_state.state == 'partlycloudy' and states('sun.sun') == 'below_horizon' -%} {{ weather_partlycloudy_night }} + {%- elif trigger.event.data.new_state.state == 'lightning-rainy' and states('sun.sun') == 'above_horizon' -%} {{ weather_lightning_rainy_day }} + {%- elif trigger.event.data.new_state.state == 'lightning-rainy' and states('sun.sun') == 'below_horizon' -%} {{ weather_lightning_rainy_night }} + {%- elif trigger.event.data.new_state.state == 'execptional' and states('sun.sun') == 'above_horizon' -%} {{ weather_execptional_day }} + {%- elif trigger.event.data.new_state.state == 'execptional' and states('sun.sun') == 'below_horizon' -%} {{ weather_execptional_night }} + {%- elif trigger.event.data.new_state.state == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + - service: "{{ command_printf }}" + data: + cmd: home.weather.pic={{ weather_pic }} + + ##### Page changed ##### + - conditions: + - condition: trigger + id: current_page_changed + sequence: + - choose: + ## home ## + - conditions: '{{ trigger.event.data.new_state.state == page_home }}' + sequence: + ##### NSPanel Date ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.date + message: "{{ date01_mui }}" + + ##### NSPanel Time ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.time + message: "{{ time }}" + + ##### NSPanel Humidity ##### + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.humidity_state + message: "{{ states(humidity) |round(0) }}%" + + ##### NSPanel Hotwater ##### + - if: + - condition: template + value_template: '{{ hotwatertemp is match "sensor." }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.hotwater_pic.pic={{ hotwater_pic_on }} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.hotwater_temp + message: "{{ states(hotwatertemp) |round(1) }}°" + + ##### NSPanel Outdoor Temp ##### + - variables: + outdoor_temp: >- + {%- if outdoortemp is match "sensor." -%} {{ states(outdoortemp) |round(0) }} + {%- elif weather == "Default" -%} {{state_attr(ha_weather,"temperature") | round(0)}} + {%- elif weather == "AccuWeather" -%} {{state_attr(accuweather_value,"temperature") | round(0)}} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.outdoor_temp + message: "{{ outdoor_temp }}°" + + ##### Weather Icon Home Page + - variables: + weather_pic: >- + {%- if states(weather_entity) == 'sunny' -%} {{ weather_sunny }} + {%- elif states(weather_entity) == 'cloudy' -%} {{ weather_cloudy }} + {%- elif states(weather_entity) == 'rainy' -%} {{ weather_rainy }} + {%- elif states(weather_entity) == 'pouring' -%} {{ weather_pouring }} + {%- elif states(weather_entity) == 'snowy' -%} {{ weather_snowy }} + {%- elif states(weather_entity) == 'hail' -%} {{ weather_hail }} + {%- elif states(weather_entity) == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif states(weather_entity) == 'fog' -%} {{ weather_fog }} + {%- elif states(weather_entity) == 'windy' -%} {{ weather_windy }} + {%- elif states(weather_entity) == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif states(weather_entity) == 'lightning' -%} {{ weather_lightning }} + {%- elif states(weather_entity) == 'partlycloudy' and states('sun.sun') == 'above_horizon' -%} {{ weather_partlycloudy_day }} + {%- elif states(weather_entity) == 'partlycloudy' and states('sun.sun') == 'below_horizon' -%} {{ weather_partlycloudy_night }} + {%- elif states(weather_entity) == 'lightning-rainy' and states('sun.sun') == 'above_horizon' -%} {{ weather_lightning_rainy_day }} + {%- elif states(weather_entity) == 'lightning-rainy' and states('sun.sun') == 'below_horizon' -%} {{ weather_lightning_rainy_night }} + {%- elif states(weather_entity) == 'execptional' and states('sun.sun') == 'above_horizon' -%} {{ weather_execptional_day }} + {%- elif states(weather_entity) == 'execptional' and states('sun.sun') == 'below_horizon' -%} {{ weather_execptional_night }} + {%- elif states(weather_entity) == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.weather.pic={{ weather_pic }} + + ##### NSPanel Left Button Name ##### + - if: + - condition: template + value_template: '{{ left_button_name |length > 0 }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.left_bt_text + message: "{{ left_button_name }}" + + ##### SET Left Hardware Button PIC on Home Page #### + - variables: + # Hardware Button PIC + left_hardware_button_state: >- + {%- if states(left_button_entity) == 'off' -%} {{ hardware_button_pic_off }} + {%- elif states(left_button_entity) == 'on' -%} {{ hardware_button_pic_on }} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.left_bt_pic.pic={{ left_hardware_button_state }} + + ##### NSPanel Right Button Name ##### + - if: + - condition: template + value_template: '{{ right_button_name |length > 0 }}' + then: + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.right_bt_text + message: "{{ right_button_name }}" + + ###### SET Right Hardware Button PIC on Home Page ##### + - variables: + # Hardware Button PIC + right_hardware_button_state: >- + {%- if states(right_button_entity) == 'off' -%} {{ hardware_button_pic_off }} + {%- elif states(right_button_entity) == 'on' -%} {{ hardware_button_pic_on }} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.right_bt_pic.pic={{ right_hardware_button_state }} + + ###### StatusBar - Climate Symbol ###### + - if: + - condition: template + value_template: '{{ climate |length > 0 }}' + then: + - variables: + top_menu_climate: >- + {%- if states(climate) == "heat" and state_attr(climate, "hvac_action") != None and state_attr(climate, "hvac_action") == "heating" -%} {{ heat_pic_on }} + {%- elif states(climate) == "heat" -%} {{ thermostat_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_03.pic={{ top_menu_climate }} + + ###### StatusBar - Relay Symbols ###### + - variables: + relay01_pic: >- + {%- if states(relay01_entity) == 'on' -%} {{ relay01_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + relay02_pic: >- + {%- if states(relay02_entity) == 'on' -%} {{ relay02_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_01.pic={{ relay01_pic }} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_02.pic={{ relay02_pic }} + + ##### climate-page left - apply climate temperature if climate_optimistic ##### + - if: + - condition: template + value_template: '{{ trigger.event.data.old_state.state == page_climate }}' + then: + - if: + - condition: template + value_template: '{{ climate_optimistic == true }}' + then: + - variables: + display_target_temperature: "{{states(display_target_temperature) | round(1)}}" + - if: + - condition: template + value_template: '{{ display_target_temperature != 0.0 }}' + then: + - service: climate.set_temperature + data: + entity_id: !input climate + #hvac_mode: 'heat' + temperature: "{{ display_target_temperature }}" + + ## weather01 ## + - conditions: '{{ trigger.event.data.new_state.state == page_weather01 }}' + sequence: + - choose: + - conditions: '{{ weather == "Default" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if states(ha_weather) == 'sunny' -%} {{ weather_sunny }} + {%- elif states(ha_weather) == 'cloudy' -%} {{ weather_cloudy }} + {%- elif states(ha_weather) == 'rainy' -%} {{ weather_rainy }} + {%- elif states(ha_weather) == 'pouring' -%} {{ weather_pouring }} + {%- elif states(ha_weather) == 'snowy' -%} {{ weather_snowy }} + {%- elif states(ha_weather) == 'hail' -%} {{ weather_hail }} + {%- elif states(ha_weather) == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif states(ha_weather) == 'fog' -%} {{ weather_fog }} + {%- elif states(ha_weather) == 'windy' -%} {{ weather_windy }} + {%- elif states(ha_weather) == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif states(ha_weather) == 'lightning' -%} {{ weather_lightning }} + {%- elif states(ha_weather) == 'partlycloudy' and states('sun.sun') == 'above_horizon' -%} {{ weather_partlycloudy_day }} + {%- elif states(ha_weather) == 'partlycloudy' and states('sun.sun') == 'below_horizon' -%} {{ weather_partlycloudy_night }} + {%- elif states(ha_weather) == 'lightning-rainy' and states('sun.sun') == 'above_horizon' -%} {{ weather_lightning_rainy_day }} + {%- elif states(ha_weather) == 'lightning-rainy' and states('sun.sun') == 'below_horizon' -%} {{ weather_lightning_rainy_night }} + {%- elif states(ha_weather) == 'execptional' and states('sun.sun') == 'above_horizon' -%} {{ weather_execptional_day }} + {%- elif states(ha_weather) == 'execptional' and states('sun.sun') == 'below_horizon' -%} {{ weather_execptional_night }} + {%- elif states(ha_weather) == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather01.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather01.temp_max ### Temperature MAX ### + message: '{{state_attr(ha_weather,"temperature") | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.day + message: "{{ day01_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.date + message: "{{ date01_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + + ##### field 2 ##### + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.value03 + message: '{{state_attr(ha_weather,"wind_speed") | round(0)}} km/h' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather01.value03_pic.pic={{ weather_icon_wind }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + + ##### field 5 ##### + + - conditions: '{{ weather == "AccuWeather" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if state_attr(accuweather_value,"forecast")[0].condition == 'sunny' -%} {{ weather_sunny }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'cloudy' -%} {{ weather_cloudy }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'rainy' -%} {{ weather_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'pouring' -%} {{ weather_pouring }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'snowy' -%} {{ weather_snowy }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'hail' -%} {{ weather_hail }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'fog' -%} {{ weather_fog }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'windy' -%} {{ weather_windy }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'lightning' -%} {{ weather_lightning }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'execptional' -%} {{ weather_execptional_day }} + {%- elif state_attr(accuweather_value,"forecast")[0].condition == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather01.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MIN #### + - service: "{{ command_text_printf }}" + data: + component: weather01.temp_min ### Temperature MIN ### + message: '{{states(accuweather_realfeel_temperature_min_0d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Slash ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.slash + message: '/' + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather01.temp_max ### Temperature MAX ### + message: '{{states(accuweather_realfeel_temperature_max_0d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.day + message: "{{ day01_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.date + message: "{{ date01_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.value01 + message: "{{ state_attr(accuweather_value,'forecast')[0].precipitation_probability}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather01.value01_pic.pic={{ weather_icon_rain }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 2 ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.value02 + message: "{{states(accuweather_hours_of_sun_0d) | round(0)}} h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather01.value02_pic.pic={{ weather_icon_sun }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.value03 + message: "{{state_attr(accuweather_uv_index_0d, 'level')}} {{states(accuweather_uv_index_0d) | round(0)}}" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather01.value03_pic.pic={{ weather_icon_protect }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.value04 + message: "{{states(accuweather_thunderstorm_probability_day_0d) | round(0)}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather01.value04_pic.pic={{ weather_icon_lightning }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 5 ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.value05 + message: "{{states(accuweather_wind_day_0d) | round(0)}} km/h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather01.value05_pic.pic={{ weather_icon_wind }} + + default: + - service: "{{ command_printf }}" + data: + cmd: "page {{ page_home }}" + + ## weather02 ## + - conditions: '{{ trigger.event.data.new_state.state == page_weather02 }}' + sequence: + - choose: + - conditions: '{{ weather == "Default" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if state_attr(ha_weather,"forecast")[0].condition == 'sunny' -%} {{ weather_sunny }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'cloudy' -%} {{ weather_cloudy }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'rainy' -%} {{ weather_rainy }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'pouring' -%} {{ weather_pouring }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'snowy' -%} {{ weather_snowy }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'hail' -%} {{ weather_hail }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'fog' -%} {{ weather_fog }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'windy' -%} {{ weather_windy }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'lightning' -%} {{ weather_lightning }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'execptional' -%} {{ weather_execptional_day }} + {%- elif state_attr(ha_weather,"forecast")[0].condition == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather02.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MIN #### + - service: "{{ command_text_printf }}" + data: + component: weather02.temp_min ### Temperature MIN ### + message: '{{state_attr(ha_weather,"forecast")[0].templow | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Slash ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.slash + message: '/' + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather02.temp_max ### Temperature MAX ### + message: '{{state_attr(ha_weather,"forecast")[0].temperature | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.day + message: "{{ day02_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.date + message: "{{ date02_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + + ##### field 2 ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.value02 + message: '{{state_attr(ha_weather,"forecast")[0].precipitation| round(1)}} mm' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather02.value02_pic.pic={{ weather_icon_rain }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.value03 + message: '{{state_attr(ha_weather,"forecast")[0].wind_speed | round(1)}} km/h' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather02.value03_pic.pic={{ weather_icon_wind }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + + ##### field 5 ##### + + - conditions: '{{ weather == "AccuWeather" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if state_attr(accuweather_value,"forecast")[1].condition == 'sunny' -%} {{ weather_sunny }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'cloudy' -%} {{ weather_cloudy }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'rainy' -%} {{ weather_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'pouring' -%} {{ weather_pouring }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'snowy' -%} {{ weather_snowy }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'hail' -%} {{ weather_hail }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'fog' -%} {{ weather_fog }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'windy' -%} {{ weather_windy }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'lightning' -%} {{ weather_lightning }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'execptional' -%} {{ weather_execptional_day }} + {%- elif state_attr(accuweather_value,"forecast")[1].condition == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather02.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MIN #### + - service: "{{ command_text_printf }}" + data: + component: weather02.temp_min ### Temperature MIN ### + message: '{{states(accuweather_realfeel_temperature_min_1d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Slash ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.slash + message: '/' + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather02.temp_max ### Temperature MAX ### + message: '{{states(accuweather_realfeel_temperature_max_1d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.day + message: "{{ day02_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.date + message: "{{ date02_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.value01 + message: "{{ state_attr(accuweather_value,'forecast')[1].precipitation_probability}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather02.value01_pic.pic={{ weather_icon_rain }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 2 ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.value02 + message: "{{states(accuweather_hours_of_sun_1d) | round(0)}} h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather02.value02_pic.pic={{ weather_icon_sun }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.value03 + message: "{{state_attr(accuweather_uv_index_1d, 'level')}} {{states(accuweather_uv_index_1d) | round(0)}}" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather02.value03_pic.pic={{ weather_icon_protect }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.value04 + message: "{{states(accuweather_thunderstorm_probability_day_1d) | round(0)}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather02.value04_pic.pic={{ weather_icon_lightning }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 5 ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.value05 + message: "{{states(accuweather_wind_day_1d) | round(0)}} km/h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather02.value05_pic.pic={{ weather_icon_wind }} + + default: + - service: "{{ command_printf }}" + data: + cmd: "page {{ page_home }}" + + ## weather03 ## + - conditions: '{{ trigger.event.data.new_state.state == page_weather03 }}' + sequence: + - choose: + - conditions: '{{ weather == "Default" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if state_attr(ha_weather,"forecast")[1].condition == 'sunny' -%} {{ weather_sunny }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'cloudy' -%} {{ weather_cloudy }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'rainy' -%} {{ weather_rainy }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'pouring' -%} {{ weather_pouring }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'snowy' -%} {{ weather_snowy }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'hail' -%} {{ weather_hail }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'fog' -%} {{ weather_fog }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'windy' -%} {{ weather_windy }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'lightning' -%} {{ weather_lightning }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'execptional' -%} {{ weather_execptional_day }} + {%- elif state_attr(ha_weather,"forecast")[1].condition == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather03.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MIN #### + - service: "{{ command_text_printf }}" + data: + component: weather03.temp_min ### Temperature MIN ### + message: '{{state_attr(ha_weather,"forecast")[1].templow | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Slash ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.slash + message: '/' + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather03.temp_max ### Temperature MAX ### + message: '{{state_attr(ha_weather,"forecast")[1].temperature | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.day + message: "{{ day03_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.date + message: "{{ date03_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + + ##### field 2 ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.value02 + message: '{{state_attr(ha_weather,"forecast")[1].precipitation| round(1)}} mm' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather03.value02_pic.pic={{ weather_icon_rain }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.value03 + message: '{{state_attr(ha_weather,"forecast")[1].wind_speed | round(1)}} km/h' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather03.value03_pic.pic={{ weather_icon_wind }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + + ##### field 5 ##### + + - conditions: '{{ weather == "AccuWeather" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if state_attr(accuweather_value,"forecast")[2].condition == 'sunny' -%} {{ weather_sunny }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'cloudy' -%} {{ weather_cloudy }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'rainy' -%} {{ weather_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'pouring' -%} {{ weather_pouring }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'snowy' -%} {{ weather_snowy }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'hail' -%} {{ weather_hail }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'fog' -%} {{ weather_fog }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'windy' -%} {{ weather_windy }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'lightning' -%} {{ weather_lightning }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'execptional' -%} {{ weather_execptional_day }} + {%- elif state_attr(accuweather_value,"forecast")[2].condition == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather03.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MIN #### + - service: "{{ command_text_printf }}" + data: + component: weather03.temp_min ### Temperature MIN ### + message: '{{states(accuweather_realfeel_temperature_min_2d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Slash ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.slash + message: '/' + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather03.temp_max ### Temperature MAX ### + message: '{{states(accuweather_realfeel_temperature_max_2d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.day + message: "{{ day03_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.date + message: "{{ date03_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.value01 + message: "{{ state_attr(accuweather_value,'forecast')[2].precipitation_probability}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather03.value01_pic.pic={{ weather_icon_rain }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 2 ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.value02 + message: "{{states(accuweather_hours_of_sun_2d) | round(0)}} h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather03.value02_pic.pic={{ weather_icon_sun }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.value03 + message: "{{state_attr(accuweather_uv_index_2d, 'level')}} {{states(accuweather_uv_index_2d) | round(0)}}" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather03.value03_pic.pic={{ weather_icon_protect }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.value04 + message: "{{states(accuweather_thunderstorm_probability_day_2d) | round(0)}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather03.value04_pic.pic={{ weather_icon_lightning }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 5 ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.value05 + message: "{{states(accuweather_wind_day_2d) | round(0)}} km/h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather03.value05_pic.pic={{ weather_icon_wind }} + + default: + - service: "{{ command_printf }}" + data: + cmd: "page {{ page_home }}" + + ## weather04 ## + - conditions: '{{ trigger.event.data.new_state.state == page_weather04 }}' + sequence: + - choose: + - conditions: '{{ weather == "Default" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if state_attr(ha_weather,"forecast")[2].condition == 'sunny' -%} {{ weather_sunny }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'cloudy' -%} {{ weather_cloudy }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'rainy' -%} {{ weather_rainy }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'pouring' -%} {{ weather_pouring }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'snowy' -%} {{ weather_snowy }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'hail' -%} {{ weather_hail }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'fog' -%} {{ weather_fog }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'windy' -%} {{ weather_windy }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'lightning' -%} {{ weather_lightning }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'execptional' -%} {{ weather_execptional_day }} + {%- elif state_attr(ha_weather,"forecast")[2].condition == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather04.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MIN #### + - service: "{{ command_text_printf }}" + data: + component: weather04.temp_min ### Temperature MIN ### + message: '{{state_attr(ha_weather,"forecast")[2].templow | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Slash ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.slash + message: '/' + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather04.temp_max ### Temperature MAX ### + message: '{{state_attr(ha_weather,"forecast")[2].temperature | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.day + message: "{{ day04_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.date + message: "{{ date04_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + + ##### field 2 ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.value02 + message: '{{state_attr(ha_weather,"forecast")[2].precipitation| round(1)}} mm' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather04.value02_pic.pic={{ weather_icon_rain }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.value03 + message: '{{state_attr(ha_weather,"forecast")[2].wind_speed | round(1)}} km/h' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather04.value03_pic.pic={{ weather_icon_wind }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + + ##### field 5 ##### + + - conditions: '{{ weather == "AccuWeather" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if state_attr(accuweather_value,"forecast")[3].condition == 'sunny' -%} {{ weather_sunny }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'cloudy' -%} {{ weather_cloudy }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'rainy' -%} {{ weather_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'pouring' -%} {{ weather_pouring }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'snowy' -%} {{ weather_snowy }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'hail' -%} {{ weather_hail }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'fog' -%} {{ weather_fog }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'windy' -%} {{ weather_windy }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'lightning' -%} {{ weather_lightning }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'execptional' -%} {{ weather_execptional_day }} + {%- elif state_attr(accuweather_value,"forecast")[3].condition == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather04.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MIN #### + - service: "{{ command_text_printf }}" + data: + component: weather04.temp_min ### Temperature MIN ### + message: '{{states(accuweather_realfeel_temperature_min_3d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Slash ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.slash + message: '/' + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather04.temp_max ### Temperature MAX ### + message: '{{states(accuweather_realfeel_temperature_max_3d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.day + message: "{{ day04_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.date + message: "{{ date04_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.value01 + message: "{{ state_attr(accuweather_value,'forecast')[3].precipitation_probability}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather04.value01_pic.pic={{ weather_icon_rain }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 2 ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.value02 + message: "{{states(accuweather_hours_of_sun_3d) | round(0)}} h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather04.value02_pic.pic={{ weather_icon_sun }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.value03 + message: "{{state_attr(accuweather_uv_index_3d, 'level')}} {{states(accuweather_uv_index_3d) | round(0)}}" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather04.value03_pic.pic={{ weather_icon_protect }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.value04 + message: "{{states(accuweather_thunderstorm_probability_day_3d) | round(0)}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather04.value04_pic.pic={{ weather_icon_lightning }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 5 ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.value05 + message: "{{states(accuweather_wind_day_3d) | round(0)}} km/h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather04.value05_pic.pic={{ weather_icon_wind }} + + default: + - service: "{{ command_printf }}" + data: + cmd: "page {{ page_home }}" + + ## weather05 ## + - conditions: '{{ trigger.event.data.new_state.state == page_weather05 }}' + sequence: + - choose: + - conditions: '{{ weather == "Default" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if state_attr(ha_weather,"forecast")[3].condition == 'sunny' -%} {{ weather_sunny }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'cloudy' -%} {{ weather_cloudy }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'rainy' -%} {{ weather_rainy }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'pouring' -%} {{ weather_pouring }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'snowy' -%} {{ weather_snowy }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'hail' -%} {{ weather_hail }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'fog' -%} {{ weather_fog }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'windy' -%} {{ weather_windy }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'lightning' -%} {{ weather_lightning }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'execptional' -%} {{ weather_execptional_day }} + {%- elif state_attr(ha_weather,"forecast")[3].condition == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather05.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MIN #### + - service: "{{ command_text_printf }}" + data: + component: weather05.temp_min ### Temperature MIN ### + message: '{{state_attr(ha_weather,"forecast")[3].templow | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Slash ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.slash + message: '/' + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather05.temp_max ### Temperature MAX ### + message: '{{state_attr(ha_weather,"forecast")[3].temperature | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.day + message: "{{ day05_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.date + message: "{{ date05_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + + ##### field 2 ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.value02 + message: '{{state_attr(ha_weather,"forecast")[3].precipitation| round(1)}} mm' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather05.value02_pic.pic={{ weather_icon_rain }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.value03 + message: '{{state_attr(ha_weather,"forecast")[3].wind_speed | round(1)}} km/h' + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather05.value03_pic.pic={{ weather_icon_wind }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + + ##### field 5 ##### + + - conditions: '{{ weather == "AccuWeather" }}' + sequence: + - variables: + # weather PIC + weather_icon: >- + {%- if state_attr(accuweather_value,"forecast")[4].condition == 'sunny' -%} {{ weather_sunny }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'cloudy' -%} {{ weather_cloudy }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'rainy' -%} {{ weather_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'pouring' -%} {{ weather_pouring }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'snowy' -%} {{ weather_snowy }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'hail' -%} {{ weather_hail }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'snowy-rainy' -%} {{ weather_snowy_rainy }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'fog' -%} {{ weather_fog }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'windy' -%} {{ weather_windy }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'windy-variant' -%} {{ weather_windy-variant }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'lightning' -%} {{ weather_lightning }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'partlycloudy' -%} {{ weather_partlycloudy_day }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'lightning-rainy' -%} {{ weather_lightning_rainy_day }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'execptional' -%} {{ weather_execptional_day }} + {%- elif state_attr(accuweather_value,"forecast")[4].condition == 'clear-night' -%} {{ weather_clear_night }} + {%- endif -%} + + ##### SET weather PIC on Home Page #### + - service: "{{ command_printf }}" + data: + cmd: weather05.weather_icon.pic={{ weather_icon }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MIN #### + - service: "{{ command_text_printf }}" + data: + component: weather05.temp_min ### Temperature MIN ### + message: '{{states(accuweather_realfeel_temperature_min_4d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Slash ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.slash + message: '/' + - delay: + milliseconds: "{{ delay_value }}" + + ##### SET TEMP MAX #### + - service: "{{ command_text_printf }}" + data: + component: weather05.temp_max ### Temperature MAX ### + message: '{{states(accuweather_realfeel_temperature_max_4d) | round(0)}}°' + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Name ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.day + message: "{{ day05_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.date + message: "{{ date05_mui }}" + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 1 ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.value01 + message: "{{ state_attr(accuweather_value,'forecast')[4].precipitation_probability}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather05.value01_pic.pic={{ weather_icon_rain }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 2 ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.value02 + message: "{{states(accuweather_hours_of_sun_4d) | round(0)}} h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather05.value02_pic.pic={{ weather_icon_sun }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 3 ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.value03 + message: "{{state_attr(accuweather_uv_index_4d, 'level')}} {{states(accuweather_uv_index_4d) | round(0)}}" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather05.value03_pic.pic={{ weather_icon_protect }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 4 ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.value04 + message: "{{states(accuweather_thunderstorm_probability_day_4d) | round(0)}} %" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather05.value04_pic.pic={{ weather_icon_lightning }} + - delay: + milliseconds: "{{ delay_value }}" + + ##### field 5 ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.value05 + message: "{{states(accuweather_wind_day_4d) | round(0)}} km/h" + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: weather05.value05_pic.pic={{ weather_icon_wind }} + + default: + - service: "{{ command_printf }}" + data: + cmd: "page {{ page_home }}" + + ## climate ## + - conditions: '{{ trigger.event.data.new_state.state == page_climate }}' + alias: 'climate page' + sequence: + - variables: + hvac_mode: "{{ states(climate) }}" + outdoor_temp: >- + {%- if outdoortemp is match "sensor." -%} {{ states(outdoortemp) |round(0) }} + {%- elif weather == "Default" -%} {{state_attr(ha_weather,"temperature") | round(0)}} + {%- elif weather == "AccuWeather" -%} {{state_attr(accuweather_value,"temperature") | round(0)}} + {%- endif -%} + heating_state: >- + {%- if hvac_mode == "off" -%} {{ off_mui }} + {%- elif hvac_mode != "off" -%} {{ on_mui }} + {%- endif -%} + + - service: "{{ command_text_printf }}" + data: + component: outdoor_temp + message: "{{ outdoor_temp }}°" + - service: "{{ command_text_printf }}" + data: + component: current_temp + message: "{{state_attr(climate, 'current_temperature') | round(1)}}°" + - if: + condition: template + value_template: '{{ hvac_mode != "off" }}' + then: + - variables: + target_temp: "{{state_attr(climate, 'temperature') | round(1)}}" + - service: "{{ command_thermostat_cycle }}" + data: + value: "{{target_temp}}" + else: + - service: "{{ command_thermostat_cycle }}" + data: + value: "0" + - service: "{{ command_text_printf }}" + data: + component: target_temp + message: " " + + - service: "{{ command_text_printf }}" + data: + component: heating_state + message: "{{heating_state}}" + + # HVAC Button PIC + - variables: + heating_bt_pic: >- + {%- if hvac_mode == "off" -%} {{ heating_bt_pic_off }} + {%- else -%} {{ heating_bt_pic_on }} + {%- endif -%} + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_printf }}" + data: + cmd: heating_bt_pic.pic={{ heating_bt_pic }} + - variables: + hotw_bt_pic: >- + {%- if hotwatercharge | length > 0 and states(hotwatercharge) == 'on' -%} {{ hotw_bt_on }} + {%- elif hotwatercharge | length > 0 and states(hotwatercharge) == 'off' -%} {{ hotw_bt_off }} + {%- else -%} {{ hotw_bt_blank }} + {%- endif -%} + - service: "{{ command_printf }}" + data: + cmd: hotw_bt_pic.pic={{ hotw_bt_pic }} + + - if: + - condition: template + value_template: '{{ hotwatertemp is match "sensor." }}' + then: + - service: "{{ command_text_printf }}" + data: + component: climate.hotwater_temp + message: "{{ states(hotwatertemp) |round(1) }}°" + + ## settings ## + - conditions: '{{ trigger.event.data.new_state.state == page_settings }}' + sequence: + + ## boot ## + - conditions: '{{ trigger.event.data.new_state.state == page_boot }}' + sequence: + + ## screensaver ## + - conditions: '{{ trigger.event.data.new_state.state == page_screensaver }}' + sequence: + + ## lightsettings ## + - conditions: '{{ trigger.event.data.new_state.state == page_lightsettings }}' + sequence: + + ## coversettings ## + - conditions: '{{ trigger.event.data.new_state.state == page_coversettings }}' + sequence: + + ## buttonpage01 ## + - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage01 }}' + sequence: + + ## buttonpage02 ## + - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage01 }}' + sequence: + + ## buttonpage03 ## + - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage03 }}' + sequence: + + ## buttonpage04 ## + - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage04 }}' + sequence: + + + ##### Open Climate Settings ##### + - conditions: + - condition: trigger + id: open_climate_settings + sequence: + - if: + - condition: template + value_template: '{{ climate |length > 0 }}' + then: + - service: "{{ command_printf }}" + data: + cmd: "page {{ page_climate }}" + + + ##### Set Flame-Symbol ##### + - conditions: + - condition: trigger + id: heatingsystemflame_state + sequence: + - variables: + flame_pic: >- + {%- if trigger.event.data.new_state.state == 'on' -%} {{ flame_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_04.pic={{ flame_pic }} + + + ##### Set Relay01-Symbol ##### + - conditions: + - condition: trigger + id: relay01_state + sequence: + - variables: + relay01_pic: >- + {%- if trigger.event.data.new_state.state == 'on' -%} {{ relay01_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_01.pic={{ relay01_pic }} + + + ##### Set Relay02-Symbol ##### + - conditions: + - condition: trigger + id: relay02_state + sequence: + - variables: + relay02_pic: >- + {%- if trigger.event.data.new_state.state == 'on' -%} {{ relay02_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_02.pic={{ relay02_pic }} + + + ##### Sync Hotwater Charge button-symbol ##### + - conditions: + - condition: trigger + id: hotwatercharge_state + - condition: template + value_template: '{{ states(current_page) == page_climate }}' + sequence: + - variables: + hotw_bt_pic: >- + {%- if trigger.event.data.new_state.state == 'on' -%} {{ hotw_bt_on }} + {%- elif trigger.event.data.new_state.state == 'off' -%} {{ hotw_bt_off }} + {%- else -%} {{ hotw_bt_blank }} + {%- endif -%} + - service: "{{ command_printf }}" + data: + cmd: hotw_bt_pic.pic={{ hotw_bt_pic }} + + ##### Sync Climate ##### + - conditions: + - condition: trigger + id: climate_state + # - condition: template + # value_template: '{{ states(current_page) == page_climate }}' + # - condition: template + # value_template: '{{ climate_optimistic == false }}' + sequence: + - choose: + ### current page is climate ### + - conditions: '{{ states(current_page) == page_climate }}' + sequence: + - variables: + heating_state: >- + {%- if trigger.event.data.new_state.state == "off" -%} {{ off_mui }} + {%- elif trigger.event.data.new_state.state != "off" -%} {{ on_mui }} + {%- endif -%} + heating_bt_pic: >- + {%- if trigger.event.data.new_state.state == "off" -%} {{ heating_bt_pic_off }} + {%- else -%} {{ heating_bt_pic_on }} + {%- endif -%} + + - service: "{{ command_text_printf }}" + data: + component: current_temp + message: "{{ trigger.event.data.new_state.attributes.current_temperature | round(1)}}°" + - service: "{{ command_text_printf }}" + data: + component: heating_state + message: "{{heating_state}}" + - service: "{{ command_printf }}" + data: + cmd: heating_bt_pic.pic={{ heating_bt_pic }} + - if: + - condition: template + value_template: '{{ trigger.event.data.new_state.state != "off" }}' + then: + - service: "{{ command_thermostat_cycle }}" + data: + value: "{{trigger.event.data.new_state.attributes.temperature | round(1)}}" + else: + - service: "{{ command_thermostat_cycle }}" + data: + value: "0" + - service: "{{ command_text_printf }}" + data: + component: target_temp + message: " " + + ### current page is home ### + - conditions: '{{ states(current_page) == page_home }}' + sequence: + - variables: + top_menu_climate: >- + {%- if trigger.event.data.new_state.state == "heat" and trigger.event.data.new_state.attributes.hvac_action is defined and trigger.event.data.new_state.attributes.hvac_action == "heating" -%} {{ heat_pic_on }} + {%- elif trigger.event.data.new_state.state == "heat" -%} {{ thermostat_pic_on }} + {%- else -%} {{ top_menu_blank }} + {%- endif -%} + - service: "{{ command_printf }}" + data: + cmd: home.icon_top_03.pic={{ top_menu_climate }} + + + +############################################################# +##### CLOSE - Action ##### +############################################################# \ No newline at end of file