Add destination and icon (#18210)

* Add destination and icon

* Update test_transport_nsw.py

* Error handling fix in external lib

* Reverse sensor name change to prevent break
This commit is contained in:
Dav0815 2018-11-05 18:27:20 +11:00 committed by Fabian Affolter
parent 1c3ef8be55
commit 6e4ce35a69
4 changed files with 43 additions and 11 deletions

View File

@ -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']}

View File

@ -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

View File

@ -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

View File

@ -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'