{"_id":"@bannsaenger/dmxnet","name":"@bannsaenger/dmxnet","dist-tags":{"latest":"0.9.1"},"versions":{"0.9.1":{"name":"@bannsaenger/dmxnet","version":"0.9.1","description":"ArtNet-DMX-sender and receiver for nodejs","main":"lib.js","types":"lib.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 0","lint":"eslint --ignore-path .gitignore . --max-warnings 0","lintfix":"eslint --ignore-path .gitignore --fix .","jsdoc":"jsdoc lib.js -d jsdoc"},"repository":{"type":"git","url":"git+https://github.com/margau/dmxnet.git"},"keywords":["artnet","dmx","lightning","stage"],"author":{"name":"margau"},"license":"MIT","bugs":{"url":"https://github.com/margau/dmxnet/issues"},"homepage":"https://github.com/margau/dmxnet#readme","dependencies":{"jspack":"0.0.4","netmask":"^2.0.1","winston":"^3.3.3"},"devDependencies":{"eslint":"^5.16.0","eslint-plugin-jsdoc":"^15.12.2","eslint-plugin-node":"^10.0.0","jsdoc":"^3.6.6"},"_id":"@bannsaenger/dmxnet@0.9.1","gitHead":"17f2300279e6560f0feb0189632ac4173b665885","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-K6c+WBTYRjkR7ffGxyaMuQBdn2scGwpgLwerZffflRwkg7l5ACRwvy4EVxhrRGmn4mum6bBL5dTgNQYXEnZVbQ==","shasum":"b4fee829bee6ba1225dfd50b99cf8930b14af192","tarball":"https://registry.npmjs.org/@bannsaenger/dmxnet/-/dmxnet-0.9.1.tgz","fileCount":9,"unpackedSize":39233,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAtJSKdUZEJs1gR9SWYfO5mBzD2kGNrTWzHy5r5KX4+3AiAkecVGV1NiqpjoZhWjFrzK96gNLJmDEQa1WEKdOBMQPA=="}]},"_npmUser":{"name":"bannsaenger","email":"bannsaenger@gmx.de"},"directories":{},"maintainers":[{"name":"bannsaenger","email":"bannsaenger@gmx.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dmxnet_0.9.1_1770913909316_0.4244014596831598"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-12T16:31:49.167Z","0.9.1":"2026-02-12T16:31:49.505Z","modified":"2026-02-12T16:31:49.778Z"},"maintainers":[{"name":"bannsaenger","email":"bannsaenger@gmx.de"}],"description":"ArtNet-DMX-sender and receiver for nodejs","homepage":"https://github.com/margau/dmxnet#readme","keywords":["artnet","dmx","lightning","stage"],"repository":{"type":"git","url":"git+https://github.com/margau/dmxnet.git"},"author":{"name":"margau"},"bugs":{"url":"https://github.com/margau/dmxnet/issues"},"license":"MIT","readme":"# dmxnet\r\n[![GitHub release](https://img.shields.io/github/release/margau/dmxnet.svg)](https://github.com/margau/dmxnet/releases)\r\n[![npm](https://img.shields.io/npm/v/dmxnet.svg)](https://www.npmjs.com/package/dmxnet)\r\n[![GitHub issues](https://img.shields.io/github/issues/margau/dmxnet.svg)](https://github.com/margau/dmxnet/issues)\r\n[![GitHub stars](https://img.shields.io/github/stars/margau/dmxnet.svg)](https://github.com/margau/dmxnet/stargazers)\r\n[![GitHub license](https://img.shields.io/github/license/margau/dmxnet.svg)](https://github.com/margau/dmxnet/blob/master/LICENSE)\r\n[![GitHub last commit](https://img.shields.io/github/last-commit/margau/dmxnet.svg)](https://github.com/margau/dmxnet)\r\n[![Github All Releases](https://img.shields.io/github/downloads/margau/dmxnet/total.svg)](https://github.com/margau/dmxnet/releases)\r\n[![npm](https://img.shields.io/npm/dt/dmxnet.svg)](https://www.npmjs.com/package/dmxnet)\r\n[![Travis (.com)](https://img.shields.io/travis/com/margau/dmxnet.svg)](https://travis-ci.com/margau/dmxnet)\r\n\r\ndmxnet is an ArtNet-DMX-sender and receiver for nodejs\r\n\r\n# 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.\r\n\r\n## Features\r\n\r\n- Send DMX-Data as ArtNet\r\n- Use multiple senders with different Net, Subnet and Universe-Settings\r\n- Receive ArtNet-Data\r\n- Use multiple receivers with different Net, Subnet and Universe\r\n- Receive ArtPoll and send ArtPollReply (dmxnet is found by other software, e.g. [DMX-Workshop](https://art-net.org.uk/resources/dmx-workshop/))\r\n\r\n## Contributors\r\nSee https://github.com/margau/dmxnet/graphs/contributors\r\n\r\n## Changelog\r\n**v0.9.1**\r\nDependency Updates, redesigned error handling (@bannsaenger)\r\n\r\n**v0.9.0**\r\nDependency Updates, added ESTA manufacturer ID (@bannsaenger)\r\n\r\n**v0.8.0**\r\nDependency Updates, constructor improvement (@soimon)\r\n\r\n**v0.7.0**\r\nImprove logging (thanks to @Patrick-Remy)\r\n\r\n**v0.6.0**\r\nAdd typescript definitions (thanks to @she11sh0cked)\r\n\r\n**v0.5.0**\r\nDependency Updates, add hosts option (thanks to @gaelhuot)\r\n\r\n**v0.4.0**\r\nAdded support for receiving ArtDMX packets.\r\n\r\n**v0.3.0**\r\nAdded support for base_refresh_interval, add sender.reset()\r\n\r\n**v0.2.0**\r\n\r\nAdded support for receiving ArtPoll and sending ArtPollReply.\r\n\r\n**v0.1.3**\r\nImproved logging trough use of simple-node-logger\r\n\r\n**v0.1.2**\r\nAdded subuni option to sender\r\n\r\n**v0.1.1**\r\nAdded prepare channel\r\n\r\n**v0.1.0**\r\nInitital Release, sending ArtDMX working\r\n\r\n## Installation\r\n\r\n**How to install latest release:**\r\n\r\n```bash\r\nnpm install dmxnet\r\n```\r\n\r\n**How to install current development version:**\r\n\r\n```bash\r\nnpm install git+https://git@github.com/margau/dmxnet.git\r\n```\r\n\r\n## Usage\r\n\r\n**See example_rx.js and example_tx.js**\r\n\r\n**Include dmxnet lib:**\r\n\r\n```javascript\r\nvar dmxlib=require('dmxnet');\r\n```\r\n\r\n**Create new dmxnet object:**\r\n\r\n```javascript\r\nvar dmxnet = new dmxlib.dmxnet(options);\r\n```\r\n\r\nOptions:\r\n\r\n```javascript\r\n{\r\n  log: { level: 'info' }, // Winston logger options\r\n  oem: 0, // OEM Code from artisticlicense, default to dmxnet OEM.\r\n  esta: 0, // ESTA Manufacturer ID from https://tsp.esta.org, default to ESTA/PLASA (0x0000)\r\n  sName: \"Text\", // 17 char long node description, default to \"dmxnet\"\r\n  lName: \"Long description\", // 63 char long node description, default to \"dmxnet - OpenSource ArtNet Transceiver\"\r\n  hosts: [\"127.0.0.1\"], // Interfaces to listen to, all by default\r\n  errFunc: function(err) {\r\n                this.error(`Do some error handling or throw it: ${err.message}, stack: ${err.stack}`);\r\n            }.bind(this) // optional function to handle errors from the library by yourself. If omitted the errors will be thrown by the library\r\n  hosts: [\"127.0.0.1\"], // Interfaces to listen to, all by default\r\n  errFunc: function(err) {\r\n                this.error(`Do some error handling or throw it: ${err.message}, stack: ${err.stack}`);\r\n            }.bind(this) // optional function to handle errors from the library by yourself. If omitted the errors will be thrown by the library\r\n}\r\n```\r\n\r\n### Structure\r\ndmxnet works with objects:\r\nYou can create a new Sender or Receiver-instance at any time,\r\neach transmitting or receiving data for a single ArtNet-Universe.\r\n\r\nEach combination of net, subnet and universe is possible.\r\n\r\n### Notes\r\ndmxnet can propagate max. 255 Sender/Receiver-Objects to other nodes.\r\nThis is a limitation based on the internal structure of ArtPollReply-Packages.\r\n**You can of course use more Sender/Receiver-Objects, but they won't propagate\r\ntrough ArtPoll.**\r\n### Transmitting Art-Net\r\n\r\n**Create new sender object:**\r\n\r\n```javascript\r\nvar sender=dmxnet.newSender(options);\r\n```\r\n\r\nOptions:\r\n\r\n```javascript\r\n{\r\n  ip: \"127.0.0.1\", //IP to send to, default 255.255.255.255\r\n  subnet: 0, //Destination subnet, default 0\r\n  universe: 0, //Destination universe, default 0\r\n  net: 0, //Destination net, default 0\r\n  port: 6454, //Destination UDP Port, default 6454\r\n  base_refresh_interval: 1000 // Default interval for sending unchanged ArtDmx\r\n}\r\n```\r\n\r\n**Set Channel:**\r\n\r\n```javascript\r\nsender.setChannel(channel,value);\r\n```\r\n\r\nSets *channel* (0-511) to *value* (0-255) and transmits the changed values .\r\n\r\n**Fill Channels**\r\n\r\n```javascript\r\nsender.fillChannels(min,max,value);\r\n```\r\n\r\nSets all channels between *min* and *max* (including these) to *value* and transmits the values.\r\n\r\n**Prepare Channel:**\r\n\r\n```javascript\r\nsender.prepChannel(channel,value);\r\n```\r\n\r\nPrepares *channel* (0-511) to *value* (0-255) without transmitting.\r\n\r\nChange is transmitted with next\r\n```javascript\r\nsender.transmit();\r\n```\r\ncall, or the next periodically transmit. Useful for changing lots of channels at once/in parallel from device view.\r\n\r\n**Transmit:**\r\n\r\n```javascript\r\nsender.transmit();\r\n```\r\n\r\nTransmits a new ArtDMX Frame manually.\r\n\r\n**Reset:**\r\n\r\n```javascript\r\nsender.reset();\r\n```\r\n\r\nResets all channels of this sender object to zero.\r\n\r\n**Please Note: dmxnet transmits a dmx-frame every 1000ms even if no channel has changed its value!**\r\n\r\n### Receiving Art-Net\r\n\r\n**Create a new receiver-instance:**\r\n\r\n```javascript\r\nvar receiver=dmxnet.newReceiver(options);\r\n```\r\n\r\nOptions:\r\n\r\n```javascript\r\n{\r\n  subnet: 0, //Destination subnet, default 0\r\n  universe: 0, //Destination universe, default 0\r\n  net: 0, //Destination net, default 0\r\n}\r\n```\r\n\r\n**Wait for a new frame:**\r\n\r\n```javascript\r\nreceiver.on('data', function(data) {\r\n  console.log('DMX data:', data);\r\n});\r\n```\r\n\r\nThe receiver is emits an \"data\"-event each time new values have arrived.\r\n\r\nThe current values are stored inside the `receiver.values`-array for polling.\r\n\r\n## ToDo:\r\n\r\n- Act as Controller (Sending ArtPoll, Receiving ArtPollReply)\r\n- Maybe support sACN?\r\n\r\n\r\n### Please feel free to contribute!\r\n\r\n\r\n\r\n## Credits\r\n\r\n**Art-Net™ Designed by and Copyright Artistic Licence Holdings Ltd**\r\n","readmeFilename":"README.md","_rev":"1-6bff88cafe75a72f894b97f2de84f31e"}