diff --git a/homeassistant/components/sensor/transport_nsw.py b/homeassistant/components/sensor/transport_nsw.py index 08a2907748c..2e28d81a2c3 100644 --- a/homeassistant/components/sensor/transport_nsw.py +++ b/homeassistant/components/sensor/transport_nsw.py @@ -4,6 +4,7 @@ Transport NSW (AU) sensor to query next leave event for a specified stop. For more details about this platform, please refer to the documentation at https://home-assistant.io/components/sensor.transport_nsw/ """ +from datetime import timedelta import logging import voluptuous as vol @@ -13,7 +14,7 @@ from homeassistant.helpers.entity import Entity from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import (CONF_NAME, CONF_API_KEY, ATTR_ATTRIBUTION) -REQUIREMENTS = ['PyTransportNSW==0.0.8'] +REQUIREMENTS = ['PyTransportNSW==0.1.1'] _LOGGER = logging.getLogger(__name__) @@ -22,19 +23,34 @@ ATTR_ROUTE = 'route' ATTR_DUE_IN = 'due' ATTR_DELAY = 'delay' ATTR_REAL_TIME = 'real_time' +ATTR_DESTINATION = 'destination' +ATTR_MODE = 'mode' CONF_ATTRIBUTION = "Data provided by Transport NSW" CONF_STOP_ID = 'stop_id' CONF_ROUTE = 'route' +CONF_DESTINATION = 'destination' DEFAULT_NAME = "Next Bus" -ICON = "mdi:bus" +ICONS = { + 'Train': 'mdi:train', + 'Lightrail': 'mdi:tram', + 'Bus': 'mdi:bus', + 'Coach': 'mdi:bus', + 'Ferry': 'mdi:ferry', + 'Schoolbus': 'mdi:bus', + 'n/a': 'mdi:clock', + None: 'mdi:clock' +} + +SCAN_INTERVAL = timedelta(seconds=60) PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_STOP_ID): cv.string, vol.Required(CONF_API_KEY): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_ROUTE, default=""): cv.string, + vol.Optional(CONF_DESTINATION, default=""): cv.string }) @@ -43,9 +59,10 @@ def setup_platform(hass, config, add_entities, discovery_info=None): stop_id = config[CONF_STOP_ID] api_key = config[CONF_API_KEY] route = config.get(CONF_ROUTE) + destination = config.get(CONF_DESTINATION) name = config.get(CONF_NAME) - data = PublicTransportData(stop_id, route, api_key) + data = PublicTransportData(stop_id, route, destination, api_key) add_entities([TransportNSWSensor(data, stop_id, name)], True) @@ -58,6 +75,7 @@ class TransportNSWSensor(Entity): self._name = name self._stop_id = stop_id self._times = self._state = None + self._icon = ICONS[None] @property def name(self): @@ -79,6 +97,8 @@ class TransportNSWSensor(Entity): ATTR_ROUTE: self._times[ATTR_ROUTE], ATTR_DELAY: self._times[ATTR_DELAY], ATTR_REAL_TIME: self._times[ATTR_REAL_TIME], + ATTR_DESTINATION: self._times[ATTR_DESTINATION], + ATTR_MODE: self._times[ATTR_MODE], ATTR_ATTRIBUTION: CONF_ATTRIBUTION } @@ -90,36 +110,43 @@ class TransportNSWSensor(Entity): @property def icon(self): """Icon to use in the frontend, if any.""" - return ICON + return self._icon def update(self): """Get the latest data from Transport NSW and update the states.""" self.data.update() self._times = self.data.info self._state = self._times[ATTR_DUE_IN] + self._icon = ICONS[self._times[ATTR_MODE]] class PublicTransportData: """The Class for handling the data retrieval.""" - def __init__(self, stop_id, route, api_key): + def __init__(self, stop_id, route, destination, api_key): """Initialize the data object.""" import TransportNSW self._stop_id = stop_id self._route = route + self._destination = destination self._api_key = api_key self.info = {ATTR_ROUTE: self._route, ATTR_DUE_IN: 'n/a', ATTR_DELAY: 'n/a', - ATTR_REAL_TIME: 'n/a'} + ATTR_REAL_TIME: 'n/a', + ATTR_DESTINATION: 'n/a', + ATTR_MODE: None} self.tnsw = TransportNSW.TransportNSW() def update(self): """Get the next leave time.""" _data = self.tnsw.get_departures(self._stop_id, self._route, + self._destination, self._api_key) self.info = {ATTR_ROUTE: _data['route'], ATTR_DUE_IN: _data['due'], ATTR_DELAY: _data['delay'], - ATTR_REAL_TIME: _data['real_time']} + ATTR_REAL_TIME: _data['real_time'], + ATTR_DESTINATION: _data['destination'], + ATTR_MODE: _data['mode']} diff --git a/requirements_all.txt b/requirements_all.txt index 9f376bb0d41..6bf7ff0c98e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -56,7 +56,7 @@ PyRMVtransport==0.1.3 PySwitchbot==0.3 # homeassistant.components.sensor.transport_nsw -PyTransportNSW==0.0.8 +PyTransportNSW==0.1.1 # homeassistant.components.xiaomi_aqara PyXiaomiGateway==0.11.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 75e21b33c38..7209e3b6b2e 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -25,7 +25,7 @@ HAP-python==2.2.2 PyRMVtransport==0.1.3 # homeassistant.components.sensor.transport_nsw -PyTransportNSW==0.0.8 +PyTransportNSW==0.1.1 # homeassistant.components.notify.yessssms YesssSMS==0.2.3 diff --git a/tests/components/sensor/test_transport_nsw.py b/tests/components/sensor/test_transport_nsw.py index c0ad4be4110..231e175893f 100644 --- a/tests/components/sensor/test_transport_nsw.py +++ b/tests/components/sensor/test_transport_nsw.py @@ -10,18 +10,21 @@ VALID_CONFIG = {'sensor': { 'platform': 'transport_nsw', 'stop_id': '209516', 'route': '199', + 'destination': '', 'api_key': 'YOUR_API_KEY'} } -def get_departuresMock(_stop_id, route, api_key): +def get_departuresMock(_stop_id, route, destination, api_key): """Mock TransportNSW departures loading.""" data = { 'stop_id': '209516', 'route': '199', 'due': 16, 'delay': 6, - 'real_time': 'y' + 'real_time': 'y', + 'destination': 'Palm Beach', + 'mode': 'Bus' } return data @@ -48,3 +51,5 @@ class TestRMVtransportSensor(unittest.TestCase): assert state.attributes['route'] == '199' assert state.attributes['delay'] == 6 assert state.attributes['real_time'] == 'y' + assert state.attributes['destination'] == 'Palm Beach' + assert state.attributes['mode'] == 'Bus'