def test_is_traveling(self): """Test moving cover to absolute position.""" xknx = XKNX(loop=self.loop) cover = Cover(xknx, 'TestCover', group_address_long='1/2/1', group_address_position='1/2/3', group_address_position_state='1/2/4', travel_time_down=10, travel_time_up=10) with patch('time.time') as mock_time: mock_time.return_value = 1517000000.0 self.assertFalse(cover.is_traveling()) self.assertTrue(cover.position_reached()) self.loop.run_until_complete(asyncio.Task(cover.set_up())) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertTrue(cover.is_closed()) mock_time.return_value = 1517000005.0 # 5 Seconds, half way self.assertFalse(cover.position_reached()) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertFalse(cover.is_closed()) mock_time.return_value = 1517000010.0 # 10 Seconds, fully open self.assertTrue(cover.position_reached()) self.assertFalse(cover.is_traveling()) self.assertTrue(cover.is_open()) self.assertFalse(cover.is_closed())
def test_is_traveling(self): """Test moving cover to absolute position.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'TestCover', group_address_long='1/2/1', group_address_position='1/2/3', group_address_position_state='1/2/4', travel_time_down=10, travel_time_up=10) with patch('time.time') as mock_time: mock_time.return_value = 1517000000.0 self.assertFalse(cover.is_traveling()) self.assertTrue(cover.position_reached()) self.loop.run_until_complete(asyncio.Task(cover.set_up())) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertTrue(cover.is_closed()) mock_time.return_value = 1517000005.0 # 5 Seconds, half way self.assertFalse(cover.position_reached()) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertFalse(cover.is_closed()) mock_time.return_value = 1517000010.0 # 10 Seconds, fully open self.assertTrue(cover.position_reached()) self.assertFalse(cover.is_traveling()) self.assertTrue(cover.is_open()) self.assertFalse(cover.is_closed())
async def test_periodic_update(self, time_travel): """Test periodic update functionality.""" xknx = XKNX() callback_mock = AsyncMock() cover = Cover( xknx, "TestCoverPeriodicUpdate", group_address_long="1/2/1", group_address_stop="1/2/2", group_address_position="1/2/3", group_address_position_state="1/2/4", travel_time_down=10, travel_time_up=10, device_updated_cb=callback_mock, ) with patch("time.time") as mock_time: mock_time.return_value = 1517000000.0 # state telegram updates current position - we are not moving so this is new state - not moving telegram = Telegram(GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray(0))) await cover.process(telegram) assert ( callback_mock.call_count == 2 ) # 1 additional form _stop_position_update because previous state was None callback_mock.reset_mock() # move to 50% telegram = Telegram(GroupAddress("1/2/3"), payload=GroupValueWrite(DPTArray(125))) await cover.process(telegram) await time_travel(0) assert callback_mock.call_count == 1 mock_time.return_value = 1517000001.0 await time_travel(1) assert callback_mock.call_count == 2 # state telegram from bus too early mock_time.return_value = 1517000001.6 await time_travel(0.6) assert callback_mock.call_count == 2 telegram = Telegram(GroupAddress("1/2/4"), payload=GroupValueWrite(DPTArray(42))) await cover.process(telegram) assert callback_mock.call_count == 3 # next update 1 second after last received state telegram mock_time.return_value = 1517000002.0 await time_travel(0.4) assert callback_mock.call_count == 3 mock_time.return_value = 1517000002.6 await time_travel(0.6) assert callback_mock.call_count == 4 # last callback - auto updater is removed mock_time.return_value = 1517000005.0 await time_travel(2.4) assert callback_mock.call_count == 5 assert cover.position_reached() assert cover._periodic_update_task is None
async def test_is_traveling(self): """Test moving cover to absolute position.""" xknx = XKNX() cover = Cover( xknx, "TestCover", group_address_long="1/2/1", group_address_stop="1/2/2", group_address_position="1/2/3", group_address_position_state="1/2/4", travel_time_down=10, travel_time_up=10, ) with patch("time.time") as mock_time: mock_time.return_value = 1517000000.0 assert not cover.is_traveling() assert not cover.is_opening() assert not cover.is_closing() assert cover.position_reached() # we start with state open covers (up) cover.travelcalculator.set_position(0) await cover.set_down() assert cover.is_traveling() assert cover.is_open() assert not cover.is_closed() assert not cover.is_opening() assert cover.is_closing() mock_time.return_value = 1517000005.0 # 5 Seconds, half way assert not cover.position_reached() assert cover.is_traveling() assert not cover.is_open() assert not cover.is_closed() assert not cover.is_opening() assert cover.is_closing() mock_time.return_value = 1517000010.0 # 10 Seconds, fully closed assert cover.position_reached() assert not cover.is_traveling() assert not cover.is_open() assert cover.is_closed() assert not cover.is_opening() assert not cover.is_closing() # up again await cover.set_up() assert not cover.position_reached() assert cover.is_traveling() assert not cover.is_open() assert cover.is_closed() assert cover.is_opening() assert not cover.is_closing() mock_time.return_value = 1517000015.0 # 15 Seconds, half way assert not cover.position_reached() assert cover.is_traveling() assert not cover.is_open() assert not cover.is_closed() assert cover.is_opening() assert not cover.is_closing() mock_time.return_value = 1517000016.0 # 16 Seconds, manual stop await cover.stop() assert cover.position_reached() assert not cover.is_traveling() assert not cover.is_open() assert not cover.is_closed() assert not cover.is_opening() assert not cover.is_closing()
def test_is_traveling(self): """Test moving cover to absolute position.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, "TestCover", group_address_long="1/2/1", group_address_stop="1/2/2", group_address_position="1/2/3", group_address_position_state="1/2/4", travel_time_down=10, travel_time_up=10, ) with patch("time.time") as mock_time: mock_time.return_value = 1517000000.0 self.assertFalse(cover.is_traveling()) self.assertFalse(cover.is_opening()) self.assertFalse(cover.is_closing()) self.assertTrue(cover.position_reached()) # we start with state open covers (up) cover.travelcalculator.set_position(0) self.loop.run_until_complete(cover.set_down()) self.assertTrue(cover.is_traveling()) self.assertTrue(cover.is_open()) self.assertFalse(cover.is_closed()) self.assertFalse(cover.is_opening()) self.assertTrue(cover.is_closing()) mock_time.return_value = 1517000005.0 # 5 Seconds, half way self.assertFalse(cover.position_reached()) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertFalse(cover.is_closed()) self.assertFalse(cover.is_opening()) self.assertTrue(cover.is_closing()) mock_time.return_value = 1517000010.0 # 10 Seconds, fully closed self.assertTrue(cover.position_reached()) self.assertFalse(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertTrue(cover.is_closed()) self.assertFalse(cover.is_opening()) self.assertFalse(cover.is_closing()) # up again self.loop.run_until_complete(cover.set_up()) self.assertFalse(cover.position_reached()) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertTrue(cover.is_closed()) self.assertTrue(cover.is_opening()) self.assertFalse(cover.is_closing()) mock_time.return_value = 1517000015.0 # 15 Seconds, half way self.assertFalse(cover.position_reached()) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertFalse(cover.is_closed()) self.assertTrue(cover.is_opening()) self.assertFalse(cover.is_closing()) mock_time.return_value = 1517000016.0 # 16 Seconds, manual stop self.loop.run_until_complete(cover.stop()) self.assertTrue(cover.position_reached()) self.assertFalse(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertFalse(cover.is_closed()) self.assertFalse(cover.is_opening()) self.assertFalse(cover.is_closing())