def test_process(self):
     """Test process telegram."""
     xknx = XKNX(loop=self.loop)
     remote_value = RemoteValueSceneNumber(
         xknx, group_address=GroupAddress("1/2/3"))
     telegram = Telegram(group_address=GroupAddress("1/2/3"),
                         payload=DPTArray((0x0A, )))
     self.loop.run_until_complete(remote_value.process(telegram))
     self.assertEqual(remote_value.value, 11)
示例#2
0
    def __init__(self,
                 xknx,
                 name,
                 group_address=None,
                 scene_number=1,
                 device_updated_cb=None):
        """Initialize Sceneclass."""
        # pylint: disable=too-many-arguments
        super().__init__(xknx, name, device_updated_cb)

        self.scene_value = RemoteValueSceneNumber(
            xknx,
            group_address,
            device_name=self.name,
            after_update_cb=self.after_update)
        self.scene_number = int(scene_number)
 def test_set(self):
     """Test setting value."""
     xknx = XKNX(loop=self.loop)
     remote_value = RemoteValueSceneNumber(
         xknx, group_address=GroupAddress("1/2/3"))
     self.loop.run_until_complete(remote_value.set(11))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(
         telegram,
         Telegram(GroupAddress("1/2/3"), payload=DPTArray((0x0A, ))))
     self.loop.run_until_complete(remote_value.set(12))
     self.assertEqual(xknx.telegrams.qsize(), 1)
     telegram = xknx.telegrams.get_nowait()
     self.assertEqual(
         telegram,
         Telegram(GroupAddress("1/2/3"), payload=DPTArray((0x0B, ))))
 def test_to_process_error(self):
     """Test process errornous telegram."""
     xknx = XKNX(loop=self.loop)
     remote_value = RemoteValueSceneNumber(
         xknx, group_address=GroupAddress("1/2/3"))
     with self.assertRaises(CouldNotParseTelegram):
         telegram = Telegram(group_address=GroupAddress("1/2/3"),
                             payload=DPTBinary(1))
         self.loop.run_until_complete(remote_value.process(telegram))
     with self.assertRaises(CouldNotParseTelegram):
         telegram = Telegram(
             group_address=GroupAddress("1/2/3"),
             payload=DPTArray((
                 0x64,
                 0x65,
             )),
         )
         self.loop.run_until_complete(remote_value.process(telegram))
示例#5
0
    def __init__(self,
                 xknx,
                 name,
                 group_address=None,
                 scene_number=1,
                 device_updated_cb=None):
        """Initialize Sceneclass."""
        # pylint: disable=too-many-arguments
        super().__init__(xknx, name, device_updated_cb)

        # TODO: state_updater: disable for scene number per default?
        self.scene_value = RemoteValueSceneNumber(
            xknx,
            group_address=group_address,
            device_name=self.name,
            feature_name="Scene number",
            after_update_cb=self.after_update,
        )
        self.scene_number = int(scene_number)
 async def test_process(self):
     """Test process telegram."""
     xknx = XKNX()
     remote_value = RemoteValueSceneNumber(
         xknx, group_address=GroupAddress("1/2/3"))
     telegram = Telegram(
         destination_address=GroupAddress("1/2/3"),
         payload=GroupValueWrite(DPTArray((0x0A, ))),
     )
     await remote_value.process(telegram)
     assert remote_value.value == 11
示例#7
0
文件: scene.py 项目: spacegaier/xknx
class Scene(Device):
    """Class for managing a scene."""
    def __init__(
        self,
        xknx: "XKNX",
        name: str,
        group_address: Optional["GroupAddressableType"] = None,
        scene_number: int = 1,
        device_updated_cb: Optional[DeviceCallbackType] = None,
    ):
        """Initialize Sceneclass."""
        # pylint: disable=too-many-arguments
        super().__init__(xknx, name, device_updated_cb)

        # TODO: state_updater: disable for scene number per default?
        self.scene_value = RemoteValueSceneNumber(
            xknx,
            group_address=group_address,
            device_name=self.name,
            feature_name="Scene number",
            after_update_cb=self.after_update,
        )
        self.scene_number = int(scene_number)

    def _iter_remote_values(self) -> Iterator[RemoteValueSceneNumber]:
        """Iterate the devices RemoteValue classes."""
        yield self.scene_value

    @classmethod
    def from_config(cls, xknx: "XKNX", name: str, config: Any) -> "Scene":
        """Initialize object from configuration structure."""
        group_address = config.get("group_address")
        scene_number = int(config.get("scene_number"))
        return cls(xknx,
                   name=name,
                   group_address=group_address,
                   scene_number=scene_number)

    def __str__(self) -> str:
        """Return object as readable string."""
        return '<Scene name="{}" ' 'scene_value="{}" scene_number="{}" />'.format(
            self.name, self.scene_value.group_addr_str(), self.scene_number)

    async def run(self) -> None:
        """Activate scene."""
        await self.scene_value.set(self.scene_number)

    async def do(self, action: str) -> None:
        """Execute 'do' commands."""
        if action == "run":
            await self.run()
        else:
            logger.warning("Could not understand action %s for device %s",
                           action, self.get_name())
示例#8
0
文件: scene.py 项目: stefan-knx/xknx
    def __init__(
        self,
        xknx: XKNX,
        name: str,
        group_address: GroupAddressesType | None = None,
        scene_number: int = 1,
        device_updated_cb: DeviceCallbackType | None = None,
    ):
        """Initialize Sceneclass."""
        super().__init__(xknx, name, device_updated_cb)

        # TODO: state_updater: disable for scene number per default?
        self.scene_value = RemoteValueSceneNumber(
            xknx,
            group_address=group_address,
            device_name=self.name,
            feature_name="Scene number",
            after_update_cb=self.after_update,
        )
        self.scene_number = int(scene_number)
示例#9
0
文件: scene.py 项目: spacegaier/xknx
    def __init__(
        self,
        xknx: "XKNX",
        name: str,
        group_address: Optional["GroupAddressableType"] = None,
        scene_number: int = 1,
        device_updated_cb: Optional[DeviceCallbackType] = None,
    ):
        """Initialize Sceneclass."""
        # pylint: disable=too-many-arguments
        super().__init__(xknx, name, device_updated_cb)

        # TODO: state_updater: disable for scene number per default?
        self.scene_value = RemoteValueSceneNumber(
            xknx,
            group_address=group_address,
            device_name=self.name,
            feature_name="Scene number",
            after_update_cb=self.after_update,
        )
        self.scene_number = int(scene_number)
示例#10
0
 def test_to_knx_error(self):
     """Test to_knx function with wrong parametern."""
     xknx = XKNX()
     remote_value = RemoteValueSceneNumber(xknx)
     with pytest.raises(ConversionError):
         remote_value.to_knx(100)
     with pytest.raises(ConversionError):
         remote_value.to_knx("100")
示例#11
0
    async def test_to_process_error(self):
        """Test process errornous telegram."""
        xknx = XKNX()
        remote_value = RemoteValueSceneNumber(
            xknx, group_address=GroupAddress("1/2/3"))

        telegram = Telegram(
            destination_address=GroupAddress("1/2/3"),
            payload=GroupValueWrite(DPTBinary(1)),
        )
        assert await remote_value.process(telegram) is False

        telegram = Telegram(
            destination_address=GroupAddress("1/2/3"),
            payload=GroupValueWrite(DPTArray((0x64, 0x65))),
        )
        assert await remote_value.process(telegram) is False

        assert remote_value.value is None
示例#12
0
 async def test_set(self):
     """Test setting value."""
     xknx = XKNX()
     remote_value = RemoteValueSceneNumber(
         xknx, group_address=GroupAddress("1/2/3"))
     await remote_value.set(11)
     assert xknx.telegrams.qsize() == 1
     telegram = xknx.telegrams.get_nowait()
     assert telegram == Telegram(
         destination_address=GroupAddress("1/2/3"),
         payload=GroupValueWrite(DPTArray((0x0A, ))),
     )
     await remote_value.set(12)
     assert xknx.telegrams.qsize() == 1
     telegram = xknx.telegrams.get_nowait()
     assert telegram == Telegram(
         destination_address=GroupAddress("1/2/3"),
         payload=GroupValueWrite(DPTArray((0x0B, ))),
     )
 async def test_to_process_error(self):
     """Test process errornous telegram."""
     xknx = XKNX()
     remote_value = RemoteValueSceneNumber(
         xknx, group_address=GroupAddress("1/2/3"))
     with pytest.raises(CouldNotParseTelegram):
         telegram = Telegram(
             destination_address=GroupAddress("1/2/3"),
             payload=GroupValueWrite(DPTBinary(1)),
         )
         await remote_value.process(telegram)
     with pytest.raises(CouldNotParseTelegram):
         telegram = Telegram(
             destination_address=GroupAddress("1/2/3"),
             payload=GroupValueWrite(DPTArray((
                 0x64,
                 0x65,
             ))),
         )
         await remote_value.process(telegram)
示例#14
0
文件: scene.py 项目: stefan-knx/xknx
class Scene(Device):
    """Class for managing a scene."""
    def __init__(
        self,
        xknx: XKNX,
        name: str,
        group_address: GroupAddressesType | None = None,
        scene_number: int = 1,
        device_updated_cb: DeviceCallbackType | None = None,
    ):
        """Initialize Sceneclass."""
        super().__init__(xknx, name, device_updated_cb)

        # TODO: state_updater: disable for scene number per default?
        self.scene_value = RemoteValueSceneNumber(
            xknx,
            group_address=group_address,
            device_name=self.name,
            feature_name="Scene number",
            after_update_cb=self.after_update,
        )
        self.scene_number = int(scene_number)

    def _iter_remote_values(self) -> Iterator[RemoteValueSceneNumber]:
        """Iterate the devices RemoteValue classes."""
        yield self.scene_value

    @property
    def unique_id(self) -> str | None:
        """Return unique id for this device."""
        return f"{self.scene_value.group_address}_{self.scene_number}"

    def __str__(self) -> str:
        """Return object as readable string."""
        return '<Scene name="{}" ' 'scene_value={} scene_number="{}" />'.format(
            self.name, self.scene_value.group_addr_str(), self.scene_number)

    async def run(self) -> None:
        """Activate scene."""
        await self.scene_value.set(self.scene_number)
示例#15
0
 def test_from_knx(self):
     """Test from_knx function with normal operation."""
     xknx = XKNX(loop=self.loop)
     remote_value = RemoteValueSceneNumber(xknx)
     self.assertEqual(remote_value.from_knx(DPTArray((0x0A, ))), 11)
示例#16
0
class Scene(Device):
    """Class for managing a scene."""

    def __init__(self,
                 xknx,
                 name,
                 group_address=None,
                 scene_number=1,
                 device_updated_cb=None):
        """Initialize Sceneclass."""
        # pylint: disable=too-many-arguments
        super().__init__(xknx, name, device_updated_cb)

        self.scene_value = RemoteValueSceneNumber(
            xknx,
            group_address,
            device_name=self.name,
            after_update_cb=self.after_update)
        self.scene_number = int(scene_number)

    @classmethod
    def from_config(cls, xknx, name, config):
        """Initialize object from configuration structure."""
        group_address = \
            config.get('group_address')
        scene_number = \
            int(config.get('scene_number'))
        return cls(
            xknx,
            name=name,
            group_address=group_address,
            scene_number=scene_number)

    def has_group_address(self, group_address):
        """Test if device has given group address."""
        return self.scene_value.has_group_address(group_address)

    def __str__(self):
        """Return object as readable string."""
        return '<Scene name="{0}" ' \
               'scene_value="{1}" scene_number="{2}" />' \
            .format(
                self.name,
                self.scene_value.group_addr_str(),
                self.scene_number)

    async def run(self):
        """Activate scene."""
        await self.scene_value.set(self.scene_number)

    async def do(self, action):
        """Execute 'do' commands."""
        if action == "run":
            await self.run()
        else:
            self.xknx.logger.warning("Could not understand action %s for device %s", action, self.get_name())

    def state_addresses(self):
        """Return group addresses which should be requested to sync state."""
        return []

    def __eq__(self, other):
        """Equal operator."""
        return self.__dict__ == other.__dict__
示例#17
0
 def test_to_knx(self):
     """Test to_knx function with normal operation."""
     xknx = XKNX()
     remote_value = RemoteValueSceneNumber(xknx)
     assert remote_value.to_knx(11) == DPTArray((0x0A, ))
示例#18
0
 def test_from_knx(self):
     """Test from_knx function with normal operation."""
     xknx = XKNX()
     remote_value = RemoteValueSceneNumber(xknx)
     assert remote_value.from_knx(DPTArray((0x0A, ))) == 11