Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 34 additions & 7 deletions homeassistant/components/sensor/transport_nsw.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
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
Expand All @@ -13,7 +14,7 @@
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__)

Expand All @@ -22,19 +23,34 @@
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
})


Expand All @@ -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)


Expand All @@ -58,6 +75,7 @@ def __init__(self, data, stop_id, name):
self._name = name
self._stop_id = stop_id
self._times = self._state = None
self._icon = ICONS[None]

@property
def name(self):
Expand All @@ -79,6 +97,8 @@ def device_state_attributes(self):
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
}

Expand All @@ -90,36 +110,43 @@ def unit_of_measurement(self):
@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']}
2 changes: 1 addition & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion requirements_test_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
9 changes: 7 additions & 2 deletions tests/components/sensor/test_transport_nsw.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,21 @@
'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

Expand All @@ -48,3 +51,5 @@ def test_transportnsw_config(self, mock_get_departures):
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'