Example #1
0
    async def store_scene(
        self,
        register_id: int,
        scene_id: int,
        output_ports: Sequence[lcn_defs.OutputPort] = (),
        relay_ports: Sequence[lcn_defs.RelayPort] = (),
        ramp: Optional[int] = None,
    ) -> bool:
        """Store states in the given scene.

        :param    int                register_id:    Register id 0..9
        :param    int                scene_id:       Scene id 0..9
        :param    list(OutputPort)   output_ports:   Output ports to store
                                                     as list
        :param    list(RelayPort)    relay_ports:    Relay ports to store
                                                     as list
        :param    int                ramp:           Ramp value

        :returns:    True if command was sent successfully, False otherwise
        :rtype:      bool
        """
        success = await self.send_command(
            not self.is_group, PckGenerator.change_scene_register(register_id)
        )

        if not success:
            return False

        coros = []
        if output_ports:
            coros.append(
                self.send_command(
                    not self.is_group,
                    PckGenerator.store_scene_output(scene_id, output_ports, ramp),
                )
            )
        if relay_ports:
            coros.append(
                self.send_command(
                    not self.is_group,
                    PckGenerator.store_scene_relay(scene_id, relay_ports),
                )
            )
        results = await asyncio.gather(*coros)
        return all(results)
Example #2
0
    async def activate_scene(
        self,
        register_id: int,
        scene_id: int,
        output_ports: Sequence[lcn_defs.OutputPort] = (),
        relay_ports: Sequence[lcn_defs.RelayPort] = (),
        ramp: Optional[int] = None,
    ) -> bool:
        """Activate the stored states for the given scene.

        :param    int                register_id:    Register id 0..9
        :param    int                scene_id:       Scene id 0..9
        :param    list(OutputPort)   output_ports:   Output ports to activate
                                                     as list
        :param    list(RelayPort)    relay_ports:    Relay ports to activate
                                                     as list
        :param    int                ramp:           Ramp value

        :returns:    True if command was sent successfully, False otherwise
        :rtype:      bool
        """
        success = await self.send_command(
            not self.is_group, PckGenerator.change_scene_register(register_id))
        if not success:
            return False

        result = True
        if output_ports:
            result &= await self.send_command(
                not self.is_group,
                PckGenerator.activate_scene_output(scene_id, output_ports,
                                                   ramp),
            )
        if relay_ports:
            result &= await self.send_command(
                not self.is_group,
                PckGenerator.activate_scene_relay(scene_id, relay_ports),
            )
        return result