PyDMXControl icon indicating copy to clipboard operation
PyDMXControl copied to clipboard

Custom Channels

Open thenicnic opened this issue 10 months ago • 3 comments

Thank you for this great project, really cool! I'd like to add some more channels because I got a RGB LED bar that contains 16 segments (R, G, B for each segment, thus 48 channels). What would be the best way for me to modify the Controller file to support more than the default colors and 'dim' and so on? Hardcoed channel numbers wouldn't be a problem for me, plus I don't need the web interface because I'm trying to realize a sound-to-light script.

thenicnic avatar Sep 01 '23 22:09 thenicnic

👋 You shouldn't need to modify the core Controller to do this, you'll just need to implement your own fixture profile for the fixture you are using so that it registers all the expected channels. You can look at the built-in fixture profiles as a reference and starting point for implementing your own: https://github.com/MattIPv4/PyDMXControl/tree/master/PyDMXControl/profiles

MattIPv4 avatar Sep 01 '23 22:09 MattIPv4

Thanks Matt! Sorry I forgot to attach the code, I actually made a custom fixture but cannt address the register_channels. I may need to call them all "dimmer" but how do I do the addressing then? By using the "name" tag in add_fixture?

from ..defaults import Fixture

class PixelbarSwitch_53(Fixture):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
  
        self._register_channel('dimmer')
        self._register_channel_aliases('dimmer', 'dim', 'd')
        self._register_channel('1r')
        self._register_channel_aliases('1r')
        self._register_channel('1g')
        self._register_channel_aliases('1g')
        self._register_channel('1b')
        self._register_channel_aliases('1b')
        self._register_channel('2r')
        self._register_channel_aliases('2r')
        self._register_channel('2g')
        self._register_channel_aliases('2g')
        self._register_channel('2b')
        self._register_channel_aliases('2b')
        self._register_channel('3r')
        self._register_channel_aliases('3r')
        self._register_channel('3g')
        self._register_channel_aliases('3g')
        self._register_channel('3b')
        self._register_channel_aliases('3b')
        self._register_channel('4r')
        self._register_channel_aliases('4r')
        self._register_channel('4g')
        self._register_channel_aliases('4g')
        self._register_channel('4b')
        self._register_channel_aliases('4b')
        self._register_channel('5r')
        self._register_channel_aliases('5r')
        self._register_channel('5g')
        self._register_channel_aliases('5g')
        self._register_channel('5b')
        self._register_channel_aliases('5b')
        self._register_channel('6r')
        self._register_channel_aliases('6r')
        self._register_channel('6g')
        self._register_channel_aliases('6g')
        self._register_channel('6b')
        self._register_channel_aliases('6b')
        self._register_channel('7r')
        self._register_channel_aliases('7r')
        self._register_channel('7g')
        self._register_channel_aliases('7g')
        self._register_channel('7b')
        self._register_channel_aliases('7b')
        self._register_channel('8r')
        self._register_channel_aliases('8r')
        self._register_channel('8g')
        self._register_channel_aliases('8g')
        self._register_channel('8b')
        self._register_channel_aliases('8b')
[...]
        self._register_channel('41r')
        self._register_channel_aliases('41r')
        self._register_channel('41g')
        self._register_channel_aliases('41g')
        self._register_channel('41b')
        self._register_channel_aliases('41b')
        self._register_channel('42r')
        self._register_channel_aliases('42r')
        self._register_channel('42g')
        self._register_channel_aliases('42g')
        self._register_channel('42b')
        self._register_channel_aliases('42b')
        self._register_channel('43r')
        self._register_channel_aliases('43r')
        self._register_channel('43g')
        self._register_channel_aliases('43g')
        self._register_channel('43b')
        self._register_channel_aliases('43b')
        self._register_channel('44r')
        self._register_channel_aliases('44r')
        self._register_channel('44g')
        self._register_channel_aliases('44g')
        self._register_channel('44b')
        self._register_channel_aliases('44b')
        self._register_channel('45r')
        self._register_channel_aliases('45r')
        self._register_channel('45g')
        self._register_channel_aliases('45g')
        self._register_channel('45b')
        self._register_channel_aliases('45b')
        self._register_channel('46r')
        self._register_channel_aliases('46r')
        self._register_channel('46g')
        self._register_channel_aliases('46g')
        self._register_channel('46b')
        self._register_channel_aliases('46b')
        self._register_channel('47r')
        self._register_channel_aliases('47r')
        self._register_channel('47g')
        self._register_channel_aliases('47g')
        self._register_channel('47b')
        self._register_channel_aliases('47b')
        self._register_channel('48r')
        self._register_channel_aliases('48r')
        self._register_channel('48g')
        self._register_channel_aliases('48g')
        self._register_channel('48b')
        self._register_channel_aliases('48b')

thenicnic avatar Sep 02 '23 09:09 thenicnic

Ah! So the interface isn't great for this, but you can call Fixture#set_channel with the channel name and a value, or if you just want to set all the channels, you can call Fixture#set_channels with a list of values

https://github.com/MattIPv4/PyDMXControl/blob/27d41b33689eb197492a5928494a6d2f15ac391e/PyDMXControl/profiles/defaults/_Fixture.py#L313-L337

MattIPv4 avatar Sep 02 '23 11:09 MattIPv4