项目作者: margau

项目描述 :
ArtNet-DMX-sender and receiver for nodejs
高级语言: JavaScript
项目地址: git://github.com/margau/dmxnet.git
创建时间: 2017-11-18T08:44:19Z
项目社区:https://github.com/margau/dmxnet

开源协议:MIT License

下载


dmxnet

GitHub release
npm
GitHub issues
GitHub stars
GitHub license
GitHub last commit
Github All Releases
npm
Travis (.com)

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.

Features

  • 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)

Contributors

See https://github.com/margau/dmxnet/graphs/contributors

Changelog

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

Installation

How to install latest release:

  1. npm install dmxnet

How to install current development version:

  1. npm install git+https://git@github.com/margau/dmxnet.git

Usage

See example_rx.js and example_tx.js

Include dmxnet lib:

  1. var dmxlib=require('dmxnet');

Create new dmxnet object:

  1. var dmxnet = new dmxlib.dmxnet(options);

Options:

  1. {
  2. log: { level: 'info' }, // Winston logger options
  3. oem: 0, // OEM Code from artisticlicense, default to dmxnet OEM.
  4. esta: 0, // ESTA Manufacturer ID from https://tsp.esta.org, default to ESTA/PLASA (0x0000)
  5. sName: "Text", // 17 char long node description, default to "dmxnet"
  6. lName: "Long description", // 63 char long node description, default to "dmxnet - OpenSource ArtNet Transceiver"
  7. hosts: ["127.0.0.1"], // Interfaces to listen to, all by default
  8. errFunc: function(err) {
  9. this.error(`Do some error handling or throw it: ${err.message}, stack: ${err.stack}`);
  10. }.bind(this) // optional function to handle errors from the library by yourself. If omitted the errors will be thrown by the library
  11. }

Structure

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.

Notes

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.

Transmitting Art-Net

Create new sender object:

  1. var sender=dmxnet.newSender(options);

Options:

  1. {
  2. ip: "127.0.0.1", //IP to send to, default 255.255.255.255
  3. subnet: 0, //Destination subnet, default 0
  4. universe: 0, //Destination universe, default 0
  5. net: 0, //Destination net, default 0
  6. port: 6454, //Destination UDP Port, default 6454
  7. base_refresh_interval: 1000 // Default interval for sending unchanged ArtDmx
  8. }

Set Channel:

  1. sender.setChannel(channel,value);

Sets channel (0-511) to value (0-255) and transmits the changed values .

Fill Channels

  1. sender.fillChannels(min,max,value);

Sets all channels between min and max (including these) to value and transmits the values.

Prepare Channel:

  1. sender.prepChannel(channel,value);

Prepares channel (0-511) to value (0-255) without transmitting.

Change is transmitted with next

  1. sender.transmit();

call, or the next periodically transmit. Useful for changing lots of channels at once/in parallel from device view.

Transmit:

  1. sender.transmit();

Transmits a new ArtDMX Frame manually.

Reset:

  1. 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!

Receiving Art-Net

Create a new receiver-instance:

  1. var receiver=dmxnet.newReceiver(options);

Options:

  1. {
  2. subnet: 0, //Destination subnet, default 0
  3. universe: 0, //Destination universe, default 0
  4. net: 0, //Destination net, default 0
  5. }

Wait for a new frame:

  1. receiver.on('data', function(data) {
  2. console.log('DMX data:', data);
  3. });

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.

ToDo:

  • Act as Controller (Sending ArtPoll, Receiving ArtPollReply)
  • Maybe support sACN?

Please feel free to contribute!

Credits

Art-Net™ Designed by and Copyright Artistic Licence Holdings Ltd