dmxnet is an ArtNet-DMX-sender and receiver for nodejs
Warning: This Libary is not really actively maintained from me at the moment. It probably does work, but PRs might take a time, if merged at all. Feel free to fork if you wanna extend and develop it actively.
- Send DMX-Data as ArtNet
- Use multiple senders with different Net, Subnet and Universe-Settings
- Receive ArtNet-Data
- Use multiple receivers with different Net, Subnet and Universe
- Receive ArtPoll and send ArtPollReply (dmxnet is found by other software, e.g. DMX-Workshop)
See https://github.com/margau/dmxnet/graphs/contributors
Work in Progress Redesigned error handling (@bannsaenger)
v0.9.0 Dependency Updates, added ESTA manufacturer ID (@bannsaenger)
v0.8.0 Dependency Updates, constructor improvement (@soimon)
v0.7.0 Improve logging (thanks to @Patrick-Remy)
v0.6.0 Add typescript definitions (thanks to @she11sh0cked)
v0.5.0 Dependency Updates, add hosts option (thanks to @gaelhuot)
v0.4.0 Added support for receiving ArtDMX packets.
v0.3.0 Added support for base_refresh_interval, add sender.reset()
v0.2.0
Added support for receiving ArtPoll and sending ArtPollReply.
v0.1.3 Improved logging trough use of simple-node-logger
v0.1.2 Added subuni option to sender
v0.1.1 Added prepare channel
v0.1.0 Initital Release, sending ArtDMX working
How to install latest release:
npm install dmxnet
How to install current development version:
npm install git+https://[email protected]/margau/dmxnet.git
See example_rx.js and example_tx.js
Include dmxnet lib:
var dmxlib=require('dmxnet');
Create new dmxnet object:
var dmxnet = new dmxlib.dmxnet(options);
Options:
{
log: { level: 'info' }, // Winston logger options
oem: 0, // OEM Code from artisticlicense, default to dmxnet OEM.
esta: 0, // ESTA Manufacturer ID from https://tsp.esta.org, default to ESTA/PLASA (0x0000)
sName: "Text", // 17 char long node description, default to "dmxnet"
lName: "Long description", // 63 char long node description, default to "dmxnet - OpenSource ArtNet Transceiver"
hosts: ["127.0.0.1"], // Interfaces to listen to, all by default
errFunc: function(err) {
this.error(`Do some error handling or throw it: ${err.message}, stack: ${err.stack}`);
}.bind(this) // optional function to handle errors from the library by yourself. If omitted the errors will be thrown by the library
}
dmxnet works with objects: You can create a new Sender or Receiver-instance at any time, each transmitting or receiving data for a single ArtNet-Universe.
Each combination of net, subnet and universe is possible.
dmxnet can propagate max. 255 Sender/Receiver-Objects to other nodes. This is a limitation based on the internal structure of ArtPollReply-Packages. You can of course use more Sender/Receiver-Objects, but they won't propagate trough ArtPoll.
Create new sender object:
var sender=dmxnet.newSender(options);
Options:
{
ip: "127.0.0.1", //IP to send to, default 255.255.255.255
subnet: 0, //Destination subnet, default 0
universe: 0, //Destination universe, default 0
net: 0, //Destination net, default 0
port: 6454, //Destination UDP Port, default 6454
base_refresh_interval: 1000 // Default interval for sending unchanged ArtDmx
}
Set Channel:
sender.setChannel(channel,value);
Sets channel (0-511) to value (0-255) and transmits the changed values .
Fill Channels
sender.fillChannels(min,max,value);
Sets all channels between min and max (including these) to value and transmits the values.
Prepare Channel:
sender.prepChannel(channel,value);
Prepares channel (0-511) to value (0-255) without transmitting.
Change is transmitted with next
sender.transmit();
call, or the next periodically transmit. Useful for changing lots of channels at once/in parallel from device view.
Transmit:
sender.transmit();
Transmits a new ArtDMX Frame manually.
Reset:
sender.reset();
Resets all channels of this sender object to zero.
Please Note: dmxnet transmits a dmx-frame every 1000ms even if no channel has changed its value!
Create a new receiver-instance:
var receiver=dmxnet.newReceiver(options);
Options:
{
subnet: 0, //Destination subnet, default 0
universe: 0, //Destination universe, default 0
net: 0, //Destination net, default 0
}
Wait for a new frame:
receiver.on('data', function(data) {
console.log('DMX data:', data);
});
The receiver is emits an "data"-event each time new values have arrived.
The current values are stored inside the receiver.values
-array for polling.
- Act as Controller (Sending ArtPoll, Receiving ArtPollReply)
- Maybe support sACN?
Art-Net™ Designed by and Copyright Artistic Licence Holdings Ltd