dmxnet
Version:
ArtNet-DMX-sender and receiver for nodejs
228 lines (157 loc) • 5.8 kB
Markdown
# dmxnet
[](https://github.com/margau/dmxnet/releases)
[](https://www.npmjs.com/package/dmxnet)
[](https://github.com/margau/dmxnet/issues)
[](https://github.com/margau/dmxnet/stargazers)
[](https://github.com/margau/dmxnet/blob/master/LICENSE)
[](https://github.com/margau/dmxnet)
[](https://github.com/margau/dmxnet/releases)
[](https://www.npmjs.com/package/dmxnet)
[](https://travis-ci.com/margau/dmxnet)
dmxnet is an ArtNet-DMX-sender and receiver for nodejs,
currently under heavy development!
## 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](https://art-net.org.uk/resources/dmx-workshop/))
## Contributors
See https://github.com/margau/dmxnet/graphs/contributors
## Changelog
**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:**
```bash
npm install dmxnet
```
**How to install current development version:**
```bash
npm install git+https://git@github.com/margau/dmxnet.git
```
## Usage
**See example_rx.js and example_tx.js**
**Include dmxnet lib:**
```javascript
var dmxlib=require('dmxnet');
```
**Create new dmxnet object:**
```javascript
var dmxnet = new dmxlib.dmxnet(options);
```
Options:
```javascript
{
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
}
```
### 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:**
```javascript
var sender=dmxnet.newSender(options);
```
Options:
```javascript
{
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:**
```javascript
sender.setChannel(channel,value);
```
Sets *channel* (0-511) to *value* (0-255) and transmits the changed values .
**Fill Channels**
```javascript
sender.fillChannels(min,max,value);
```
Sets all channels between *min* and *max* (including these) to *value* and transmits the values.
**Prepare Channel:**
```javascript
sender.prepChannel(channel,value);
```
Prepares *channel* (0-511) to *value* (0-255) without transmitting.
Change is transmitted with next
```javascript
sender.transmit();
```
call, or the next periodically transmit. Useful for changing lots of channels at once/in parallel from device view.
**Transmit:**
```javascript
sender.transmit();
```
Transmits a new ArtDMX Frame manually.
**Reset:**
```javascript
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:**
```javascript
var receiver=dmxnet.newReceiver(options);
```
Options:
```javascript
{
subnet: 0, //Destination subnet, default 0
universe: 0, //Destination universe, default 0
net: 0, //Destination net, default 0
}
```
**Wait for a new frame:**
```javascript
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.
## 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**