From edeb92ea423b9559b799cf7193a3d97d881da0a0 Mon Sep 17 00:00:00 2001 From: Marc Plano-Lesay Date: Sat, 24 Jun 2017 17:45:14 +0200 Subject: [PATCH] Add offset option to sensor.gtfs (#7980) * Add offset option to sensor.gtfs * Fix long lines in sensor.gtfs * Expose GTFS offset as an attribute --- homeassistant/components/sensor/gtfs.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/sensor/gtfs.py b/homeassistant/components/sensor/gtfs.py index 961b8067009..c5313a7c215 100644 --- a/homeassistant/components/sensor/gtfs.py +++ b/homeassistant/components/sensor/gtfs.py @@ -25,6 +25,7 @@ _LOGGER = logging.getLogger(__name__) CONF_DATA = 'data' CONF_DESTINATION = 'destination' CONF_ORIGIN = 'origin' +CONF_OFFSET = 'offset' DEFAULT_NAME = 'GTFS Sensor' DEFAULT_PATH = 'gtfs' @@ -38,15 +39,17 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_DESTINATION): cv.string, vol.Required(CONF_DATA): cv.string, vol.Optional(CONF_NAME): cv.string, + vol.Optional(CONF_OFFSET, default=datetime.timedelta(0)): + cv.time_period_dict, }) -def get_next_departure(sched, start_station_id, end_station_id): +def get_next_departure(sched, start_station_id, end_station_id, offset): """Get the next departure for the given schedule.""" origin_station = sched.stops_by_id(start_station_id)[0] destination_station = sched.stops_by_id(end_station_id)[0] - now = datetime.datetime.now() + now = datetime.datetime.now() + offset day_name = now.strftime('%A').lower() now_str = now.strftime('%H:%M:%S') @@ -98,7 +101,7 @@ def get_next_departure(sched, start_station_id, end_station_id): if item == {}: return None - today = datetime.datetime.today().strftime('%Y-%m-%d') + today = now.strftime('%Y-%m-%d') departure_time_string = '{} {}'.format(today, item[2]) arrival_time_string = '{} {}'.format(today, item[3]) departure_time = datetime.datetime.strptime(departure_time_string, @@ -155,6 +158,7 @@ def setup_platform(hass, config, add_devices, discovery_info=None): origin = config.get(CONF_ORIGIN) destination = config.get(CONF_DESTINATION) name = config.get(CONF_NAME) + offset = config.get(CONF_OFFSET) if not os.path.exists(gtfs_dir): os.makedirs(gtfs_dir) @@ -175,17 +179,18 @@ def setup_platform(hass, config, add_devices, discovery_info=None): if len(gtfs.feeds) < 1: pygtfs.append_feed(gtfs, os.path.join(gtfs_dir, data)) - add_devices([GTFSDepartureSensor(gtfs, name, origin, destination)]) + add_devices([GTFSDepartureSensor(gtfs, name, origin, destination, offset)]) class GTFSDepartureSensor(Entity): """Implementation of an GTFS departures sensor.""" - def __init__(self, pygtfs, name, origin, destination): + def __init__(self, pygtfs, name, origin, destination, offset): """Initialize the sensor.""" self._pygtfs = pygtfs self.origin = origin self.destination = destination + self._offset = offset self._custom_name = name self._name = '' self._unit_of_measurement = 'min' @@ -223,7 +228,7 @@ class GTFSDepartureSensor(Entity): """Get the latest data from GTFS and update the states.""" with self.lock: self._departure = get_next_departure( - self._pygtfs, self.origin, self.destination) + self._pygtfs, self.origin, self.destination, self._offset) if not self._departure: self._state = 0 self._attributes = {'Info': 'No more departures today'} @@ -249,6 +254,7 @@ class GTFSDepartureSensor(Entity): # Build attributes self._attributes = {} + self._attributes['offset'] = self._offset.seconds / 60 def dict_for_table(resource): """Return a dict for the SQLAlchemy resource given."""