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