[sharing] My take on an ENTTEC DMX USB Pro external
The good old external from nullmedium is end of life since long. The goto solution for using a DMX USB Pro recently was using the serial object directly.
I wanted to start learning to write Max externals, and I chose to create an external for the DMX USB Pro.A beta version of the package is available here: https://github.com/janmech/jam/releases/tag/1.0-beta
Download link: https://github.com/janmech/jam/releases/tag/1.0
The package contains 2 externals:
jam.dmxusbpro for sending and receiving DMX data from the interface and
jam.dmxusbpro~ for use with audio signals (sending DMX data only).
To install, download and unpack the zip package and copy it to the Max Packages folder. On first load of the externals Max might ask you to remove the quarantine attribute. Just confirm and continue (I don't have a paid Apple developer account, that's why).
The externals are compiled for MacOS 10.15 and later and should load on Intel and Apple Silicon Macs.
Looking forward for feedback and if there is interest in continuing this little project also collaborators are very welcome!
Thanks for this!!! I am really looking forward to try it out :)
Hello Alejandro,
could you already try it out and did it work for you? I am thinking about moving it from beta to release state. There were already over 30 downloads in GitHub, but I haven't received any feedback yet.
So that could either mean it works for others or it totally doesn't work :)
How is your experience so far?
Hello Jan M,
jam.dmxusbpro seems to work fine thru my Enttec DMX USB Pro (Firmware V1.43), controlling a U`King Moving Head lamp.
I'm running Max 8.5.4 / Mac OS 14.1.1 / Apple M1 Max.
(Haven't stressed it with torrents of data. Haven't tried jam.dmxusbpro~ .)
By the way, I have to always plug in the USB cable before opening the patcher?
Compliments!
Hello Xin Wei Sha,
thanks for your feedback!
It's good to hear that is works for you - especially on Apple Silicon as I only had few possibility to test it on M-Chips on borrowed machines!
By the way, I have to always plug in the USB cable before opening the patcher?
that shouldn't be necessary. after plugging in the ENTTEC just send a menu message to refresh the [umenu]
You just saved my life.
Thank you SO MUCH !!
Great it is of good use for you. Reading your other post I assume you work on receiving DMX data?
Let me know how it goes for you!
I removed the beta tag. New download link:
Any ETA on Windows support?
Hola José Andrés
I don’t have a Windows computer and also no experience in Windows programming regarding serial ports, therefore I have no plans for a port.
Anyone who wants to jump on board for that is very welcome.
Dear Jan M,
this works like a charm on Max 8.6.5 and macOS 15.2 (Apple M2 MacBook Air).
Thanks a million!!!
Very happy to hear it! Thanks for the feedback.
hello, is your jam.dmxusbpro object is only working with a list ? I send many adresses without the list , and it's working only on one and not all... thx

Hello Stefane,
I am not sure if I understand you well. What do you mean with 'I send many adresses without the list , and it's working only on one and not all'?
From what I can see in your screenshot you seem to send lists with one channel and one value e.g. [4 $1], [1 $1]. Does this not control the channels 4 or 1 respectively?
Thank you for your reply! I will test it tomorrow, but it seems that it's only doing the first channel
Feel free to share your patch, so I can take a look.
I may be misunderstanding, but the DMX output needs to be a complete list that is sent out every time an update is sent. AFAIK you can't update a single lamp without sending the whole list. (Though maybe that is happening in the part of the patch we can't see?)
Yes, in DMX world all channels of the universe are sent out repeatedly. This is to ensure that you if a cable disconnects and then reconnected all fixtures will be in the right position, color etc. right away.
The way the external is programmed is that it updates the values of the channels it receives as messages, while maintaining the values of the other channels. At startup all channel values are set to 0.
After startup for example, if the object receives a message [1 128 4 255] channel 1 will be set to 128 , channel 4 to 255 the rest will remain at 0
Hi -
I am trying to get this to work with a large number of addresses, in Max 9. I have 13 units, each with 10 parameters.
Do I need to amend the message from the pak to have 130 numbers, as 1 $1 2 $2....130 $130?
When I get to $11 in the message, it automatically changes it to \$11.
When I try to test this, I get the error: "jam.dmxusbpro: Invalid arument type. Expeting list on integers."
Please advise? Thank you!
Hello Elisabeth,
this is a limitation of Max. The $x placeholders are limited to $1 to $9. You might want to split the list generation into smaller chunks and then join them.
Alternatively you could use a large [pak] object. Later when I am in front of Max I can send an example.
Ah, I see! I would love to see an example, when you have a moment.
Right now I have sliders going to a large pak object, but then don't I need a message between the pak and your dmx object?
Here are two possible examples:
As always in Max there are many ways to approach a problem.
If I understand you correctly you are using 13 fixtures with 10 channels each. You could create an abstraction and specify the channels as arguments to make your live easier :)
listfunnel with set offset can do as well.

here with 130 sliders ...

Thank you both! This has gotten my DMX working again without crashing.
Now when I use pattrstorage, I get this error: "jam.dmxusbpro: Invalid argument count for message list. Expecting pairs of integers (0-255): DMX Channel | DMX Value" .
But everything is working & on, it's just showing an error.
thresh collects events in given time.
you use big pak which updates when any slider moves.
thresh outputs huge list that way.
I know nothing about jam.dmx,
but usually one sends whole list at once to dmx
without need of prepending channel id.
in which case you would bang yout list of 134 items at
allowed interval which is 25 ms.

if jam.dmx needs id + value, then why do you
connect all sliders into that big pak ?

Sorry for my late replay @ELIZABETH M STEWART
Just a few remarks:
Now when I use pattrstorage, I get this error: "jam.dmxusbpro: Invalid argument count for message list. Expecting pairs of integers (0-255): DMX Channel | DMX Value" .
This message appears when the number of elements in the list is uneven.
When exactly does it appear? I couldn't reproduce with your patch?
The metro object in @SOURCE AUDIO screenshots should't be necessary. The ENTTEC DMX USB PRO handles repeated sending of the DMX data internally.
Also should be able to only send those channel/value pair that you want to change. E.g. sending 1 123 10 201 will change set channel 1 to 123 and channel 10 to 201. All other channel values remain unchanged.
Let me know if you have more questions.