diff --git a/homeassistant/components/sensor/swiss_public_transport.py b/homeassistant/components/sensor/swiss_public_transport.py index 69c69e29afb2ee4c5d7fbca8edc3e69ca0f5bb7f..33dd69ff1e4077526e908046e22cc1c335288d02 100644 --- a/homeassistant/components/sensor/swiss_public_transport.py +++ b/homeassistant/components/sensor/swiss_public_transport.py @@ -18,6 +18,12 @@ from homeassistant.helpers.entity import Entity _LOGGER = logging.getLogger(__name__) _RESOURCE = 'http://transport.opendata.ch/v1/' +ATTR_DEPARTURE_TIME1 = 'Next departure' +ATTR_DEPARTURE_TIME2 = 'Next on departure' +ATTR_START = 'Start' +ATTR_TARGET = 'Destination' +ATTR_REMAINING_TIME = 'Remaining time' + # Return cached results if last scan was less then this time ago MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=60) @@ -52,7 +58,9 @@ class SwissPublicTransportSensor(Entity): def __init__(self, data, journey): self.data = data - self._name = '{}-{}'.format(journey[2], journey[3]) + self._name = 'Next Departure' + self._from = journey[2] + self._to = journey[3] self.update() @property @@ -65,12 +73,26 @@ class SwissPublicTransportSensor(Entity): """ Returns the state of the device. """ return self._state + @property + def state_attributes(self): + """ Returns the state attributes. """ + if self._times is not None: + return { + ATTR_DEPARTURE_TIME1: self._times[0], + ATTR_DEPARTURE_TIME2: self._times[1], + ATTR_START: self._from, + ATTR_TARGET: self._to, + ATTR_REMAINING_TIME: '{}'.format( + ':'.join(str(self._times[2]).split(':')[:2])) + } + # pylint: disable=too-many-branches def update(self): """ Gets the latest data from opendata.ch and updates the states. """ - times = self.data.update() + self.data.update() + self._times = self.data.times try: - self._state = ', '.join(times) + self._state = self._times[0] except TypeError: pass @@ -82,6 +104,7 @@ class PublicTransportData(object): def __init__(self, journey): self.start = journey[0] self.destination = journey[1] + self.times = {} @Throttle(MIN_TIME_BETWEEN_UPDATES) def update(self): @@ -94,16 +117,21 @@ class PublicTransportData(object): 'to=' + self.destination + '&' + 'fields[]=connections/from/departureTimestamp/&' + 'fields[]=connections/', - timeout=10) + timeout=30) connections = response.json()['connections'][:2] try: - return [ + self.times = [ dt_util.datetime_to_time_str( dt_util.as_local(dt_util.utc_from_timestamp( item['from']['departureTimestamp'])) ) for item in connections ] + self.times.append( + dt_util.as_local( + dt_util.utc_from_timestamp( + connections[0]['from']['departureTimestamp'])) - + dt_util.as_local(dt_util.utcnow())) except KeyError: - return ['n/a'] + self.times = ['n/a']