def test_window_set_cover_position(self): """Test if accessory and HA are updated accordingly.""" window_cover = 'cover.window' acc = WindowCovering(self.hass, window_cover, 'Cover', aid=2) acc.run() self.assertEqual(acc.aid, 2) self.assertEqual(acc.category, 14) # WindowCovering self.assertEqual(acc.char_current_position.value, 0) self.assertEqual(acc.char_target_position.value, 0) self.assertEqual(acc.char_position_state.value, 0) self.hass.states.set(window_cover, STATE_UNKNOWN, {ATTR_CURRENT_POSITION: None}) self.hass.block_till_done() self.assertEqual(acc.char_current_position.value, 0) self.assertEqual(acc.char_target_position.value, 0) self.assertEqual(acc.char_position_state.value, 0) self.hass.states.set(window_cover, STATE_OPEN, {ATTR_CURRENT_POSITION: 50}) self.hass.block_till_done() self.assertEqual(acc.char_current_position.value, 50) self.assertEqual(acc.char_target_position.value, 50) self.assertEqual(acc.char_position_state.value, 2) # Set from HomeKit acc.char_target_position.set_value(25) self.hass.block_till_done() self.assertEqual( self.events[0].data[ATTR_SERVICE], 'set_cover_position') self.assertEqual( self.events[0].data[ATTR_SERVICE_DATA][ATTR_POSITION], 25) self.assertEqual(acc.char_current_position.value, 50) self.assertEqual(acc.char_target_position.value, 25) self.assertEqual(acc.char_position_state.value, 0) # Set from HomeKit acc.char_target_position.set_value(75) self.hass.block_till_done() self.assertEqual( self.events[0].data[ATTR_SERVICE], 'set_cover_position') self.assertEqual( self.events[1].data[ATTR_SERVICE_DATA][ATTR_POSITION], 75) self.assertEqual(acc.char_current_position.value, 50) self.assertEqual(acc.char_target_position.value, 75) self.assertEqual(acc.char_position_state.value, 1)
async def test_windowcovering_open_close_with_position_and_stop( hass, hk_driver, events ): """Test if accessory and HA are updated accordingly.""" entity_id = "cover.stop_window" hass.states.async_set( entity_id, STATE_UNKNOWN, {ATTR_SUPPORTED_FEATURES: SUPPORT_STOP | SUPPORT_SET_POSITION}, ) acc = WindowCovering(hass, hk_driver, "Cover", entity_id, 2, None) await acc.run() await hass.async_block_till_done() # Set from HomeKit call_stop_cover = async_mock_service(hass, DOMAIN, "stop_cover") await hass.async_add_executor_job(acc.char_hold_position.client_update_value, 0) await hass.async_block_till_done() assert not call_stop_cover await hass.async_add_executor_job(acc.char_hold_position.client_update_value, 1) await hass.async_block_till_done() assert call_stop_cover assert call_stop_cover[0].data[ATTR_ENTITY_ID] == entity_id assert acc.char_hold_position.value == 1 assert len(events) == 1 assert events[-1].data[ATTR_VALUE] is None
async def test_windowcovering_restore(hass, hk_driver, events): """Test setting up an entity from state in the event registry.""" hass.state = CoreState.not_running registry = er.async_get(hass) registry.async_get_or_create( "cover", "generic", "1234", suggested_object_id="simple", ) registry.async_get_or_create( "cover", "generic", "9012", suggested_object_id="all_info_set", capabilities={}, supported_features=SUPPORT_STOP, original_device_class="mock-device-class", ) hass.bus.async_fire(EVENT_HOMEASSISTANT_START, {}) await hass.async_block_till_done() acc = WindowCovering(hass, hk_driver, "Cover", "cover.simple", 2, None) assert acc.category == 14 assert acc.char_current_position is not None assert acc.char_target_position is not None assert acc.char_position_state is not None acc = WindowCovering(hass, hk_driver, "Cover", "cover.all_info_set", 2, None) assert acc.category == 14 assert acc.char_current_position is not None assert acc.char_target_position is not None assert acc.char_position_state is not None
async def test_windowcovering_tilt_only(hass, hk_driver, events): """Test we lock the window covering closed when its tilt only.""" entity_id = "cover.window" hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_SUPPORTED_FEATURES: SUPPORT_SET_TILT_POSITION}) await hass.async_block_till_done() acc = WindowCovering(hass, hk_driver, "Cover", entity_id, 2, None) await acc.run() await hass.async_block_till_done() assert acc.aid == 2 assert acc.category == 14 # WindowCovering assert acc.char_current_position.value == 0 assert acc.char_target_position.value == 0 assert acc.char_target_position.properties[PROP_MIN_VALUE] == 0 assert acc.char_target_position.properties[PROP_MAX_VALUE] == 0
async def test_windowcovering_cover_set_tilt(hass, hk_driver, events): """Test if accessory and HA update slat tilt accordingly.""" entity_id = "cover.window" hass.states.async_set( entity_id, STATE_UNKNOWN, {ATTR_SUPPORTED_FEATURES: SUPPORT_SET_TILT_POSITION} ) await hass.async_block_till_done() acc = WindowCovering(hass, hk_driver, "Cover", entity_id, 2, None) await acc.run() await hass.async_block_till_done() assert acc.aid == 2 assert acc.category == 14 # CATEGORY_WINDOW_COVERING assert acc.char_current_tilt.value == 0 assert acc.char_target_tilt.value == 0 hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_CURRENT_TILT_POSITION: None}) await hass.async_block_till_done() assert acc.char_current_tilt.value == 0 assert acc.char_target_tilt.value == 0 hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_CURRENT_TILT_POSITION: 100}) await hass.async_block_till_done() assert acc.char_current_tilt.value == 90 assert acc.char_target_tilt.value == 90 hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_CURRENT_TILT_POSITION: 50}) await hass.async_block_till_done() assert acc.char_current_tilt.value == 0 assert acc.char_target_tilt.value == 0 hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_CURRENT_TILT_POSITION: 0}) await hass.async_block_till_done() assert acc.char_current_tilt.value == -90 assert acc.char_target_tilt.value == -90 # set from HomeKit call_set_tilt_position = async_mock_service( hass, DOMAIN, SERVICE_SET_COVER_TILT_POSITION ) # HomeKit sets tilts between -90 and 90 (degrees), whereas # Homeassistant expects a % between 0 and 100. Keep that in mind # when comparing await hass.async_add_executor_job(acc.char_target_tilt.client_update_value, 90) await hass.async_block_till_done() assert call_set_tilt_position[0] assert call_set_tilt_position[0].data[ATTR_ENTITY_ID] == entity_id assert call_set_tilt_position[0].data[ATTR_TILT_POSITION] == 100 assert acc.char_current_tilt.value == -90 assert acc.char_target_tilt.value == 90 assert len(events) == 1 assert events[-1].data[ATTR_VALUE] == 100 await hass.async_add_executor_job(acc.char_target_tilt.client_update_value, 45) await hass.async_block_till_done() assert call_set_tilt_position[1] assert call_set_tilt_position[1].data[ATTR_ENTITY_ID] == entity_id assert call_set_tilt_position[1].data[ATTR_TILT_POSITION] == 75 assert acc.char_current_tilt.value == -90 assert acc.char_target_tilt.value == 45 assert len(events) == 2 assert events[-1].data[ATTR_VALUE] == 75
async def test_windowcovering_set_cover_position(hass, hk_driver, events): """Test if accessory and HA are updated accordingly.""" entity_id = "cover.window" hass.states.async_set(entity_id, None) await hass.async_block_till_done() acc = WindowCovering(hass, hk_driver, "Cover", entity_id, 2, None) await acc.run() await hass.async_block_till_done() assert acc.aid == 2 assert acc.category == 14 # WindowCovering assert acc.char_current_position.value == 0 assert acc.char_target_position.value == 0 hass.states.async_set(entity_id, STATE_UNKNOWN, {ATTR_CURRENT_POSITION: None}) await hass.async_block_till_done() assert acc.char_current_position.value == 0 assert acc.char_target_position.value == 0 assert acc.char_position_state.value == 2 hass.states.async_set(entity_id, STATE_OPENING, {ATTR_CURRENT_POSITION: 60}) await hass.async_block_till_done() assert acc.char_current_position.value == 60 assert acc.char_target_position.value == 60 assert acc.char_position_state.value == 1 hass.states.async_set(entity_id, STATE_OPENING, {ATTR_CURRENT_POSITION: 70.0}) await hass.async_block_till_done() assert acc.char_current_position.value == 70 assert acc.char_target_position.value == 70 assert acc.char_position_state.value == 1 hass.states.async_set(entity_id, STATE_CLOSING, {ATTR_CURRENT_POSITION: 50}) await hass.async_block_till_done() assert acc.char_current_position.value == 50 assert acc.char_target_position.value == 50 assert acc.char_position_state.value == 0 hass.states.async_set(entity_id, STATE_OPEN, {ATTR_CURRENT_POSITION: 50}) await hass.async_block_till_done() assert acc.char_current_position.value == 50 assert acc.char_target_position.value == 50 assert acc.char_position_state.value == 2 # Set from HomeKit call_set_cover_position = async_mock_service(hass, DOMAIN, "set_cover_position") await hass.async_add_executor_job(acc.char_target_position.client_update_value, 25) await hass.async_block_till_done() assert call_set_cover_position[0] assert call_set_cover_position[0].data[ATTR_ENTITY_ID] == entity_id assert call_set_cover_position[0].data[ATTR_POSITION] == 25 assert acc.char_current_position.value == 50 assert acc.char_target_position.value == 25 assert len(events) == 1 assert events[-1].data[ATTR_VALUE] == 25 await hass.async_add_executor_job(acc.char_target_position.client_update_value, 75) await hass.async_block_till_done() assert call_set_cover_position[1] assert call_set_cover_position[1].data[ATTR_ENTITY_ID] == entity_id assert call_set_cover_position[1].data[ATTR_POSITION] == 75 assert acc.char_current_position.value == 50 assert acc.char_target_position.value == 75 assert len(events) == 2 assert events[-1].data[ATTR_VALUE] == 75