esphome-eink-dashboard/sensor.yaml
Stephen Ludgate 7a6f5c98eb
Correct nigh time symbols when Sun has set
I didn't notice a bug in my nigh time symbol check to make the Moon symbols appear after Sun set. Turns out when the Sun has set, the original code was checking the setting of the FOLLOWING day, so the condition was never met, so night time symbols during night were reverting to day time. 

This update checks if Sun has set or not, and checks for appropriate rising or setting times depending if Sun has set or not.

(future update would be to swap out Sun rising and setting times with Sun dusk and dawn times, as a bright Sun icon for 8pm (here in UK in summer) looks odd when it is getting dark, meh, maybe?!  ¯\_(ツ)_/¯
2022-08-30 12:21:40 +01:00

132 lines
7.2 KiB
YAML

sensor:
# Look up train arrival times using the GTFS_RT custom component (https://github.com/zacs/ha-gtfs-rt).
# You need to get your own MTA API Key, and also look up the stopID of your station at: https://transitfeeds.com/p/mta/79/latest/stops
# Alternatively, you can also use the GoodService.io API:
# https://www.goodservice.io/api/stops/<stop_id>
- platform: gtfs_rt
trip_update_url: "https://api-endpoint.mta.info/Dataservice/mtagtfsfeeds/nyct%2Fgtfs-l"
x_api_key: ENTER_YOUR_OWN_API_KEY
scan_interval: 60
entity_namespace: gtfs_mta_subway
departures:
- name: "Station (Northbound)"
route: "X"
stopid: "X00N"
- name: "Station (Southboard)"
route: "X"
stopid: "X00S"
# Get train service status from Goodservice.io
- platform: rest
resource: https://www.goodservice.io/api/routes/L
method: GET
scan_interval: 300
name: "MTA Subway L Service Status"
value_template: "{{ value_json.status }}"
json_attributes:
- "color"
- "service_change_summaries"
- "direction_statuses"
- "delay_summaries"
- "service_irregularity_summaries"
- "service_changes"
# Bundle up all the data to send over to Weatherman.
template:
- trigger:
platform: time_pattern
minutes: "/1"
sensor:
- name: Weatherman Data
state: "OK"
attributes:
train_status: >
{{ states('sensor.mta_subway_l_service_status') | upper }}
train_status_manhattan: >
{{ state_attr('sensor.mta_subway_l_service_status', 'direction_statuses').north | upper }}
train_status_canarsie: >
{{ state_attr('sensor.mta_subway_l_service_status', 'direction_statuses').south | upper }}
weather_condition_now: >
{% set cond_now = states('weather.hourly') %}
{% if states('sun.sun') == 'below_horizon' %}
{% if cond_now == 'sunny' %} night {% elif cond_now == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond_now }} {% endif %}
{% else %}
{{ cond_now }}
{% endif %}
weather_condition_0: >
{% set cond0 = state_attr('weather.hourly', 'forecast')[0].condition %}
{% set next_setting = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% set next_rising = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set cond0_time = as_timestamp(state_attr('weather.hourly', 'forecast')[0].datetime) %}
{% if states('sun.sun') == 'above_horizon' and cond0_time > next_setting %}
{% if cond0 == 'sunny' %} night {% elif cond0 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond0 }} {% endif %}
{% elif states('sun.sun') == 'below_horizon' and cond0_time < next_rising %}
{% if cond0 == 'sunny' %} night {% elif cond0 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond0 }} {% endif %}
{% else %}
{{ cond0 }}
{% endif %}
weather_temperature_0: >
{{ state_attr('weather.hourly', 'forecast')[0].temperature | round }}
weather_timestamp_0: >
{{ as_timestamp(state_attr('weather.hourly', 'forecast')[0].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.hourly', 'forecast')[0].datetime) | timestamp_custom('%p') }}
weather_condition_1: >
{% set cond1 = state_attr('weather.hourly', 'forecast')[1].condition %}
{% set next_setting = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% set next_rising = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set cond1_time = as_timestamp(state_attr('weather.hourly', 'forecast')[1].datetime) %}
{% if states('sun.sun') == 'above_horizon' and cond1_time > next_setting %}
{% if cond1 == 'sunny' %} night {% elif cond1 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond1 }} {% endif %}
{% elif states('sun.sun') == 'below_horizon' and cond1_time < next_rising %}
{% if cond1 == 'sunny' %} night {% elif cond1 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond1 }} {% endif %}
{% else %}
{{ cond1 }}
{% endif %}
weather_temperature_1: >
{{ state_attr('weather.hourly', 'forecast')[1].temperature | round }}
weather_timestamp_1: >
{{ as_timestamp(state_attr('weather.hourly', 'forecast')[1].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.hourly', 'forecast')[1].datetime) | timestamp_custom('%p') }}
weather_condition_2: >
{% set cond2 = state_attr('weather.hourly', 'forecast')[2].condition %}
{% set next_setting = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% set next_rising = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set cond2_time = as_timestamp(state_attr('weather.hourly', 'forecast')[2].datetime) %}
{% if states('sun.sun') == 'above_horizon' and cond2_time > next_setting %}
{% if cond2 == 'sunny' %} night {% elif cond2 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond2 }} {% endif %}
{% elif states('sun.sun') == 'below_horizon' and cond2_time < next_rising %}
{% if cond2 == 'sunny' %} night {% elif cond2 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond2 }} {% endif %}
{% else %}
{{ cond2 }}
{% endif %}
weather_temperature_2: >
{{ state_attr('weather.hourly', 'forecast')[2].temperature | round }}
weather_timestamp_2: >
{{ as_timestamp(state_attr('weather.hourly', 'forecast')[2].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.hourly', 'forecast')[2].datetime) | timestamp_custom('%p') }}
weather_condition_3: >
{% set cond3 = state_attr('weather.hourly', 'forecast')[3].condition %}
{% set next_setting = as_timestamp(state_attr('sun.sun', 'next_setting')) %}
{% set next_rising = as_timestamp(state_attr('sun.sun', 'next_rising')) %}
{% set cond3_time = as_timestamp(state_attr('weather.hourly', 'forecast')[3].datetime) %}
{% if states('sun.sun') == 'above_horizon' and cond3_time > next_setting %}
{% if cond3 == 'sunny' %} night {% elif cond3 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond3 }} {% endif %}
{% elif states('sun.sun') == 'below_horizon' and cond3_time < next_rising %}
{% if cond3 == 'sunny' %} night {% elif cond3 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond3 }} {% endif %}
{% else %}
{{ cond3 }}
{% endif %}
weather_temperature_3: >
{{ state_attr('weather.hourly', 'forecast')[3].temperature | round }}
weather_timestamp_3: >
{{ as_timestamp(state_attr('weather.hourly', 'forecast')[3].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.hourly', 'forecast')[3].datetime) | timestamp_custom('%p') }}