Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switchmate #16395

Merged
merged 16 commits into from
Sep 12, 2018
29 changes: 9 additions & 20 deletions homeassistant/components/switch/switchmate.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,12 @@
import homeassistant.helpers.config_validation as cv
from homeassistant.components.switch import SwitchDevice, PLATFORM_SCHEMA
from homeassistant.const import CONF_NAME, CONF_MAC
from homeassistant.exceptions import PlatformNotReady

REQUIREMENTS = ['bluepy==1.1.4']
REQUIREMENTS = ['pySwitchmate==0.3']

_LOGGER = logging.getLogger(__name__)

DEFAULT_NAME = 'Switchmate'
HANDLE = 0x2e
ON_KEY = b'\x00'
OFF_KEY = b'\x01'

SCAN_INTERVAL = timedelta(minutes=30)

Expand All @@ -34,7 +30,7 @@
def setup_platform(hass, config, add_entities, discovery_info=None) -> None:
"""Perform the setup for Switchmate devices."""
name = config.get(CONF_NAME)
mac_addr = config.get(CONF_MAC)
mac_addr = config[CONF_MAC]
add_entities([Switchmate(mac_addr, name)], True)


Expand All @@ -43,22 +39,15 @@ class Switchmate(SwitchDevice):

def __init__(self, mac, name) -> None:
"""Initialize the Switchmate."""
# pylint: disable=import-error
import bluepy
self._state = False
import switchmate
self._name = name
self._mac = mac
try:
self._device = bluepy.btle.Peripheral(self._mac,
bluepy.btle.ADDR_TYPE_RANDOM)
except bluepy.btle.BTLEException:
_LOGGER.error("Failed to set up switchmate")
raise PlatformNotReady()
self._device = switchmate.Switchmate(mac=mac)

@property
def unique_id(self) -> str:
"""Return a unique, HASS-friendly identifier for this entity."""
return self._mac.replace(':', '')
return '{0}'.format(self._mac.replace(':', ''))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

String formatting doesn't seem to be needed.


@property
def name(self) -> str:
Expand All @@ -67,17 +56,17 @@ def name(self) -> str:

def update(self) -> None:
"""Synchronize state with switch."""
self._state = self._device.readCharacteristic(HANDLE) == ON_KEY
self._device.update()

@property
def is_on(self) -> bool:
"""Return true if it is on."""
return self._state
return self._device.state

def turn_on(self, **kwargs) -> None:
"""Turn the switch on."""
self._device.writeCharacteristic(HANDLE, ON_KEY, True)
self._device.turn_on()

def turn_off(self, **kwargs) -> None:
"""Turn the switch off."""
self._device.writeCharacteristic(HANDLE, OFF_KEY, True)
self._device.turn_off()
4 changes: 3 additions & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,6 @@ blinkstick==1.1.8
blockchain==1.4.4

# homeassistant.components.light.decora
# homeassistant.components.switch.switchmate
# bluepy==1.1.4

# homeassistant.components.sensor.bme680
Expand Down Expand Up @@ -749,6 +748,9 @@ pyHS100==0.3.3
# homeassistant.components.rfxtrx
pyRFXtrx==0.23

# homeassistant.components.switch.switchmate
pySwitchmate==0.3

# homeassistant.components.sensor.tibber
pyTibber==0.4.1

Expand Down