From 99b2f7761b95e6a1fe2c2d5bc6a2e02b5ad247c8 Mon Sep 17 00:00:00 2001 From: Tony Stork Date: Fri, 28 Jul 2023 22:23:49 -0400 Subject: [PATCH] Shoutout to Pirateweather for still being dogwater... --- packages/custom_weather.yaml | 156 ++++++++++++++++++++++++++++------- 1 file changed, 124 insertions(+), 32 deletions(-) diff --git a/packages/custom_weather.yaml b/packages/custom_weather.yaml index c1fc4de..ca58f39 100644 --- a/packages/custom_weather.yaml +++ b/packages/custom_weather.yaml @@ -1,10 +1,32 @@ weather: - platform: template name: "Iron Nerd Weather Station" - condition_template: "{{ states('weather.iron_nerd_studios') }}" - temperature_template: "{{ states('sensor.pirateweather_temperature') | float }}" + condition_template: > + {% set stations = [ + states.weather.iron_nerd_studios, + states.weather.kdfi_daynight, + states.weather.openweathermap + ] %} + {% set result = stations | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) }} + temperature_template: > + {% set temps = [ + states.sensor.pirateweather_temperature, + states.sensor.kdfi_temperature, + states.sensor.openweathermap_temperature, + states.sensor.myradar_temperature + ] %} + {% set sensor = temps | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(sensor) | float }} temperature_unit: °F - humidity_template: "{{ states('sensor.pirateweather_humidity') | float }}" + humidity_template: > + {% set humidity = [ + states.sensor.pirateweather_humidity, + states.sensor.kdfi_relative_humidity, + states.sensor.openweathermap_humidity + ] %} + {% set result = humidity | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} forecast_template: > {% if state_attr('weather.iron_nerd_studios','forecast') %} {{ state_attr('weather.iron_nerd_studios','forecast') }} @@ -16,32 +38,78 @@ weather: {{ state_attr('weather.weatherapi_stratton_ave','forecast') }} {% endif %} pressure_template: > - {% if states('sensor.kdfi_barometric_pressure') %} - {{ states('sensor.kdfi_barometric_pressure') }} - {% else %} - {{ states('sensor.myradar_pressure') | float }} - {% endif %} + {% set pressures = [ + states.sensor.kdfi_barometric_pressure, + states.sensor.myradar_pressure + ] %} + {% set result = pressures | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} pressure_unit: inHg - wind_speed_template: "{{ states('sensor.pirateweather_wind_speed') | float }}" + wind_speed_template: > + {% set windspeeds = [ + states.sensor.pirateweather_wind_speed, + states.sensor.kdfi_wind_speed, + states.sensor.openweathermap_wind_speed, + states.sensor.myradar_wind_speed + ] %} + {% set result = windspeeds | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} wind_speed_unit: mph - wind_bearing_template: "{{ states('sensor.pirateweather_wind_bearing') | float }}" + wind_bearing_template: > + {% set windbearings = [ + states.sensor.pirateweather_wind_bearing, + states.sensor.openweathermap_wind_bearing, + states.sensor.myradar_wind_bearing + ] %} + {% set result = windbearings | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} visibility_template: > - {% if states('sensor.kdfi_visibility') %} - {{ states('sensor.kdfi_visibility') | float }} - {% else %} - {{ states('sensor.pirateweather_visibility') }} - {% endif %} + {% set vis = [ + states.sensor.kdfi_visibility, + states.sensor.pirateweather_visibility, + states.sensor.openweathermap_visibility + ] %} + {% set result = vis | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} visibility_unit: mi attribution_template: "Daily weather data from Iron Nerd's custom weather station template" - ozone_template: "{{ states('sensor.pirateweather_ozone') | float }}" + ozone_template: > + {% set ozones = [ + states.sensor.pirateweather_ozone, + states.sensor.myradar_ozone + ] %} + {% set result = ozones | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} precipitation_unit: in - platform: template name: "Iron Nerd Weather Station - Hourly" - condition_template: "{{ states('weather.iron_nerd_studios') }}" - temperature_template: "{{ states('sensor.pirateweather_temperature') | float }}" + condition_template: > + {% set stations = [ + states.weather.iron_nerd_studios, + states.weather.kdfi_daynight, + states.weather.openweathermap + ] %} + {% set result = stations | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) }} + temperature_template: > + {% set temps = [ + states.sensor.pirateweather_temperature, + states.sensor.kdfi_temperature, + states.sensor.openweathermap_temperature, + states.sensor.myradar_temperature + ] %} + {% set sensor = temps | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(sensor) | float }} temperature_unit: °F - humidity_template: "{{ states('sensor.pirateweather_humidity') | float }}" + humidity_template: > + {% set humidity = [ + states.sensor.pirateweather_humidity, + states.sensor.kdfi_relative_humidity, + states.sensor.openweathermap_humidity + ] %} + {% set result = humidity | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} forecast_template: > {% if state_attr('weather.kdfi_hourly','forecast') %} {{ state_attr('weather.kdfi_hourly', 'forecast') }} @@ -49,24 +117,48 @@ weather: {{ state_attr('weather.iron_nerd_studios_hourly','forecast') }} {% endif %} pressure_template: > - {% if states('sensor.kdfi_barometric_pressure') %} - {{ states('sensor.kdfi_barometric_pressure') }} - {% else %} - {{ states('sensor.myradar_pressure') | float }} - {% endif %} + {% set pressures = [ + states.sensor.kdfi_barometric_pressure, + states.sensor.myradar_pressure + ] %} + {% set result = pressures | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} pressure_unit: inHg - wind_speed_template: "{{ states('sensor.pirateweather_wind_speed') | float }}" + wind_speed_template: > + {% set windspeeds = [ + states.sensor.pirateweather_wind_speed, + states.sensor.kdfi_wind_speed, + states.sensor.openweathermap_wind_speed, + states.sensor.myradar_wind_speed + ] %} + {% set result = windspeeds | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} wind_speed_unit: mph - wind_bearing_template: "{{ states('sensor.pirateweather_wind_bearing') | float }}" + wind_bearing_template: > + {% set windbearings = [ + states.sensor.pirateweather_wind_bearing, + states.sensor.openweathermap_wind_bearing, + states.sensor.myradar_wind_bearing + ] %} + {% set result = windbearings | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} visibility_template: > - {% if states('sensor.kdfi_visibility') %} - {{ states('sensor.kdfi_visibility') | float }} - {% else %} - {{ states('sensor.pirateweather_visibility') }} - {% endif %} + {% set vis = [ + states.sensor.kdfi_visibility, + states.sensor.pirateweather_visibility, + states.sensor.openweathermap_visibility + ] %} + {% set result = vis | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} visibility_unit: mi attribution_template: "Hourly weather data from Iron Nerd's custom weather station template" - ozone_template: "{{ states('sensor.pirateweather_ozone') | float }}" + ozone_template: > + {% set ozones = [ + states.sensor.pirateweather_ozone, + states.sensor.myradar_ozone + ] %} + {% set result = ozones | selectattr('state','ne','unavailable') | selectattr('state','ne','unknown') | map(attribute='entity_id') | list | first %} + {{ states(result) | float }} precipitation_unit: in template: