Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/moritzruth/node-enttec-open-dmx-usb
π‘ A Node.js library for interacting with the Enttec Open DMX USB Interface
https://github.com/moritzruth/node-enttec-open-dmx-usb
dmx enttec nodejs typescript
Last synced: about 2 months ago
JSON representation
π‘ A Node.js library for interacting with the Enttec Open DMX USB Interface
- Host: GitHub
- URL: https://github.com/moritzruth/node-enttec-open-dmx-usb
- Owner: moritzruth
- License: mit
- Created: 2019-12-26T12:40:18.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2023-05-29T10:06:26.000Z (over 1 year ago)
- Last Synced: 2024-10-29T01:22:15.401Z (2 months ago)
- Topics: dmx, enttec, nodejs, typescript
- Language: TypeScript
- Homepage:
- Size: 440 KB
- Stars: 13
- Watchers: 2
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# node-enttec-open-dmx-usb π
> A Node.js library for interacting with the
> [Enttec Open DMX USB interface](https://www.enttec.co.uk/en/product/controls/dmx-usb-interfaces/open-dmx-usb/)As it uses `serialport` under the hood, it should also work in
[these environments](https://serialport.io/docs/guide-platform-support#supported-platforms-and-architectures).## Install
![npm](https://img.shields.io/npm/v/enttec-open-dmx-usb?style=flat-square)The minimum required Node.js version is `v18.0.0`.
```sh
yarn add enttec-open-dmx-usb
# or
npm install enttec-open-dmx-usb
```## Usage
[**View documentation on jsdocs.io**](https://www.jsdocs.io/package/enttec-open-dmx-usb#EnttecOpenDMXUSBDevice)```js
import { EnttecOpenDMXUSBDevice as DMXDevice } from "enttec-open-dmx-usb"(async () => {
const device = new DMXDevice(await DMXDevice.getFirstAvailableDevice())device.setChannels({
1: 0xFF,
2: 0x44
})// same as
device.setChannels([0xFF, 0x44])// same as
device.setChannels(Buffer.from([0xFF, 0x44]))
})()
```### What to do when this doesnβt work
TLDR: Because `setTimeout` is imprecise, install [`easy-sleep`](https://github.com/qufei1993/easy-sleep) and
pass the `usleep` function provided by it as the third parameter to the constructor of `EnttecOpenDMXUSBDevice`.
See the example below.From [the Node.js documentation](https://nodejs.org/api/timers.html#settimeoutcallback-delay-args) regarding `setTimeout`:
> Node.js makes no guarantees about the exact timing of when callbacks will fire, nor of their ordering.
> The callback will be called as close as possible to the time specified.Because of this and the passive nature of the Enttec Open DMX USB interface, sometimes the timing requirements of the DMX specification are not met.
Using a library such as [`easy-sleep`](https://github.com/qufei1993/easy-sleep) which allows sleeping (i. e. blocking the event loop) for a precise
amount of microseconds is a possible workaround.You may pass a function sleeping for `n` *micro*seconds as the third parameter to the constructor of `EnttecOpenDMXUSBDevice`.
For example, using `easy-sleep`:
```js
import { EnttecOpenDMXUSBDevice as DMXDevice } from "enttec-open-dmx-usb"
import easySleep from "easy-sleep"new DMXDevice(await DMXDevice.getFirstAvailableDevice(), true, easySleep.Thread.usleep)
```## Events
`ready` - `startSending` may be called.`error` - An error occurred. `error` events from `serialport` are passed through.