MattIPv4 / PyDMXControl

A Python 3 module to control DMX using OpenDMX or uDMX - Featuring fixture profiles, built-in effects and a web control panel.
https://pypi.org/project/PyDMXControl/
GNU General Public License v3.0
114 stars 22 forks source link

Custom Channels #51

Open thenicnic opened 10 months ago

thenicnic commented 10 months ago

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.

MattIPv4 commented 10 months ago

👋 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

thenicnic commented 10 months ago

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')
MattIPv4 commented 10 months ago

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