mirror of
https://github.com/home-assistant/core.git
synced 2025-07-22 20:57:21 +00:00
parent
3b537f6e2a
commit
cea2de5eb5
@ -32,6 +32,7 @@ class Light(HomeAccessory):
|
|||||||
self._flag = {CHAR_ON: False, CHAR_BRIGHTNESS: False,
|
self._flag = {CHAR_ON: False, CHAR_BRIGHTNESS: False,
|
||||||
CHAR_HUE: False, CHAR_SATURATION: False,
|
CHAR_HUE: False, CHAR_SATURATION: False,
|
||||||
RGB_COLOR: False}
|
RGB_COLOR: False}
|
||||||
|
self._state = 0
|
||||||
|
|
||||||
self.chars = []
|
self.chars = []
|
||||||
self._features = self._hass.states.get(self._entity_id) \
|
self._features = self._hass.states.get(self._entity_id) \
|
||||||
@ -47,7 +48,7 @@ class Light(HomeAccessory):
|
|||||||
serv_light = add_preload_service(self, SERV_LIGHTBULB, self.chars)
|
serv_light = add_preload_service(self, SERV_LIGHTBULB, self.chars)
|
||||||
self.char_on = serv_light.get_characteristic(CHAR_ON)
|
self.char_on = serv_light.get_characteristic(CHAR_ON)
|
||||||
self.char_on.setter_callback = self.set_state
|
self.char_on.setter_callback = self.set_state
|
||||||
self.char_on.value = 0
|
self.char_on.value = self._state
|
||||||
|
|
||||||
if CHAR_BRIGHTNESS in self.chars:
|
if CHAR_BRIGHTNESS in self.chars:
|
||||||
self.char_brightness = serv_light \
|
self.char_brightness = serv_light \
|
||||||
@ -66,7 +67,7 @@ class Light(HomeAccessory):
|
|||||||
|
|
||||||
def set_state(self, value):
|
def set_state(self, value):
|
||||||
"""Set state if call came from HomeKit."""
|
"""Set state if call came from HomeKit."""
|
||||||
if self._flag[CHAR_BRIGHTNESS]:
|
if self._state == value:
|
||||||
return
|
return
|
||||||
|
|
||||||
_LOGGER.debug('%s: Set state to %d', self._entity_id, value)
|
_LOGGER.debug('%s: Set state to %d', self._entity_id, value)
|
||||||
@ -83,8 +84,11 @@ class Light(HomeAccessory):
|
|||||||
_LOGGER.debug('%s: Set brightness to %d', self._entity_id, value)
|
_LOGGER.debug('%s: Set brightness to %d', self._entity_id, value)
|
||||||
self._flag[CHAR_BRIGHTNESS] = True
|
self._flag[CHAR_BRIGHTNESS] = True
|
||||||
self.char_brightness.set_value(value, should_callback=False)
|
self.char_brightness.set_value(value, should_callback=False)
|
||||||
self._hass.components.light.turn_on(
|
if value != 0:
|
||||||
self._entity_id, brightness_pct=value)
|
self._hass.components.light.turn_on(
|
||||||
|
self._entity_id, brightness_pct=value)
|
||||||
|
else:
|
||||||
|
self._hass.components.light.turn_off(self._entity_id)
|
||||||
|
|
||||||
def set_saturation(self, value):
|
def set_saturation(self, value):
|
||||||
"""Set saturation if call came from HomeKit."""
|
"""Set saturation if call came from HomeKit."""
|
||||||
@ -121,10 +125,11 @@ class Light(HomeAccessory):
|
|||||||
|
|
||||||
# Handle State
|
# Handle State
|
||||||
state = new_state.state
|
state = new_state.state
|
||||||
if not self._flag[CHAR_ON] and state in [STATE_ON, STATE_OFF] and \
|
if state in (STATE_ON, STATE_OFF):
|
||||||
self.char_on.value != (state == STATE_ON):
|
self._state = 1 if state == STATE_ON else 0
|
||||||
self.char_on.set_value(state == STATE_ON, should_callback=False)
|
if not self._flag[CHAR_ON] and self.char_on.value != self._state:
|
||||||
self._flag[CHAR_ON] = False
|
self.char_on.set_value(self._state, should_callback=False)
|
||||||
|
self._flag[CHAR_ON] = False
|
||||||
|
|
||||||
# Handle Brightness
|
# Handle Brightness
|
||||||
if CHAR_BRIGHTNESS in self.chars:
|
if CHAR_BRIGHTNESS in self.chars:
|
||||||
|
@ -57,19 +57,21 @@ class TestHomekitLights(unittest.TestCase):
|
|||||||
self.assertEqual(acc.char_on.value, 0)
|
self.assertEqual(acc.char_on.value, 0)
|
||||||
|
|
||||||
# Set from HomeKit
|
# Set from HomeKit
|
||||||
acc.char_on.set_value(True)
|
acc.char_on.set_value(1)
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
self.assertEqual(
|
self.assertEqual(self.events[0].data[ATTR_DOMAIN], DOMAIN)
|
||||||
self.events[0].data[ATTR_DOMAIN], DOMAIN)
|
self.assertEqual(self.events[0].data[ATTR_SERVICE], SERVICE_TURN_ON)
|
||||||
self.assertEqual(
|
|
||||||
self.events[0].data[ATTR_SERVICE], SERVICE_TURN_ON)
|
|
||||||
|
|
||||||
acc.char_on.set_value(False)
|
self.hass.states.set(entity_id, STATE_ON)
|
||||||
|
self.hass.block_till_done()
|
||||||
|
|
||||||
|
acc.char_on.set_value(0)
|
||||||
|
self.hass.block_till_done()
|
||||||
|
self.assertEqual(self.events[1].data[ATTR_DOMAIN], DOMAIN)
|
||||||
|
self.assertEqual(self.events[1].data[ATTR_SERVICE], SERVICE_TURN_OFF)
|
||||||
|
|
||||||
|
self.hass.states.set(entity_id, STATE_OFF)
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
self.assertEqual(
|
|
||||||
self.events[1].data[ATTR_DOMAIN], DOMAIN)
|
|
||||||
self.assertEqual(
|
|
||||||
self.events[1].data[ATTR_SERVICE], SERVICE_TURN_OFF)
|
|
||||||
|
|
||||||
# Remove entity
|
# Remove entity
|
||||||
self.hass.states.remove(entity_id)
|
self.hass.states.remove(entity_id)
|
||||||
@ -95,15 +97,27 @@ class TestHomekitLights(unittest.TestCase):
|
|||||||
acc.char_brightness.set_value(20)
|
acc.char_brightness.set_value(20)
|
||||||
acc.char_on.set_value(1)
|
acc.char_on.set_value(1)
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
self.assertEqual(
|
self.assertEqual(self.events[0].data[ATTR_DOMAIN], DOMAIN)
|
||||||
self.events[0].data[ATTR_DOMAIN], DOMAIN)
|
self.assertEqual(self.events[0].data[ATTR_SERVICE], SERVICE_TURN_ON)
|
||||||
self.assertEqual(
|
|
||||||
self.events[0].data[ATTR_SERVICE], SERVICE_TURN_ON)
|
|
||||||
print(self.events[0].data)
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self.events[0].data[ATTR_SERVICE_DATA], {
|
self.events[0].data[ATTR_SERVICE_DATA], {
|
||||||
ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS_PCT: 20})
|
ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS_PCT: 20})
|
||||||
|
|
||||||
|
acc.char_on.set_value(1)
|
||||||
|
acc.char_brightness.set_value(40)
|
||||||
|
self.hass.block_till_done()
|
||||||
|
self.assertEqual(self.events[1].data[ATTR_DOMAIN], DOMAIN)
|
||||||
|
self.assertEqual(self.events[1].data[ATTR_SERVICE], SERVICE_TURN_ON)
|
||||||
|
self.assertEqual(
|
||||||
|
self.events[1].data[ATTR_SERVICE_DATA], {
|
||||||
|
ATTR_ENTITY_ID: entity_id, ATTR_BRIGHTNESS_PCT: 40})
|
||||||
|
|
||||||
|
acc.char_on.set_value(1)
|
||||||
|
acc.char_brightness.set_value(0)
|
||||||
|
self.hass.block_till_done()
|
||||||
|
self.assertEqual(self.events[2].data[ATTR_DOMAIN], DOMAIN)
|
||||||
|
self.assertEqual(self.events[2].data[ATTR_SERVICE], SERVICE_TURN_OFF)
|
||||||
|
|
||||||
def test_light_rgb_color(self):
|
def test_light_rgb_color(self):
|
||||||
"""Test light with rgb_color."""
|
"""Test light with rgb_color."""
|
||||||
entity_id = 'light.demo'
|
entity_id = 'light.demo'
|
||||||
@ -123,10 +137,8 @@ class TestHomekitLights(unittest.TestCase):
|
|||||||
acc.char_hue.set_value(145)
|
acc.char_hue.set_value(145)
|
||||||
acc.char_saturation.set_value(75)
|
acc.char_saturation.set_value(75)
|
||||||
self.hass.block_till_done()
|
self.hass.block_till_done()
|
||||||
self.assertEqual(
|
self.assertEqual(self.events[0].data[ATTR_DOMAIN], DOMAIN)
|
||||||
self.events[0].data[ATTR_DOMAIN], DOMAIN)
|
self.assertEqual(self.events[0].data[ATTR_SERVICE], SERVICE_TURN_ON)
|
||||||
self.assertEqual(
|
|
||||||
self.events[0].data[ATTR_SERVICE], SERVICE_TURN_ON)
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
self.events[0].data[ATTR_SERVICE_DATA], {
|
self.events[0].data[ATTR_SERVICE_DATA], {
|
||||||
ATTR_ENTITY_ID: entity_id, ATTR_HS_COLOR: (145, 75)})
|
ATTR_ENTITY_ID: entity_id, ATTR_HS_COLOR: (145, 75)})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user