Improved forecast for the actual overnight low temperature
This commit is contained in:
@ -13,7 +13,25 @@ weather:
|
||||
wind_bearing_template: "{{ states('sensor.pirateweather_wind_bearing') | float }}"
|
||||
visibility_template: "{{ states('sensor.kdfi_visibility') | float }}"
|
||||
visibility_unit: mi
|
||||
attribution_template: "Weather data from Iron Nerd's custom weather station template"
|
||||
attribution_template: "Daily weather data from Iron Nerd's custom weather station template"
|
||||
ozone_template: "{{ states('sensor.pirateweather_ozone') | 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 }}"
|
||||
temperature_unit: °F
|
||||
humidity_template: "{{ states('sensor.pirateweather_humidity') | float }}"
|
||||
forecast_template: "{{ state_attr('weather.kdfi_hourly', 'forecast') }}"
|
||||
pressure_template: "{{ states('sensor.kdfi_barometric_pressure') | float }}"
|
||||
pressure_unit: inHg
|
||||
wind_speed_template: "{{ states('sensor.pirateweather_wind_speed') | float }}"
|
||||
wind_speed_unit: mph
|
||||
wind_bearing_template: "{{ states('sensor.pirateweather_wind_bearing') | float }}"
|
||||
visibility_template: "{{ states('sensor.kdfi_visibility') | float }}"
|
||||
visibility_unit: mi
|
||||
attribution_template: "Hourly weather data from Iron Nerd's custom weather station template"
|
||||
ozone_template: "{{ states('sensor.pirateweather_ozone') | float }}"
|
||||
precipitation_unit: in
|
||||
|
||||
@ -262,7 +280,7 @@ sensor:
|
||||
'Later tonight expect a low of ',
|
||||
'Overnight expect a low of '
|
||||
] | random }}
|
||||
{{ states('sensor.tonights_low_temp') }} degrees.
|
||||
{{ states('sensor.overnight_lowest_temperature') }} degrees.
|
||||
{%- endmacro -%}
|
||||
{# a macro that removes all newline characters, empty spaces, and returns formatted text #}
|
||||
{%- macro cleanup(data) -%}
|
||||
@ -605,13 +623,13 @@ sensor:
|
||||
'Later tonight expect a low of ',
|
||||
'Overnight expect a low of '
|
||||
] | random }}
|
||||
{{ states('sensor.tonights_low_temp') }} degrees.
|
||||
{{ states('sensor.overnight_lowest_temperature') }} degrees.
|
||||
{%- else -%}
|
||||
{{ [
|
||||
'Tonight expect a low of ',
|
||||
'Overnight expect a low of '
|
||||
] | random }}
|
||||
{{ states('sensor.tonights_low_temp') }} degrees.
|
||||
{{ states('sensor.overnight_lowest_temperature') }} degrees.
|
||||
{% endif %}
|
||||
{%- endmacro -%}
|
||||
{# a macro that removes all newline characters, empty spaces, and returns formatted text #}
|
||||
@ -931,6 +949,45 @@ sensor:
|
||||
mdi:alert-remove
|
||||
{% endif %}
|
||||
|
||||
# Sensors to more accurately forecast the overnight temperatures
|
||||
overnight_lowest_temperature:
|
||||
friendly_name: 'Overnight Lowest Temperature'
|
||||
unique_id: 70bdffbe-dc55-4913-af70-a37a6db2bcaa
|
||||
unit_of_measurement: '°F'
|
||||
value_template: >
|
||||
{% set ns = namespace(temps=[]) %}
|
||||
{% set x = state_attr('weather.iron_nerd_weather_station_hourly','forecast') | count %}
|
||||
{% set pd = state_attr('weather.iron_nerd_weather_station_hourly','forecast') %}
|
||||
{% for i in range(0,x) %}
|
||||
{% set hr = as_timestamp(as_local(as_datetime(pd[i].datetime))) | timestamp_custom('%H') | int %}
|
||||
{% if hr in range(21,24) or hr in range(0,8) %}
|
||||
{% if as_local(as_datetime(pd[i].datetime)) == now().replace(hour=hr, minute=00, second=0, microsecond=0) + timedelta(days=0) or
|
||||
as_local(as_datetime(pd[i].datetime)) == now().replace(hour=hr, minute=00, second=0, microsecond=0) + timedelta(days=1) %}
|
||||
{% set ns.temps = ns.temps + [pd[i].temperature] %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{{ ns.temps | min | int }}
|
||||
icon_template: mdi:thermometer
|
||||
|
||||
input_number:
|
||||
today_calculated_high_temp:
|
||||
name: Today Calculated High Temp
|
||||
min: -100
|
||||
max: 150
|
||||
step: 1
|
||||
unit_of_measurement: °F
|
||||
icon: mdi:thermometer
|
||||
mode: box
|
||||
today_calculated_low_temp:
|
||||
name: Today Calculated Low Temp
|
||||
min: -100
|
||||
max: 150
|
||||
step: 1
|
||||
unit_of_measurement: °F
|
||||
icon: mdi:thermometer
|
||||
mode: box
|
||||
|
||||
input_boolean:
|
||||
freeze_warning:
|
||||
name: Freeze Warning
|
||||
@ -966,7 +1023,7 @@ automation:
|
||||
alias: Forecast Low Near Freezing
|
||||
trigger:
|
||||
- platform: numeric_state
|
||||
entity_id: sensor.tonights_low_temp
|
||||
entity_id: sensor.overnight_lowest_temperature
|
||||
below: 35
|
||||
- platform: numeric_state
|
||||
entity_id: sensor.pirateweather_temperature
|
||||
@ -983,14 +1040,14 @@ automation:
|
||||
alias: Forecast Low Above Freezing
|
||||
trigger:
|
||||
- platform: numeric_state
|
||||
entity_id: sensor.tonights_low_temp
|
||||
entity_id: sensor.overnight_lowest_temperature
|
||||
above: 33
|
||||
condition:
|
||||
- condition: state
|
||||
entity_id: input_boolean.freeze_warning
|
||||
state: 'on'
|
||||
- condition: numeric_state
|
||||
entity_id: sensor.tonights_low_temp
|
||||
entity_id: sensor.overnight_lowest_temperature
|
||||
above: 35
|
||||
action:
|
||||
- service: input_boolean.turn_off
|
||||
|
@ -319,7 +319,7 @@ script:
|
||||
option: >
|
||||
{% if is_state('input_boolean.kallen_overnight','on') %}
|
||||
N/A
|
||||
{% elif (states('sensor.tonights_low_temp') | int) >= (states('input_number.kallen_fan_threshold') | int) %}
|
||||
{% elif (states('sensor.overnight_lowest_temperature') | int) >= (states('input_number.kallen_fan_threshold') | int) %}
|
||||
Fan
|
||||
{% else %}
|
||||
White Noise
|
||||
@ -513,7 +513,7 @@ script:
|
||||
entity_id: input_datetime.master_bedroom_cooling
|
||||
data:
|
||||
time: >
|
||||
{% set low = states('sensor.tonights_low_temp') | int %}
|
||||
{% set low = states('sensor.overnight_lowest_temperature') | int %}
|
||||
{% if is_state('input_boolean.hot_day','on') and is_state('binary_sensor.kallen_school_tomorrow','on') %}
|
||||
20:00
|
||||
{% elif is_state('input_boolean.hot_day','on') and is_state('binary_sensor.kallen_school_tomorrow','off') %}
|
||||
@ -529,7 +529,7 @@ script:
|
||||
entity_id: input_datetime.master_bedroom_fan
|
||||
data:
|
||||
time: >
|
||||
{% set low = states('sensor.tonights_low_temp') | int %}
|
||||
{% set low = states('sensor.overnight_lowest_temperature') | int %}
|
||||
{% set high = states('sensor.todays_high_temp') | int %}
|
||||
{% if low > 60 or is_state('input_boolean.hot_day','on') %}
|
||||
22:30
|
||||
@ -547,8 +547,8 @@ script:
|
||||
option: >
|
||||
{% if is_state('input_boolean.master_bedroom_aircon_installed','off') %}
|
||||
N/A
|
||||
{% elif (states('sensor.tonights_low_temp') | int) >= (states('input_number.master_bedroom_aircon_run_threshold') | int) %}
|
||||
{% if (states('sensor.tonights_low_temp') | int) >= (states('input_number.master_bedroom_aircon_mode_threshold') | int) %}
|
||||
{% elif (states('sensor.overnight_lowest_temperature') | int) >= (states('input_number.master_bedroom_aircon_run_threshold') | int) %}
|
||||
{% if (states('sensor.overnight_lowest_temperature') | int) >= (states('input_number.master_bedroom_aircon_mode_threshold') | int) %}
|
||||
AC
|
||||
{% else %}
|
||||
Fan
|
||||
@ -561,7 +561,7 @@ script:
|
||||
entity_id: input_select.scheduled_climate_mode_master_bedroom_fan
|
||||
data:
|
||||
option: >
|
||||
{% if (states('sensor.tonights_low_temp') | int) >= (states('input_number.master_bedroom_fan_threshold') | int) %}
|
||||
{% if (states('sensor.overnight_lowest_temperature') | int) >= (states('input_number.master_bedroom_fan_threshold') | int) %}
|
||||
Fan
|
||||
{% else %}
|
||||
N/A
|
||||
@ -600,7 +600,7 @@ script:
|
||||
data:
|
||||
time: >
|
||||
{% set high = states('sensor.todays_high_temp') | int %}
|
||||
{% set low = states('sensor.tonights_low_temp') | int %}
|
||||
{% set low = states('sensor.overnight_lowest_temperature') | int %}
|
||||
{% if is_state('input_boolean.hot_day','on') %}
|
||||
22:00
|
||||
{% elif high >= 80 or low >= 60 %}
|
||||
@ -619,7 +619,7 @@ script:
|
||||
data:
|
||||
option: >
|
||||
{% if is_state('input_boolean.emma_bedroom_aircon_installed','on') %}
|
||||
{% if (states('sensor.tonights_low_temp') | int) >= (states('input_number.emma_aircon_threshold') | int) %}
|
||||
{% if (states('sensor.overnight_lowest_temperature') | int) >= (states('input_number.emma_aircon_threshold') | int) %}
|
||||
AC
|
||||
{% else %}
|
||||
White Noise
|
||||
|
@ -458,7 +458,7 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
{% if (states('sensor.tonights_low_temp') | int) <= (states('input_number.overnight_low_threshold') | int ) %}
|
||||
{% if (states('sensor.overnight_lowest_temperature') | int) <= (states('input_number.overnight_low_threshold') | int ) %}
|
||||
"It will be very cold tonight, make sure to use extra blankets, wear more clothes, or whatever else will help you stay warm! Additionally, make sure Emma's heater is set high enough!"
|
||||
{% endif %}
|
||||
</p>
|
||||
|
Reference in New Issue
Block a user