From a13320a1e732fa370ed270c16e679ee4803aa3e5 Mon Sep 17 00:00:00 2001 From: Chris Date: Mon, 14 Nov 2022 16:33:37 +0100 Subject: [PATCH] upd: blueprint changes --- blueprint.yaml | 1235 ++++++++++++++++++------------------------------ nspanel.tft | Bin 2306700 -> 2373448 bytes 2 files changed, 455 insertions(+), 780 deletions(-) diff --git a/blueprint.yaml b/blueprint.yaml index 1cb0b45..4b22405 100644 --- a/blueprint.yaml +++ b/blueprint.yaml @@ -744,11 +744,20 @@ trigger_variables: nextion_inited_trigger: "switch.{{ nspanel_name_trigger }}_nextion_inited" current_page: "sensor.{{ nspanel_name_trigger }}_current_page" + ##### 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')) }}" - weather: !input "weather" language: !input "language" ##### PUSH TO NEXTION DISPLAY ##### @@ -789,8 +798,8 @@ variables: button_switch_on: "65" button_cover_off: "66" button_cover_on: "67" - hardware_button_pic_off: "115" - hardware_button_pic_on: "116" + hardware_button_pic_off: "98" + hardware_button_pic_on: "99" cover_pic_closed: "78" cover_pic_open: "79" battery_icon: "80" @@ -825,6 +834,15 @@ variables: 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" @@ -866,40 +884,62 @@ variables: warm-white-middle: "1" warm-white-strong: "1" - ##### 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,') }}" + ##### 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 -%} + - ##### 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" @@ -1050,20 +1090,12 @@ trigger: 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 + #### 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 @@ -1458,91 +1490,13 @@ action: component: home.loading message: "Loading - PLS WAIT!" - ##### NSPanel boot init language ##### + ##### NSPanel boot init Date ##### - 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.date - 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.date - 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 }}" + - service: "{{ command_text_printf }}" + data: + component: home.date + message: "{{ date01_mui }}" ##### NSPanel boot init buttons ##### - delay: @@ -1773,143 +1727,50 @@ action: data: component: home.hotwater_temp message: "{{ states(hotwatertemp) |round(1) }}°" - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ command_text_printf }}" - # data: - # component: climate.hotwater_temp - # 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.outdoor_temp - message: "{{ states(outdoortemp) |round(0) }}°" - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ command_text_printf }}" - # data: - # component: climate.outdoor_temp - # 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.outdoor_temp - message: '{{state_attr(ha_weather,"temperature") | round(0)}}°' - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ command_text_printf }}" - # data: - # component: climate.outdoor_temp - # 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.outdoor_temp - message: '{{state_attr(accuweather_value,"temperature") | round(0)}}°' - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ command_text_printf }}" - # data: - # component: climate.outdoor_temp - # message: "{{states(accuweather_realfeel_temperature_max_0d) | round(0)}}°" + - 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 - - 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.weather.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.weather.pic={{ weather_pic }} + - 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 @@ -1961,9 +1822,6 @@ action: cmd: home.right_bt_pic.pic={{ right_hardware_button_state }} - - - ##### NSPanel boot init finished ##### - delay: milliseconds: "{{ delay_value }}" @@ -1984,7 +1842,6 @@ action: data: {} - ##### Update Button Page and Lightsettings / Coversettings Page ##### DONE - conditions: - condition: trigger @@ -2388,7 +2245,6 @@ action: message: '0 %' - ##### Page Button - SHORT Press - Toggle Enities ##### DONE - conditions: - condition: trigger @@ -2444,7 +2300,6 @@ action: entity_id: "{{ entity_short }}" - ##### Page Button - LONG Press - JUMP to Page Lightsettings / Coversettings ##### DONE - conditions: - condition: trigger @@ -2624,7 +2479,6 @@ action: cmd: coversettings.cover_status.pic={{ cover_pic_closed }} - ##### LASTCLICK_LIGHTSETTINGS - Changes on page Light-Settings ##### DONE - conditions: - condition: trigger @@ -2695,7 +2549,6 @@ action: cmd: "{{ entity_back }}" - ##### LASTCLICK_COVERSETTINGS - Changes on page Cover-Settings ##### DONE - conditions: - condition: trigger @@ -2782,7 +2635,6 @@ action: milliseconds: "{{ delay_value }}" - ##### Left button State ##### DONE - conditions: - condition: trigger @@ -2793,8 +2645,8 @@ action: - 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 }} + {%- 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 #### @@ -2803,7 +2655,6 @@ action: cmd: home.left_bt_pic.pic={{ left_hardware_button_state }} - ##### Right button press ##### DONE - conditions: - condition: trigger @@ -2823,7 +2674,6 @@ action: entity_id: "{{ right_button_entity }}" - ##### Right button State ##### DONE - conditions: - condition: trigger @@ -2834,8 +2684,8 @@ action: - 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 }} + {%- 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 #### @@ -2844,7 +2694,6 @@ action: cmd: home.right_bt_pic.pic={{ right_hardware_button_state }} - ##### Date and Time Home Page ##### DONE - conditions: - condition: trigger @@ -2855,32 +2704,12 @@ action: data: component: home.time 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.date - 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.date - message: "{{ date0_en }}" - + - delay: + milliseconds: "{{ delay_value }}" + - service: "{{ command_text_printf }}" + data: + component: home.date + message: "{{ date01_mui }}" ##### Humidity ##### DONE @@ -2891,8 +2720,7 @@ action: - service: "{{ command_text_printf }}" data: component: home.humidity_state - message: "{{ states(humidity) |round(0) }}%" - + message: "{{ trigger.event.data.new_state.state |round(0) }}%" ##### Hotwater Temp ##### DONE @@ -2903,13 +2731,13 @@ action: - service: "{{ command_text_printf }}" data: component: home.hotwater_temp - message: "{{ states(hotwatertemp) |round(1) }}°" + message: "{{ trigger.event.data.new_state.state |round(1) }}°" - delay: milliseconds: "{{ delay_value }}" - service: "{{ command_text_printf }}" data: component: climate.hotwater_temp - message: "{{ states(hotwatertemp) |round(1) }}°" + message: "{{ trigger.event.data.new_state.state |round(1) }}°" - delay: milliseconds: "{{ delay_value }}" - service: "{{ command_printf }}" @@ -2917,7 +2745,6 @@ action: cmd: home.hotwater_pic.pic={{ hotwater_pic_on }} - ##### Outdoor Temp Entity ##### DONE - conditions: - condition: trigger @@ -2926,54 +2753,57 @@ action: - service: "{{ command_text_printf }}" data: component: home.outdoor_temp - message: "{{ states(outdoortemp) |round(0) }}°" + message: "{{ trigger.event.data.new_state.state |round(0) }}°" - delay: milliseconds: "{{ delay_value }}" - service: "{{ command_text_printf }}" data: component: climate.outdoor_temp - message: "{{ states(outdoortemp) |round(0) }}°" + message: "{{ trigger.event.data.new_state.state |round(0) }}°" - ##### Outdoor Temp Weather Integration ##### DONE + ##### Weather state change update ##### - conditions: - condition: trigger - id: weather_temp_time + id: weather_state_change sequence: - - choose: - - conditions: - ##### Outdoor Temp Default ##### - - condition: template - value_template: '{{ outdoortemp != "sensor." and weather == "Default" }}' - sequence: - - service: "{{ command_text_printf }}" - data: - component: home.outdoor_temp - message: '{{state_attr(ha_weather,"temperature") | round(0)}}°' - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ command_text_printf }}" - # data: - # component: climate.outdoor_temp - # 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.outdoor_temp - message: '{{state_attr(accuweather_value,"temperature") | round(0)}}°' - # - delay: - # milliseconds: "{{ delay_value }}" - # - service: "{{ command_text_printf }}" - # data: - # component: climate.outdoor_temp - # message: "{{states(accuweather_realfeel_temperature_max_0d) | round(0)}}°" - - + - 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: @@ -2984,6 +2814,139 @@ action: ## 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 }} ## weather01 ## - conditions: '{{ trigger.event.data.new_state.state == page_weather01 }}' @@ -3029,49 +2992,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.date + message: "{{ date01_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### @@ -3147,49 +3082,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather01.date + message: "{{ date01_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### - service: "{{ command_text_printf }}" @@ -3316,49 +3223,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.date + message: "{{ date02_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### @@ -3445,49 +3324,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather02.date + message: "{{ date02_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### - service: "{{ command_text_printf }}" @@ -3614,49 +3465,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.date + message: "{{ date03_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### @@ -3743,49 +3566,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather03.date + message: "{{ date03_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### - service: "{{ command_text_printf }}" @@ -3912,49 +3707,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.date + message: "{{ date04_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### @@ -4041,49 +3808,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather04.date + message: "{{ date04_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### - service: "{{ command_text_printf }}" @@ -4210,49 +3949,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.date + message: "{{ date05_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### @@ -4339,49 +4050,21 @@ action: - 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 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_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 }}" + ##### Day Date ##### + - service: "{{ command_text_printf }}" + data: + component: weather05.date + message: "{{ date05_mui }}" + - delay: + milliseconds: "{{ delay_value }}" ##### field 1 ##### - service: "{{ command_text_printf }}" @@ -4464,10 +4147,8 @@ action: {%- elif weather == "AccuWeather" -%} {{state_attr(accuweather_value,"temperature") | round(0)}} {%- endif -%} heating_state: >- - {%- if hvac_mode == "off" and language == "DE" -%} aus - {%- elif hvac_mode == "off" and language == "EN" -%} off - {%- elif hvac_mode != "off" and language == "DE" -%} heizen - {%- elif hvac_mode != "off" and language == "EN" -%} heat + {%- if hvac_mode == "off" -%} {{ off_mui }} + {%- elif hvac_mode != "off" -%} {{ heat_mui }} {%- endif -%} - service: "{{ command_text_printf }}" @@ -4487,7 +4168,7 @@ action: value: "{{target_temp}}" - service: "{{ command_text_printf }}" data: - component: thermostat.heating_state + component: heating_state message: "{{heating_state}}" - if: - condition: template @@ -4534,14 +4215,8 @@ action: ## buttonpage04 ## - conditions: '{{ trigger.event.data.new_state.state == page_buttonpage04 }}' sequence: - - ####################### CHANGE ME ################################################# - - - - ##### Open Climate Settings ##### - conditions: - condition: trigger diff --git a/nspanel.tft b/nspanel.tft index 47db28fd8c0afa1068aa86b08df6e1697849187c..9ebed29a770bd1d95625523673dc53acbbf4bc91 100644 GIT binary patch delta 39604 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 delta 29253 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