Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 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
3 changes: 2 additions & 1 deletion .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ omit =

homeassistant/components/arduino.py
homeassistant/components/*/arduino.py

Comment thread
jxwolstenholme marked this conversation as resolved.
Outdated
homeassistant/components/bmw_connected_drive/*.py
homeassistant/components/*/bmw_connected_drive.py

Expand Down Expand Up @@ -461,6 +461,7 @@ omit =
homeassistant/components/device_tracker/bluetooth_le_tracker.py
homeassistant/components/device_tracker/bluetooth_tracker.py
homeassistant/components/device_tracker/bt_home_hub_5.py
homeassistant/components/device_tracker/bt_smarthub.py
homeassistant/components/device_tracker/cisco_ios.py
homeassistant/components/device_tracker/ddwrt.py
homeassistant/components/device_tracker/freebox.py
Expand Down
95 changes: 95 additions & 0 deletions homeassistant/components/device_tracker/bt_smarthub.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
"""
Support for BT Smart Hub.

"""
import logging

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 = ['btsmarthub_devicelist==0.1.1']

_LOGGER = logging.getLogger(__name__)

CONF_DEFAULT_IP = '192.168.1.254'

PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Optional(CONF_HOST, default=CONF_DEFAULT_IP): cv.string,
})


def get_scanner(hass, config):
"""Return a BT SmartHub scanner if successful."""
scanner = BTSmartHubScanner(config[DOMAIN])

return scanner if scanner.success_init else None


class BTSmartHubScanner(DeviceScanner):
"""This class queries a BT Smart Hub."""

def __init__(self, config):
"""Initialise the scanner."""

_LOGGER.info("Initialising BT Smart Hub")
self.host = config[CONF_HOST]
self.last_results = {}

# Test the router is accessible
data = self.get_bt_smarthub_data()
self.success_init = data is not None
Comment thread
jxwolstenholme marked this conversation as resolved.
Outdated

def scan_devices(self):
"""Scan for new devices and return a list with found device IDs."""
self._update_info()

return [client['mac'] for client in self.last_results]

def get_device_name(self, device):

if not self.last_results:
return None
for client in self.last_results:
if client['mac'] == device:
return client['host']
return None

def _update_info(self):
"""Ensure the information from the BT Home Hub 5 is up to date.
Return boolean if scanning successful
"""
if not self.success_init:
return False
Comment thread
jxwolstenholme marked this conversation as resolved.
Outdated

_LOGGER.info("Scanning")
data = self.get_bt_smarthub_data()
if not data:
_LOGGER.warning("Error scanning devices")
return False
Comment thread
jxwolstenholme marked this conversation as resolved.
Outdated

clients = [client for client in data.values()]
self.last_results = clients
return True
Comment thread
jxwolstenholme marked this conversation as resolved.
Outdated

def get_bt_smarthub_data(self):
"""Retrieve data from BT Smarthub and return parsed result"""
import btsmarthub_devicelist
"""Request data from bt smarthub into a list of dicts"""
data = btsmarthub_devicelist.get_devicelist(router_ip=self.host, only_active_devices=True)
Comment thread
jxwolstenholme marked this conversation as resolved.
Outdated
"""Renaming keys from parsed result"""
devices = {}
for device in data:
try:
devices[device['UserHostName']] = {
'ip': device['IPAddress'],
'mac': device['PhysAddress'],
'host': device['UserHostName'],
'status': device['Active']
}
except:
Comment thread
jxwolstenholme marked this conversation as resolved.
Outdated
pass
return devices
3 changes: 3 additions & 0 deletions requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,9 @@ bt_proximity==0.1.2
# homeassistant.components.device_tracker.bt_home_hub_5
bthomehub5-devicelist==0.1.1

# homeassistant.components.device_tracker.bt_smarthub
btsmarthub_devicelist==0.1.1

# homeassistant.components.sensor.buienradar
# homeassistant.components.weather.buienradar
buienradar==0.91
Expand Down