From 0c7af907c778bcf6d776734032b9474bd4e03fd4 Mon Sep 17 00:00:00 2001 From: jazzyisj Date: Sat, 28 Dec 2024 17:49:21 -0500 Subject: [PATCH] Uptdate to 2025.1.0 - add binary_sensor.precipitation_change_alert - update templates, automations, ui - update binary_sensor.daytime_illuminance_lights availability - work_commute_lights script - update automations - update windrose card config - sensor.precipitation_type bugfix - bugfix precipitation accum templates - state_class - remove precipitation yesterday entities - add wind_bearing_average - fix weather statistics / graphs - update climate statistics / graphs - update light groups, illuminance lighting automation - update automation.camera_indoor_camera_control - bugfix script.tts_play - no mass when wan offline - kiosk tablet media player -> kiosk speaker media player - mass custom integration to core integration - minor ui tweaks, bugfixes --- .HA_VERSION | 2 +- .../camera/camera_indoor_camera_control.yaml | 20 +- .../hass/hass_update_group_entities.yaml | 4 +- .../light/light_illuminance_lighting.yaml | 47 +- .../light/light_update_group_entities.yaml | 53 ++ .../light/lights/light_dining_room_light.yaml | 63 +- .../media_player_idle_player.yaml | 4 +- .../media_player_update_group_entities.yaml | 2 +- .../media/media_preset/media_play_error.yaml | 2 +- automations/network/network_wan_down.yaml | 2 +- .../schedule/commute/commute_before_work.yaml | 66 +- .../commute/commute_work_commute_alert.yaml | 16 +- automations/weather/precipitation_alert.yaml | 135 ++-- configuration.yaml | 1 + custom_templates/easy_time.jinja | 132 +++- custom_templates/weather.jinja | 29 +- include/media_player_entities_mass.yaml | 40 +- include/media_player_entities_single.yaml | 2 +- logging/recorder.yaml | 11 +- packages/hass.yaml | 73 --- packages/mass_play_media.yaml | 613 ------------------ packages/media/media_player.yaml | 16 +- packages/notify.yaml | 2 +- packages/weather.yaml | 3 + .../media/alarm_clock/alarm_clock_play.yaml | 4 +- scripts/media/media_play.yaml | 2 +- scripts/media/tts/tts_play.yaml | 2 +- scripts/schedule/work_commute_lights.yaml | 26 + templates/climate.yaml | 32 +- templates/hass.yaml | 62 -- templates/light.yaml | 1 - templates/media/alarm_clock.yaml | 21 +- templates/media/media_players.yaml | 8 +- .../media/preset/media_preset_charlie.yaml | 58 +- .../media/preset/media_preset_chill.yaml | 56 +- .../media/preset/media_preset_company.yaml | 56 +- .../media/preset/media_preset_guest.yaml | 56 +- .../media/preset/media_preset_jason.yaml | 56 +- .../media/preset/media_preset_morning.yaml | 56 +- templates/media/preset/media_preset_play.yaml | 56 +- .../media/preset/media_preset_shower.yaml | 56 +- .../media/preset/media_preset_sleep.yaml | 56 +- templates/media/preset/media_preset_wake.yaml | 56 +- templates/weather/weather.yaml | 245 ++++--- ui/bar/hass_os_memory_use_entity.yaml | 25 - ui/bar/hass_os_processor_use_entity.yaml | 25 - ui/button/weather/precipitation.yaml | 5 +- ui/button/weather/wind_direction.yaml | 124 ++-- ui/card/camera/security/charlie_crate.yaml | 4 +- ui/card/camera/security/living_room.yaml | 4 +- ui/card/climate/climate_settings.yaml | 6 + ui/card/hass/hass_monitor.yaml | 2 - ui/card/hass/kiosk_monitor.yaml | 2 +- .../alarm_clock_media_players.yaml | 26 +- .../media_players/all_speakers_mini.yaml | 2 +- .../media_players/all_speakers_mini_full.yaml | 2 +- .../media_players/bathroom_speaker_mini.yaml | 2 +- .../bathroom_speaker_mini_full.yaml | 2 +- .../media_players/bedroom_hub_mini.yaml | 2 +- .../media_players/bedroom_hub_mini_full.yaml | 2 +- .../broadcast_speakers_mini.yaml | 2 +- .../broadcast_speakers_mini_full.yaml | 2 +- .../media_players/deck_chromecast_mini.yaml | 2 +- .../deck_chromecast_mini_full.yaml | 2 +- .../media_players/dining_room_hub_mini.yaml | 2 +- .../dining_room_hub_mini_full.yaml | 2 +- .../media_players/hass_player_mini.yaml | 2 +- .../media_players/hass_player_mini_full.yaml | 2 +- .../media_players/inside_speakers_mini.yaml | 2 +- .../inside_speakers_mini_full.yaml | 2 +- ...blet_mini.yaml => kiosk_speaker_mini.yaml} | 10 +- ...full.yaml => kiosk_speaker_mini_full.yaml} | 10 +- .../laundry_room_speaker_mini.yaml | 2 +- .../laundry_room_speaker_mini_full.yaml | 2 +- .../living_area_speakers_mini.yaml | 2 +- .../living_area_speakers_mini_full.yaml | 2 +- .../living_room_chromecast_mini.yaml | 2 +- .../living_room_chromecast_mini_full.yaml | 2 +- .../living_room_speaker_mini.yaml | 2 +- .../living_room_speaker_mini_full.yaml | 2 +- .../media_players/music_speakers_mini.yaml | 2 +- .../music_speakers_mini_full.yaml | 2 +- .../media_players/night_speakers_mini.yaml | 2 +- .../night_speakers_mini_full.yaml | 2 +- .../media_players/office_chromecast_mini.yaml | 2 +- .../office_chromecast_mini_full.yaml | 2 +- .../media_players/office_hub_mini.yaml | 2 +- .../media_players/office_hub_mini_full.yaml | 2 +- .../media_players/office_speaker_mini.yaml | 2 +- .../office_speaker_mini_full.yaml | 2 +- .../media_players/quiet_speakers_mini.yaml | 2 +- .../quiet_speakers_mini_full.yaml | 2 +- .../media_player/media_players_home.yaml | 6 +- .../media_players_kiosk_home.yaml | 4 +- .../media_player/media_players_media.yaml | 4 +- .../media_player/media_players_speaker.yaml | 2 +- .../include/outdoor_temperature_entities.yaml | 40 +- .../include/precipitation_entities.yaml | 17 +- ui/card/weather/include/wind_entities.yaml | 3 + ui/card/weather/tempest.yaml | 1 - ui/card/weather/wind_rose.yaml | 128 ++-- ui/dashboard/browser/climate.yaml | 5 - ui/dashboard/kiosk/climate.yaml | 5 - ui/dashboard/kiosk/media.yaml | 2 +- ui/dashboard/mobile/climate.yaml | 5 - ui/dashboard/subview/weather/asthma.yaml | 2 +- .../subview/weather/precipitation.yaml | 50 +- ui/dashboard/subview/weather/temperature.yaml | 43 +- .../subview/weather/weather_comparison.yaml | 2 - ui/dashboard/subview/weather/wind.yaml | 37 +- ui/graph/climate/bathroom_temperature.yaml | 2 +- ui/graph/climate/bedroom_temperature.yaml | 2 +- ui/graph/climate/climate_summary_week.yaml | 14 +- ui/graph/climate/indoor_temperature.yaml | 2 +- ui/graph/climate/living_room_temperature.yaml | 2 +- ui/graph/climate/spa_summary_week.yaml | 6 +- ui/graph/climate/thermostat_temperature.yaml | 2 +- ui/graph/graph_templates.yaml | 27 +- ui/graph/include/cloud_cover_area_color.yaml | 15 +- ui/graph/include/cloud_cover_line_color.yaml | 12 +- .../atmospheric_conditions_detail.yaml | 5 - ui/graph/weather/dew_point.yaml | 2 +- ui/graph/weather/precipitation_detail.yaml | 98 +-- ui/graph/weather/temperature_detail.yaml | 27 +- ui/graph/weather/wind_detail.yaml | 27 + ui/history/system.yaml | 23 - .../precipitation_yesterday_comparison.yaml | 19 - ui/statistics_graph/air_quality.yaml | 14 +- ui/statistics_graph/allergy.yaml | 14 +- ui/statistics_graph/asthma.yaml | 14 +- ui/statistics_graph/barometric_pressure.yaml | 13 +- ui/statistics_graph/cloud_cover.yaml | 17 +- ui/statistics_graph/daily_precipitation.yaml | 23 +- ui/statistics_graph/dew_point.yaml | 15 - ui/statistics_graph/fire_index.yaml | 12 +- ui/statistics_graph/flu.yaml | 14 +- ui/statistics_graph/hvac_runtime.yaml | 12 +- ui/statistics_graph/indoor_humidity.yaml | 21 +- .../indoor_humidity_differential.yaml | 14 - ui/statistics_graph/indoor_temperature.yaml | 24 +- .../indoor_temperature_differential.yaml | 14 - ui/statistics_graph/lightning.yaml | 12 +- .../outdoor_apparent_temperature.yaml | 15 - .../outdoor_average_temperature.yaml | 15 - ui/statistics_graph/outdoor_humidity.yaml | 18 +- .../outdoor_low_temperature_differential.yaml | 13 - ui/statistics_graph/outdoor_temperature.yaml | 20 +- ... => outdoor_temperature_differential.yaml} | 33 +- ui/statistics_graph/smoke_level.yaml | 12 +- ui/statistics_graph/uv_index.yaml | 15 +- ui/statistics_graph/wind_bearing.yaml | 10 +- ui/statistics_graph/wind_gust.yaml | 13 - ui/statistics_graph/wind_speed.yaml | 11 +- 153 files changed, 1757 insertions(+), 1910 deletions(-) delete mode 100644 packages/mass_play_media.yaml create mode 100644 scripts/schedule/work_commute_lights.yaml delete mode 100644 ui/bar/hass_os_memory_use_entity.yaml delete mode 100644 ui/bar/hass_os_processor_use_entity.yaml rename ui/card/media/media_player/media_players/{kiosk_tablet_mini.yaml => kiosk_speaker_mini.yaml} (89%) rename ui/card/media/media_player/media_players/{kiosk_tablet_mini_full.yaml => kiosk_speaker_mini_full.yaml} (89%) delete mode 100644 ui/history/weather/precipitation_yesterday_comparison.yaml delete mode 100644 ui/statistics_graph/dew_point.yaml delete mode 100644 ui/statistics_graph/indoor_humidity_differential.yaml delete mode 100644 ui/statistics_graph/indoor_temperature_differential.yaml delete mode 100644 ui/statistics_graph/outdoor_apparent_temperature.yaml delete mode 100644 ui/statistics_graph/outdoor_average_temperature.yaml delete mode 100644 ui/statistics_graph/outdoor_low_temperature_differential.yaml rename ui/statistics_graph/{outdoor_high_temperature_differential.yaml => outdoor_temperature_differential.yaml} (60%) delete mode 100644 ui/statistics_graph/wind_gust.yaml diff --git a/.HA_VERSION b/.HA_VERSION index b4bba1369..7495b3137 100644 --- a/.HA_VERSION +++ b/.HA_VERSION @@ -1 +1 @@ -2024.12.5 \ No newline at end of file +2025.1.0b2 \ No newline at end of file diff --git a/automations/camera/camera_indoor_camera_control.yaml b/automations/camera/camera_indoor_camera_control.yaml index 0144b4ac6..b406bdc62 100644 --- a/automations/camera/camera_indoor_camera_control.yaml +++ b/automations/camera/camera_indoor_camera_control.yaml @@ -17,16 +17,10 @@ event: start - trigger: state - entity_id: binary_sensor.wyze_integration_connected - to: - - "on" - - "off" - not_from: - - unknown - - unavailable - - - trigger: state - entity_id: binary_sensor.someone_home + entity_id: + - binary_sensor.wyze_integration_connected + - binary_sensor.someone_home + - input_boolean.alarm_triggered to: - "on" - "off" @@ -43,7 +37,9 @@ then: - stop: "No valid entities." else: - - if: "{{ is_state('binary_sensor.someone_home', 'on') }}" + - if: > + {{ is_state('binary_sensor.someone_home', 'on') + and is_state('input_boolean.alarm_triggered', 'off') }} then: - action: switch.turn_off target: @@ -56,7 +52,7 @@ ############################################################################### ## Camera - Restart Wyze ############################################################################### -- id: camera_restart_wyze +- id: camera_restart_wyze #TEST alias: "[Camera] Restart Wyze" description: "Restart the Wyze addon." max_exceeded: silent diff --git a/automations/hass/hass_update_group_entities.yaml b/automations/hass/hass_update_group_entities.yaml index 542204485..895b59bc8 100644 --- a/automations/hass/hass_update_group_entities.yaml +++ b/automations/hass/hass_update_group_entities.yaml @@ -83,7 +83,7 @@ {{ expand(integration_entities('hassio')) | selectattr('entity_id', 'contains', '_memory_percent') | rejectattr('entity_id', 'in', ['sensor.home_assistant_core_memory_percent', - 'sensor.home_assistant_supervisor_memory_percent', 'sensor.hass_os_memory_percent']) + 'sensor.home_assistant_supervisor_memory_percent']) | map(attribute='entity_id') | select('has_value') | list | sort }} @@ -94,7 +94,7 @@ {{ expand(integration_entities('hassio')) | selectattr('entity_id', 'contains', '_cpu_percent') | rejectattr('entity_id', 'in', ['sensor.home_assistant_core_cpu_percent', - 'sensor.home_assistant_supervisor_cpu_percent', 'sensor.hass_os_cpu_percent']) + 'sensor.home_assistant_supervisor_cpu_percent']) | map(attribute='entity_id') | select('has_value') | list | sort }} diff --git a/automations/light/light_illuminance_lighting.yaml b/automations/light/light_illuminance_lighting.yaml index 4e713d5e2..766b80972 100644 --- a/automations/light/light_illuminance_lighting.yaml +++ b/automations/light/light_illuminance_lighting.yaml @@ -77,36 +77,13 @@ - wait_template: "{{ has_value('group.lights') }}" timeout: 300 - - variables: #TODO to groups - day_lux: > - {{ expand('group.lights') - | selectattr('attributes.day_lux', 'defined') - | selectattr('attributes.day_lux', 'eq', true) - | map(attribute='entity_id') | list }} - night_lux: > - {{ expand('group.lights') - | selectattr('attributes.night_lux', 'defined') - | selectattr('attributes.night_lux', 'eq', true) - | map(attribute='entity_id') | list }} - night_lights: > - {{ expand('group.lights') - | selectattr('attributes.night', 'defined') - | selectattr('attributes.night', 'eq', true) - | map(attribute='entity_id') | list }} - away_lights: > - {{ expand('group.lights') - | selectattr('attributes.away', 'eq', true) - | map(attribute='entity_id') | list }} - night_away_lights: > - {{ expand('group.lights') - | selectattr('attributes.night', 'defined') - | selectattr('attributes.away', 'eq', true) - | selectattr('attributes.night', 'eq', true) - | map(attribute='entity_id') | list }} - timed_lights: > - {{ expand('group.lights') - | selectattr('attributes.timed', 'eq', true) - | map(attribute='entity_id') | list }} + - variables: + day_lux_lights: "{{ state_attr('group.day_lux_lights', 'entity_id') }}" + night_lux_lights: "{{ state_attr('group.night_lux_lights', 'entity_id') }}" + night_lights: "{{ state_attr('group.night_lights', 'entity_id') }}" + away_lights: "{{ state_attr('group.away_lights', 'entity_id') }}" + night_away_lights: "{{ state_attr('group.night_away_lights', 'entity_id') }}" + timed_lights: "{{ state_attr('group.timed_lights', 'entity_id') }}" - if: - condition: trigger @@ -127,12 +104,12 @@ - action: script.turn_light_on data: - lights: "{{ day_lux }}" + lights: "{{ day_lux_lights }}" activate_timer: false else: - action: script.turn_light_off data: - lights: "{{ day_lux }}" + lights: "{{ day_lux_lights }}" activate_timer: false else: - if: @@ -210,7 +187,7 @@ # turn on night lights - action: script.turn_light_on data: - lights: "{{ night_lux }}" + lights: "{{ night_lux_lights }}" activate_timer: false else: - if: @@ -228,7 +205,7 @@ # turn on day lights - action: script.turn_light_on data: - lights: "{{ day_lux }}" + lights: "{{ day_lux_lights }}" activate_timer: false - if: "{{ trigger.id in ['night_lux', 'wake'] }}" @@ -238,7 +215,7 @@ data: lights: > {{ expand('group.lights') - | rejectattr('entity_id', 'in', day_lux) + | rejectattr('entity_id', 'in', day_lux_lights) | rejectattr('entity_id', 'in', timed_lights) | selectattr('state', 'eq', 'on') | map(attribute='entity_id') | list }} diff --git a/automations/light/light_update_group_entities.yaml b/automations/light/light_update_group_entities.yaml index 492999677..f6f5fb72b 100644 --- a/automations/light/light_update_group_entities.yaml +++ b/automations/light/light_update_group_entities.yaml @@ -34,6 +34,59 @@ | rejectattr('attributes.rgb_light', 'in', ['control', 'slave']) | map(attribute='entity_id') | list | sort }} + - action: group.set + data: + object_id: day_lux_lights + entities: > + {{ expand('group.lights') + | selectattr('attributes.day_lux', 'defined') + | selectattr('attributes.day_lux', 'eq', true) + | map(attribute='entity_id') | list }} + + - action: group.set + data: + object_id: night_lux_lights + entities: > + {{ expand('group.lights') + | selectattr('attributes.night_lux', 'defined') + | selectattr('attributes.night_lux', 'eq', true) + | map(attribute='entity_id') | list }} + + - action: group.set + data: + object_id: night_lights + entities: > + {{ expand('group.lights') + | selectattr('attributes.night', 'defined') + | selectattr('attributes.night', 'eq', true) + | map(attribute='entity_id') | list }} + + - action: group.set + data: + object_id: away_lights + entities: > + {{ expand('group.lights') + | selectattr('attributes.away', 'eq', true) + | map(attribute='entity_id') | list }} + + - action: group.set + data: + object_id: night_away_lights + entities: > + {{ expand('group.lights') + | selectattr('attributes.night', 'defined') + | selectattr('attributes.away', 'eq', true) + | selectattr('attributes.night', 'eq', true) + | map(attribute='entity_id') | list }} + + - action: group.set + data: + object_id: timed_lights + entities: > + {{ expand('group.lights') + | selectattr('attributes.timed', 'eq', true) + | map(attribute='entity_id') | list }} + - action: group.set data: object_id: light_timers diff --git a/automations/light/lights/light_dining_room_light.yaml b/automations/light/lights/light_dining_room_light.yaml index 3b6a1163c..641aa1784 100644 --- a/automations/light/lights/light_dining_room_light.yaml +++ b/automations/light/lights/light_dining_room_light.yaml @@ -47,6 +47,10 @@ entity_id: input_boolean.alarm_triggered state: "off" + - condition: state + entity_id: timer.dining_room_light + state: idle + - condition: template value_template: "{{ iif(trigger.id == 'player', is_state('input_boolean.media_color_light_sync', 'on'), true) }}" @@ -59,30 +63,51 @@ {% endif %} actions: - if: - - condition: state - entity_id: binary_sensor.nighttime_illuminance_lights - state: "off" - then: - - action: script.turn_light_on - data: - lights: light.dining_room_light_rgb - activate_timer: false - profile: default_min + - condition: or + conditions: + - condition: state + entity_id: binary_sensor.work_commute_active + state: "on" - - action: light.turn_off - target: - entity_id: light.dining_room_light_rgb + - condition: state + entity_id: alert.work_commute_jason + state: "on" + + - condition: state + entity_id: alert.late_for_work_jason + state: "on" + then: + - action: script.work_commute_lights else: - - if: "{{ is_state('switch.adaptive_lighting_rgb_lights', 'off') }}" + - if: + - condition: state + entity_id: binary_sensor.nighttime_illuminance_lights + state: "off" + + - condition: state + entity_id: binary_sensor.daytime_illuminance_lights + state: "off" then: - action: script.turn_light_on data: lights: light.dining_room_light_rgb activate_timer: false - profile: default + profile: default_min # reset color + + - action: light.turn_off + target: + entity_id: light.dining_room_light_rgb else: - - action: adaptive_lighting.set_manual_control - data: - entity_id: switch.adaptive_lighting_rgb_lights - lights: light.dining_room_light_rgb - manual_control: false + - if: "{{ is_state('switch.adaptive_lighting_rgb_lights', 'off') }}" + then: + - action: script.turn_light_on + data: + lights: light.dining_room_light_rgb + activate_timer: false + profile: default + else: + - action: adaptive_lighting.set_manual_control + data: + entity_id: switch.adaptive_lighting_rgb_lights + lights: light.dining_room_light_rgb + manual_control: false diff --git a/automations/media/media_player/media_player_idle_player.yaml b/automations/media/media_player/media_player_idle_player.yaml index 6c295f7b3..f263a183d 100644 --- a/automations/media/media_player/media_player_idle_player.yaml +++ b/automations/media/media_player/media_player_idle_player.yaml @@ -10,8 +10,8 @@ triggers: - trigger: state entity_id: - - media_player.hass_media_player_2 - - media_player.kiosk_tablet_2 + - media_player.hass_media_player_mass + - media_player.kiosk_speaker_mass to: idle for: seconds: 60 # allow brief disconnections without stopping media diff --git a/automations/media/media_player/media_player_update_group_entities.yaml b/automations/media/media_player/media_player_update_group_entities.yaml index 323fce9c3..38c26b700 100644 --- a/automations/media/media_player/media_player_update_group_entities.yaml +++ b/automations/media/media_player/media_player_update_group_entities.yaml @@ -52,7 +52,7 @@ - trigger: state entity_id: &problem_players - media_player.office_tv #ISSUE goes offline regularly - - media_player.kiosk_tablet #ISSUE goes offline regularly + - media_player.kiosk_speaker #ISSUE goes offline regularly to: - unknown - unavailable diff --git a/automations/media/media_preset/media_play_error.yaml b/automations/media/media_preset/media_play_error.yaml index d90f9a540..40c7c0c63 100644 --- a/automations/media/media_preset/media_play_error.yaml +++ b/automations/media/media_preset/media_play_error.yaml @@ -16,7 +16,7 @@ - action: script.tts_play data: message: "The selected media has failed to play. Is Music Assistant offline?" - media_player: media_player.kiosk_tablet + media_player: media_player.kiosk_speaker volume: 75 quiet_play: true continue_on_error: true diff --git a/automations/network/network_wan_down.yaml b/automations/network/network_wan_down.yaml index b0952d8f6..01cea81f3 100644 --- a/automations/network/network_wan_down.yaml +++ b/automations/network/network_wan_down.yaml @@ -7,7 +7,7 @@ mode: restart triggers: - trigger: state - entity_id: binary_sensor.wan + entity_id: binary_sensor.wan_offline_alert to: - "on" - "off" diff --git a/automations/schedule/commute/commute_before_work.yaml b/automations/schedule/commute/commute_before_work.yaml index a23ab216c..6e404a4c7 100644 --- a/automations/schedule/commute/commute_before_work.yaml +++ b/automations/schedule/commute/commute_before_work.yaml @@ -14,48 +14,40 @@ - unavailable - trigger: state - entity_id: binary_sensor.owner_home + entity_id: binary_sensor.jason_home to: "on" not_from: - unknown - unavailable for: minutes: 5 - conditions: - - condition: state - entity_id: binary_sensor.work_commute_active - state: "on" actions: - - action: script.turn_light_on - data: - lights: light.dining_room_light_rgb - brightness: 255 - rgb_color: > - {%- from 'weather.jinja' import precip_today -%} - {% if precip_today() %} {{ [0, 0, 255] }} - {% else %} {{ [0, 255, 0] }} - {% endif %} - transition: 5 - activate_timer: false - bypass_timer: true - override: true - continue_on_error: true + - action: script.work_commute_lights + + - if: + - condition: state + entity_id: binary_sensor.work_commute_active + state: "on" - - action: script.turn_on - target: - entity_id: script.tts_play - data: - variables: - media_player: media_player.inside_speakers - min_volume: 50 - always_play: true - message: | - Hey Jason! Time to get your ass in gear! - {%- from 'schedule.jinja' import leave_home_time %} - {{ leave_home_time('jason') }} - {%- from 'weather.jinja' import commute_weather %} - {{ commute_weather() }} - {%- if is_state('alert.jason_phone_battery_low', 'active') %} - Your phone battery is only {{ states('sensor.jphone_battery_level') }} percent. - {%- endif %} - continue_on_error: true \ No newline at end of file + - condition: state + entity_id: binary_sensor.jason_home + state: "on" + then: + - action: script.turn_on + target: + entity_id: script.tts_play + data: + variables: + media_player: media_player.inside_speakers + min_volume: 50 + always_play: true + message: | + Hey Jason! Time to get your ass in gear! + {%- from 'schedule.jinja' import leave_home_time %} + {{ leave_home_time('jason') }} + {%- from 'weather.jinja' import commute_weather %} + {{ commute_weather() }} + {%- if is_state('alert.jason_phone_battery_low', 'active') %} + Your phone battery is only {{ states('sensor.jphone_battery_level') }} percent. + {%- endif %} + continue_on_error: true \ No newline at end of file diff --git a/automations/schedule/commute/commute_work_commute_alert.yaml b/automations/schedule/commute/commute_work_commute_alert.yaml index dc0d9baff..29f7842c7 100644 --- a/automations/schedule/commute/commute_work_commute_alert.yaml +++ b/automations/schedule/commute/commute_work_commute_alert.yaml @@ -37,19 +37,7 @@ sequence: - if: "{{ repeat.index == 1 or is_state('timer.dining_room_light', 'idle') }}" then: - - action: script.turn_light_on - data: - lights: light.dining_room_light_rgb - brightness: 255 - rgb_color: > - {% if is_state('alert.late_for_work_jason', 'on') %} {{ [255, 0, 0] }} - {% elif is_state('alert.work_commute_jason', 'on') %} {{ [171, 78, 0] }} - {% endif %} - transition: 5 - activate_timer: false - bypass_timer: true - override: true - continue_on_error: true + - action: script.work_commute_lights - action: script.turn_on target: @@ -77,7 +65,7 @@ - if: - condition: state entity_id: sensor.kiosk_tablet_current_page - state: http://192.168.1.100:8123/ui-kiosk/home + state: http://192.168.1.100:8123/ui-kiosk/traffic then: - action: browser_mod.navigate data: diff --git a/automations/weather/precipitation_alert.yaml b/automations/weather/precipitation_alert.yaml index 3da0064f8..2bd502190 100644 --- a/automations/weather/precipitation_alert.yaml +++ b/automations/weather/precipitation_alert.yaml @@ -9,64 +9,119 @@ - trigger: state id: alert entity_id: alert.precipitation + to: + + - trigger: state + id: change + entity_id: binary_sensor.precipitation_change_alert to: "on" + not_from: + - unknown + - unavailable # notification after work on days - windows, walk dog etc. - trigger: template + id: days value_template: > - {{ is_state('binary_sensor.precipitation_likely_next_24_hours', 'on') + {{ (is_state('binary_sensor.precipitation_likely_next_24_hours', 'on') + or is_state('binary_sensor.precipitation_likely_soon', 'on')) and is_state('binary_sensor.work_today', 'on') and is_state('sensor.work_shift_today', 'Days') and states('sensor.time') == '15:50' }} # notification before work on afternoons, weekends - windows, walk dog etc. - trigger: template + id: afternoons value_template: > - {{ is_state('binary_sensor.precipitation_likely_next_24_hours', 'on') + {{ (is_state('binary_sensor.precipitation_likely_next_24_hours', 'on') + or is_state('binary_sensor.precipitation_likely_soon', 'on')) and ((is_state('binary_sensor.work_today', 'on') and is_state('sensor.work_shift_today', 'Afternoons')) or is_state('binary_sensor.work_today', 'off')) and states('sensor.time') == '10:45' }} conditions: - - condition: time - alias: "Prevent notifications at night" - after: "08:00:00" - before: "22:00:00" + - condition: or + conditions: + - condition: state + entity_id: alert.precipitation + state: + - idle + - "off" - - condition: template - alias: "Only once every 2 hours" - value_template: > - {{ trigger.id == 'alert' or (true if this.attributes.last_triggered == none - else now() - this.attributes.last_triggered > timedelta(hours=2)) }} + - condition: and + conditions: + - condition: or + conditions: + - condition: state + entity_id: alert.precipitation + state: "on" + + - condition: state + entity_id: binary_sensor.precipitation_change_alert + state: "on" + + - condition: template + value_template: "{{ trigger.id in ['days', 'afternoons'] }}" + + - condition: time + alias: "Prevent notifications at night" + after: "08:00:00" + before: "22:00:00" + + - condition: template + alias: "Only once every 2 hours" + value_template: > + {{ trigger.id == 'change' or (true if this.attributes.last_triggered == none + else now() - this.attributes.last_triggered > timedelta(hours=2)) }} actions: - - variables: - file: > - {%- from 'camera.jinja'import snapshot_filename -%} - weather_snapshots/{{- snapshot_filename('windsor_radar') -}} + - if: + - condition: state + entity_id: alert.precipitation + state: + - idle + - "off" + + - condition: state + entity_id: binary_sensor.precipitation_change_alert + state: "off" + + - condition: template + value_template: "{{ not trigger.id in ['days', 'afternoonw'] }}" + then: + - action: notify.jason + data: + message: clear_notification + data: + tag: windsor_radar + else: + - variables: + file: > + {%- from 'camera.jinja'import snapshot_filename -%} + weather_snapshots/{{- snapshot_filename('windsor_radar') -}} - - action: camera.snapshot - target: - entity_id: camera.windsor_radar - data: - filename: "/config/www/{{ file }}" - continue_on_error: true + - action: camera.snapshot + target: + entity_id: camera.windsor_radar + data: + filename: "/config/www/{{ file }}" + continue_on_error: true - - action: notify.jason - data: - message: | - {%- from 'weather.jinja' import precipitation_text -%} - {{- precipitation_text() -}} - data: - tag: windsor_radar - group: Weather - visibility: public - notification_icon: mdi:weather-rainy - icon_url: !secret STORM_ICON - image: "/local/{{ file }}" - ledColor: !secret MINOR_COLOR - color: !secret MINOR_COLOR - vibrationPattern: !secret ALERT_VIBRATION - clickAction: /ui-mobile/storm-radar - actions: - - title: "Pause" - action: pause_alert_precipitation + - action: notify.jason + data: + message: | + {%- from 'weather.jinja' import precipitation_text -%} + {{- precipitation_text() -}} + data: + tag: windsor_radar + group: Weather + visibility: public + notification_icon: mdi:weather-rainy + icon_url: !secret STORM_ICON + image: "/local/{{ file }}" + ledColor: !secret MINOR_COLOR + color: !secret MINOR_COLOR + vibrationPattern: !secret ALERT_VIBRATION + clickAction: /ui-mobile/storm-radar + actions: + - title: "Pause" + action: pause_alert_precipitation diff --git a/configuration.yaml b/configuration.yaml index a79d326f2..1a976193f 100644 --- a/configuration.yaml +++ b/configuration.yaml @@ -19,3 +19,4 @@ logger: !include logging/logger.yaml lovelace: !include /config/ui/ui_config.yaml system_log: fire_event: true +import_statistics: # custom integration \ No newline at end of file diff --git a/custom_templates/easy_time.jinja b/custom_templates/easy_time.jinja index e1f1d2d99..7330eb751 100644 --- a/custom_templates/easy_time.jinja +++ b/custom_templates/easy_time.jinja @@ -226,7 +226,24 @@ 'oktober', 'november', 'december', - ] + ], + 'time_of_hour':{ + 0: '{hour} uur', + 1: '1 over {hour}', + 15: 'kwart over {hour}', + 30: 'half {hour}', + 45: 'kwart voor {hour}', + 59: '1 vor {hour}', + 'past_hour': '{minute} over {hour}', + 'to_hour': '{minute} voor {hour}', + 'to_half_hour': '{minute} voor half {hour}', + 'past_half_hour': '{minute} over half {hour}', + 'half_hour': 'half {hour}', + }, + 'time_of_day':{ + 'midnight': 'middernacht', + 'noon': 'middag', + }, }, 'sv':{ '_language': 'Svenska', @@ -1105,6 +1122,82 @@ 'midnight': 'полночь', 'noon': 'полдень', }, + }, + 'zh-Hans':{ + '_language': '简体中文', + 'and': '', + 'in': '', + 'ago': '之前', + 'now': '现在', + 'lose': '失去', + 'gain': '获得', + 'time':{ + 'format': '24-hr', + 'year': [ + '年', + '年', + '年', + ], + 'week': [ + '周', + '星期', + '星期', + ], + 'day': [ + '天', + '天', + '天', + ], + 'hour': [ + '时', + '小时', + '小时', + ], + 'minute': [ + '分', + '分钟', + '分钟', + ], + 'second': [ + '秒', + '秒', + '秒', + ], + }, + 'delta':{ + 'today': '今天', + 'tomorrow': '明天', + 'yesterday': '昨天', + 'next': '下一个', + 'last': '上一个', + }, + 'days':[ + "星期一", + "星期二", + "星期三", + "星期四", + "星期五", + "星期六", + "星期日", + ], + 'months':[ + '一月', + '二月', + '三月', + '四月', + '五月', + '六月', + '七月', + '八月', + '九月', + '十月', + '十一月', + '十二月', + ], + 'time_of_day':{ + 'midnight': '午夜', + 'noon': '正午', + }, } } %} @@ -1516,6 +1609,16 @@ {{- _next_weekday(weekday, -7) }} {%- endmacro %} +{%- macro nearest_day(weekday) %} +{%- set today_timestamp = as_timestamp(today_at())|int %} +{%- set this_weekday_timestamp = as_timestamp(this_weekday(weekday))|int %} +{%- if today_timestamp < this_weekday_timestamp %} + {{- _next_weekday(weekday, 0) }} +{%- else %} + {{- _next_weekday(weekday, 7) }} +{%- endif %} +{%- endmacro %} + {%- macro days_in_month(month=None) %} {%- set today = today_at() %} {%- set input = month if month is not none else today.month %} @@ -1632,7 +1735,7 @@ {%- endif -%} {%- endmacro -%} -{%- macro month(month=None, language=None) %} +{%- macro month(month=None, language=None, short=False) %} {%- if month is datetime %} {%- set idx = month.month - 1 %} {%- elif month is integer and month > 0 %} @@ -1642,10 +1745,11 @@ {%- else %} {%- set idx = now().month - 1 %} {%- endif %} -{{- translate('months', index=idx, language=language) }} +{%- set ret = translate('months', index=idx, language=language) %} +{{- ret[:3] if short else ret }} {%- endmacro %} -{%- macro weekday(weekday=None, language=None) %} +{%- macro weekday(weekday=None, language=None, short=False) %} {%- if weekday is datetime %} {%- set idx = weekday.weekday() %} {%- elif weekday is integer and weekday > 0 %} @@ -1655,7 +1759,8 @@ {%- else %} {%- set idx = now().weekday() %} {%- endif %} -{{- translate('days', index=idx, language=language) }} +{%- set ret = translate('days', index=idx, language=language) %} +{{- ret[:3] if short else ret }} {%- endmacro %} {%- macro count_the_days(input, attr, utc=False) %} @@ -1728,7 +1833,22 @@ {%- set hour_phrase = hour(this_hour, language=language) %} {%- set minute_phrase = _phrase('minute', 60 * this_minute, language, True, True) if this_minute % 5 else this_minute | string %} {%- endif %} -{%- if this_minute in [0, 1, 15, 30, 45, 59] %} +{%- set this_config = translate('time_of_hour') %} +{%- if (16 <= this_minute <= 29 and 'to_half_hour' in this_config) or (31 <= this_minute <= 44 and 'past_half_hour' in this_config) or (this_minute == 30 and 'half_hour' in this_config) %} + {%- set hour_phrase = hour(this_hour + 1, language=language) %} + {%- if 16 <= this_minute <= 29 %} + {%- set minute_calc = 30 - this_minute %} + {%- set fmat = translate('time_of_hour', 'to_half_hour', language=language) %} + {%- set minute_phrase = _phrase('minute', 60 * minute_calc, language, True, True) if this_minute % 5 else minute_calc | string %} + {%- elif 31 <= this_minute <= 44 %} + {%- set minute_calc = this_minute - 30 %} + {%- set fmat = translate('time_of_hour', 'past_half_hour', language=language) %} + {%- set minute_phrase = _phrase('minute', 60 * minute_calc, language, True, True) if this_minute % 5 else minute_calc | string %} + {%- else %} + {%- set minute_calc = None %} + {%- set fmat = translate('time_of_hour', 'half_hour', language=language) %} + {%- endif %} +{%- elif this_minute in [0, 1, 15, 30, 45, 59] %} {%- if hour_phrase in ['noon', 'midnight'] and this_minute == 0 %} {%- set fmat = '{hour}' %} {%- else %} diff --git a/custom_templates/weather.jinja b/custom_templates/weather.jinja index d8d827850..0b298868a 100644 --- a/custom_templates/weather.jinja +++ b/custom_templates/weather.jinja @@ -6,7 +6,9 @@ {%- set time = state_attr('sensor.precipitation_start', '12hour') %} {%- set dist = states('sensor.nearest_storm_distance') | int(-1) %} {%- set dir = full_cardinal_direction(states('sensor.nearest_storm_bearing')) %} -{%- if is_state('binary_sensor.precipitation_active', 'on') %} +{%- if is_state('binary_sensor.precipitation_change_alert', 'on') %} +}The current precipitation is changing to {{ current }} right now! +{%- elif is_state('binary_sensor.precipitation_active', 'on') %} It is {{ current }}ing right now. {%- elif time != none %} Possibility of {{ expected }} around {{ time }}. @@ -27,10 +29,12 @@ The storm is {{ iif(dist > 0, {%- from 'weather.jinja' import precip_today -%} {%- set fog = states('sensor.fog_probability') | int(-1) > 70 %} {%- set now = is_state('binary_sensor.precipitation_active', 'on') %} -{%- set soon = precip_today() %} +{%- set change = is_state('binary_sensor.precipitation_change_alert', 'on') %} +{%- set soon = precip_today() | bool %} {%- set type = iif(now, states('sensor.precipitation_type'), states('sensor.precipitation_type_expected')) %} {%- set time = state_attr('sensor.precipitation_start', '12hour') %} -{%- if now %}It is {{ type }}ing right now +{%- if change %}The current precipitation is changing to {{ type }} right now +{%- elif now %}It is {{ type }}ing right now {%- elif soon %}There's a good chance of {{ type }} today starting around {{ time }}. {%- endif %} {{- ' There is also ' if (now or soon) and fog else 'There is ' if fog }} @@ -244,6 +248,25 @@ Be careful driving and } {%- endmacro -%} +{%- macro dew_point_comfort(dewpoint) -%} +{%- set dewpoint = dewpoint | int(none) %} +{%- if dewpoint >= 26 %} Severely High +{%- elif dewpoint >= 24 %} Oppressive +{%- elif dewpoint >= 21 %} Very Humid +{%- elif dewpoint >= 18 %} Uncomfortable +{%- elif dewpoint >= 16 %} Ok For Most +{%- elif dewpoint >= 12 %} Comfortable +{%- elif dewpoint >= 10 %} Very Comfortable +{%- elif dewpoint >= 8 %} Somewhat Dry +{%- elif dewpoint >= 5 %} Dry +{%- else %} Very Dry +{%- endif %} +{%- endmacro -%} + +{%- macro dew_point_comfort_options() -%} +{{- ['Severely High', 'Oppressive', 'Very Humid', 'Uncomfortable', 'Ok For Most', 'Comfortable', 'Very Comfortable', 'Somewhat Dry', 'Dry', 'Very Dry'] -}} +{%- endmacro -%} + {%- macro uv_risk(index) -%} {%- set index = index | float(-1) %} {%- if index < 0 %} unknown diff --git a/include/media_player_entities_mass.yaml b/include/media_player_entities_mass.yaml index 943b0fcb2..ac64f763a 100644 --- a/include/media_player_entities_mass.yaml +++ b/include/media_player_entities_mass.yaml @@ -1,23 +1,23 @@ ############################################################################### ## Media Player Entities MASS ############################################################################### -- media_player.broadcast_speakers_2 -- media_player.music_speakers_2 -- media_player.inside_speakers_2 -- media_player.living_area_speakers_2 -- media_player.night_speakers_2 -- media_player.quiet_speakers_2 -- media_player.living_room_speaker_2 -- media_player.dining_room_hub_2 -- media_player.bedroom_hub_2 -- media_player.bathroom_speaker_2 -- media_player.laundry_room_speaker_2 -- media_player.office_hub_2 -- media_player.office_speaker_2 -- media_player.living_room_chromecast_2 -- media_player.office_chromecast_2 -- media_player.deck_chromecast_2 -#DISABLED - media_player.bedroom_tv_dlna_2 -#DISABLED - media_player.living_room_tv_dlna_2 -- media_player.kiosk_tablet_2 -- media_player.hass_media_player_2 +- media_player.broadcast_speakers_mass +- media_player.music_speakers_mass +- media_player.inside_speakers_mass +- media_player.living_area_speakers_mass +- media_player.night_speakers_mass +- media_player.quiet_speakers_mass +- media_player.living_room_speaker_mass +- media_player.dining_room_hub_mass +- media_player.bedroom_hub_mass +- media_player.bathroom_speaker_mass +- media_player.laundry_room_speaker_mass +- media_player.office_hub_mass +- media_player.office_speaker_mass +- media_player.living_room_chromecast_mass +- media_player.office_chromecast_mass +- media_player.deck_chromecast_mass +#DISABLED - media_player.bedroom_tv_dlna_mass +#DISABLED - media_player.living_room_tv_dlna_mass +- media_player.kiosk_speaker_mass +- media_player.hass_media_player_mass diff --git a/include/media_player_entities_single.yaml b/include/media_player_entities_single.yaml index 2f4792f4e..55779ba93 100644 --- a/include/media_player_entities_single.yaml +++ b/include/media_player_entities_single.yaml @@ -16,5 +16,5 @@ - media_player.deck_chromecast #DISABLED - media_player.living_room_tv_dlna #DISABLED - media_player.bedroom_tv_dlna -- media_player.kiosk_tablet +- media_player.kiosk_speaker - media_player.hass_media_player diff --git a/logging/recorder.yaml b/logging/recorder.yaml index 784e8ce7f..54f20d4a4 100644 --- a/logging/recorder.yaml +++ b/logging/recorder.yaml @@ -64,7 +64,6 @@ include: - sensor.dew_point - sensor.outdoor_humidity - sensor.fog_probability - - sensor.snow_probability - sensor.precipitation_probability - sensor.precipitation_intensity_text - sensor.precipitation_type @@ -73,14 +72,15 @@ include: - sensor.rain_accumulation_today # statistics - sensor.rain_accumulation_last_hour - sensor.rain_accumulation_last_24_hours + - sensor.rain_max_24_hours # statistics - sensor.snow_accumulation_today # statistics - sensor.snow_accumulation_last_hour - sensor.snow_accumulation_last_24_hours + - sensor.snow_max_24_hours # statistics - sensor.ice_accumulation_today # statistics - sensor.ice_accumulation_last_hour - sensor.ice_accumulation_last_24_hours - sensor.precipitation_accumulation_today # statistics - - sensor.precipitation_accumulation_yesterday - sensor.precipitation_accumulation_last_hour - sensor.precipitation_accumulation_last_24_hours - sensor.precipitation_duration_today # statistics @@ -96,6 +96,7 @@ include: - sensor.wind_gust - sensor.wind_lull - sensor.wind_bearing + - sensor.wind_bearing_average - sensor.cloud_coverage - sensor.visibility - sensor.air_quality_index @@ -116,8 +117,6 @@ include: - sensor.home_sensors_precipitation_today - sensor.home_sensors_precipitation_today_checked - sensor.home_sensors_precipitation_yesterday_checked - - sensor.pirateweather_cloud_coverage - - sensor.home_sensors_distance_last_lightning_strike - sensor.home_sensors_lightnings_strikes @@ -178,6 +177,8 @@ include: - sensor.bedroom_temperature - sensor.bedroom_humidity + - sensor.indoor_dew_point + # ~~~~ System Monitor ~~~~ # graphs - sensor.load_1m - sensor.load_5m @@ -192,8 +193,6 @@ include: - sensor.swap_use_percent - sensor.wan_ping_round_trip_time_average - - sensor.glances_cpu_used #TEST - # ~~~~ RPi Monitor ~~~~ # graphs - sensor.rpi_temp_raspberrypi - sensor.rpi_memory_use_percent diff --git a/packages/hass.yaml b/packages/hass.yaml index b116584ff..60cca48ec 100644 --- a/packages/hass.yaml +++ b/packages/hass.yaml @@ -50,22 +50,6 @@ homeassistant: sensor.jwork_chrome_external_browser_user: authorized: true - sensor.hass_audio_stats: - state_class: measurement - unit_of_measurement: "%" - sensor.hass_cli_stats: - state_class: measurement - unit_of_measurement: "%" - sensor.hass_dns_stats: - state_class: measurement - unit_of_measurement: "%" - sensor.hass_multicast_stats: - state_class: measurement - unit_of_measurement: "%" - sensor.hass_observer_stats: - state_class: measurement - unit_of_measurement: "%" - shell_command: # https://www.home-assistant.io/components/shell_command/ tts_purge_all: "sh shell/tts_purge_all.sh" tts_purge_old: "sh shell/tts_purge_old.sh" @@ -121,63 +105,6 @@ sensor: - platform: folder #CHECK folder: "/media/music/Alarm Clock Sounds" # path must be in allowlist_external_dirs filter: "*" -command_line: - - sensor: - name: "HASS Multicast Stats" - unique_id: hass_multicast_stats - command: 'curl http://supervisor/multicast/stats -H "Authorization: Bearer $(printenv SUPERVISOR_TOKEN)" | jq ''{"cpu_percent":.data.cpu_percent, "memory_percent":.data.memory_percent, "memory_usage":.data.memory_usage}''' - value_template: "{{ value_json.memory_percent }}" - json_attributes: - - cpu_percent - - memory_percent - - memory_usage - scan_interval: 30 - command_timeout: 10 - - - sensor: - name: "HASS Audio Stats" - unique_id: hass_audio_stats - command: 'curl http://supervisor/audio/stats -H "Authorization: Bearer $(printenv SUPERVISOR_TOKEN)" | jq ''{"cpu_percent":.data.cpu_percent, "memory_percent":.data.memory_percent, "memory_usage":.data.memory_usage}''' - value_template: "{{ value_json.memory_percent }}" - json_attributes: - - cpu_percent - - memory_percent - - memory_usage - scan_interval: 30 - command_timeout: 10 - - - sensor: - name: "HASS Cli Stats" - command: 'curl http://supervisor/cli/stats -H "Authorization: Bearer $(printenv SUPERVISOR_TOKEN)" | jq ''{"cpu_percent":.data.cpu_percent, "memory_percent":.data.memory_percent, "memory_usage":.data.memory_usage}''' - value_template: "{{ value_json.memory_percent }}" - json_attributes: - - cpu_percent - - memory_percent - - memory_usage - scan_interval: 30 - command_timeout: 10 - - - sensor: - name: "HASS DNS Stats" - command: 'curl http://supervisor/dns/stats -H "Authorization: Bearer $(printenv SUPERVISOR_TOKEN)" | jq ''{"cpu_percent":.data.cpu_percent, "memory_percent":.data.memory_percent, "memory_usage":.data.memory_usage}''' - value_template: "{{ value_json.memory_percent }}" - json_attributes: - - cpu_percent - - memory_percent - - memory_usage - scan_interval: 30 - command_timeout: 10 - - - sensor: - name: "HASS Observer Stats" - command: 'curl http://supervisor/observer/stats -H "Authorization: Bearer $(printenv SUPERVISOR_TOKEN)" | jq ''{"cpu_percent":.data.cpu_percent, "memory_percent":.data.memory_percent, "memory_usage":.data.memory_usage}''' - value_template: "{{ value_json.memory_percent }}" - json_attributes: - - cpu_percent - - memory_percent - - memory_usage - scan_interval: 30 - command_timeout: 10 alert: backup_alert: diff --git a/packages/mass_play_media.yaml b/packages/mass_play_media.yaml deleted file mode 100644 index 0ed1ed04e..000000000 --- a/packages/mass_play_media.yaml +++ /dev/null @@ -1,613 +0,0 @@ -################################################################################################################## -# MASS Play Media Package -# Launch Music Assistant Library Media from HASS dashboard & automations -# -# Download this package file to your packages folder (https://www.home-assistant.io/docs/configuration/packages/) -# or copy and paste in appropriate the areas in your configuration.yaml file. -# -# #TODO: List all your MASS media players -################################################################################################################## -input_boolean: - mass_shuffle: - name: "Shuffle" - icon: mdi:shuffle - - mass_repeat: - name: "Repeat" - icon: mdi:repeat - - mass_radio: - name: "Radio Mode" - icon: mdi:radio - -input_select: - mass_enqueue_mode: - name: "Enqueue Mode" - options: - - play - - replace - - next - - replace_next - - add - - mass_media_type: - name: "Media Type" - options: - - Artist - - Album - - Track - - Playlist - - Radio - - mass_repeat_mode: - name: &repeat_name "Repeat Mode" - icon: &repeat_icon mdi:repeat - options: - - "Off" - - All - - One - -input_text: - mass_media_player: - mass_artist: - mass_album: - mass_track: - mass_playlist: - mass_radio: - mass_artist_filter: - mass_album_filter: - -input_number: - mass_volume: - name: "Volume" - icon: mdi:volume-high - unit_of_measurement: "%" - mode: slider - min: 0 - max: 100 - step: 5 - -template: - ############################################################################### - ## Update Media Button - used to force update of media select templates - ############################################################################### - - button: - - name: "MASS Update Media" - unique_id: mass_udpate_media - icon: mdi:multimedia - press: [] - - ############################################################################### - ## Play Media Button - used to start media play with selected options - ############################################################################### - - button: - - name: "MASS Play Media" - unique_id: mass_play_media - icon: mdi:play-box - press: - # get the entity id for the selected media player - - variables: - media_player: > - {{ expand('group.mass_players') - | selectattr('name', 'eq', states('select.mass_media_player')) - | map(attribute='entity_id') | join }} - - # shuffle / repeat / enqueue not available in radio mode so don't set them - - if: "{{ is_state('input_boolean.mass_radio','off') }}" - then: - # set shuffle parameter using boolean value - - action: media_player.shuffle_set - target: - entity_id: "{{ media_player }}" - data: - shuffle: "{{ is_state('input_boolean.mass_shuffle', 'on') }}" - continue_on_error: true - - # set repeat parameter using boolean value - - action: media_player.repeat_set - target: - entity_id: "{{ media_player }}" - data: - repeat: "{{ states('input_select.mass_repeat_mode') | lower }}" - continue_on_error: true - - # set media player volume to zero to try and avoid google power on bloop - # you can delete this service call if you are not using Google Cast media players - - action: media_player.volume_set - target: - entity_id: "{{ media_player }}" - data: - volume_level: 0 - continue_on_error: true - - # play selected media type and set enqueue mode - - action: mass.play_media - target: - entity_id: "{{ media_player }}" - data: - media_id: "{{ states('select.mass_' ~ states('input_select.mass_media_type') | lower) }}" - media_type: "{{ states('input_select.mass_media_type') | lower }}" - artist: "{{ states('select.mass_artist_filter') }}" - album: "{{ states('select.mass_album_filter') }}" - enqueue: "{{ states('input_select.mass_enqueue_mode') | lower }}" - radio_mode: "{{ is_state('input_boolean.mass_radio', 'on') }}" - continue_on_error: true - - # wait for media player to start playing - - wait_template: "{{ is_state(media_player, 'playing') }}" - timeout: 60 - - # set media player to selected volume, done after mass.play_media - # to avoid google bloops when media players turn on - - action: media_player.volume_set - target: - entity_id: "{{ media_player }}" - data: - volume_level: "{{ states('input_number.mass_volume') | float(-1) / 100 }}" - continue_on_error: true - - ############################################################################### - ## Player - ############################################################################### - - trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: group.mass_players - attribute: entity_id - to: - - - trigger: state - entity_id: input_text.mass_media_player - to: - select: - - name: "MASS Media Player" - unique_id: mass_media_player - state: "{{ states('input_text.mass_media_player') }}" - select_option: - - condition: template - value_template: "{{ option not in ['', none] }}" - - - action: input_text.set_value - target: - entity_id: input_text.mass_media_player - data: - value: "{{ option }}" - options: > - {{ expand('group.mass_players') - | map(attribute='name') | list | sort }} - - ############################################################################### - ## Artist - ############################################################################### - - trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: - - input_text.mass_artist - - button.mass_update_media - to: - - - trigger: time_pattern - minutes: 30 # sync with library every hour at 30 min after - action: - - action: mass.get_library - data: - limit: 500 - album_artists_only: true - media_type: artist - order_by: sort_name - response_variable: mass_artists - - - variables: - artists: > - {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} - {% set artist_list.names = artist_list.names + [artist.name] %} - {% endfor %} - {{ artist_list.names | unique | list }} - select: - - name: "MASS Artist" - unique_id: mass_artist - state: "{{ states('input_text.mass_artist') }}" - select_option: - - condition: template - value_template: "{{ option not in ['', none] }}" - - - action: input_text.set_value - target: - entity_id: input_text.mass_artist - data: - value: "{{ option }}" - options: "{{ artists }}" - - ############################################################################### - ## Album - ############################################################################### - - trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: - - input_text.mass_album - - button.mass_update_media - to: - - - trigger: time_pattern - minutes: 30 # sync with library every hour at 30 min after - action: - - action: mass.get_library - data: - limit: 500 - media_type: album - order_by: sort_name - album_type: - - album - - single - - compilation - - ep - - unknown - response_variable: mass_albums - - - variables: - albums: > - {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} - {% set album_list.names = album_list.names + [album.name] %} - {% endfor %} - {{ album_list.names | unique | list }} - select: - - name: "MASS Album" - unique_id: mass_album - state: "{{ states('input_text.mass_album') }}" - select_option: - - condition: template - value_template: "{{ option not in ['', none] }}" - - - action: input_text.set_value - target: - entity_id: input_text.mass_album - data: - value: "{{ option }}" - options: "{{ albums }}" - - ############################################################################### - ## Track - ############################################################################### - - trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: - - input_text.mass_track - - button.mass_update_media - to: - - - trigger: time_pattern - minutes: 30 # sync with library every hour at 30 min after - action: - - action: mass.get_library - data: - limit: 500 - media_type: track - order_by: sort_name - response_variable: mass_tracks - - - variables: - tracks: > - {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} - {% set track_list.names = track_list.names + [track.name] %} - {% endfor %} - {{ track_list.names | unique | list }} - select: - - name: "MASS Track" - unique_id: mass_track - state: "{{ states('input_text.mass_track') }}" - select_option: - - condition: template - value_template: "{{ option not in ['', none] }}" - - - action: input_text.set_value - target: - entity_id: input_text.mass_track - data: - value: "{{ option }}" - options: "{{ tracks }}" - - ############################################################################### - ## Playlist - ############################################################################### - - trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: - - input_text.mass_playlist - - button.mass_update_media - to: - - - trigger: time_pattern - minutes: 30 # sync with library every hour at 30 min after - action: - - action: mass.get_library - data: - limit: 500 - media_type: playlist - order_by: sort_name - response_variable: mass_playlists - - - variables: - playlists: > - {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} - {% set playlist_list.names = playlist_list.names + [playlist.name] %} - {% endfor %} - {{ playlist_list.names | unique | list }} - select: - - name: "MASS Playlist" - unique_id: mass_playlist - state: "{{ states('input_text.mass_playlist') }}" - select_option: - - condition: template - value_template: "{{ option not in ['', none] }}" - - - action: input_text.set_value - target: - entity_id: input_text.mass_playlist - data: - value: "{{ option }}" - options: "{{ playlists }}" - - ############################################################################### - ## Radio Station - ############################################################################### - - trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: - - input_text.mass_radio - - button.mass_update_media - to: - - - trigger: time_pattern - minutes: 30 # sync with library every hour at 30 min after - action: - - action: mass.get_library - data: - limit: 500 - media_type: radio - order_by: sort_name - response_variable: mass_radios - - - variables: - radios: > - {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} - {% set radio_list.names = radio_list.names + [radio.name] %} - {% endfor %} - {{ radio_list.names | unique | list }} - select: - - name: "MASS Radio" - unique_id: mass_radio - state: "{{ states('input_text.mass_radio') }}" - select_option: - - condition: template - value_template: "{{ option not in ['', none] }}" - - - action: input_text.set_value - target: - entity_id: input_text.mass_radio - data: - value: "{{ option }}" - options: "{{ radios }}" - - ############################################################################### - ## Artist Filter - ############################################################################### - - trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: - - input_select.mass_media_type - - input_text.mass_artist_filter - - select.mass_track - - select.mass_album - - select.mass_album_filter - - button.mass_update_media - to: - not_from: - - unknown - - unavailable - action: - - action: mass.get_library - data: - media_type: track - response_variable: mass_tracks - - - action: mass.get_library - data: - media_type: album - response_variable: mass_albums - - - variables: - artists: > - {% set artist_list = namespace(names=['']) %} - {% if states('input_select.mass_media_type') == 'Track' %} - {% for track in mass_tracks['tracks'] %} - {% if track.name == states('select.mass_track') - and states('select.mass_album_filter') - in ['', 'unknown', track.album.name] %} - {% set artist_list.names = artist_list.names + [track.artists[0].name] %} - {% endif %} - {% endfor %} - {% elif states('input_select.mass_media_type') == 'Album' %} - {% for album in mass_albums['albums'] %} - {% if album.name == states('select.mass_album') %} - {% set artist_list.names = artist_list.names + [album.artists[0].name] %} - {% endif %} - {% endfor %} - {% endif %} - {{ artist_list.names | unique | list }} - select: - - name: "MASS Artist Filter" - unique_id: mass_artist_filter - state: "{{ states('input_text.mass_artist_filter') }}" - select_option: - - condition: template - value_template: "{{ option not in ['', none] }}" - - - action: input_text.set_value - target: - entity_id: input_text.mass_artist_filter - data: - value: "{{ option }}" - options: "{{ artists }}" - - ############################################################################### - ## Album Filter - ############################################################################### - - trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: - - input_select.mass_media_type - - input_text.mass_album_filter - - select.mass_track - - select.mass_artist_filter - - button.mass_update_media - to: - not_from: - - unknown - - unavailable - action: - - action: mass.get_library - data: - media_type: track - response_variable: mass_tracks - - - variables: - albums: > - {% set album_list = namespace(names=['']) %} - {% if states('input_select.mass_media_type') == 'Track' %} - {% for track in mass_tracks['tracks'] %} - {% if track.name == states('select.mass_track') - and states('select.mass_artist_filter') - in ['', 'unknown', track.artists[0].name] %} - {% set album_list.names = album_list.names + [track.album.name] %} - {% endif %} - {% endfor %} - {% endif %} - {{ album_list.names | unique | list }} - select: - - name: "MASS Album Filter" - unique_id: mass_album_filter - state: "{{ states('input_text.mass_album_filter') }}" - select_option: - - condition: template - value_template: "{{ option not in ['', none] }}" - - - action: input_text.set_value - target: - entity_id: input_text.mass_album_filter - data: - value: "{{ option }}" - options: "{{ albums }}" - -automation: - ############################################################################### - ## Update Mass Media Player Group - ## - ## This automation automatically creates a group of all the Music Assistant - ## media players available in Home Assistant. - ## - ## Listed media players are removed from the group if they become unavailable - ## and are automatically readded to the group when them become available again. - ############################################################################### - - id: mass_update_media_players - alias: "Update Mass Media Players" - description: "Update mass media player group." - mode: single - max_exceeded: silent - triggers: - - trigger: homeassistant - event: start - - - trigger: event - event_type: call_service - event_data: - domain: group - service: reload - - #TODO list all of your Music Assistant media player entities here - - trigger: state - entity_id: &media_players - - media_player.living_room_speaker_2 - - media_player.dining_room_hub_2 - - media_player.bedroom_hub_2 - - media_player.bathroom_speaker_2 - - media_player.laundry_room_speaker_2 - - media_player.office_hub_2 - to: - - unknown - - unavailable - - - trigger: state - entity_id: *media_players - from: - - unknown - - unavailable - actions: - # wait for music assistant to load - - wait_template: > - {{ states.media_player - | selectattr('attributes.mass_player_type', 'defined') - | map(attribute='entity_id') | list - | select('has_value') | list | count > 0 }} - timeout: 300 - continue_on_timeout: false - - - action: group.set - data: - object_id: mass_players - entities: > - {{ states.media_player - | selectattr('attributes.mass_player_type', 'defined') - | map(attribute='entity_id') | list - | select('has_value') | sort }} diff --git a/packages/media/media_player.yaml b/packages/media/media_player.yaml index 5f273d3bf..22d1e8b49 100644 --- a/packages/media/media_player.yaml +++ b/packages/media/media_player.yaml @@ -130,7 +130,7 @@ homeassistant: play_tts: true media_preset: true - media_player.kiosk_tablet: + media_player.kiosk_speaker: device_class: speaker type: single play_alarm_clock: true @@ -211,8 +211,8 @@ homeassistant: friendly_name: "Deck Chromecast" input_number.hass_media_player_default_volume: friendly_name: "HASS Media Player" - input_number.kiosk_tablet_default_volume: - friendly_name: "Kiosk Tablet" + input_number.kiosk_speaker_default_volume: + friendly_name: "Kiosk Speaker" input_number: living_room_speaker_default_volume: &speaker_settings @@ -228,7 +228,7 @@ input_number: office_hub_default_volume: *speaker_settings office_speaker_default_volume: *speaker_settings hass_media_player_default_volume: *speaker_settings - kiosk_tablet_default_volume: *speaker_settings + kiosk_speaker_default_volume: *speaker_settings living_room_chromecast_default_volume: *speaker_settings office_chromecast_default_volume: *speaker_settings deck_chromecast_default_volume: *speaker_settings @@ -243,7 +243,7 @@ input_number: office_hub_current_volume: *speaker_settings office_speaker_current_volume: *speaker_settings hass_media_player_current_volume: *speaker_settings - kiosk_tablet_current_volume: *speaker_settings + kiosk_speaker_current_volume: *speaker_settings living_room_chromecast_current_volume: *speaker_settings office_chromecast_current_volume: *speaker_settings deck_chromecast_current_volume: *speaker_settings @@ -258,7 +258,7 @@ input_number: office_hub_tts: *speaker_settings office_speaker_tts: *speaker_settings hass_media_player_tts: *speaker_settings - kiosk_tablet_tts: *speaker_settings + kiosk_speaker_tts: *speaker_settings living_room_chromecast_tts: *speaker_settings office_chromecast_tts: *speaker_settings deck_chromecast_tts: *speaker_settings @@ -273,7 +273,7 @@ input_number: office_hub_phone: *speaker_settings office_speaker_phone: *speaker_settings hass_media_player_phone: *speaker_settings - kiosk_tablet_phone: *speaker_settings + kiosk_speaker_phone: *speaker_settings living_room_chromecast_phone: *speaker_settings office_chromecast_phone: *speaker_settings deck_chromecast_phone: *speaker_settings @@ -288,7 +288,7 @@ input_number: office_hub_alarm_clock: *speaker_settings office_speaker_alarm_clock: *speaker_settings hass_media_player_alarm_clock: *speaker_settings - kiosk_tablet_alarm_clock: *speaker_settings + kiosk_speaker_alarm_clock: *speaker_settings living_room_chromecast_alarm_clock: *speaker_settings office_chromecast_alarm_clock: *speaker_settings deck_chromecast_alarm_clock: *speaker_settings diff --git a/packages/notify.yaml b/packages/notify.yaml index 3970b4a92..8c6d32af2 100644 --- a/packages/notify.yaml +++ b/packages/notify.yaml @@ -40,7 +40,7 @@ notify: - platform: tts name: "Kiosk TTS" tts_service: tts.cloud_say - media_player: media_player.kiosk_tablet + media_player: media_player.kiosk_speaker - platform: group name: "jason" diff --git a/packages/weather.yaml b/packages/weather.yaml index 70af905d0..4416a2a5b 100644 --- a/packages/weather.yaml +++ b/packages/weather.yaml @@ -65,6 +65,9 @@ homeassistant: camera.windsor_radar: control: hidden + sensor.wind_bearing_average: + state_class: measurement + input_select: previous_envcan_alert_severity: name: "Previous EnvCan Alert Severity" diff --git a/scripts/media/alarm_clock/alarm_clock_play.yaml b/scripts/media/alarm_clock/alarm_clock_play.yaml index ffbd95885..4fa967f62 100644 --- a/scripts/media/alarm_clock/alarm_clock_play.yaml +++ b/scripts/media/alarm_clock/alarm_clock_play.yaml @@ -119,12 +119,12 @@ alarm_clock_play: - if: "{{ mass_player in state_attr('group.mass_media_players', 'entity_id') }}" then: - - action: mass.play_media + - action: music_assistant.play_media target: entity_id: "{{ mass_player }}" data: media_id: "{{ media_url }}" - media_type: playlist + media_type: playlists enqueue: play continue_on_error: true diff --git a/scripts/media/media_play.yaml b/scripts/media/media_play.yaml index 46d6626d9..76c760521 100644 --- a/scripts/media/media_play.yaml +++ b/scripts/media/media_play.yaml @@ -166,7 +166,7 @@ media_play: repeat: "{{ repeat }}" continue_on_error: true - - action: mass.play_media + - action: music_assistant.play_media target: entity_id: "{{ mass_player }}" data: diff --git a/scripts/media/tts/tts_play.yaml b/scripts/media/tts/tts_play.yaml index 354d1366a..1f98bbd0f 100644 --- a/scripts/media/tts/tts_play.yaml +++ b/scripts/media/tts/tts_play.yaml @@ -117,7 +117,7 @@ tts_play: {% set mass = expand('group.mass_media_players') | selectattr('name', 'eq', state_attr(tts_player, 'friendly_name')) | map(attribute='entity_id') | join %} - {{ tts_player if mass == '' else mass }} + {{ tts_player if mass == '' or is_state('binary_sensor.wan', 'off') else mass }} tts_service: > # force local tts service if wan disconnected {% if is_state('binary_sensor.wan', 'off') %} {% set provider = 'Piper' %} diff --git a/scripts/schedule/work_commute_lights.yaml b/scripts/schedule/work_commute_lights.yaml new file mode 100644 index 000000000..66f98500c --- /dev/null +++ b/scripts/schedule/work_commute_lights.yaml @@ -0,0 +1,26 @@ +############################################################################### +## Commute Lights +############################################################################### +work_commute_lights: + alias: "Work Commute Lights" + icon: mdi:car-multiple + description: "Commute alert lighting." + mode: restart + sequence: + - action: script.turn_light_on + data: + lights: light.dining_room_light_rgb + brightness: 255 + rgb_color: > + {%- from 'weather.jinja' import precip_today -%} + {%- set minutes = state_attr('sensor.leave_home_time', 'leave_min') | int(none) %} + {%- if is_state('alert.late_for_work_jason', 'on') %} {{ [255, 0, 0] }} + {%- elif is_state('alert.work_commute_jason', 'on') or minutes == none %} {{ [171, 78, 0] }} + {%- elif precip_today() | bool %} {{ [0, 0, 255] }} + {%- else %} {{ [0, 255, 0] }} + {%- endif %} + transition: 5 + activate_timer: false + bypass_timer: true + override: true + continue_on_error: true diff --git a/templates/climate.yaml b/templates/climate.yaml index 9b4e317da..0b910abaa 100644 --- a/templates/climate.yaml +++ b/templates/climate.yaml @@ -189,9 +189,9 @@ or is_number(states('sensor.bedroom_temperature')) }} - name: "Indoor Temperature Target" - unique_id: indoor_temperature_target # req for statistics + unique_id: indoor_temperature_target device_class: temperature - state_class: measurement + state_class: measurement # req for statistics / graphs unit_of_measurement: °C state: "{{ states('input_number.thermostat_target_temperature') }}" @@ -244,6 +244,34 @@ {{ is_number(states('sensor.indoor_humidity')) and is_number(states('sensor.outdoor_humidity')) }} + - name: "Indoor Dew Point" + unique_id: indoor_dew_point + icon: mdi:thermometer-water + device_class: temperature + state_class: measurement + unit_of_measurement: "°C" + state: > + {% set temp = states('sensor.indoor_temperature') | float %} + {% set humidity = states('sensor.indoor_humidity') | float %} + {% set dp = temp - ((100 - humidity)/5) %} + {{ '%0.1f' | format(dp) }} + availability: > + {{ is_number(states('sensor.indoor_temperature')) + and is_number(states('sensor.indoor_humidity')) }} + + - name: "Indoor Comfort Level" + unique_id: indoor_comfort_level + icon: mdi:thermometer-water + device_class: enum + state: > + {% from 'weather.jinja' import dew_point_comfort %} + {{ dew_point_comfort(states('sensor.indoor_dew_point')) }} + attributes: + options: > + {% from 'weather.jinja' import dew_point_comfort_options %} + {{ dew_point_comfort_options() }} + availability: "{{ is_number(states('sensor.indoor_dew_point')) }}" + - name: "HVAC Boost" unique_id: hvac_boost icon: "{{ iif(states(this.entity_id) | int(-1) > -1, 'mdi:thermometer-plus', 'mdi:thermometer-minus') }}" diff --git a/templates/hass.yaml b/templates/hass.yaml index 194a547d8..c5404e6f1 100644 --- a/templates/hass.yaml +++ b/templates/hass.yaml @@ -1,68 +1,6 @@ ############################################################################### ## Templates - Hass ############################################################################### -#ISSUE sensor.home_assistant_core_memory_percent only update every 5 minutes -# but sensor.memory_use_percent updatess < 30 sec -- trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: sensor.home_assistant_core_memory_percent - to: - sensor: - #NOTE assumption nothing else running on server - - name: "HASS OS Memory Percent" - unique_id: hass_os_memory_percent #TEST - icon: mdi:memory - state_class: measurement - unit_of_measurement: "%" - state: > - {% set total = states('sensor.memory_use_percent') | float(0) %} - {% set core = states('sensor.home_assistant_core_memory_percent') | float(0) %} - {% set super = states('sensor.home_assistant_supervisor_memory_percent') | float(0) %} - {% set addon = states('sensor.hass_addon_memory_percent') | float(0) %} - {{ '%0.1f' | format(total - core - super - addon) | float }} - availability: > - {{ is_number(states('sensor.memory_use_percent')) - and is_number(states('sensor.home_assistant_core_memory_percent')) - and is_number(states('sensor.home_assistant_supervisor_memory_percent')) - and is_number(states('sensor.hass_addon_memory_percent')) }} - -#ISSUE sensor.home_assistant_core_cpu_percent only update every 5 minutes -# but sensor.processor_use_percent updatess < 30 sec -- trigger: - - trigger: homeassistant - event: start - - - trigger: event - event_type: event_template_reloaded - - - trigger: state - entity_id: sensor.home_assistant_core_cpu_percent - to: - sensor: - #NOTE assumption nothing else running on server - - name: "HASS OS CPU Percent" - unique_id: hass_os_cpu_percent #TEST - icon: mdi:chip - state_class: measurement - unit_of_measurement: "%" - state: > - {% set total = states('sensor.processor_use_percent') | float(-1) %} - {% set core = states('sensor.home_assistant_core_cpu_percent') | float(-1) %} - {% set super = states('sensor.home_assistant_supervisor_cpu_percent') | float(-1) %} - {% set addon = states('sensor.hass_addon_cpu_percent') | float(-1) %} - {{ '%0.1f' | format(total - core - super - addon) | float }} - availability: > - {{ is_number(states('sensor.processor_use_percent')) - and is_number(states('sensor.home_assistant_core_cpu_percent')) - and is_number(states('sensor.home_assistant_supervisor_cpu_percent')) - and is_number(states('sensor.hass_addon_cpu_percent')) }} - - trigger: - trigger: homeassistant event: start diff --git a/templates/light.yaml b/templates/light.yaml index 9c37d593b..cfff2aa11 100644 --- a/templates/light.yaml +++ b/templates/light.yaml @@ -78,7 +78,6 @@ {{ (states('sensor.outdoor_illuminance') | int - cloud_factor | int(0)) <= states('input_number.day_illuminance_threshold') | int }} {% endif %} - availability: "{{ is_number(states('sensor.outdoor_illuminance')) }}" # delay on/off prevent trigger when ill sensor <> threshold rapidly # elevation - lights on only after noon, lights off only before noon diff --git a/templates/media/alarm_clock.yaml b/templates/media/alarm_clock.yaml index 42d713d25..ea0d3097a 100644 --- a/templates/media/alarm_clock.yaml +++ b/templates/media/alarm_clock.yaml @@ -238,15 +238,18 @@ entity_id: input_text.alarm_clock_media_wake to: action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -280,15 +283,18 @@ entity_id: button.update_mass_media to: action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -318,15 +324,18 @@ entity_id: input_text.alarm_clock_media_nap to: action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} diff --git a/templates/media/media_players.yaml b/templates/media/media_players.yaml index e422a202a..a1e5935be 100644 --- a/templates/media/media_players.yaml +++ b/templates/media/media_players.yaml @@ -229,9 +229,9 @@ {{ player_state('media_player.hass_media_player') }} availability: "{{ has_value('media_player.hass_media_player') }}" - - name: "Kiosk Tablet" - unique_id: kiosk_tablet + - name: "Kiosk Speaker" + unique_id: kiosk_speaker state: > {% from 'media.jinja' import player_state %} - {{ player_state('media_player.kiosk_tablet') }} - availability: "{{ has_value('media_player.kiosk_tablet') }}" + {{ player_state('media_player.kiosk_speaker') }} + availability: "{{ has_value('media_player.kiosk_speaker') }}" diff --git a/templates/media/preset/media_preset_charlie.yaml b/templates/media/preset/media_preset_charlie.yaml index 839ef2fdd..4f3b36aa2 100644 --- a/templates/media/preset/media_preset_charlie.yaml +++ b/templates/media/preset/media_preset_charlie.yaml @@ -99,17 +99,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: - favorite: true - limit: 50 + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: artist + favorite: true + limit: 100 response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -147,15 +148,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -195,15 +199,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -243,15 +250,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -291,15 +301,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -341,21 +354,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_charlie') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_charlie') and states('select.media_album_filter_charlie') in ['', 'unknown', track.album.name] %} @@ -363,7 +382,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_charlie') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_charlie') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -407,16 +426,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_charlie') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_charlie') and states('select.media_artist_filter_charlie') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/media/preset/media_preset_chill.yaml b/templates/media/preset/media_preset_chill.yaml index 6b823035f..ad490a3bd 100644 --- a/templates/media/preset/media_preset_chill.yaml +++ b/templates/media/preset/media_preset_chill.yaml @@ -99,17 +99,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM + media_type: artist favorite: true limit: 50 - media_type: artist response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -147,15 +148,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -195,15 +199,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -243,15 +250,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -291,15 +301,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -341,21 +354,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_chill') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_chill') and states('select.media_album_filter_chill') in ['', 'unknown', track.album.name] %} @@ -363,7 +382,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_chill') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_chill') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -407,16 +426,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_chill') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_chill') and states('select.media_artist_filter_chill') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/media/preset/media_preset_company.yaml b/templates/media/preset/media_preset_company.yaml index 11bda6654..f235fe8e5 100644 --- a/templates/media/preset/media_preset_company.yaml +++ b/templates/media/preset/media_preset_company.yaml @@ -99,17 +99,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM + media_type: artist favorite: true limit: 50 - media_type: artist response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -147,15 +148,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -195,15 +199,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -243,15 +250,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -291,15 +301,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -341,21 +354,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_company') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_company') and states('select.media_album_filter_company') in ['', 'unknown', track.album.name] %} @@ -363,7 +382,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_company') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_company') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -407,16 +426,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_company') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_company') and states('select.media_artist_filter_company') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/media/preset/media_preset_guest.yaml b/templates/media/preset/media_preset_guest.yaml index abda61db3..434f329a5 100644 --- a/templates/media/preset/media_preset_guest.yaml +++ b/templates/media/preset/media_preset_guest.yaml @@ -99,17 +99,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM + media_type: artist favorite: true limit: 50 - media_type: artist response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -147,15 +148,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -195,15 +199,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -243,15 +250,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -291,15 +301,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -341,21 +354,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_guest') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_guest') and states('select.media_album_filter_guest') in ['', 'unknown', track.album.name] %} @@ -363,7 +382,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_guest') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_guest') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -407,16 +426,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_guest') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_guest') and states('select.media_artist_filter_guest') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/media/preset/media_preset_jason.yaml b/templates/media/preset/media_preset_jason.yaml index f36e4507b..0ed58599b 100644 --- a/templates/media/preset/media_preset_jason.yaml +++ b/templates/media/preset/media_preset_jason.yaml @@ -99,17 +99,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM + media_type: artist favorite: true limit: 50 - media_type: artist response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -147,15 +148,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -195,15 +199,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -243,15 +250,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -291,15 +301,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -341,21 +354,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_jason') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_jason') and states('select.media_album_filter_jason') in ['', 'unknown', track.album.name] %} @@ -363,7 +382,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_jason') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_jason') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -407,16 +426,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_jason') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_jason') and states('select.media_artist_filter_jason') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/media/preset/media_preset_morning.yaml b/templates/media/preset/media_preset_morning.yaml index 1095103bd..f530b9d8e 100644 --- a/templates/media/preset/media_preset_morning.yaml +++ b/templates/media/preset/media_preset_morning.yaml @@ -99,17 +99,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM + media_type: artist favorite: true limit: 50 - media_type: artist response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -147,15 +148,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -195,15 +199,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -243,15 +250,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -291,15 +301,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -341,21 +354,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_morning') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_morning') and states('select.media_album_filter_morning') in ['', 'unknown', track.album.name] %} @@ -363,7 +382,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_morning') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_morning') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -407,16 +426,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_morning') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_morning') and states('select.media_artist_filter_morning') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/media/preset/media_preset_play.yaml b/templates/media/preset/media_preset_play.yaml index 2bc1a9b04..f6138d460 100644 --- a/templates/media/preset/media_preset_play.yaml +++ b/templates/media/preset/media_preset_play.yaml @@ -108,17 +108,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM + media_type: artist favorite: true limit: 50 - media_type: artist response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -156,15 +157,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -204,15 +208,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -252,15 +259,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -300,15 +310,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -350,21 +363,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_play') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_play') and states('select.media_album_filter_play') in ['', 'unknown', track.album.name] %} @@ -372,7 +391,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_play') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_play') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -416,16 +435,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_play') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_play') and states('select.media_artist_filter_play') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/media/preset/media_preset_shower.yaml b/templates/media/preset/media_preset_shower.yaml index d19fdc2e4..5d3db4158 100644 --- a/templates/media/preset/media_preset_shower.yaml +++ b/templates/media/preset/media_preset_shower.yaml @@ -99,17 +99,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM + media_type: artist favorite: true limit: 50 - media_type: artist response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -147,15 +148,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -195,15 +199,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -243,15 +250,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -291,15 +301,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -341,21 +354,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_shower') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_shower') and states('select.media_album_filter_shower') in ['', 'unknown', track.album.name] %} @@ -363,7 +382,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_shower') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_shower') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -407,16 +426,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_shower') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_shower') and states('select.media_artist_filter_shower') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/media/preset/media_preset_sleep.yaml b/templates/media/preset/media_preset_sleep.yaml index f9a1afb42..c603b3dd7 100644 --- a/templates/media/preset/media_preset_sleep.yaml +++ b/templates/media/preset/media_preset_sleep.yaml @@ -99,17 +99,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM + media_type: artist favorite: true limit: 50 - media_type: artist response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -147,15 +148,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -195,15 +199,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -243,15 +250,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -291,15 +301,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -341,21 +354,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_sleep') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_sleep') and states('select.media_album_filter_sleep') in ['', 'unknown', track.album.name] %} @@ -363,7 +382,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_sleep') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_sleep') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -407,16 +426,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_sleep') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_sleep') and states('select.media_artist_filter_sleep') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/media/preset/media_preset_wake.yaml b/templates/media/preset/media_preset_wake.yaml index 6a71b21c3..1e727d465 100644 --- a/templates/media/preset/media_preset_wake.yaml +++ b/templates/media/preset/media_preset_wake.yaml @@ -99,17 +99,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM + media_type: artist favorite: true limit: 50 - media_type: artist response_variable: mass_artists - variables: artists: > {% set artist_list = namespace(names=[]) %} - {% for artist in mass_artists['artists'] %} + {% for artist in mass_artists['items'] %} {% set artist_list.names = artist_list.names + [artist.name] %} {% endfor %} {{ artist_list.names | unique | list }} @@ -147,15 +148,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: albums: > {% set album_list = namespace(names=[]) %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% set album_list.names = album_list.names + [album.name] %} {% endfor %} {{ album_list.names | unique | list }} @@ -195,15 +199,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: tracks: > {% set track_list = namespace(names=[]) %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% set track_list.names = track_list.names + [track.name] %} {% endfor %} {{ track_list.names | unique | list }} @@ -243,15 +250,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: playlist + favorite: true + limit: 100 response_variable: mass_playlists - variables: playlists: > {% set playlist_list = namespace(names=[]) %} - {% for playlist in mass_playlists['playlists'] %} + {% for playlist in mass_playlists['items'] %} {% set playlist_list.names = playlist_list.names + [playlist.name] %} {% endfor %} {{ playlist_list.names | unique | list }} @@ -291,15 +301,18 @@ - trigger: time_pattern minutes: 30 # sync with library every hour at 30 min after action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: radio + favorite: true + limit: 100 response_variable: mass_radios - variables: radios: > {% set radio_list = namespace(names=[]) %} - {% for radio in mass_radios['radios'] %} + {% for radio in mass_radios['items'] %} {% set radio_list.names = radio_list.names + [radio.name] %} {% endfor %} {{ radio_list.names | unique | list }} @@ -341,21 +354,27 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: album + favorite: true + limit: 100 response_variable: mass_albums - variables: artists: > {% set artist_list = namespace(names=['']) %} {% if states('input_select.media_type_wake') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_wake') and states('select.media_album_filter_wake') in ['', 'unknown', track.album.name] %} @@ -363,7 +382,7 @@ {% endif %} {% endfor %} {% elif states('input_select.media_type_wake') == 'Album' %} - {% for album in mass_albums['albums'] %} + {% for album in mass_albums['items'] %} {% if album.name == states('select.media_album_wake') %} {% set artist_list.names = artist_list.names + [album.artists[0].name] %} {% endif %} @@ -407,16 +426,19 @@ - unknown - unavailable action: - - action: mass.get_library + - action: music_assistant.get_library data: + config_entry_id: 01JG78VERDDPB4JB2BA6W0Z4WM media_type: track + favorite: true + limit: 100 response_variable: mass_tracks - variables: albums: > {% set album_list = namespace(names=['']) %} {% if states('input_select.media_type_wake') == 'Track' %} - {% for track in mass_tracks['tracks'] %} + {% for track in mass_tracks['items'] %} {% if track.name == states('select.media_track_wake') and states('select.media_artist_filter_wake') in ['', 'unknown', track.artists[0].name] %} diff --git a/templates/weather/weather.yaml b/templates/weather/weather.yaml index 64ce81934..6ae27754f 100644 --- a/templates/weather/weather.yaml +++ b/templates/weather/weather.yaml @@ -378,7 +378,7 @@ state: "{{ '%0.1f' | format(states('sensor.pirateweather_apparent_temperature') | float) }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_apparent_temperature')) }}" + availability: "{{ states('sensor.pirateweather_apparent_temperature') | int(-99) > -60 }}" # filter erroneous values ############################################################################### ## Lightning Trigger Sensors @@ -475,12 +475,12 @@ unique_id: rain_accumulation_today icon: mdi:weather-pouring device_class: precipitation - state_class: measurement + state_class: total_increasing unit_of_measurement: mm state: "{{ states('input_number.rain_accumulation_today_checked') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_current_day_liquid_accumulation')) }}" + availability: "{{ states('sensor.pirateweather_current_day_liquid_accumulation') | int(-1) >= 0 }}" # filter erroneous values - trigger: - trigger: homeassistant @@ -507,12 +507,12 @@ unique_id: snow_accumulation_today icon: mdi:weather-snowy device_class: precipitation - state_class: measurement + state_class: total_increasing unit_of_measurement: mm state: "{{ states('input_number.snow_accumulation_today_checked') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_current_day_snow_accumulation')) }}" + availability: "{{ states('sensor.pirateweather_current_day_snow_accumulation') | int(-1) >= 0 }}" # filter erroneous values - trigger: - trigger: homeassistant @@ -539,12 +539,12 @@ unique_id: ice_accumulation_today icon: mdi:weather-icey-heavy device_class: precipitation - state_class: measurement + state_class: total_increasing unit_of_measurement: mm state: "{{ states('input_number.ice_accumulation_today_checked') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_current_day_ice_accumulation')) }}" + availability: "{{ states('sensor.pirateweather_current_day_ice_accumulation') | int(-1) >= 0 }}" # filter erroneous values - trigger: - trigger: homeassistant @@ -571,13 +571,67 @@ unique_id: precipitation_accumulation_today icon: mdi:weather-pouring device_class: precipitation - state_class: measurement + state_class: total_increasing unit_of_measurement: mm state: "{{ states('input_number.precipitation_accumulation_today_checked') }}" attributes: provider: "Pirate Weather" availability: "{{ is_number(states('sensor.precipitation_accumulation_today_calculated')) }}" +- trigger: + - trigger: homeassistant + id: startup + event: start + + - trigger: event + id: reload + event_type: event_template_reloaded + + - trigger: state + id: change + entity_id: sensor.precipitation_type + to: + - rain + - snow + from: + - rain + - snow + + - trigger: state + id: change + entity_id: sensor.precipitation_type + to: + - rain + - snow + from: none + + - trigger: state + id: change + entity_id: sensor.precipitation_type + to: none + from: + - rain + - snow + + - trigger: numeric_state + id: temp + entity_id: sensor.outdoor_temperature + above: 0 + below: 1 + binary_sensor: + - name: "Precipitation Change Alert" + unique_id: precipitation_change_alert + icon: mdi:weather-snowy-rainy + state: > #NOTE always false after startup and template reload if not temp + {{ (trigger.id == 'change' and states.sensor.precipitation_type.state != 'none' + and now() - states.sensor.precipitation_type.last_changed < timedelta(minutes=30) + or ((is_state('sensor.precipitation_type', 'rain') + and states('sensor.outdoor_temperature') | int <= 0 + and states('sensor.outdoor_temperature_trend') != 'rising') + or (is_state('sensor.precipitation_type', 'snow') + and states('sensor.outdoor_temperature') | int > 0) + and states('sensor.outdoor_temperature_trend') != 'falling')) }} + - binary_sensor: ############################################################################### ## Integrations @@ -845,7 +899,7 @@ state: "{{ '%0.1f' | format(states('sensor.pirateweather_temperature') | float) }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_temperature')) }}" + availability: "{{ states('sensor.lightning_count') | int(-99) >= -60 }}" # filter erroneous values - name: "Outdoor Temperature Level" unique_id: outdoor_temperature_level @@ -945,7 +999,7 @@ state: "{{ states('sensor.windsor_normal_high_temperature') }}" attributes: provider: "Environment Canada" - availability: "{{ is_number(states('sensor.windsor_normal_high_temperature')) }}" + availability: "{{ states('sensor.windsor_normal_high_temperature') | int(-99) >= -60 }}" # filter erroneous values - name: "Outdoor High Temperature Differential" unique_id: outdoor_high_temperature_differential @@ -1022,7 +1076,7 @@ state: "{{ states('sensor.windsor_normal_low_temperature') }}" attributes: provider: "Environment Canada" - availability: "{{ is_number(states('sensor.windsor_normal_low_temperature')) }}" + availability: "{{ states('sensor.windsor_normal_low_temperature') | int(-99) >= -60 }}" # filter erroneous values - name: "Outdoor Low Temperature Differential" unique_id: outdoor_low_temperature_differential @@ -1050,7 +1104,7 @@ state: "{{ states('sensor.pirateweather_humidity') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_humidity')) }}" + availability: "{{ states('sensor.pirateweather_humidity') | int(-1) >= 0 }}" # filter erroneous values - name: "Outdoor Humidity Level" unique_id: outdoor_humidity_level @@ -1109,27 +1163,19 @@ state: "{{ states('sensor.pirateweather_dew_point') | float }}" attributes: provider: "Tempest" - availability: "{{ is_number(states('sensor.pirateweather_dew_point')) }}" + availability: "{{ states('sensor.pirateweather_dew_point') | int(-99) >= -60 }}" # filter erroneous values - name: "Dew Point Comfort Level" unique_id: dew_point_comfort_level icon: mdi:thermometer-water device_class: enum state: > - {% set dewpoint = states('sensor.dew_point') | float %} - {% if dewpoint >= 26 %} Severely High - {% elif dewpoint >= 24 %} Oppressive - {% elif dewpoint >= 21 %} Very Humid - {% elif dewpoint >= 18 %} Uncomfortable - {% elif dewpoint >= 16 %} Ok For Most - {% elif dewpoint >= 12 %} Comfortable - {% elif dewpoint >= 10 %} Very Comfortable - {% elif dewpoint >= 8 %} Somewhat Dry - {% elif dewpoint >= 5 %} Dry - {% else %} Very Dry - {% endif %} + {% from 'weather.jinja' import dew_point_comfort %} + {{ dew_point_comfort(states('sensor.dew_point')) }} attributes: - options: "{{ ['Severely High', 'Oppressive', 'Very Humid', 'Uncomfortable', 'Ok For Most', 'Comfortable', 'Very Comfortable', 'Somewhat Dry', 'Dry', 'Very Dry'] }}" + options: > + {% from 'weather.jinja' import dew_point_comfort_options %} + {{ dew_point_comfort_options() }} provider: "{{ state_attr('sensor.dew_point', 'provider') }}" availability: "{{ is_number(states('sensor.dew_point')) }}" @@ -1238,7 +1284,7 @@ and state_attr('sensor.daily_envcan', 'forecast')[1].precipitation_probability is defined and is_number(state_attr('sensor.daily_envcan', 'forecast')[1].precipitation_probability) }} - - name: "Fog Probability" #TODO FR for pirate? + - name: "Fog Probability" unique_id: fog_probability icon: mdi:weather-fog state_class: measurement @@ -1246,20 +1292,7 @@ state: "{{ states('sensor.tempest_st_00057689_fog_probability') }}" attributes: provider: "Tempest" - availability: > - {{ is_state('binary_sensor.tempest_integration_connected', 'on') - and is_number(states('sensor.tempest_st_00057689_fog_probability')) }} - - - name: "Snow Probability" #TODO check to see if accurate - unique_id: snow_probability - icon: mdi:weather-snowy - unit_of_measurement: "%" - state: "{{ states('sensor.tempest_st_00057689_snow_probability') }}" - attributes: - provider: "Tempest" - availability: > - {{ is_state('binary_sensor.tempest_integration_connected', 'on') - and is_number(states('sensor.tempest_st_00057689_snow_probability')) }} + availability: "{{ states('sensor.tempest_st_00057689_fog_probability') | int(-1) >= 0 }}" # filter erroneous values - name: "Precipitation Intensity" unique_id: precipitation_intensity @@ -1270,7 +1303,7 @@ state: "{{ states('sensor.pirateweather_precip_intensity') | float }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_precip_intensity')) }}" + availability: "{{ states('sensor.pirateweather_precip_intensity') | int(-1) >= 0 }}" # filter erroneous values - name: "Precipitation Intensity Text" unique_id: precipitation_intensity_text @@ -1313,7 +1346,7 @@ unique_id: precipitation_accumulation_today_calculated icon: mdi:weather-pouring device_class: precipitation - state_class: measurement + state_class: total_increasing unit_of_measurement: mm state: > {% set rain = states('sensor.rain_accumulation_today') | float(-1) %} @@ -1367,7 +1400,7 @@ state: "{{ states('sensor.pirateweather_daily_max_precip_intensity_1d') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_daily_max_precip_intensity_1d')) }}" + availability: "{{ states('sensor.pirateweather_daily_max_precip_intensity_1d') | int(-1) >= 0 }}" # filter erroneous values - name: "Rain Expected Today" unique_id: rain_expected_today @@ -1377,7 +1410,7 @@ state: "{{ states('sensor.pirateweather_liquid_accumulation_0d') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_liquid_accumulation_0d')) }}" + availability: "{{ states('sensor.pirateweather_liquid_accumulation_0d') | int(-1) >= 0 }}" # filter erroneous values - name: "Rain Expected Tomorrow" unique_id: rain_expected_tomorrow @@ -1387,7 +1420,7 @@ state: "{{ states('sensor.pirateweather_liquid_accumulation_1d') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_liquid_accumulation_1d')) }}" + availability: "{{ states('sensor.pirateweather_liquid_accumulation_1d') | int(-1) >= 0 }}" # filter erroneous values - name: "Snow Expected Today" unique_id: snow_expected_today @@ -1397,7 +1430,7 @@ state: "{{ states('sensor.pirateweather_snow_accumulation_0d') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_snow_accumulation_0d')) }}" + availability: "{{ states('sensor.pirateweather_snow_accumulation_0d') | int(-1) >= 0 }}" # filter erroneous values - name: "Snow Expected Tomorrow" unique_id: snow_expected_tomorrow @@ -1407,7 +1440,7 @@ state: "{{ states('sensor.pirateweather_snow_accumulation_1d') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_snow_accumulation_1d')) }}" + availability: "{{ states('sensor.pirateweather_snow_accumulation_1d') | int(-1) >= 0 }}" # filter erroneous values - name: "Ice Expected Today" unique_id: ice_expected_today @@ -1417,7 +1450,7 @@ state: "{{ states('sensor.pirateweather_ice_accumulation_0d') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_ice_accumulation_0d')) }}" + availability: "{{ states('sensor.pirateweather_ice_accumulation_0d') | int(-1) >= 0 }}" # filter erroneous values - name: "Ice Expected Tomorrow" unique_id: ice_expected_tomorrow @@ -1427,18 +1460,7 @@ state: "{{ states('sensor.pirateweather_ice_accumulation_1d') }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_ice_accumulation_1d')) }}" - - - name: "Precipitation Accumulation Yesterday" - unique_id: precipitation_accumulation_yesterday - icon: mdi:weather-pouring - device_class: precipitation - state_class: measurement - unit_of_measurement: mm - state: "{{ states('sensor.home_sensors_precipitation_yesterday_checked') | float }}" - attributes: - provider: "Weatherflow" #TODO - availability: "{{ is_number(states('sensor.home_sensors_precipitation_yesterday_checked')) }}" + availability: "{{ states('sensor.pirateweather_ice_accumulation_1d') | int(-1) >= 0 }}" # filter erroneous values - name: "Precipitation Type" unique_id: precipitation_type @@ -1452,9 +1474,10 @@ state: > #TODO states('sensor.tempest_st_00057689_rain_intensity') | float(-1) > 0 {% set condition = states('sensor.current_condition') %} {% if condition | contains('snow') %} snow - {% elif states('sensor.tempest_st_00057689_rain_intensity') | float(-1) == 1 + {% elif states('sensor.tempest_st_00057689_rain_intensity') | float(-1) == -1 and (condition | contains('rain') or condition | contains('pouring') + or condition | contains('storm') or condition | contains('lightning') or condition | contains('hail')) %} rain {% elif states('sensor.precipitation_intensity') | float(-1) > 0 %} @@ -1473,7 +1496,29 @@ {% elif type == 'snow' %} mdi:weather-snowy {% else %} mdi:weather-rainy {% endif %} - state: "{{ 'snow' if is_state('binary_sensor.freezing', 'on') else 'rain' }}" + state: > + {% set type = namespace(value=none) %} + {% set forecast = state_attr('sensor.hourly_weather', 'forecast') %} + {% for item in forecast %} + {% if item.condition | contains('rain') + or item.condition | contains('pouring') + or item.condition | contains('storm') + or item.condition | contains('lightning') + or item.condition | contains('hail') %} + {% set type.value = 'rain' %} + {% break %} + {% elif item.condition | contains('snow') %} + {% set type.value = 'snow' %} + {% break %} + {% endif %} + {% endfor %} + {% if type.value == none %} + {% set type.value = 'snow' if is_state('binary_sensor.freezing', 'on') else 'rain' %} + {% endif %} + {{ type.value }} + availability: > + {{ states.sensor.hourly_weather.attributes is defined + and states.sensor.hourly_weather.attributes.forecast is defined }} - name: "Precipitation Start" # next 24 hours unique_id: precipitation_start @@ -1493,7 +1538,7 @@ or item.condition | contains('pouring') or item.condition | contains('storm')) %} {% set time.value = item.datetime %} - {% break %} + {% break %} {% endif %} {% endfor %} {% endif %} @@ -1515,7 +1560,7 @@ state: "{{ states('sensor.pirateweather_nearest_storm_bearing') }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_nearest_storm_bearing') | int(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_nearest_storm_bearing') | int(-1) >= 0 }}" # filter erroneous values - name: "Nearest Storm Full Direction" unique_id: nearest_storm_full_direction @@ -1525,7 +1570,7 @@ {{ full_cardinal_direction(states('sensor.nearest_storm_bearing')) }} attributes: provider: "{{ state_attr('sensor.nearest_storm_bearing', 'provider') }}" - availability: "{{ is_number(states('sensor.nearest_storm_bearing')) }}" + availability: "{{ states('sensor.nearest_storm_bearing') | int(-1) >= 0 }}" # filter erroneous values - name: "Nearest Storm Distance" unique_id: nearest_storm_distance @@ -1535,7 +1580,7 @@ state: "{{ states('sensor.pirateweather_nearest_storm_distance') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_nearest_storm_distance') | int(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_nearest_storm_distance') | int(-1) >= 0 }}" # filter erroneous values - name: "Lightning Count" unique_id: lightning_count @@ -1545,7 +1590,7 @@ state: "{{ states('sensor.home_lightning_counter') }}" attributes: provider: "Blitzortung" - availability: "{{ is_number(states('sensor.home_lightning_counter')) }}" + availability: "{{ states('sensor.home_lightning_counter') | int(-1) >= 0 }}" # filter erroneous values ############################################################################### ## Barometric Pressure @@ -1576,7 +1621,7 @@ state: "{{ states('sensor.pirateweather_pressure') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_pressure')) }}" + availability: "{{ states('sensor.pirateweather_pressure') | int(-1) >= 900 }}" # filter erroneous values - name: "Barometric Pressure Description" unique_id: barometric_pressure_description @@ -1591,7 +1636,7 @@ {% endif %} attributes: provider: "{{ state_attr('sensor.barometric_pressure', 'provider') }}" - availability: "{{ is_number(states('sensor.barometric_pressure')) }}" + availability: "{{ states('sensor.pirateweather_pressure') | int(-1) >= 900 }}" # filter erroneous values ############################################################################### ## Wind Conditions @@ -1605,7 +1650,7 @@ state: "{{ states('sensor.pirateweather_wind_speed') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_wind_speed') | int(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_wind_speed') | int(-1) >= 0 }}" # filter erroneous values - name: "Wind Speed Today" unique_id: wind_speed_today @@ -1646,7 +1691,7 @@ state: "{{ states('sensor.pirateweather_wind_gust') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_wind_gust') | int(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_wind_gust') | int(-1) >= 0 }}" # filter erroneous values - name: "Wind Gust Today" @@ -1687,8 +1732,8 @@ unit_of_measurement: km/h state: "{{ states('sensor.tempest_st_00057689_wind_lull') | int }}" attributes: - provider: "Tempest" #TODO - availability: "{{ is_number(states('sensor.tempest_st_00057689_wind_lull')) }}" + provider: "Tempest" + availability: "{{ states('sensor.tempest_st_00057689_wind_lull') | int(-1) >= 0 }}" # filter erroneous values - name: "Wind Bearing" unique_id: wind_bearing @@ -1701,7 +1746,7 @@ state: "{{ states('sensor.pirateweather_wind_bearing') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_wind_bearing') | int(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_wind_bearing') | int(-1) >= 0 }}" # filter erroneous values - name: "Wind Direction" unique_id: wind_direction @@ -1723,6 +1768,16 @@ provider: "{{ state_attr('sensor.wind_bearing', 'provider') }}" availability: "{{ is_number(states('sensor.wind_bearing')) }}" + - name: "Wind Direction Average" + unique_id: wind_direction_average + icon: mdi:weather-windy + state: > + {% from 'speech.jinja' import cardinal_direction %} + {{- cardinal_direction(states('sensor.wind_bearing_average')) -}} + attributes: + provider: "{{ state_attr('sensor.wind_bearing', 'provider') }}" + availability: "{{ is_number(states('sensor.wind_bearing_average')) }}" + - name: "Wind Beaufort Display" unique_id: wind_beaufort_display icon: mdi:windsock @@ -1760,7 +1815,7 @@ state: "{{ states('sensor.pirateweather_cloud_coverage') | int }}" attributes: provider: "Pirate Weather" # not provided by local - availability: "{{ states('sensor.pirateweather_cloud_coverage') | int(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_cloud_coverage') | int(-1) >= 0 }}" # filter erroneous values - name: "Cloud Coverage Description" unique_id: cloud_coverage_description @@ -1822,7 +1877,7 @@ state: "{{ states('sensor.pirateweather_visibility') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ is_number(states('sensor.pirateweather_visibility')) }}" + availability: "{{ states('sensor.pirateweather_visibility') | int(-1) >= 0 }}" # filter erroneous values ############################################################################### ## UV Risk - OpenUV # https://www.openuv.io/uvindex @@ -1831,10 +1886,11 @@ unique_id: uv_index icon: mdi:weather-sunny state_class: measurement + unit_of_measurement: UVI state: "{{ states('sensor.current_uv_index') | int }}" attributes: provider: "OpenUV" - availability: "{{ is_number(states('sensor.current_uv_index')) }}" + availability: "{{ states('sensor.current_uv_index') | int(-1) >= 0 }}" # filter erroneous values - name: "UV Risk" unique_id: uv_risk @@ -1850,10 +1906,11 @@ unique_id: uv_index_today icon: mdi:weather-sunny state_class: measurement + unit_of_measurement: UVI state: "{{ '%0.1f' | format(states('sensor.max_uv_index') | float(-1)) }}" attributes: provider: "OpenUV" - availability: "{{ is_number(states('sensor.max_uv_index')) }}" + availability: "{{ states('sensor.max_uv_index') | int(-1) >= 0 }}" # filter erroneous values - name: "UV Risk Today" unique_id: uv_risk_today @@ -1876,7 +1933,7 @@ state: "{{ states('sensor.waqi_windsor') }}" attributes: provider: "WAQI" - availability: "{{ is_number(states('sensor.waqi_windsor')) }}" + availability: "{{ states('sensor.waqi_windsor') | int(-1) >= 0 }}" # filter erroneous values - name: "AQI Risk Level" unique_id: aqi_risk_level @@ -1884,7 +1941,7 @@ state: > {% from 'weather.jinja' import aqi_risk %} {{ aqi_risk(states('sensor.air_quality_index')) }} - availability: "{{ is_number(states('sensor.air_quality_index')) }}" + availability: "{{ states('sensor.air_quality_index') | int(-1) >= 0 }}" # filter erroneous values - name: "Ozone Index" unique_id: ozone_index @@ -1893,7 +1950,7 @@ state: "{{ states('sensor.windsor_ozone') }}" attributes: provider: "WAQI" - availability: "{{ is_number(states('sensor.windsor_ozone')) }}" + availability: "{{ states('sensor.windsor_ozone') | int(-1) >= 0 }}" # filter erroneous values - name: "Carbon Monoxide" unique_id: carbon_monoxide @@ -1902,7 +1959,7 @@ state: "{{ states('sensor.windsor_carbon_monoxide') }}" attributes: provider: "WAQI" - availability: "{{ is_number(states('sensor.windsor_carbon_monoxide')) }}" + availability: "{{ states('sensor.windsor_carbon_monoxide') | int(-1) >= 0 }}" # filter erroneous values - name: "Nitrogen Dioxide" unique_id: nitrogen_dioxide @@ -1911,7 +1968,7 @@ state: "{{ states('sensor.windsor_nitrogen_dioxide') }}" attributes: provider: "WAQI" - availability: "{{ is_number(states('sensor.windsor_nitrogen_dioxide')) }}" + availability: "{{ states('sensor.windsor_nitrogen_dioxide') | int(-1) >= 0 }}" # filter erroneous values - name: "Sulphur Dioxide" unique_id: sulphur_dioxide @@ -1920,7 +1977,8 @@ state: "{{ states('sensor.windsor_sulphur_dioxide') }}" attributes: provider: "WAQI" - availability: "{{ is_number(states('sensor.windsor_sulphur_dioxide')) }}" + availability: "{{ states('sensor.windsor_sulphur_dioxide') | int(-1) >= 0 }}" # filter erroneous values + - name: "Particulate Matter 2.5" unique_id: particulate_matter_2_5 @@ -1929,7 +1987,7 @@ state: "{{ states('sensor.windsor_pm2_5') }}" attributes: provider: "WAQI" - availability: "{{ is_number(states('sensor.windsor_pm2_5')) }}" + availability: "{{ states('sensor.windsor_pm2_5') | int(-1) >= 0 }}" # filter erroneous values ############################################################################### ## Smoke Risk @@ -1943,7 +2001,7 @@ state: "{{ states('sensor.pirateweather_smoke') | float }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_smoke') | float(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_smoke') | float(-1) >= 0 }}" # filter erroneous values - name: "Smoke Risk" unique_id: smoke_risk @@ -1963,7 +2021,7 @@ state: "{{ states('sensor.pirateweather_smoke_max_0d') | float }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_smoke_max_0d') | float(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_smoke_max_0d') | float(-1) >= 0 }}" # filter erroneous values - name: "Smoke Risk Today" unique_id: smoke_risk_today @@ -1983,7 +2041,7 @@ state: "{{ states('sensor.pirateweather_smoke_max_1d') | float }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_smoke_max_1d') | float(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_smoke_max_1d') | float(-1) >= 0 }}" # filter erroneous values - name: "Smoke Risk Tomorrow" unique_id: smoke_risk_tomorrow @@ -2002,10 +2060,11 @@ unique_id: fire_index icon: mdi:fire state_class: measurement + unit_of_measurement: FWI state: "{{ states('sensor.pirateweather_fire_index') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_fire_index') | int(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_fire_index') | int(-1) >= 0 }}" # filter erroneous values - name: "Fire Risk" unique_id: fire_risk @@ -2018,10 +2077,11 @@ - name: "Fire Index Today" unique_id: fire_index_today icon: mdi:fire + unit_of_measurement: FWI state: "{{ states('sensor.pirateweather_fire_index_max_0d') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_fire_index_max_0d') | int(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_fire_index_max_0d') | int(-1) >= 0 }}" # filter erroneous values - name: "Fire Risk Today" unique_id: fire_risk_today @@ -2034,10 +2094,11 @@ - name: "Fire Index Tomorrow" unique_id: fire_index_tomorrow icon: mdi:fire + unit_of_measurement: FWI state: "{{ states('sensor.pirateweather_fire_index_max_1d') | int }}" attributes: provider: "Pirate Weather" - availability: "{{ states('sensor.pirateweather_fire_index_max_1d') | int(-1) >= 0 }}" # filter erroreous negative values + availability: "{{ states('sensor.pirateweather_fire_index_max_1d') | int(-1) >= 0 }}" # filter erroneous values - name: "Fire Risk Tomorrow" unique_id: fire_risk_tomorrow diff --git a/ui/bar/hass_os_memory_use_entity.yaml b/ui/bar/hass_os_memory_use_entity.yaml deleted file mode 100644 index acb4039ee..000000000 --- a/ui/bar/hass_os_memory_use_entity.yaml +++ /dev/null @@ -1,25 +0,0 @@ -############################################################################### -## HASS OS Memory Use Bar Entity -############################################################################### -type: custom:bar-card -name: "HASS OS Memory" -entity: sensor.hass_os_memory_percent -entity_row: true -icon: mdi:thermometer -positions: - icon: outside - name: outside - indicator: inside - value: outside -direction: right -height: 15px -width: 60% -decimal: 0 -min: 0 -max: 100 -severity: !include /config/ui/bar/include/memory_use_bar_color.yaml -card_mod: - class: bar_sub_card - style: | - {% from 'style.jinja' import status_sensor_style %} - {{ status_sensor_style(states('sensor.hass_os_memory_percent'), 0, 60, 75, 85, 95) }} diff --git a/ui/bar/hass_os_processor_use_entity.yaml b/ui/bar/hass_os_processor_use_entity.yaml deleted file mode 100644 index b59816a79..000000000 --- a/ui/bar/hass_os_processor_use_entity.yaml +++ /dev/null @@ -1,25 +0,0 @@ -############################################################################### -## HASS OS CPU Use Bar Entity -############################################################################### -type: custom:bar-card -name: "HASS OS CPU" -entity: sensor.hass_os_cpu_percent -entity_row: true -icon: mdi:thermometer -positions: - icon: outside - name: outside - indicator: inside - value: outside -direction: right -height: 15px -width: 60% -decimal: 0 -min: 0 -max: 100 -severity: !include /config/ui/bar/include/processor_use_bar_color.yaml -card_mod: - class: bar_sub_card - style: | - {% from 'style.jinja' import status_sensor_style %} - {{ status_sensor_style(states('sensor.hass_os_cpu_percent'), 0, 45, 55, 65, 75) }} diff --git a/ui/button/weather/precipitation.yaml b/ui/button/weather/precipitation.yaml index 5fdae0af3..400c2bc2a 100644 --- a/ui/button/weather/precipitation.yaml +++ b/ui/button/weather/precipitation.yaml @@ -8,7 +8,8 @@ state_display: > [[[ if (states['sensor.precipitation_type'].state == 'unavailable') return 'OFFLINE'; - else if (states['binary_sensor.precipitation_active'].state == 'off') + else if (states['binary_sensor.precipitation_active'].state == 'off' + && states['sensor.precipitation_start'].attributes['12hour'] != null) return states['sensor.precipitation_start'].attributes['12hour'] else return states['sensor.precipitation_type'].state.toUpperCase(); @@ -19,6 +20,8 @@ styles: [[[ if (states['sensor.precipitation_type'].state == 'unavailable') return 'var(--entity-disabled-color)'; + else if (states['binary_sensor.precipitation_change_alert'].state == 'on') + return 'var(--red-color)'; else if (states['sensor.precipitation_type'].state == 'snow') return 'var(--light-blue-color)'; else if (states['sensor.precipitation_type'].state == 'rain') diff --git a/ui/button/weather/wind_direction.yaml b/ui/button/weather/wind_direction.yaml index 7ae9639df..bce040c8d 100644 --- a/ui/button/weather/wind_direction.yaml +++ b/ui/button/weather/wind_direction.yaml @@ -15,59 +15,95 @@ custom_fields: data_period: hours_to_show: 24 refresh_interval: 300 - windspeed_bar_location: bottom - windspeed_bar_full: true hide_windspeed_bar: true + windspeed_bar_location: bottom wind_direction_entity: entity: sensor.wind_bearing - direction_unit: degrees use_statistics: true direction_compensation: 0 - wind_direction_count: 16 - current_direction: - show_arrow: true - arrow_size: 120 - center_circle_size: 30 - windrose_draw_north_offset: 0 - cardinal_direction_letters: NESW - matching_strategy: direction-first windspeed_entities: + - entity: sensor.wind_speed + name: Speed + speed_unit: auto + use_statistics: true + windspeed_bar_full: true + output_speed_unit: kph + speed_range_beaufort: false + speed_ranges: + - from_value: 0 + color: rgb(110, 110, 110) + - from_value: 0.1 + color: rgb(98, 113, 183) + - from_value: 4 + color: rgb(57, 97, 159) + - from_value: 11 + color: rgb(74, 148, 169) + - from_value: 18 + color: rgb(77, 141, 123) + - from_value: 25 + color: rgb(83, 165, 83) + - from_value: 32 + color: rgb(53, 159, 53) + - from_value: 40 + color: rgb(167, 157, 81) + - from_value: 47 + color: rgb(159, 127, 58) + - from_value: 54 + color: rgb(161, 108, 92) + - from_value: 61 + color: rgb(129, 58, 78) + - from_value: 68 + color: rgb(175, 80, 136) + - from_value: 76 + color: rgb(117, 74, 147) + - from_value: 86 + color: rgb(109, 97, 163) - entity: sensor.wind_gust - name: "Gust" - speed_unit: kph + name: Gust + speed_unit: auto use_statistics: true - output_speed_unit: kph + windspeed_bar_full: true + output_speed_unit: kph + speed_range_beaufort: false + speed_ranges: + - from_value: 0 + color: rgb(110, 110, 110) + - from_value: 0.1 + color: rgb(98, 113, 183) + - from_value: 4 + color: rgb(57, 97, 159) + - from_value: 11 + color: rgb(74, 148, 169) + - from_value: 18 + color: rgb(77, 141, 123) + - from_value: 25 + color: rgb(83, 165, 83) + - from_value: 32 + color: rgb(53, 159, 53) + - from_value: 40 + color: rgb(167, 157, 81) + - from_value: 47 + color: rgb(159, 127, 58) + - from_value: 54 + color: rgb(161, 108, 92) + - from_value: 61 + color: rgb(129, 58, 78) + - from_value: 68 + color: rgb(175, 80, 136) + - from_value: 76 + color: rgb(117, 74, 147) + - from_value: 86 + color: rgb(109, 97, 163) + windrose_draw_north_offset: 0 + current_direction: + show_arrow: true + arrow_size: 50 + center_circle_size: 30 + compass_direction: + auto_rotate: false + cardinal_direction_letters: "N,,," + matching_strategy: speed-first center_calm_percentage: false - speed_range_beaufort: false - speed_ranges: - - from_value: 0 - color: rgb(110, 110, 110) - - from_value: 0.1 - color: rgb(98, 113, 183) - - from_value: 4 - color: rgb(57, 97, 159) - - from_value: 11 - color: rgb(74, 148, 169) - - from_value: 18 - color: rgb(77, 141, 123) - - from_value: 25 - color: rgb(83, 165, 83) - - from_value: 32 - color: rgb(53, 159, 53) - - from_value: 40 - color: rgb(167, 157, 81) - - from_value: 47 - color: rgb(159, 127, 58) - - from_value: 54 - color: rgb(161, 108, 92) - - from_value: 61 - color: rgb(129, 58, 78) - - from_value: 68 - color: rgb(175, 80, 136) - - from_value: 76 - color: rgb(117, 74, 147) - - from_value: 86 - color: rgb(109, 97, 163) colors: rose_lines: rgba(220, 220, 220, 1) rose_direction_letters: rgba(220, 220, 220, 1) diff --git a/ui/card/camera/security/charlie_crate.yaml b/ui/card/camera/security/charlie_crate.yaml index d14c0001f..19cf3f7e5 100644 --- a/ui/card/camera/security/charlie_crate.yaml +++ b/ui/card/camera/security/charlie_crate.yaml @@ -3,13 +3,13 @@ ############################################################################### type: picture-glance name: "CHARLIE CRATE" -camera_image: camera.wyze_charlie_crate #TEST camera.charlie_crate +camera_image: camera.wyze_charlie_crate #TEMP until frigate camera.charlie_crate camera_view: auto aspect_ratio: 16x9 show_name: true show_state: false entities: - - entity: camera.wyze_charlie_crate # camera.charlie_crate + - entity: camera.wyze_charlie_crate #TEMP until frigate camera.charlie_crate - entity: switch.charlie_crate_camera_power tap_action: action: navigate diff --git a/ui/card/camera/security/living_room.yaml b/ui/card/camera/security/living_room.yaml index 10e52751f..5e1fe6bd3 100644 --- a/ui/card/camera/security/living_room.yaml +++ b/ui/card/camera/security/living_room.yaml @@ -3,13 +3,13 @@ ############################################################################### type: picture-glance name: "Living Room" -camera_image: camera.wyze_living_room # camera.living_room +camera_image: camera.wyze_living_room #TEMP until frigate camera.living_room camera_view: auto aspect_ratio: 16x9 show_name: true show_state: false entities: - - entity: camera.wyze_living_room # camera.living_room + - entity: camera.wyze_living_room #TEMP until frigate camera.living_room - entity: switch.living_room_camera_power tap_action: action: navigate diff --git a/ui/card/climate/climate_settings.yaml b/ui/card/climate/climate_settings.yaml index 857f077f0..5365edaa6 100644 --- a/ui/card/climate/climate_settings.yaml +++ b/ui/card/climate/climate_settings.yaml @@ -16,6 +16,12 @@ entities: data: entity: input_select.hvac_mode + - entity: sensor.indoor_dew_point + name: "Indoor Dew Point" + + - entity: sensor.indoor_comfort_level + name: "Indoor Comfort Level" + - entity: binary_sensor.humidity_level_in_range name: "Humidity Comfort Zone" icon: mdi:thermostat-box diff --git a/ui/card/hass/hass_monitor.yaml b/ui/card/hass/hass_monitor.yaml index 4d9c167d9..d9bfd00c9 100644 --- a/ui/card/hass/hass_monitor.yaml +++ b/ui/card/hass/hass_monitor.yaml @@ -7,10 +7,8 @@ show_header_toggle: false entities: - !include /config/ui/bar/hass_processor_use_entity.yaml - !include /config/ui/bar/supervisor_processor_use_entity.yaml - - !include /config/ui/bar/hass_os_processor_use_entity.yaml - !include /config/ui/bar/hass_memory_use_entity.yaml - !include /config/ui/bar/supervisor_memory_use_entity.yaml - - !include /config/ui/bar/hass_os_memory_use_entity.yaml - !include /config/ui/bar/disk_use_entity.yaml - entity: binary_sensor.remote_ui diff --git a/ui/card/hass/kiosk_monitor.yaml b/ui/card/hass/kiosk_monitor.yaml index 1ba051295..b551ea859 100644 --- a/ui/card/hass/kiosk_monitor.yaml +++ b/ui/card/hass/kiosk_monitor.yaml @@ -15,7 +15,7 @@ entities: - entity: binary_sensor.fully_kiosk_connected - entity: sensor.kiosk_browser_user - - entity: media_player.kiosk_tablet + - entity: media_player.kiosk_speaker - type: custom:fold-entity-row head: binary_sensor.kiosk_motion diff --git a/ui/card/media/alarm_clock/alarm_clock_media_players.yaml b/ui/card/media/alarm_clock/alarm_clock_media_players.yaml index 71c0a2b2e..014095ad6 100644 --- a/ui/card/media/alarm_clock/alarm_clock_media_players.yaml +++ b/ui/card/media/alarm_clock/alarm_clock_media_players.yaml @@ -16,7 +16,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.broadcast_speakers_2 + entity: media_player.broadcast_speakers_mass - type: conditional conditions: @@ -25,7 +25,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.inside_speakers_2 + entity: media_player.inside_speakers_mass - type: conditional conditions: @@ -34,7 +34,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.living_area_speakers_2 + entity: media_player.living_area_speakers_mass - type: conditional conditions: @@ -43,7 +43,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.music_speakers_2 + entity: media_player.music_speakers_mass - type: conditional conditions: @@ -52,7 +52,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.night_speakers_2 + entity: media_player.night_speakers_mass - type: conditional conditions: @@ -61,7 +61,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.quiet_speakers_2 + entity: media_player.quiet_speakers_mass - type: conditional conditions: @@ -70,7 +70,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.bathroom_speaker_2 + entity: media_player.bathroom_speaker_mass - type: conditional conditions: @@ -79,7 +79,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.bedroom_hub_2 + entity: media_player.bedroom_hub_mass - type: conditional conditions: @@ -88,7 +88,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.dining_room_hub_2 + entity: media_player.dining_room_hub_mass - type: conditional conditions: @@ -97,7 +97,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.office_hub_2 + entity: media_player.office_hub_mass - type: conditional conditions: @@ -106,7 +106,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.office_speaker_2 + entity: media_player.office_speaker_mass - type: conditional conditions: @@ -115,7 +115,7 @@ card: state: alarm_clock card: type: media-control - entity: media_player.laundry_room_speaker_2 + entity: media_player.laundry_room_speaker_mass - type: conditional conditions: @@ -124,4 +124,4 @@ card: state: alarm_clock card: type: media-control - entity: media_player.living_room_speaker_2 + entity: media_player.living_room_speaker_mass diff --git a/ui/card/media/media_player/media_players/all_speakers_mini.yaml b/ui/card/media/media_player/media_players/all_speakers_mini.yaml index eccd1728f..875fe9af8 100644 --- a/ui/card/media/media_player/media_players/all_speakers_mini.yaml +++ b/ui/card/media/media_player/media_players/all_speakers_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.all_speakers_2 + entity: &mass_entity media_player.all_speakers_mass name: &name "All Speakers" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/all_speakers_mini_full.yaml b/ui/card/media/media_player/media_players/all_speakers_mini_full.yaml index b1584a3e9..831cba3fe 100644 --- a/ui/card/media/media_player/media_players/all_speakers_mini_full.yaml +++ b/ui/card/media/media_player/media_players/all_speakers_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.all_speakers_2 + entity: &mass_entity media_player.all_speakers_mass name: &name "All Speakers" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/bathroom_speaker_mini.yaml b/ui/card/media/media_player/media_players/bathroom_speaker_mini.yaml index efbe1ffb4..cb2305374 100644 --- a/ui/card/media/media_player/media_players/bathroom_speaker_mini.yaml +++ b/ui/card/media/media_player/media_players/bathroom_speaker_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.bathroom_speaker_2 + entity: &mass_entity media_player.bathroom_speaker_mass name: &name "Bathroom Speaker" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/bathroom_speaker_mini_full.yaml b/ui/card/media/media_player/media_players/bathroom_speaker_mini_full.yaml index 0a5c96e34..cfb1ffb6a 100644 --- a/ui/card/media/media_player/media_players/bathroom_speaker_mini_full.yaml +++ b/ui/card/media/media_player/media_players/bathroom_speaker_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.bathroom_speaker_2 + entity: &mass_entity media_player.bathroom_speaker_mass name: &name "Bathroom Speaker" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/bedroom_hub_mini.yaml b/ui/card/media/media_player/media_players/bedroom_hub_mini.yaml index 8be3e9c9f..80a06fc7c 100644 --- a/ui/card/media/media_player/media_players/bedroom_hub_mini.yaml +++ b/ui/card/media/media_player/media_players/bedroom_hub_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.bedroom_hub_2 + entity: &mass_entity media_player.bedroom_hub_mass name: &name "Bedroom Hub" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/bedroom_hub_mini_full.yaml b/ui/card/media/media_player/media_players/bedroom_hub_mini_full.yaml index 84c609037..703b3197f 100644 --- a/ui/card/media/media_player/media_players/bedroom_hub_mini_full.yaml +++ b/ui/card/media/media_player/media_players/bedroom_hub_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.bedroom_hub_2 + entity: &mass_entity media_player.bedroom_hub_mass name: &name "Bedroom Hub" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/broadcast_speakers_mini.yaml b/ui/card/media/media_player/media_players/broadcast_speakers_mini.yaml index 83ae15d22..049573f1f 100644 --- a/ui/card/media/media_player/media_players/broadcast_speakers_mini.yaml +++ b/ui/card/media/media_player/media_players/broadcast_speakers_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.broadcast_speakers_2 + entity: &mass_entity media_player.broadcast_speakers_mass name: &name "Broadcast Speakers" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/broadcast_speakers_mini_full.yaml b/ui/card/media/media_player/media_players/broadcast_speakers_mini_full.yaml index 8d94a31e3..4f085c8a4 100644 --- a/ui/card/media/media_player/media_players/broadcast_speakers_mini_full.yaml +++ b/ui/card/media/media_player/media_players/broadcast_speakers_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.broadcast_speakers_2 + entity: &mass_entity media_player.broadcast_speakers_mass name: &name "Broadcast Speakers" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/deck_chromecast_mini.yaml b/ui/card/media/media_player/media_players/deck_chromecast_mini.yaml index 6205fbd51..d1c9c13d3 100644 --- a/ui/card/media/media_player/media_players/deck_chromecast_mini.yaml +++ b/ui/card/media/media_player/media_players/deck_chromecast_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.deck_chromecast_2 + entity: &mass_entity media_player.deck_chromecast_mass name: &name "Deck Chromecast" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/deck_chromecast_mini_full.yaml b/ui/card/media/media_player/media_players/deck_chromecast_mini_full.yaml index e67b6373a..18cc8f1e4 100644 --- a/ui/card/media/media_player/media_players/deck_chromecast_mini_full.yaml +++ b/ui/card/media/media_player/media_players/deck_chromecast_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.deck_chromecast_2 + entity: &mass_entity media_player.deck_chromecast_mass name: &name "Deck Chromecast" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/dining_room_hub_mini.yaml b/ui/card/media/media_player/media_players/dining_room_hub_mini.yaml index adc9f105d..7b0d2d53d 100644 --- a/ui/card/media/media_player/media_players/dining_room_hub_mini.yaml +++ b/ui/card/media/media_player/media_players/dining_room_hub_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.dining_room_hub_2 + entity: &mass_entity media_player.dining_room_hub_mass name: &name "Dining Room Hub" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/dining_room_hub_mini_full.yaml b/ui/card/media/media_player/media_players/dining_room_hub_mini_full.yaml index be3357282..22ac3a2cc 100644 --- a/ui/card/media/media_player/media_players/dining_room_hub_mini_full.yaml +++ b/ui/card/media/media_player/media_players/dining_room_hub_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.dining_room_hub_2 + entity: &mass_entity media_player.dining_room_hub_mass name: &name "Dining Room Hub" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/hass_player_mini.yaml b/ui/card/media/media_player/media_players/hass_player_mini.yaml index 56e1641f2..045ee6cc4 100644 --- a/ui/card/media/media_player/media_players/hass_player_mini.yaml +++ b/ui/card/media/media_player/media_players/hass_player_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.hass_media_player_2 + entity: &mass_entity media_player.hass_media_player_mass name: &name "HASS Player" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/hass_player_mini_full.yaml b/ui/card/media/media_player/media_players/hass_player_mini_full.yaml index 7f35ff23b..52c1a410b 100644 --- a/ui/card/media/media_player/media_players/hass_player_mini_full.yaml +++ b/ui/card/media/media_player/media_players/hass_player_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.hass_media_player_2 + entity: &mass_entity media_player.hass_media_player_mass name: &name "HASS Player" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/inside_speakers_mini.yaml b/ui/card/media/media_player/media_players/inside_speakers_mini.yaml index ff41ea3f8..ec08f8f56 100644 --- a/ui/card/media/media_player/media_players/inside_speakers_mini.yaml +++ b/ui/card/media/media_player/media_players/inside_speakers_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.inside_speakers_2 + entity: &mass_entity media_player.inside_speakers_mass name: &name "Inside Speakers" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/inside_speakers_mini_full.yaml b/ui/card/media/media_player/media_players/inside_speakers_mini_full.yaml index d2dea505b..74a5c5c43 100644 --- a/ui/card/media/media_player/media_players/inside_speakers_mini_full.yaml +++ b/ui/card/media/media_player/media_players/inside_speakers_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.inside_speakers_2 + entity: &mass_entity media_player.inside_speakers_mass name: &name "Inside Speakers" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/kiosk_tablet_mini.yaml b/ui/card/media/media_player/media_players/kiosk_speaker_mini.yaml similarity index 89% rename from ui/card/media/media_player/media_players/kiosk_tablet_mini.yaml rename to ui/card/media/media_player/media_players/kiosk_speaker_mini.yaml index fa7aecd8d..74102ceeb 100644 --- a/ui/card/media/media_player/media_players/kiosk_tablet_mini.yaml +++ b/ui/card/media/media_player/media_players/kiosk_speaker_mini.yaml @@ -1,17 +1,17 @@ ####################################################################### -## Kiosk Tablet Player +## Kiosk Speaker Player ####################################################################### type: custom:state-switch entity: template template: > {% from 'media.jinja' import player_status %} - {{ player_status('media_player.kiosk_tablet') }} + {{ player_status('media_player.kiosk_speaker') }} default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.kiosk_tablet_2 - name: &name "Kiosk Tablet" + entity: &mass_entity media_player.kiosk_speaker_mass + name: &name "Kiosk Speaker" icon: &icon mdi:tablet group: &group true hide: !include &hide_off /config/ui/card/media/media_player/media_players/include/mini_player_off_no_power_hide_config.yaml @@ -44,7 +44,7 @@ states: media_off: type: *type - entity: &hass_entity media_player.kiosk_tablet + entity: &hass_entity media_player.kiosk_speaker name: *name icon: *icon group: *group diff --git a/ui/card/media/media_player/media_players/kiosk_tablet_mini_full.yaml b/ui/card/media/media_player/media_players/kiosk_speaker_mini_full.yaml similarity index 89% rename from ui/card/media/media_player/media_players/kiosk_tablet_mini_full.yaml rename to ui/card/media/media_player/media_players/kiosk_speaker_mini_full.yaml index 7c7abb28a..c38f245e5 100644 --- a/ui/card/media/media_player/media_players/kiosk_tablet_mini_full.yaml +++ b/ui/card/media/media_player/media_players/kiosk_speaker_mini_full.yaml @@ -1,17 +1,17 @@ ####################################################################### -## Kiosk Tablet Player +## Kiosk Speaker Player ####################################################################### type: custom:state-switch entity: template template: > {% from 'media.jinja' import player_status %} - {{ player_status('media_player.kiosk_tablet') }} + {{ player_status('media_player.kiosk_speaker') }} default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.kiosk_tablet_2 - name: &name "Kiosk Tablet" + entity: &mass_entity media_player.kiosk_speaker_mass + name: &name "Kiosk Speaker" icon: &icon mdi:tablet group: &group false hide: !include &hide_off /config/ui/card/media/media_player/media_players/include/mini_player_off_no_power_hide_config.yaml @@ -44,7 +44,7 @@ states: media_off: type: *type - entity: &hass_entity media_player.kiosk_tablet + entity: &hass_entity media_player.kiosk_speaker name: *name icon: *icon group: *group diff --git a/ui/card/media/media_player/media_players/laundry_room_speaker_mini.yaml b/ui/card/media/media_player/media_players/laundry_room_speaker_mini.yaml index 5c62ec6a8..b46242656 100644 --- a/ui/card/media/media_player/media_players/laundry_room_speaker_mini.yaml +++ b/ui/card/media/media_player/media_players/laundry_room_speaker_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.laundry_room_speaker_2 + entity: &mass_entity media_player.laundry_room_speaker_mass name: &name "Laundry Room Speaker" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/laundry_room_speaker_mini_full.yaml b/ui/card/media/media_player/media_players/laundry_room_speaker_mini_full.yaml index b3ff128c4..f6f309076 100644 --- a/ui/card/media/media_player/media_players/laundry_room_speaker_mini_full.yaml +++ b/ui/card/media/media_player/media_players/laundry_room_speaker_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.laundry_room_speaker_2 + entity: &mass_entity media_player.laundry_room_speaker_mass name: &name "Laundry Room Speaker" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/living_area_speakers_mini.yaml b/ui/card/media/media_player/media_players/living_area_speakers_mini.yaml index 9828e1111..97f9d8eef 100644 --- a/ui/card/media/media_player/media_players/living_area_speakers_mini.yaml +++ b/ui/card/media/media_player/media_players/living_area_speakers_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.living_area_speakers_2 + entity: &mass_entity media_player.living_area_speakers_mass name: &name "Living Area Speakers" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/living_area_speakers_mini_full.yaml b/ui/card/media/media_player/media_players/living_area_speakers_mini_full.yaml index 6c8064561..d98ec49bb 100644 --- a/ui/card/media/media_player/media_players/living_area_speakers_mini_full.yaml +++ b/ui/card/media/media_player/media_players/living_area_speakers_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.living_area_speakers_2 + entity: &mass_entity media_player.living_area_speakers_mass name: &name "Inside Speakers" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/living_room_chromecast_mini.yaml b/ui/card/media/media_player/media_players/living_room_chromecast_mini.yaml index 78e39719a..678d29ce5 100644 --- a/ui/card/media/media_player/media_players/living_room_chromecast_mini.yaml +++ b/ui/card/media/media_player/media_players/living_room_chromecast_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.living_room_chromecast_2 + entity: &mass_entity media_player.living_room_chromecast_mass name: &name "Living Room Chromecast" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/living_room_chromecast_mini_full.yaml b/ui/card/media/media_player/media_players/living_room_chromecast_mini_full.yaml index 9a8a77d09..f13d2dec7 100644 --- a/ui/card/media/media_player/media_players/living_room_chromecast_mini_full.yaml +++ b/ui/card/media/media_player/media_players/living_room_chromecast_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.living_room_chromecast_2 + entity: &mass_entity media_player.living_room_chromecast_mass name: &name "Living Room Chromecast" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/living_room_speaker_mini.yaml b/ui/card/media/media_player/media_players/living_room_speaker_mini.yaml index a078265ca..22b1d9dfe 100644 --- a/ui/card/media/media_player/media_players/living_room_speaker_mini.yaml +++ b/ui/card/media/media_player/media_players/living_room_speaker_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.living_room_speaker_2 + entity: &mass_entity media_player.living_room_speaker_mass name: &name "Living Room Speaker" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/living_room_speaker_mini_full.yaml b/ui/card/media/media_player/media_players/living_room_speaker_mini_full.yaml index 5552e1410..2b5c376aa 100644 --- a/ui/card/media/media_player/media_players/living_room_speaker_mini_full.yaml +++ b/ui/card/media/media_player/media_players/living_room_speaker_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.living_room_speaker_2 + entity: &mass_entity media_player.living_room_speaker_mass name: &name "Living Room Speaker" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/music_speakers_mini.yaml b/ui/card/media/media_player/media_players/music_speakers_mini.yaml index 9b5ce3a11..472f2bbfe 100644 --- a/ui/card/media/media_player/media_players/music_speakers_mini.yaml +++ b/ui/card/media/media_player/media_players/music_speakers_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: media_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.music_speakers_2 + entity: &mass_entity media_player.music_speakers_mass name: &name "Music Speakers" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/music_speakers_mini_full.yaml b/ui/card/media/media_player/media_players/music_speakers_mini_full.yaml index e2f4930d0..e8f0d8f7d 100644 --- a/ui/card/media/media_player/media_players/music_speakers_mini_full.yaml +++ b/ui/card/media/media_player/media_players/music_speakers_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.music_speakers_2 + entity: &mass_entity media_player.music_speakers_mass name: &name "Music Speakers" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/night_speakers_mini.yaml b/ui/card/media/media_player/media_players/night_speakers_mini.yaml index 914d44a88..d934aeb3e 100644 --- a/ui/card/media/media_player/media_players/night_speakers_mini.yaml +++ b/ui/card/media/media_player/media_players/night_speakers_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.night_speakers_2 + entity: &mass_entity media_player.night_speakers_mass name: &name "Night Speakers" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/night_speakers_mini_full.yaml b/ui/card/media/media_player/media_players/night_speakers_mini_full.yaml index ef3d56a59..fe6225436 100644 --- a/ui/card/media/media_player/media_players/night_speakers_mini_full.yaml +++ b/ui/card/media/media_player/media_players/night_speakers_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.night_speakers_2 + entity: &mass_entity media_player.night_speakers_mass name: &name "Night Speakers" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/office_chromecast_mini.yaml b/ui/card/media/media_player/media_players/office_chromecast_mini.yaml index 0a6e5aaf7..236bb52df 100644 --- a/ui/card/media/media_player/media_players/office_chromecast_mini.yaml +++ b/ui/card/media/media_player/media_players/office_chromecast_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.office_chromecast_2 + entity: &mass_entity media_player.office_chromecast_mass name: &name "Office Chromecast" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/office_chromecast_mini_full.yaml b/ui/card/media/media_player/media_players/office_chromecast_mini_full.yaml index ace952738..e1cb7262d 100644 --- a/ui/card/media/media_player/media_players/office_chromecast_mini_full.yaml +++ b/ui/card/media/media_player/media_players/office_chromecast_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.office_chromecast_2 + entity: &mass_entity media_player.office_chromecast_mass name: &name "Office Chromecast" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/office_hub_mini.yaml b/ui/card/media/media_player/media_players/office_hub_mini.yaml index 24a0d6dbc..6288ab33a 100644 --- a/ui/card/media/media_player/media_players/office_hub_mini.yaml +++ b/ui/card/media/media_player/media_players/office_hub_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.office_hub_2 + entity: &mass_entity media_player.office_hub_mass name: &name "Office Hub" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/office_hub_mini_full.yaml b/ui/card/media/media_player/media_players/office_hub_mini_full.yaml index 4138191e2..c7f17347c 100644 --- a/ui/card/media/media_player/media_players/office_hub_mini_full.yaml +++ b/ui/card/media/media_player/media_players/office_hub_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.office_hub_2 + entity: &mass_entity media_player.office_hub_mass name: &name "Office Hub" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/office_speaker_mini.yaml b/ui/card/media/media_player/media_players/office_speaker_mini.yaml index cb98cf476..108c9d336 100644 --- a/ui/card/media/media_player/media_players/office_speaker_mini.yaml +++ b/ui/card/media/media_player/media_players/office_speaker_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.office_speaker_2 + entity: &mass_entity media_player.office_speaker_mass name: &name "Office Speaker" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/office_speaker_mini_full.yaml b/ui/card/media/media_player/media_players/office_speaker_mini_full.yaml index 8c198a8d2..18e5a6ac6 100644 --- a/ui/card/media/media_player/media_players/office_speaker_mini_full.yaml +++ b/ui/card/media/media_player/media_players/office_speaker_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.office_speaker_2 + entity: &mass_entity media_player.office_speaker_mass name: &name "Office Speaker" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players/quiet_speakers_mini.yaml b/ui/card/media/media_player/media_players/quiet_speakers_mini.yaml index 53e57c21d..6d56caf3b 100644 --- a/ui/card/media/media_player/media_players/quiet_speakers_mini.yaml +++ b/ui/card/media/media_player/media_players/quiet_speakers_mini.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.quiet_speakers_2 + entity: &mass_entity media_player.quiet_speakers_mass name: &name "Quiet Speakers" icon: &icon mdi:tablet group: &group true diff --git a/ui/card/media/media_player/media_players/quiet_speakers_mini_full.yaml b/ui/card/media/media_player/media_players/quiet_speakers_mini_full.yaml index 41fc37380..beef0c97a 100644 --- a/ui/card/media/media_player/media_players/quiet_speakers_mini_full.yaml +++ b/ui/card/media/media_player/media_players/quiet_speakers_mini_full.yaml @@ -10,7 +10,7 @@ default: media_off states: mass_off: type: &type custom:mini-media-player - entity: &mass_entity media_player.quiet_speakers_2 + entity: &mass_entity media_player.quiet_speakers_mass name: &name "Quiet Speakers" icon: &icon mdi:tablet group: &group false diff --git a/ui/card/media/media_player/media_players_home.yaml b/ui/card/media/media_player/media_players_home.yaml index d73ca48f8..38d3b50e1 100644 --- a/ui/card/media/media_player/media_players_home.yaml +++ b/ui/card/media/media_player/media_players_home.yaml @@ -373,7 +373,7 @@ cards: - condition: or conditions: - condition: state - entity: sensor.kiosk_tablet + entity: sensor.kiosk_speaker state: "on" - condition: and @@ -383,6 +383,6 @@ cards: state: "on" - condition: state - entity: sensor.kiosk_tablet + entity: sensor.kiosk_speaker state: tts - card: !include /config/ui/card/media/media_player/media_players/kiosk_tablet_mini_full.yaml + card: !include /config/ui/card/media/media_player/media_players/kiosk_speaker_mini_full.yaml diff --git a/ui/card/media/media_player/media_players_kiosk_home.yaml b/ui/card/media/media_player/media_players_kiosk_home.yaml index 3da73e0b3..0850dbd2a 100644 --- a/ui/card/media/media_player/media_players_kiosk_home.yaml +++ b/ui/card/media/media_player/media_players_kiosk_home.yaml @@ -179,6 +179,6 @@ cards: - type: conditional conditions: - condition: state - entity: sensor.kiosk_tablet + entity: sensor.kiosk_speaker state: "on" - card: !include /config/ui/card/media/media_player/media_players/kiosk_tablet_mini.yaml + card: !include /config/ui/card/media/media_player/media_players/kiosk_speaker_mini.yaml diff --git a/ui/card/media/media_player/media_players_media.yaml b/ui/card/media/media_player/media_players_media.yaml index f82e04b96..00cd350c4 100644 --- a/ui/card/media/media_player/media_players_media.yaml +++ b/ui/card/media/media_player/media_players_media.yaml @@ -112,9 +112,9 @@ cards: - type: conditional conditions: - condition: state - entity: sensor.kiosk_tablet + entity: sensor.kiosk_speaker state: "on" - card: !include /config/ui/card/media/media_player/media_players/kiosk_tablet_mini_full.yaml + card: !include /config/ui/card/media/media_player/media_players/kiosk_speaker_mini_full.yaml - type: conditional conditions: diff --git a/ui/card/media/media_player/media_players_speaker.yaml b/ui/card/media/media_player/media_players_speaker.yaml index 38caecb40..10d1317a6 100644 --- a/ui/card/media/media_player/media_players_speaker.yaml +++ b/ui/card/media/media_player/media_players_speaker.yaml @@ -12,4 +12,4 @@ entities: - !include /config/ui/card/media/media_player/media_players/office_hub_mini.yaml - !include /config/ui/card/media/media_player/media_players/office_speaker_mini.yaml - !include /config/ui/card/media/media_player/media_players/hass_player_mini.yaml - - !include /config/ui/card/media/media_player/media_players/kiosk_tablet_mini.yaml + - !include /config/ui/card/media/media_player/media_players/kiosk_speaker_mini.yaml diff --git a/ui/card/weather/include/outdoor_temperature_entities.yaml b/ui/card/weather/include/outdoor_temperature_entities.yaml index 50221a44c..923c8f5f3 100644 --- a/ui/card/weather/include/outdoor_temperature_entities.yaml +++ b/ui/card/weather/include/outdoor_temperature_entities.yaml @@ -30,8 +30,18 @@ {% from 'weather.jinja' import temp_color %} {{ temp_color(states('sensor.outdoor_temperature')) }} -- entity: sensor.outdoor_apparent_temperature - name: "Feels Like" +- type: custom:template-entity-row + entity: sensor.outdoor_apparent_temperature + name: > + {% set temp = states('sensor.outdoor_temperature') | int(none) %} + {% set app = states('sensor.outdoor_apparent_temperature') | int(none) %} + {% if temp != none and app != none %} + {% if app >= temp %} Humidex + {% else %} Wind Chill + {% endif %} + {% else %} Apparent Temperature + {% endif %} + state: "{{ states('sensor.outdoor_apparent_temperature', with_unit=true) }}" card_mod: style: > {% from 'weather.jinja' import temp_color %} @@ -103,32 +113,6 @@ {% from 'weather.jinja' import temp_color %} {{ temp_color(states('sensor.outdoor_temperature_daily_average')) }} -- type: custom:template-entity-row - entity: sensor.tempest_st_00057689_temperature - name: "High Temp (All Time)" - icon: mdi:sun-thermometer - state: "{{ state_attr('sensor.tempest_st_00057689_temperature', 'max_all') }} °C" - secondary: > - {{ state_attr('sensor.tempest_st_00057689_temperature', 'max_all_time') | as_timestamp('unknown') - | timestamp_custom('%Y-%m-%d at %-I:%M %p', true, 'unknown') }} - card_mod: - style: > - {% from 'weather.jinja' import temp_color %} - {{ temp_color(state_attr('sensor.tempest_st_00057689_temperature', 'max_all')) }} - -- type: custom:template-entity-row - entity: sensor.tempest_st_00057689_temperature - name: "Low Temp (All Time)" - icon: mdi:snowflake-thermometer - state: "{{ state_attr('sensor.tempest_st_00057689_temperature', 'min_all') }} °C" - secondary: > - {{ state_attr('sensor.tempest_st_00057689_temperature', 'min_all_time') | as_timestamp('unknown') - | timestamp_custom('%Y-%m-%d at %-I:%M %p', true, 'unknown') }} - card_mod: - style: > - {% from 'weather.jinja' import temp_color %} - {{ temp_color(state_attr('sensor.tempest_st_00057689_temperature', 'min_all')) }} - - type: button entity: sensor.outdoor_temperature name: "Temperature Map" diff --git a/ui/card/weather/include/precipitation_entities.yaml b/ui/card/weather/include/precipitation_entities.yaml index 34178da92..f83130e67 100644 --- a/ui/card/weather/include/precipitation_entities.yaml +++ b/ui/card/weather/include/precipitation_entities.yaml @@ -125,6 +125,14 @@ {% from 'weather.jinja' import precipitation_color %} {{ precipitation_color(states('sensor.precipitation_type')) }} +- type: conditional + conditions: + - condition: state + entity: binary_sensor.precipitation_change_alert + state: "on" + row: + entity: binary_sensor.precipitation_change_alert + - type: conditional conditions: - condition: numeric_state @@ -278,15 +286,6 @@ ; } -- type: conditional - conditions: - - condition: numeric_state - entity: sensor.precipitation_accumulation_yesterday - above: 0 - row: - entity: sensor.precipitation_accumulation_yesterday - name: "Precipitation Yesterday" - - type: conditional conditions: - condition: or diff --git a/ui/card/weather/include/wind_entities.yaml b/ui/card/weather/include/wind_entities.yaml index 770802acf..1bc1ffb8c 100644 --- a/ui/card/weather/include/wind_entities.yaml +++ b/ui/card/weather/include/wind_entities.yaml @@ -31,6 +31,9 @@ - entity: sensor.wind_full_direction name: "Direction" +- entity: sensor.wind_direction_average + name: "Average Wind Direction" + - type: conditional conditions: - condition: state diff --git a/ui/card/weather/tempest.yaml b/ui/card/weather/tempest.yaml index ac2156508..25e16cfe1 100644 --- a/ui/card/weather/tempest.yaml +++ b/ui/card/weather/tempest.yaml @@ -45,7 +45,6 @@ entities: head: entity: sensor.tempest_st_00057689_precipitation_type entities: - - entity: sensor.tempest_st_00057689_snow_probability - entity: sensor.tempest_st_00057689_fog_probability - entity: sensor.tempest_st_00057689_cloud_base_altitude - entity: sensor.tempest_st_00057689_rain_yesterday diff --git a/ui/card/weather/wind_rose.yaml b/ui/card/weather/wind_rose.yaml index d6bd5c037..5b0eff720 100644 --- a/ui/card/weather/wind_rose.yaml +++ b/ui/card/weather/wind_rose.yaml @@ -6,62 +6,94 @@ data_period: hours_to_show: 168 refresh_interval: 300 windspeed_bar_location: bottom -windspeed_bar_full: true -hide_windspeed_bar: false wind_direction_entity: entity: sensor.wind_bearing - direction_unit: degrees use_statistics: true direction_compensation: 0 -wind_direction_count: 16 -current_direction: - show_arrow: true - arrow_size: 80 - center_circle_size: 30 -windrose_draw_north_offset: 0 -cardinal_direction_letters: NESW -matching_strategy: direction-first windspeed_entities: - - entity: sensor.wind_gust - name: "Gust" - speed_unit: kph - use_statistics: true - entity: sensor.wind_speed - name: "Speed" - speed_unit: kph + name: Speed + speed_unit: auto use_statistics: true -output_speed_unit: kph + windspeed_bar_full: true + output_speed_unit: kph + speed_range_beaufort: false + speed_ranges: + - from_value: 0 + color: rgb(110, 110, 110) + - from_value: 0.1 + color: rgb(98, 113, 183) + - from_value: 4 + color: rgb(57, 97, 159) + - from_value: 11 + color: rgb(74, 148, 169) + - from_value: 18 + color: rgb(77, 141, 123) + - from_value: 25 + color: rgb(83, 165, 83) + - from_value: 32 + color: rgb(53, 159, 53) + - from_value: 40 + color: rgb(167, 157, 81) + - from_value: 47 + color: rgb(159, 127, 58) + - from_value: 54 + color: rgb(161, 108, 92) + - from_value: 61 + color: rgb(129, 58, 78) + - from_value: 68 + color: rgb(175, 80, 136) + - from_value: 76 + color: rgb(117, 74, 147) + - from_value: 86 + color: rgb(109, 97, 163) + - entity: sensor.wind_gust + name: Gust + speed_unit: auto + use_statistics: true + windspeed_bar_full: true + output_speed_unit: kph + speed_range_beaufort: false + speed_ranges: + - from_value: 0 + color: rgb(110, 110, 110) + - from_value: 0.1 + color: rgb(98, 113, 183) + - from_value: 4 + color: rgb(57, 97, 159) + - from_value: 11 + color: rgb(74, 148, 169) + - from_value: 18 + color: rgb(77, 141, 123) + - from_value: 25 + color: rgb(83, 165, 83) + - from_value: 32 + color: rgb(53, 159, 53) + - from_value: 40 + color: rgb(167, 157, 81) + - from_value: 47 + color: rgb(159, 127, 58) + - from_value: 54 + color: rgb(161, 108, 92) + - from_value: 61 + color: rgb(129, 58, 78) + - from_value: 68 + color: rgb(175, 80, 136) + - from_value: 76 + color: rgb(117, 74, 147) + - from_value: 86 + color: rgb(109, 97, 163) +windrose_draw_north_offset: 0 +current_direction: + show_arrow: true + arrow_size: 50 + center_circle_size: 30 +compass_direction: + auto_rotate: false + entity: sensor.wind_bearing +cardinal_direction_letters: "N,E,S,W" +matching_strategy: speed-first center_calm_percentage: true -speed_range_beaufort: false -speed_ranges: - - from_value: 0 - color: rgb(110, 110, 110) - - from_value: 0.1 - color: rgb(98, 113, 183) - - from_value: 4 - color: rgb(57, 97, 159) - - from_value: 11 - color: rgb(74, 148, 169) - - from_value: 18 - color: rgb(77, 141, 123) - - from_value: 25 - color: rgb(83, 165, 83) - - from_value: 32 - color: rgb(53, 159, 53) - - from_value: 40 - color: rgb(167, 157, 81) - - from_value: 47 - color: rgb(159, 127, 58) - - from_value: 54 - color: rgb(161, 108, 92) - - from_value: 61 - color: rgb(129, 58, 78) - - from_value: 68 - color: rgb(175, 80, 136) - - from_value: 76 - color: rgb(117, 74, 147) - - from_value: 86 - color: rgb(109, 97, 163) colors: rose_lines: rgba(220, 220, 220, 1) rose_direction_letters: rgba(220, 220, 220, 1) diff --git a/ui/dashboard/browser/climate.yaml b/ui/dashboard/browser/climate.yaml index 78dc48866..3e8a39d9a 100644 --- a/ui/dashboard/browser/climate.yaml +++ b/ui/dashboard/browser/climate.yaml @@ -70,9 +70,4 @@ sections: - !include /config/ui/statistics_graph/indoor_temperature.yaml - !include /config/ui/statistics_graph/indoor_humidity.yaml - - type: vertical-stack - cards: - - !include /config/ui/statistics_graph/indoor_temperature_differential.yaml - - !include /config/ui/statistics_graph/indoor_humidity_differential.yaml - - !include /config/ui/card/climate/climate_settings.yaml diff --git a/ui/dashboard/kiosk/climate.yaml b/ui/dashboard/kiosk/climate.yaml index ba436018d..79382c532 100644 --- a/ui/dashboard/kiosk/climate.yaml +++ b/ui/dashboard/kiosk/climate.yaml @@ -57,9 +57,4 @@ sections: - !include /config/ui/statistics_graph/indoor_temperature.yaml - !include /config/ui/statistics_graph/indoor_humidity.yaml - - type: vertical-stack - cards: - - !include /config/ui/statistics_graph/indoor_temperature_differential.yaml - - !include /config/ui/statistics_graph/indoor_humidity_differential.yaml - - !include /config/ui/card/climate/climate_settings.yaml diff --git a/ui/dashboard/kiosk/media.yaml b/ui/dashboard/kiosk/media.yaml index 1c842463e..a6b1b81c5 100644 --- a/ui/dashboard/kiosk/media.yaml +++ b/ui/dashboard/kiosk/media.yaml @@ -16,7 +16,7 @@ sections: - type: custom:vertical-stack-in-card # background fill for mini-player group cards: - - !include /config/ui/card/media/media_player/media_players/kiosk_tablet_mini.yaml + - !include /config/ui/card/media/media_player/media_players/kiosk_speaker_mini.yaml - !include /config/ui/card/media/alarm_clock/alarm_clock_timers.yaml - !include /config/ui/card/media/media_timers.yaml diff --git a/ui/dashboard/mobile/climate.yaml b/ui/dashboard/mobile/climate.yaml index 642f070ce..a5264442f 100644 --- a/ui/dashboard/mobile/climate.yaml +++ b/ui/dashboard/mobile/climate.yaml @@ -53,9 +53,4 @@ cards: - !include /config/ui/statistics_graph/indoor_temperature.yaml - !include /config/ui/statistics_graph/indoor_humidity.yaml - - type: vertical-stack - cards: - - !include /config/ui/statistics_graph/indoor_temperature_differential.yaml - - !include /config/ui/statistics_graph/indoor_humidity_differential.yaml - - !include /config/ui/card/climate/climate_settings.yaml diff --git a/ui/dashboard/subview/weather/asthma.yaml b/ui/dashboard/subview/weather/asthma.yaml index 5cef13bb9..f159402a5 100644 --- a/ui/dashboard/subview/weather/asthma.yaml +++ b/ui/dashboard/subview/weather/asthma.yaml @@ -15,7 +15,7 @@ sections: show_header_toggle: false entities: !include /config/ui/card/weather/include/asthma_entities.yaml - - !include /config/ui/statistics_graph/allergy.yaml + - !include /config/ui/statistics_graph/asthma.yaml - type: grid column_span: 3 diff --git a/ui/dashboard/subview/weather/precipitation.yaml b/ui/dashboard/subview/weather/precipitation.yaml index 279a721d0..dff237168 100644 --- a/ui/dashboard/subview/weather/precipitation.yaml +++ b/ui/dashboard/subview/weather/precipitation.yaml @@ -45,29 +45,65 @@ sections: square: false cards: - type: statistic - entity: sensor.precipitation_accumulation_yesterday - name: "Rain Avg" - stat_type: mean + entity: sensor.rain_accumulation_today + name: "Rain (24 Hours)" + stat_type: change + period: + rolling_window: + duration: + hours: 24 + + - type: statistic + entity: sensor.snow_accumulation_today + name: "Snow (24 Hours)" + stat_type: change + period: + rolling_window: + duration: + hours: 24 + + - type: statistic + entity: sensor.rain_accumulation_today + name: "Rain (Year)" + stat_type: change + period: + rolling_window: + duration: + days: 365 + + - type: statistic + entity: sensor.snow_accumulation_today + name: "Snow (Year)" + stat_type: change + period: + rolling_window: + duration: + days: 365 + + - type: statistic + entity: sensor.rain_max_24_hours + name: "Rain (Max/24)" + stat_type: max period: fixed_period: - type: statistic - entity: sensor.precipitation_accumulation_yesterday - name: "Rain Max" + entity: sensor.snow_max_24_hours + name: "Snow (Max/24)" stat_type: max period: fixed_period: - type: statistic entity: sensor.cloud_coverage - name: "Cloud Avg" + name: "Cloud Avg (All)" stat_type: mean period: fixed_period: - type: statistic entity: sensor.barometric_pressure - name: "Pressure Avg" + name: "Pressure Avg (All)" stat_type: mean period: fixed_period: diff --git a/ui/dashboard/subview/weather/temperature.yaml b/ui/dashboard/subview/weather/temperature.yaml index 8c7e809cd..153868d81 100644 --- a/ui/dashboard/subview/weather/temperature.yaml +++ b/ui/dashboard/subview/weather/temperature.yaml @@ -27,20 +27,6 @@ sections: columns: 2 square: false cards: - - type: statistic - entity: sensor.outdoor_temperature - name: "Temperature Avg" - stat_type: mean - period: - fixed_period: - - - type: statistic - entity: sensor.dew_point - name: "Dew Point Avg" - stat_type: mean - period: - fixed_period: - - type: statistic entity: sensor.outdoor_temperature name: "Low Temp (Day)" @@ -61,28 +47,43 @@ sections: - type: statistic entity: sensor.outdoor_temperature - name: "Low Temp" + name: "Temp Avg (All)" + stat_type: mean + period: + fixed_period: + + - type: statistic + entity: sensor.dew_point + name: "Dew Point Avg (All)" + stat_type: mean + period: + fixed_period: + + + - type: statistic + entity: sensor.outdoor_temperature + name: "Low Temp (All)" stat_type: min period: fixed_period: - type: statistic entity: sensor.outdoor_temperature - name: "High Temp" + name: "High Temp (All)" stat_type: max period: fixed_period: - type: statistic entity: sensor.outdoor_apparent_temperature - name: "Apparent Low" + name: "Wind Chill Low (All)" stat_type: min period: fixed_period: - type: statistic entity: sensor.outdoor_apparent_temperature - name: "Apparent High" + name: "Humidex High (All)" stat_type: max period: fixed_period: @@ -102,8 +103,4 @@ sections: columns: full cards: - !include /config/ui/statistics_graph/outdoor_temperature.yaml - - !include /config/ui/statistics_graph/outdoor_apparent_temperature.yaml - - !include /config/ui/statistics_graph/dew_point.yaml - - !include /config/ui/statistics_graph/outdoor_average_temperature.yaml - - !include /config/ui/statistics_graph/outdoor_high_temperature_differential.yaml - - !include /config/ui/statistics_graph/outdoor_low_temperature_differential.yaml \ No newline at end of file + - !include /config/ui/statistics_graph/outdoor_temperature_differential.yaml \ No newline at end of file diff --git a/ui/dashboard/subview/weather/weather_comparison.yaml b/ui/dashboard/subview/weather/weather_comparison.yaml index 67101539d..b018d7eb5 100644 --- a/ui/dashboard/subview/weather/weather_comparison.yaml +++ b/ui/dashboard/subview/weather/weather_comparison.yaml @@ -26,9 +26,7 @@ cards: - !include /config/ui/history/weather/precipitation_intensity_comparison.yaml - !include /config/ui/history/weather/precipitation_today_comparison.yaml - - !include /config/ui/history/weather/precipitation_yesterday_comparison.yaml - !include /config/ui/history/weather/precipitation_type_comparison.yaml - !include /config/ui/history/weather/current_condition_comparison.yaml - !include /config/ui/history/weather/lightning_count_comparison.yaml - - !include /config/ui/history/weather/lightning_distance_comparison.yaml \ No newline at end of file diff --git a/ui/dashboard/subview/weather/wind.yaml b/ui/dashboard/subview/weather/wind.yaml index 439750c14..0211220ae 100644 --- a/ui/dashboard/subview/weather/wind.yaml +++ b/ui/dashboard/subview/weather/wind.yaml @@ -13,8 +13,6 @@ sections: - !include /config/ui/card/weather/wind_rose.yaml - type: entities - state_color: true - show_header_toggle: false entities: !include /config/ui/card/weather/include/wind_entities.yaml - type: grid @@ -23,28 +21,46 @@ sections: cards: - type: statistic entity: sensor.wind_speed - name: "Wind Avg" - stat_type: mean + name: "Speed Max (Day)" + stat_type: max period: - fixed_period: + rolling_window: + duration: + hours: 24 + + - type: statistic + entity: sensor.wind_gust + name: "Gust Max (Day)" + stat_type: max + period: + rolling_window: + duration: + hours: 24 - type: statistic entity: sensor.wind_speed - name: "Wind Max" + name: "Speed Max (All)" stat_type: max period: fixed_period: - type: statistic entity: sensor.wind_gust - name: "Gust Max" + name: "Gust Max (All)" stat_type: max period: fixed_period: - type: statistic - entity: sensor.wind_bearing - name: "Bearing Avg" + entity: sensor.wind_speed + name: "Speed Avg (All)" + stat_type: mean + period: + fixed_period: + + - type: statistic + entity: sensor.wind_bearing_average + name: "Bearing Avg (All)" stat_type: mean period: fixed_period: @@ -59,11 +75,10 @@ sections: - !include /config/ui/graph/weather/wind_detail.yaml - type: grid - columns: 3 + columns: 2 square: false grid_options: columns: full cards: - !include /config/ui/statistics_graph/wind_speed.yaml - - !include /config/ui/statistics_graph/wind_gust.yaml - !include /config/ui/statistics_graph/wind_bearing.yaml \ No newline at end of file diff --git a/ui/graph/climate/bathroom_temperature.yaml b/ui/graph/climate/bathroom_temperature.yaml index a4e5a1e8b..6034f1c25 100644 --- a/ui/graph/climate/bathroom_temperature.yaml +++ b/ui/graph/climate/bathroom_temperature.yaml @@ -11,7 +11,7 @@ series: group_by: func: raw curve: stepline - color: rgb(255, 255, 255) + color: rgb(247, 49, 49) - entity: sensor.bathroom_sensor_air_temperature yaxis_id: temperature diff --git a/ui/graph/climate/bedroom_temperature.yaml b/ui/graph/climate/bedroom_temperature.yaml index 2bf4f8b1f..9545b72da 100644 --- a/ui/graph/climate/bedroom_temperature.yaml +++ b/ui/graph/climate/bedroom_temperature.yaml @@ -11,7 +11,7 @@ series: group_by: func: raw curve: stepline - color: rgb(255, 255, 255) + color: rgb(247, 49, 49) - entity: sensor.bedroom_temperature yaxis_id: temperature diff --git a/ui/graph/climate/climate_summary_week.yaml b/ui/graph/climate/climate_summary_week.yaml index 05298f7e5..a2bb6b8f0 100644 --- a/ui/graph/climate/climate_summary_week.yaml +++ b/ui/graph/climate/climate_summary_week.yaml @@ -74,13 +74,6 @@ all_series_config: func: max duration: 1hr series: - - entity: sensor.indoor_temperature - name: "Indoor" - yaxis_id: indoor - stroke_width: 3 - color: rgb(235, 52, 52) - opacity: 0.7 - - entity: sensor.indoor_temperature_target name: "Target" yaxis_id: indoor @@ -88,6 +81,13 @@ series: stroke_width: 1 color: rgb(250, 243, 150) + - entity: sensor.indoor_temperature + name: "Indoor" + yaxis_id: indoor + stroke_width: 3 + color: rgb(235, 52, 52) + opacity: 0.7 + - entity: sensor.outdoor_temperature name: "Outdoor" yaxis_id: indoor diff --git a/ui/graph/climate/indoor_temperature.yaml b/ui/graph/climate/indoor_temperature.yaml index fff72238f..5cace2d62 100644 --- a/ui/graph/climate/indoor_temperature.yaml +++ b/ui/graph/climate/indoor_temperature.yaml @@ -16,7 +16,7 @@ series: group_by: func: raw curve: stepline - color: rgb(255, 255, 255) + color: rgb(247, 49, 49) - entity: sensor.indoor_temperature yaxis_id: temperature diff --git a/ui/graph/climate/living_room_temperature.yaml b/ui/graph/climate/living_room_temperature.yaml index 0749c62b3..51877ce45 100644 --- a/ui/graph/climate/living_room_temperature.yaml +++ b/ui/graph/climate/living_room_temperature.yaml @@ -11,7 +11,7 @@ series: group_by: func: raw curve: stepline - color: rgb(255, 255, 255) + color: rgb(247, 49, 49) - entity: sensor.living_room_temperature yaxis_id: temperature diff --git a/ui/graph/climate/spa_summary_week.yaml b/ui/graph/climate/spa_summary_week.yaml index 02162ae50..0704c637c 100644 --- a/ui/graph/climate/spa_summary_week.yaml +++ b/ui/graph/climate/spa_summary_week.yaml @@ -7,10 +7,6 @@ graph_span: 7d header: title: "Spa Summary (Week)" show: true - title_actions: - tap_action: - action: navigate - navigation_path: spa-runtime apex_config: grid: show: true @@ -64,6 +60,8 @@ series: - entity: sensor.outdoor_temperature name: "Outdoor" yaxis_id: temp + statistics: + align: end stroke_width: 3 opacity: 0.8 color_threshold: !include /config/ui/graph/include/temperature_line_color.yaml diff --git a/ui/graph/climate/thermostat_temperature.yaml b/ui/graph/climate/thermostat_temperature.yaml index e48d169ec..516faf82f 100644 --- a/ui/graph/climate/thermostat_temperature.yaml +++ b/ui/graph/climate/thermostat_temperature.yaml @@ -16,7 +16,7 @@ series: group_by: func: raw curve: stepline - color: rgb(255, 255, 255) + color: rgb(247, 49, 49) - entity: sensor.thermostat_temperature yaxis_id: temperature diff --git a/ui/graph/graph_templates.yaml b/ui/graph/graph_templates.yaml index 19b215755..9581f9bc2 100644 --- a/ui/graph/graph_templates.yaml +++ b/ui/graph/graph_templates.yaml @@ -50,10 +50,10 @@ default: curve: smooth stroke_width: 2 opacity: 1 - statistics: - type: max - period: hour - align: end + # statistics: + # type: max + # period: hour + # align: end fill_raw: "null" show: in_header: false @@ -112,6 +112,11 @@ climate: show: false min: 0 max: 100 + all_series_config: + statistics: + type: max + period: hour + align: end climate_mini: config_templates: @@ -134,7 +139,7 @@ weather_detail: fontWeight: normal dataLabels: style: - fontSize: 16px + fontSize: 12px legend: fontSize: 16px markers: @@ -145,11 +150,17 @@ weather_detail: in_chart: true in_header: false legend_value: false + statistics: + align: end group_by: - func: max + func: last duration: 1h + fill: 'null' weather_mini: config_templates: mini - - + all_series_config: + group_by: + func: last + duration: 15m + fill: 'null' diff --git a/ui/graph/include/cloud_cover_area_color.yaml b/ui/graph/include/cloud_cover_area_color.yaml index 202cb5683..b5718bbb6 100644 --- a/ui/graph/include/cloud_cover_area_color.yaml +++ b/ui/graph/include/cloud_cover_area_color.yaml @@ -2,8 +2,17 @@ ## Cloud Coverage Colors (Apex Graphs) ############################################################################### - value: 0 - color: rgb(180, 180, 180) # state-icon-color + color: rgb(200, 200, 200) opacity: 0 -- value: 100 - color: rgb(220, 220, 220) + +- value: 10 + color: rgb(131, 189, 227) opacity: 0.2 + +- value: 50 + color: rgb(136, 162, 190) + opacity: 0.3 + +- value: 80 + color: rgb(147, 147, 147) + opacity: 0.4 diff --git a/ui/graph/include/cloud_cover_line_color.yaml b/ui/graph/include/cloud_cover_line_color.yaml index 6bc2e233c..38f5d14a3 100644 --- a/ui/graph/include/cloud_cover_line_color.yaml +++ b/ui/graph/include/cloud_cover_line_color.yaml @@ -2,8 +2,10 @@ ## Cloud Coverage Colors (Apex Graphs) ############################################################################### - value: 0 - color: rgb(180, 180, 180) # state-icon-color -- value: 1 - color: rgb(220, 220, 220) -- value: 100 - color: rgb(220, 220, 220) + color: rgb(200, 200, 200) +- value: 10 + color: rgb(123, 185, 226) +- value: 50 + color: rgb(135, 176, 219) +- value: 80 + color: rgb(176, 176, 176) diff --git a/ui/graph/weather/atmospheric_conditions_detail.yaml b/ui/graph/weather/atmospheric_conditions_detail.yaml index b8971ff62..efbed047f 100644 --- a/ui/graph/weather/atmospheric_conditions_detail.yaml +++ b/ui/graph/weather/atmospheric_conditions_detail.yaml @@ -152,16 +152,12 @@ series: name: "Pressure" yaxis_id: pressure extend_to: now - group_by: - duration: 6h stroke_width: 3 color: rgb(242, 235, 36) - entity: sensor.hourly_weather name: " " yaxis_id: pressure - group_by: - duration: 6h data_generator: | return entity.attributes.forecast.map((entry) => { return [new Date(entry.datetime).getTime(), entry.pressure]; @@ -237,7 +233,6 @@ series: stroke_width: 3 opacity: 0.8 color: rgb(120, 25, 149) - # color_threshold: !include /config/ui/graph/include/fog_probability_line_color.yaml - entity: sensor.ozone_index name: "Ozone Index" diff --git a/ui/graph/weather/dew_point.yaml b/ui/graph/weather/dew_point.yaml index b2e742072..adf4bbdff 100644 --- a/ui/graph/weather/dew_point.yaml +++ b/ui/graph/weather/dew_point.yaml @@ -18,7 +18,7 @@ series: header_actions: tap_action: action: navigate - navigation_path: atmospheric-conditions + navigation_path: outdoor-temperature double_tap_action: action: more-info hold_action: diff --git a/ui/graph/weather/precipitation_detail.yaml b/ui/graph/weather/precipitation_detail.yaml index 598a9132b..ff0e24163 100644 --- a/ui/graph/weather/precipitation_detail.yaml +++ b/ui/graph/weather/precipitation_detail.yaml @@ -83,30 +83,43 @@ yaxis: apex_config: tickAmount: 5 decimalsInFloat: 0 + + - id: precip2 + show: false + min: 0 + max: ~20 + apex_config: + tickAmount: 5 + decimalsInFloat: 0 series: - - entity: sensor.rain_accumulation_today - name: "Rain" - yaxis_id: precip + - entity: sensor.daily_weather + name: "Expected" + yaxis_id: precip2 type: column float_precision: 1 - offset: +1h # template resets just past midnight, offset to avoid duplicate values group_by: duration: 1d - stack_group: precip + offset: -24h # show at end of day show: datalabels: true offset_in_name: false - stroke_width: 5 + stroke_width: 3 opacity: 0.6 - color: rgb(15, 45, 191) + color: rgb(227, 160, 51) + data_generator: | + return entity.attributes.forecast.map((entry) => { + return [new Date(entry.datetime).getTime(), entry.precipitation]; + }); - - entity: sensor.snow_accumulation_today - name: "Snow" + - entity: sensor.ice_accumulation_today + name: "Ice Today" yaxis_id: precip type: column + statistics: + type: change + period: day + align: end float_precision: 1 - extend_to: now - offset: +1h # template resets just past midnight, offset to avoid duplicate values group_by: duration: 1d stack_group: precip @@ -115,49 +128,50 @@ series: offset_in_name: false stroke_width: 5 opacity: 0.6 - color: rgb(27, 147, 227) + color: rgb(120, 48, 116) - - entity: sensor.ice_accumulation_today - name: "Ice Today" + - entity: sensor.snow_accumulation_today + name: "Snow" yaxis_id: precip type: column + statistics: + type: change + period: day + align: end float_precision: 1 - extend_to: now - offset: +1h # template resets just past midnight, offset to avoid duplicate values group_by: duration: 1d stack_group: precip show: datalabels: true offset_in_name: false - stroke_width: 5 + stroke_width: 3 opacity: 0.6 - color: rgb(120, 48, 116) + color: rgb(27, 147, 227) - - entity: sensor.daily_weather - name: "Expected" + - entity: sensor.rain_accumulation_today + name: "Rain" yaxis_id: precip type: column + statistics: + type: change + period: day + align: end float_precision: 1 group_by: duration: 1d stack_group: precip - data_generator: | - return entity.attributes.forecast.map((entry) => { - return [new Date(entry.datetime).getTime(), entry.precipitation]; - }); show: datalabels: true - stroke_width: 5 + offset_in_name: false + stroke_width: 3 opacity: 0.6 - color: rgb(227, 160, 51) + color: rgb(15, 45, 191) - entity: sensor.barometric_pressure name: "Pressure" yaxis_id: pressure extend_to: now - group_by: - duration: 6h float_precision: 0 stroke_width: 2 color: rgb(242, 235, 36) @@ -165,14 +179,12 @@ series: - entity: sensor.hourly_weather name: " " yaxis_id: pressure - group_by: - duration: 6h + stroke_width: 2 + color: rgb(242, 235, 36) data_generator: | return entity.attributes.forecast.map((entry) => { return [new Date(entry.datetime).getTime(), entry.pressure]; }); - stroke_width: 2 - color: rgb(242, 235, 36) - entity: sensor.cloud_coverage name: "Clouds" @@ -188,12 +200,12 @@ series: yaxis_id: clouds stroke_width: 1 opacity: 0.8 + color: rgb(150, 150, 150) + color_threshold: !include /config/ui/graph/include/cloud_cover_line_color.yaml data_generator: | return entity.attributes.forecast.map((entry) => { return [new Date(entry.datetime).getTime(), entry.cloud_coverage]; }); - color: rgb(150, 150, 150) - color_threshold: !include /config/ui/graph/include/cloud_cover_line_color.yaml - entity: sensor.cloud_coverage name: " " @@ -210,13 +222,13 @@ series: name: " " yaxis_id: clouds type: area + stroke_width: 0 + color: rgb(150, 150, 150) + color_threshold: !include /config/ui/graph/include/cloud_cover_area_color.yaml data_generator: | return entity.attributes.forecast.map((entry) => { return [new Date(entry.datetime).getTime(), entry.cloud_coverage]; }); - stroke_width: 0 - color: rgb(150, 150, 150) - color_threshold: !include /config/ui/graph/include/cloud_cover_area_color.yaml - entity: sensor.precipitation_probability name: "Probability" @@ -229,13 +241,13 @@ series: - entity: sensor.hourly_weather name: " " yaxis_id: probability + stroke_width: 1 + color: rgb(37, 85, 229) + color_threshold: !include /config/ui/graph/include/precipitation_probability_line_color.yaml data_generator: | return entity.attributes.forecast.map((entry) => { return [new Date(entry.datetime).getTime(), entry.precipitation_probability]; }); - stroke_width: 1 - color: rgb(37, 85, 229) - color_threshold: !include /config/ui/graph/include/precipitation_probability_line_color.yaml - entity: sensor.precipitation_probability name: " " @@ -250,13 +262,13 @@ series: name: " " yaxis_id: probability type: area + stroke_width: 0 + color: rgb(37, 85, 229) + color_threshold: !include /config/ui/graph/include/precipitation_probability_area_color.yaml data_generator: | return entity.attributes.forecast.map((entry) => { return [new Date(entry.datetime).getTime(), entry.precipitation_probability]; }); - stroke_width: 0 - color: rgb(37, 85, 229) - color_threshold: !include /config/ui/graph/include/precipitation_probability_area_color.yaml - entity: sensor.precipitation_intensity name: "Rate" diff --git a/ui/graph/weather/temperature_detail.yaml b/ui/graph/weather/temperature_detail.yaml index 8d90ab953..87d05a916 100644 --- a/ui/graph/weather/temperature_detail.yaml +++ b/ui/graph/weather/temperature_detail.yaml @@ -41,11 +41,13 @@ series: name: "Feels Like" yaxis_id: temperature extend_to: now + stroke_width: 3 color: rgb(189, 6, 106) - entity: sensor.hourly_weather name: " " yaxis_id: temperature + stroke_width: 3 opacity: 0.7 data_generator: | return entity.attributes.forecast.map((entry) => { @@ -62,6 +64,14 @@ series: color: rgb(207, 232, 47) color_threshold: !include /config/ui/graph/include/temperature_area_color.yaml + - entity: sensor.outdoor_temperature + name: " " + yaxis_id: temperature + extend_to: now + stroke_width: 4 + color: rgb(207, 232, 47) + color_threshold: !include /config/ui/graph/include/temperature_line_color.yaml + - entity: sensor.hourly_weather name: " " yaxis_id: temperature @@ -74,14 +84,6 @@ series: color: rgb(207, 232, 47) color_threshold: !include /config/ui/graph/include/temperature_area_color.yaml - - entity: sensor.outdoor_temperature - name: " " - yaxis_id: temperature - extend_to: now - stroke_width: 4 - color: rgb(207, 232, 47) - color_threshold: !include /config/ui/graph/include/temperature_line_color.yaml - - entity: sensor.hourly_weather name: " " yaxis_id: temperature @@ -99,12 +101,9 @@ series: extend_to: now opacity: 0.8 color: rgb(69, 237, 195) - group_by: - func: avg - duration: 24hr - entity: sensor.dew_point - name: "Dewpoint" + name: "Dew Point" yaxis_id: temperature extend_to: now opacity: 0.7 @@ -127,11 +126,11 @@ series: yaxis_id: temperature stroke_width: 4 opacity: 0.5 - color: rgb(12, 4, 179) + color: rgb(186, 6, 6) - entity: sensor.outdoor_normal_low_temperature name: "Normal Low" yaxis_id: temperature stroke_width: 4 opacity: 0.5 - color: rgb(186, 6, 6) \ No newline at end of file + color: rgb(12, 4, 179) \ No newline at end of file diff --git a/ui/graph/weather/wind_detail.yaml b/ui/graph/weather/wind_detail.yaml index 07c26812f..8d28c11c7 100644 --- a/ui/graph/weather/wind_detail.yaml +++ b/ui/graph/weather/wind_detail.yaml @@ -39,7 +39,34 @@ yaxis: fontSize: 16px fontWeight: normal + - id: bearing + show: true + opposite: true + min: 0 + max: 360 + apex_config: + tickAmount: 5 + decimalsInFloat: 0 + title: + text: "Wind Bearing" + rotate: -90 + offsetX: 10 + style: + fontSize: 20px + fontFamily: Roboto + fontWeight: normal + labels: + style: + fontSize: 16px + fontWeight: normal series: + - entity: sensor.wind_bearing_average + name: "Average Wind Direction" + yaxis_id: bearing + extend_to: now + stroke_width: 3 + color: rgb(206, 20, 20) + - entity: sensor.wind_gust name: "Gust" yaxis_id: speed diff --git a/ui/history/system.yaml b/ui/history/system.yaml index 3f51ec315..c42dab3ac 100644 --- a/ui/history/system.yaml +++ b/ui/history/system.yaml @@ -33,9 +33,6 @@ cards: - entity: sensor.processor_use_percent name: "Total" - - entity: sensor.glances_cpu_used - name: "Glances" - - entity: sensor.home_assistant_core_cpu_percent name: "Core" @@ -45,9 +42,6 @@ cards: - entity: sensor.hass_addon_cpu_percent name: "Addons" - - entity: sensor.hass_os_cpu_percent - name: "OS" - - type: history-graph title: "Memory Use" hours_to_show: 1 @@ -65,20 +59,3 @@ cards: - entity: sensor.hass_addon_memory_percent name: "Addons" - - entity: sensor.hass_os_memory_percent - name: "OS" - - - entity: sensor.hass_audio_stats - name: "Audio" - - - entity: sensor.hass_cli_stats - name: "CLI" - - - entity: sensor.hass_dns_stats - name: "DNS" - - - entity: sensor.hass_multicast_stats - name: "Multicast" - - - entity: sensor.hass_observer_stats - name: "Observer" diff --git a/ui/history/weather/precipitation_yesterday_comparison.yaml b/ui/history/weather/precipitation_yesterday_comparison.yaml deleted file mode 100644 index 7a8197471..000000000 --- a/ui/history/weather/precipitation_yesterday_comparison.yaml +++ /dev/null @@ -1,19 +0,0 @@ -############################################################################### -## Precipitation Yesterday History -############################################################################### -type: history-graph -title: "Precipitation Yesterday" -hours_to_show: 168 -show_names: true -entities: - - entity: sensor.precipitation_accumulation_yesterday - name: "Current" - - - entity: sensor.home_sensors_precipitation_yesterday - name: "Weatherflow" - - - entity: sensor.tempest_st_00057689_rain_yesterday - name: "WF Local" - - - entity: sensor.home_sensors_precipitation_yesterday_checked - name: "WF Cloud (C)" diff --git a/ui/statistics_graph/air_quality.yaml b/ui/statistics_graph/air_quality.yaml index 7e4bd7ef8..a1be9e30e 100644 --- a/ui/statistics_graph/air_quality.yaml +++ b/ui/statistics_graph/air_quality.yaml @@ -3,13 +3,15 @@ ############################################################################### type: statistics-graph title: "Air Quality" -entities: - - entity: sensor.air_quality_index - name: "AQI" -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - mean - max - - min \ No newline at end of file + - min +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.air_quality_index + name: "AQI" diff --git a/ui/statistics_graph/allergy.yaml b/ui/statistics_graph/allergy.yaml index dbd0d9041..cb2f5b18a 100644 --- a/ui/statistics_graph/allergy.yaml +++ b/ui/statistics_graph/allergy.yaml @@ -3,13 +3,15 @@ ############################################################################### type: statistics-graph title: "Allergy Index" -entities: - - entity: sensor.allergy_index_today - name: "Allergy Index" -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - mean - max - - min \ No newline at end of file + - min +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.allergy_index_today + name: "Allergy Index" diff --git a/ui/statistics_graph/asthma.yaml b/ui/statistics_graph/asthma.yaml index 6062289b8..518706da5 100644 --- a/ui/statistics_graph/asthma.yaml +++ b/ui/statistics_graph/asthma.yaml @@ -3,13 +3,15 @@ ############################################################################### type: statistics-graph title: "Asthma Index" -entities: - - entity: sensor.asthma_index_today - name: "Asthma Index" -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - mean - max - - min \ No newline at end of file + - min +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.asthma_index_today + name: "Asthma Index" diff --git a/ui/statistics_graph/barometric_pressure.yaml b/ui/statistics_graph/barometric_pressure.yaml index ff7c72630..12eca0d3a 100644 --- a/ui/statistics_graph/barometric_pressure.yaml +++ b/ui/statistics_graph/barometric_pressure.yaml @@ -3,14 +3,17 @@ ############################################################################### type: statistics-graph title: "Barometric Pressure" -entities: - - entity: sensor.barometric_pressure - name: "Barometric Pressure" -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - mean - max - min +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.barometric_pressure + name: "Barometric Pressure" + diff --git a/ui/statistics_graph/cloud_cover.yaml b/ui/statistics_graph/cloud_cover.yaml index 14a1faa96..5ada43695 100644 --- a/ui/statistics_graph/cloud_cover.yaml +++ b/ui/statistics_graph/cloud_cover.yaml @@ -3,16 +3,13 @@ ############################################################################### type: statistics-graph title: "Cloud Coverage" -entities: - - entity: sensor.cloud_coverage - name: "Cloud Coveage" - - - entity: sensor.fog_probability - name: "Fog" -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - mean - - max - - min +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.cloud_coverage + name: "Cloud Coveage" diff --git a/ui/statistics_graph/daily_precipitation.yaml b/ui/statistics_graph/daily_precipitation.yaml index 1b5e2ab93..24aa6a62c 100644 --- a/ui/statistics_graph/daily_precipitation.yaml +++ b/ui/statistics_graph/daily_precipitation.yaml @@ -2,16 +2,23 @@ ## Daily Precipitation ############################################################################### type: statistics-graph -title: "Precipitation" +title: "Precipitation Accumulation" +chart_type: bar +hide_legend: false +stat_types: + - change +logarithmic_scale: false +days_to_show: 1095 +period: month entities: - entity: sensor.rain_accumulation_today name: "Rain" - entity: sensor.snow_accumulation_today name: "Snow" - - entity: sensor.ice_accumulation_today - name: "Ice" -days_to_show: 365 -period: week -chart_type: bar -stat_types: - - max +card_mod: + style: | + ha-card { + --graph-color-1: #0f2dbf; + --graph-color-2: #1b93e3; + --graph-color-3: #783074; + } \ No newline at end of file diff --git a/ui/statistics_graph/dew_point.yaml b/ui/statistics_graph/dew_point.yaml deleted file mode 100644 index 002e3493f..000000000 --- a/ui/statistics_graph/dew_point.yaml +++ /dev/null @@ -1,15 +0,0 @@ -############################################################################### -## Dew Point -############################################################################### -type: statistics-graph -title: "Dew Point" -entities: - - entity: sensor.dew_point - name: "Dew Point" -days_to_show: 365 -period: week -chart_type: line -stat_types: - - mean - - max - - min diff --git a/ui/statistics_graph/fire_index.yaml b/ui/statistics_graph/fire_index.yaml index 70430a98d..13b9f16de 100644 --- a/ui/statistics_graph/fire_index.yaml +++ b/ui/statistics_graph/fire_index.yaml @@ -3,13 +3,15 @@ ############################################################################### type: statistics-graph title: "Fire Index" -entities: - - entity: sensor.fire_index - name: "Fire Index" -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - mean - max - min +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.fire_index + name: "Fire Index" diff --git a/ui/statistics_graph/flu.yaml b/ui/statistics_graph/flu.yaml index d54bc8a5b..07c72c383 100644 --- a/ui/statistics_graph/flu.yaml +++ b/ui/statistics_graph/flu.yaml @@ -3,13 +3,15 @@ ############################################################################### type: statistics-graph title: "Flu Index" -entities: - - entity: sensor.cold_flu_index_today - name: "Cold & Flu Index" -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - mean - max - - min \ No newline at end of file + - min +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.cold_flu_index_today + name: "Cold & Flu Index" \ No newline at end of file diff --git a/ui/statistics_graph/hvac_runtime.yaml b/ui/statistics_graph/hvac_runtime.yaml index b1f4509c4..ed95e0bbc 100644 --- a/ui/statistics_graph/hvac_runtime.yaml +++ b/ui/statistics_graph/hvac_runtime.yaml @@ -3,13 +3,15 @@ ############################################################################### type: statistics-graph title: "HVAC Runtime" +chart_type: bar +hide_legend: false +stat_types: + - max +logarithmic_scale: false +days_to_show: 365 +period: week entities: - entity: sensor.thermostat_cool_daily_runtime name: "Cool" - entity: sensor.thermostat_heat_daily_runtime name: "Heat" -days_to_show: 365 -period: week -chart_type: bar -stat_types: - - max diff --git a/ui/statistics_graph/indoor_humidity.yaml b/ui/statistics_graph/indoor_humidity.yaml index a18929b7d..45dd7e901 100644 --- a/ui/statistics_graph/indoor_humidity.yaml +++ b/ui/statistics_graph/indoor_humidity.yaml @@ -3,12 +3,21 @@ ############################################################################### type: statistics-graph title: "Indoor Humidity" -entities: - - entity: sensor.indoor_humidity - name: "Humidity" -days_to_show: 365 -period: week +chart_type: line +hide_legend: false stat_types: + - mean - max - min - - mean +logarithmic_scale: false +days_to_show: 365 +period: week +entities: + - entity: sensor.indoor_humidity + name: "Indoor" + + - entity: sensor.outdoor_humidity + name: "Outdoor" + + - entity: sensor.indoor_humidity_differential + name: "Difference" \ No newline at end of file diff --git a/ui/statistics_graph/indoor_humidity_differential.yaml b/ui/statistics_graph/indoor_humidity_differential.yaml deleted file mode 100644 index 6f40f574b..000000000 --- a/ui/statistics_graph/indoor_humidity_differential.yaml +++ /dev/null @@ -1,14 +0,0 @@ -############################################################################### -## Indoor Humidity Differential Statistics Graph -############################################################################### -type: statistics-graph -title: "Humidity Differential" -entities: - - entity: sensor.indoor_humidity_differential - name: "Humidity" -days_to_show: 365 -period: week -stat_types: - - max - - min - - mean diff --git a/ui/statistics_graph/indoor_temperature.yaml b/ui/statistics_graph/indoor_temperature.yaml index c9b5a0ee2..efbc6fe72 100644 --- a/ui/statistics_graph/indoor_temperature.yaml +++ b/ui/statistics_graph/indoor_temperature.yaml @@ -3,12 +3,24 @@ ############################################################################### type: statistics-graph title: "Indoor Temperature" -entities: - - entity: sensor.indoor_temperature - name: "Temperature" -days_to_show: 365 -period: week +chart_type: line +hide_legend: false stat_types: + - mean - max - min - - mean \ No newline at end of file +logarithmic_scale: false +days_to_show: 365 +period: week +entities: + - entity: sensor.indoor_temperature + name: "Indoor" + + - entity: sensor.outdoor_temperature + name: "Outdoor" + + - entity: sensor.indoor_dew_point + name: "Dew Point" + + - entity: sensor.indoor_temperature_differential + name: "Difference" diff --git a/ui/statistics_graph/indoor_temperature_differential.yaml b/ui/statistics_graph/indoor_temperature_differential.yaml deleted file mode 100644 index 977f327dc..000000000 --- a/ui/statistics_graph/indoor_temperature_differential.yaml +++ /dev/null @@ -1,14 +0,0 @@ -############################################################################### -## Indoor Temperature Differential Statistics Graph -############################################################################### -type: statistics-graph -title: "Temperature Differential" -entities: - - entity: sensor.indoor_temperature_differential - name: "Temperature" -days_to_show: 365 -period: week -stat_types: - - max - - min - - mean diff --git a/ui/statistics_graph/lightning.yaml b/ui/statistics_graph/lightning.yaml index 3e8909086..8419164ef 100644 --- a/ui/statistics_graph/lightning.yaml +++ b/ui/statistics_graph/lightning.yaml @@ -3,11 +3,13 @@ ############################################################################### type: statistics-graph title: "Lightning" -entities: - - entity: sensor.lightning_count - name: "Lightning" -days_to_show: 365 -period: week chart_type: line +hide_legend: false stat_types: - max +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.lightning_count + name: "Lightning" diff --git a/ui/statistics_graph/outdoor_apparent_temperature.yaml b/ui/statistics_graph/outdoor_apparent_temperature.yaml deleted file mode 100644 index 4d4426c83..000000000 --- a/ui/statistics_graph/outdoor_apparent_temperature.yaml +++ /dev/null @@ -1,15 +0,0 @@ -############################################################################### -## Outdoor Apparent Temperature Statistics Graph -############################################################################### -type: statistics-graph -title: "Apparent Temperature" -entities: - - entity: sensor.outdoor_apparent_temperature - name: "Temp" -days_to_show: 365 -period: week -chart_type: line -stat_types: - - max - - min - - mean diff --git a/ui/statistics_graph/outdoor_average_temperature.yaml b/ui/statistics_graph/outdoor_average_temperature.yaml deleted file mode 100644 index 872e92596..000000000 --- a/ui/statistics_graph/outdoor_average_temperature.yaml +++ /dev/null @@ -1,15 +0,0 @@ -############################################################################### -## Outdoor Average Temperature Statistics Graph -############################################################################### -type: statistics-graph -title: "Average Temperature" -entities: - - entity: sensor.outdoor_temperature_daily_average - name: "Temperature" -days_to_show: 365 -period: week -chart_type: line -stat_types: - - max - - min - - mean diff --git a/ui/statistics_graph/outdoor_humidity.yaml b/ui/statistics_graph/outdoor_humidity.yaml index 7ff7a02d2..7633fc69b 100644 --- a/ui/statistics_graph/outdoor_humidity.yaml +++ b/ui/statistics_graph/outdoor_humidity.yaml @@ -2,14 +2,16 @@ ## Outdoor Humidity ############################################################################### type: statistics-graph -title: "Humidity" -entities: - - entity: sensor.outdoor_humidity - name: "Humidity" -days_to_show: 365 -period: week +title: "Relative Humidity" chart_type: line +hide_legend: true stat_types: - - max - - min - mean +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.outdoor_humidity + name: "Humidity" + + diff --git a/ui/statistics_graph/outdoor_low_temperature_differential.yaml b/ui/statistics_graph/outdoor_low_temperature_differential.yaml deleted file mode 100644 index cfbb46e8e..000000000 --- a/ui/statistics_graph/outdoor_low_temperature_differential.yaml +++ /dev/null @@ -1,13 +0,0 @@ -############################################################################### -## Outdoor Temperature Low Temperature Differential -############################################################################### -type: statistics-graph -title: "Low Temp Differential" -entities: - - entity: sensor.outdoor_low_temperature_differential - name: "Low Temp" -days_to_show: 365 -period: week -chart_type: line -stat_types: - - mean diff --git a/ui/statistics_graph/outdoor_temperature.yaml b/ui/statistics_graph/outdoor_temperature.yaml index 1196f468e..1e0d2f4a8 100644 --- a/ui/statistics_graph/outdoor_temperature.yaml +++ b/ui/statistics_graph/outdoor_temperature.yaml @@ -3,13 +3,21 @@ ############################################################################### type: statistics-graph title: "Temperature" -entities: - - entity: sensor.outdoor_temperature - name: "Temp" -days_to_show: 365 -period: week chart_type: line +hide_legend: false stat_types: + - mean - max - min - - mean +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.outdoor_temperature + name: "Temperature" + + - entity: sensor.outdoor_apparent_temperature + name: "Apparent" + + - entity: sensor.dew_point + name: "Dew Point" diff --git a/ui/statistics_graph/outdoor_high_temperature_differential.yaml b/ui/statistics_graph/outdoor_temperature_differential.yaml similarity index 60% rename from ui/statistics_graph/outdoor_high_temperature_differential.yaml rename to ui/statistics_graph/outdoor_temperature_differential.yaml index b0199bf6d..b32b32e77 100644 --- a/ui/statistics_graph/outdoor_high_temperature_differential.yaml +++ b/ui/statistics_graph/outdoor_temperature_differential.yaml @@ -1,13 +1,20 @@ -############################################################################### -## Outdoor Temperature High Temperature Differential -############################################################################### -type: statistics-graph -title: "High Temp Differential" -entities: - - entity: sensor.outdoor_high_temperature_differential - name: "High Temp" -days_to_show: 365 -period: week -chart_type: line -stat_types: - - mean +############################################################################### +## Outdoor Temperature High Temperature Differential +############################################################################### +type: statistics-graph +title: "Normal Temperature Differential" +chart_type: line +hide_legend: false +stat_types: + - mean + - max + - min +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.outdoor_high_temperature_differential + name: "High" + + - entity: sensor.outdoor_low_temperature_differential + name: "Low" diff --git a/ui/statistics_graph/smoke_level.yaml b/ui/statistics_graph/smoke_level.yaml index 2e9784925..6ef04b631 100644 --- a/ui/statistics_graph/smoke_level.yaml +++ b/ui/statistics_graph/smoke_level.yaml @@ -3,13 +3,15 @@ ############################################################################### type: statistics-graph title: "Smoke Level" -entities: - - entity: sensor.smoke_level - name: "Smoke" -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - mean - max - min +logarithmic_scale: false +days_to_show: 1095 +period: week +entities: + - entity: sensor.smoke_level + name: "Smoke" diff --git a/ui/statistics_graph/uv_index.yaml b/ui/statistics_graph/uv_index.yaml index 7b92fb902..ad203801a 100644 --- a/ui/statistics_graph/uv_index.yaml +++ b/ui/statistics_graph/uv_index.yaml @@ -3,13 +3,14 @@ ############################################################################### type: statistics-graph title: "UV Index" -entities: - - entity: sensor.uv_index_today - name: "UV Index" -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - - mean - max - - min +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - entity: sensor.uv_index + name: "UV Index" + diff --git a/ui/statistics_graph/wind_bearing.yaml b/ui/statistics_graph/wind_bearing.yaml index aa9a40852..2d1a4e7b4 100644 --- a/ui/statistics_graph/wind_bearing.yaml +++ b/ui/statistics_graph/wind_bearing.yaml @@ -3,10 +3,12 @@ ############################################################################### type: statistics-graph title: "Wind Bearing" -entities: - - sensor.wind_bearing -days_to_show: 365 -period: week chart_type: line +hide_legend: true stat_types: - mean +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - sensor.wind_bearing diff --git a/ui/statistics_graph/wind_gust.yaml b/ui/statistics_graph/wind_gust.yaml deleted file mode 100644 index 739e31317..000000000 --- a/ui/statistics_graph/wind_gust.yaml +++ /dev/null @@ -1,13 +0,0 @@ -############################################################################### -## Wind Gust -############################################################################### -type: statistics-graph -title: "Wind Gust" -entities: - - sensor.wind_gust -days_to_show: 365 -period: week -chart_type: line -stat_types: - - max - - mean diff --git a/ui/statistics_graph/wind_speed.yaml b/ui/statistics_graph/wind_speed.yaml index ed2ba0f40..a88bd9029 100644 --- a/ui/statistics_graph/wind_speed.yaml +++ b/ui/statistics_graph/wind_speed.yaml @@ -3,11 +3,14 @@ ############################################################################### type: statistics-graph title: "Wind Speed" -entities: - - sensor.wind_speed -days_to_show: 365 -period: week chart_type: line +hide_legend: false stat_types: - max - mean +logarithmic_scale: false +days_to_show: 1095 +period: month +entities: + - sensor.wind_speed + - sensor.wind_gust