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/ - 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" template: # Update screen only when occupancy is detected. - binary_sensor: - name: Weatherman Motion Detected unique_id: "dfa78de7-d761-425f-9731-86f1af332eac" device_class: "occupancy" delay_off: 1min state: >- {%- if states('binary_sensor.living_room_hue_sensor_motion') == 'on' or states('binary_sensor.front_door_switchbot_contact_sensor_motion_detected') == 'on' or states('binary_sensor.kitchen_counter_motion_sensor_motion') == 'on' %} on {%- else -%} off {%- endif -%} # Bundle up all the data to send over to Weatherman (ESPHome device). - 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.valhalla_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.valhalla_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.valhalla_hourly', 'forecast')[0].datetime) %} {% if cond0_time < next_rising and next_rising < next_setting %} {% if cond0 == 'sunny' %} night {% elif cond0 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond0 }} {% endif %} {% else %} {{ cond0 }} {% endif %} weather_temperature_0: > {{ state_attr('weather.valhalla_hourly', 'forecast')[0].temperature | round }} weather_timestamp_0: > {{ as_timestamp(state_attr('weather.valhalla_hourly', 'forecast')[0].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.valhalla_hourly', 'forecast')[0].datetime) | timestamp_custom('%p') }} weather_condition_1: > {% set cond1 = state_attr('weather.valhalla_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.valhalla_hourly', 'forecast')[1].datetime) %} {% if cond1_time < next_rising and next_rising < next_setting %} {% if cond1 == 'sunny' %} night {% elif cond1 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond1 }} {% endif %} {% else %} {{ cond1 }} {% endif %} weather_temperature_1: > {{ state_attr('weather.valhalla_hourly', 'forecast')[1].temperature | round }} weather_timestamp_1: > {{ as_timestamp(state_attr('weather.valhalla_hourly', 'forecast')[1].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.valhalla_hourly', 'forecast')[1].datetime) | timestamp_custom('%p') }} weather_condition_2: > {% set cond2 = state_attr('weather.valhalla_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.valhalla_hourly', 'forecast')[2].datetime) %} {% if cond2_time < next_rising and next_rising < next_setting %} {% if cond2 == 'sunny' %} night {% elif cond2 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond2 }} {% endif %} {% else %} {{ cond2 }} {% endif %} weather_temperature_2: > {{ state_attr('weather.valhalla_hourly', 'forecast')[2].temperature | round }} weather_timestamp_2: > {{ as_timestamp(state_attr('weather.valhalla_hourly', 'forecast')[2].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.valhalla_hourly', 'forecast')[2].datetime) | timestamp_custom('%p') }} weather_condition_3: > {% set cond3 = state_attr('weather.valhalla_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.valhalla_hourly', 'forecast')[3].datetime) %} {% if cond3_time < next_rising and next_rising < next_setting %} {% if cond3 == 'sunny' %} night {% elif cond3 == 'partlycloudy' %} night-partly-cloudy {% else %} {{ cond3 }} {% endif %} {% else %} {{ cond3 }} {% endif %} weather_temperature_3: > {{ state_attr('weather.valhalla_hourly', 'forecast')[3].temperature | round }} weather_timestamp_3: > {{ as_timestamp(state_attr('weather.valhalla_hourly', 'forecast')[3].datetime) | timestamp_custom('%I') | int }} {{ as_timestamp(state_attr('weather.valhalla_hourly', 'forecast')[3].datetime) | timestamp_custom('%p') }}