Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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.