59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
"""Support for device tracking via Xfinity Gateways."""
|
|
import logging
|
|
|
|
from requests.exceptions import RequestException
|
|
import voluptuous as vol
|
|
|
|
import homeassistant.helpers.config_validation as cv
|
|
from homeassistant.components.device_tracker import (
|
|
DOMAIN, PLATFORM_SCHEMA, DeviceScanner)
|
|
from homeassistant.const import CONF_HOST
|
|
|
|
REQUIREMENTS = ['xfinity-gateway==0.0.4']
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
DEFAULT_HOST = '10.0.0.1'
|
|
|
|
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
|
|
vol.Optional(CONF_HOST, default=DEFAULT_HOST): cv.string
|
|
})
|
|
|
|
|
|
def get_scanner(hass, config):
|
|
"""Validate the configuration and return an Xfinity Gateway scanner."""
|
|
from xfinity_gateway import XfinityGateway
|
|
|
|
gateway = XfinityGateway(config[DOMAIN][CONF_HOST])
|
|
scanner = None
|
|
try:
|
|
gateway.scan_devices()
|
|
scanner = XfinityDeviceScanner(gateway)
|
|
except (RequestException, ValueError):
|
|
_LOGGER.error("Error communicating with Xfinity Gateway. "
|
|
"Check host: %s", gateway.host)
|
|
|
|
return scanner
|
|
|
|
|
|
class XfinityDeviceScanner(DeviceScanner):
|
|
"""This class queries an Xfinity Gateway."""
|
|
|
|
def __init__(self, gateway):
|
|
"""Initialize the scanner."""
|
|
self.gateway = gateway
|
|
|
|
def scan_devices(self):
|
|
"""Scan for new devices and return a list of found MACs."""
|
|
connected_devices = []
|
|
try:
|
|
connected_devices = self.gateway.scan_devices()
|
|
except (RequestException, ValueError):
|
|
_LOGGER.error("Unable to scan devices. "
|
|
"Check connection to gateway")
|
|
return connected_devices
|
|
|
|
def get_device_name(self, device):
|
|
"""Return the name of the given device or None if we don't know."""
|
|
return self.gateway.get_device_name(device)
|