Exemplo n.º 1
0
    def test_position_without_position_address_uninitialized_down(self):
        """Test moving uninitialized cover to absolute position - with no absolute positioning supported."""
        xknx = XKNX()
        cover = Cover(
            xknx,
            "TestCover",
            group_address_long="1/2/1",
            group_address_short="1/2/2",
            group_address_position_state="1/2/4",
        )

        with patch("logging.Logger.warning") as mock_warn:
            self.loop.run_until_complete(cover.set_position(50))
            self.assertEqual(xknx.telegrams.qsize(), 0)
            mock_warn.assert_called_with(
                "Current position unknown. Initialize cover by moving to end position."
            )

        self.loop.run_until_complete(cover.set_position(100))
        self.assertEqual(xknx.telegrams.qsize(), 1)
        telegram = xknx.telegrams.get_nowait()
        self.assertEqual(
            telegram,
            Telegram(
                destination_address=GroupAddress("1/2/1"),
                payload=GroupValueWrite(DPTBinary(1)),
            ),
        )
Exemplo n.º 2
0
    def test_auto_stop(self):
        """Test auto stop functionality."""
        xknx = XKNX()
        cover = Cover(
            xknx,
            "TestCover",
            group_address_long="1/2/1",
            group_address_stop="1/2/2",
            travel_time_down=10,
            travel_time_up=10,
        )
        with patch("xknx.devices.Cover.stop") as mock_stop, patch(
                "time.time") as mock_time:
            fut = asyncio.Future()
            fut.set_result(None)
            mock_stop.return_value = fut

            mock_time.return_value = 1517000000.0
            # we start with state 0 - open covers (up) this is assumed immediately
            self.loop.run_until_complete(cover.set_position(0))

            self.loop.run_until_complete(cover.set_position(50))

            mock_time.return_value = 1517000001.0
            self.loop.run_until_complete(cover.auto_stop_if_necessary())
            mock_stop.assert_not_called()

            mock_time.return_value = 1517000005.0
            self.loop.run_until_complete(cover.auto_stop_if_necessary())
            mock_stop.assert_called_with()
            mock_stop.reset_mock()
Exemplo n.º 3
0
    def test_auto_stop(self):
        """Test auto stop functionality."""
        xknx = XKNX(loop=self.loop)
        cover = Cover(xknx,
                      'TestCover',
                      group_address_long='1/2/1',
                      travel_time_down=10,
                      travel_time_up=10)
        with patch('xknx.devices.Cover.stop') as mock_stop, patch(
                'time.time') as mock_time:
            fut = asyncio.Future()
            fut.set_result(None)
            mock_stop.return_value = fut

            mock_time.return_value = 1517000000.0
            self.loop.run_until_complete(asyncio.Task(cover.set_position(50)))

            mock_time.return_value = 1517000001.0
            self.loop.run_until_complete(
                asyncio.Task(cover.auto_stop_if_necessary()))
            mock_stop.assert_not_called()

            mock_time.return_value = 1517000005.0
            self.loop.run_until_complete(
                asyncio.Task(cover.auto_stop_if_necessary()))
            mock_stop.assert_called_with()
            mock_stop.reset_mock()
Exemplo n.º 4
0
    def test_auto_stop(self):
        """Test auto stop functionality."""
        xknx = XKNX(loop=self.loop)
        cover = Cover(
            xknx,
            'TestCover',
            group_address_long='1/2/1',
            travel_time_down=10,
            travel_time_up=10)
        with patch('xknx.devices.Cover.stop') as mock_stop, patch('time.time') as mock_time:
            fut = asyncio.Future()
            fut.set_result(None)
            mock_stop.return_value = fut

            mock_time.return_value = 1517000000.0
            self.loop.run_until_complete(asyncio.Task(cover.set_position(50)))

            mock_time.return_value = 1517000001.0
            self.loop.run_until_complete(asyncio.Task(cover.auto_stop_if_necessary()))
            mock_stop.assert_not_called()

            mock_time.return_value = 1517000005.0
            self.loop.run_until_complete(asyncio.Task(cover.auto_stop_if_necessary()))
            mock_stop.assert_called_with()
            mock_stop.reset_mock()
Exemplo n.º 5
0
 def test_position_without_position_address_down(self):
     """Test moving cover down - with no absolute positioning supported."""
     xknx = XKNX()
     cover = Cover(
         xknx,
         "TestCover",
         group_address_long="1/2/1",
         group_address_short="1/2/2",
         group_address_position_state="1/2/4",
     )
     cover.travelcalculator.set_position(70)
     self.loop.run_until_complete(cover.set_position(80))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(
         telegram,
         Telegram(
             destination_address=GroupAddress("1/2/1"),
             payload=GroupValueWrite(DPTBinary(1)),
         ),
     )
     self.assertEqual(cover.travelcalculator.travel_to_position, 80)
     self.assertTrue(cover.is_closing())
     # process the outgoing telegram to make sure it doesn't overwrite the target position
     self.loop.run_until_complete(cover.process(telegram))
     self.assertEqual(cover.travelcalculator.travel_to_position, 80)
Exemplo n.º 6
0
    def test_position_without_position_address_uninitialized_up(self):
        """Test moving uninitialized cover to absolute position - with no absolute positioning supported."""
        xknx = XKNX(loop=self.loop)
        cover = Cover(xknx,
                      'TestCover',
                      group_address_long='1/2/1',
                      group_address_short='1/2/2',
                      group_address_position_state='1/2/4')

        with patch('logging.Logger.warning') as mock_warn:
            self.loop.run_until_complete(asyncio.Task(cover.set_position(50)))
            self.assertEqual(xknx.telegrams.qsize(), 0)
            mock_warn.assert_called_with(
                'Current position unknown. Initialize cover by moving to end position.'
            )

        self.loop.run_until_complete(asyncio.Task(cover.set_position(0)))
        self.assertEqual(xknx.telegrams.qsize(), 1)
        telegram = xknx.telegrams.get_nowait()
        self.assertEqual(telegram,
                         Telegram(GroupAddress('1/2/1'), payload=DPTBinary(0)))
Exemplo n.º 7
0
 def test_position_without_position_address_down(self):
     """Test moving cover down - with no absolute positioning supported."""
     xknx = XKNX(loop=self.loop)
     cover = Cover(xknx,
                   'TestCover',
                   group_address_long='1/2/1',
                   group_address_short='1/2/2',
                   group_address_position_state='1/2/4')
     cover.travelcalculator.set_position(70)
     self.loop.run_until_complete(asyncio.Task(cover.set_position(80)))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(telegram,
                      Telegram(GroupAddress('1/2/1'), payload=DPTBinary(0)))
Exemplo n.º 8
0
 def test_position(self):
     """Test moving cover to absolute position."""
     xknx = XKNX(loop=self.loop)
     cover = Cover(xknx,
                   'TestCover',
                   group_address_long='1/2/1',
                   group_address_short='1/2/2',
                   group_address_position='1/2/3',
                   group_address_position_state='1/2/4')
     self.loop.run_until_complete(asyncio.Task(cover.set_position(50)))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(
         telegram, Telegram(GroupAddress('1/2/3'), payload=DPTArray(0x80)))
Exemplo n.º 9
0
 def test_position_without_position_address_down(self):
     """Test moving cover down - with no absolute positioning supported."""
     xknx = XKNX(loop=self.loop)
     cover = Cover(
         xknx,
         'TestCover',
         group_address_long='1/2/1',
         group_address_short='1/2/2',
         group_address_position_state='1/2/4')
     cover.travelcalculator.set_position(70)
     self.loop.run_until_complete(asyncio.Task(cover.set_position(80)))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(telegram,
                      Telegram(GroupAddress('1/2/1'), payload=DPTBinary(0)))
Exemplo n.º 10
0
 def test_position(self):
     """Test moving cover to absolute position."""
     xknx = XKNX(loop=self.loop)
     cover = Cover(
         xknx,
         'TestCover',
         group_address_long='1/2/1',
         group_address_short='1/2/2',
         group_address_position='1/2/3',
         group_address_position_state='1/2/4')
     self.loop.run_until_complete(asyncio.Task(cover.set_position(50)))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(telegram,
                      Telegram(GroupAddress('1/2/3'), payload=DPTArray(0x80)))
Exemplo n.º 11
0
 def test_position(self):
     """Test moving cover to absolute position."""
     xknx = XKNX()
     cover = Cover(
         xknx,
         "TestCover",
         group_address_long="1/2/1",
         group_address_short="1/2/2",
         group_address_position="1/2/3",
         group_address_position_state="1/2/4",
     )
     self.loop.run_until_complete(cover.set_position(50))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(
         telegram, Telegram(GroupAddress("1/2/3"), payload=DPTArray(0x80)))
Exemplo n.º 12
0
 def test_position_without_position_address_down(self):
     """Test moving cover down - with no absolute positioning supported."""
     xknx = XKNX()
     cover = Cover(
         xknx,
         "TestCover",
         group_address_long="1/2/1",
         group_address_short="1/2/2",
         group_address_position_state="1/2/4",
     )
     cover.travelcalculator.set_position(70)
     self.loop.run_until_complete(cover.set_position(80))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(telegram,
                      Telegram(GroupAddress("1/2/1"), payload=DPTBinary(1)))
     self.assertEqual(cover.travelcalculator.travel_to_position, 80)