diff --git a/devices.js b/devices.js index a07feea..abd1a7c 100644 --- a/devices.js +++ b/devices.js @@ -5,6 +5,25 @@ module.exports = { 'showtec-multidim2': { channels: ['1', '2', '3', '4'] }, + 'led-wall-tri-4c-1': { + channels: ['dimmer', 'red', 'green', 'blue'], + ranges: { + ctrl: { + type: 'option', + 'options': [ + {'value': 0, 'label': 'Dimmer'}, + {'value': 0, 'label': 'Red'}, + {'value': 0, 'label': 'Green'}, + {'value': 0, 'label': 'Blue'}, + ] + }, + 'dimmer': { + 'type': 'slider', + 'min': 0, + 'max': 255 + } + } + }, 'eurolite-led-bar': { channels: ['ctrl', 'dimmer', 'strobe', 'red0', 'green0', 'blue0', 'red1', 'green1', 'blue1', 'red2', 'green2', 'blue2'], ranges: { diff --git a/dmx-web.js b/dmx-web.js index 9ef849d..c363ef7 100755 --- a/dmx-web.js +++ b/dmx-web.js @@ -8,6 +8,7 @@ var express = require('express') var socketio = require('socket.io') var program = require('commander') var DMX = require('./dmx') +var pliabAnim = require('./pliabAnim') var A = DMX.Animation program @@ -48,14 +49,9 @@ function DMXWeb() { } } }) - io.set('log level', 1) - - app.configure(function() { - app.use(connect.json()) - }) app.get('/', function(req, res) { - res.sendfile(__dirname + '/index.html') + res.sendFile(__dirname + '/index.html') }) app.get('/config', function(req, res) { @@ -93,10 +89,17 @@ function DMXWeb() { // preserve old states var old = dmx.universeToObject(req.params.universe) - var animation = new A() - for(var step in req.body) { + var animation = new A() + for(var step in req.body) { + let stepTo = req.body[step].to; + + if (stepTo.hasOwnProperty('color') || stepTo.hasOwnProperty('opacity')) { + stepTo = pliabAnim.convertToDMX(stepTo); + } + + console.log('stepTo', stepTo); animation.add( - req.body[step].to, + stepTo, req.body[step].duration || 0, req.body[step].options || {} ) diff --git a/dmx-web.json b/dmx-web.json new file mode 100644 index 0000000..92099bf --- /dev/null +++ b/dmx-web.json @@ -0,0 +1,28 @@ +{ + "server": { + "listen_port": 8080, + "listen_host": "::" + }, + "presets": [ + { + "label": "White", + "values": { + "office": { "1": 16, "2": 255, "3": 0, "4": 255, "5": 255, "6": 255, "16": 16, "17": 255, "18": 0, "19": 255, "20": 255, "21": 255 } + } + } + ], + "universes": { + "office": { + "output": { + "driver": "enttec-usb-dmx-pro", + "device": "/dev/cu.usbserial-EN216442" + }, + "devices": [ + { + "type": "led-wall-tri-4c-1", + "address": 0 + } + ] + } + } +} diff --git a/drivers/dmx4all.js b/drivers/dmx4all.js index f7190d6..a808920 100644 --- a/drivers/dmx4all.js +++ b/drivers/dmx4all.js @@ -11,7 +11,7 @@ function DMX4ALL(device_id, options) { this.universe.fill(0) this.dev = new SerialPort(device_id, { - 'baudrate': 38400, + 'baudRate': 38400, 'databits': 8, 'stopbits': 1, 'parity': 'none' @@ -26,7 +26,7 @@ function DMX4ALL(device_id, options) { } DMX4ALL.prototype.send_universe = function() { - if(!this.dev.isOpen()) { + if(!this.dev.writable) { return } diff --git a/drivers/dmxking-ultra-dmx-pro.js b/drivers/dmxking-ultra-dmx-pro.js index 165b849..4b50ff5 100644 --- a/drivers/dmxking-ultra-dmx-pro.js +++ b/drivers/dmxking-ultra-dmx-pro.js @@ -25,7 +25,7 @@ function DMXKingUltraDMXPro(device_id, options) { } this.dev = new SerialPort(device_id, { - 'baudrate': 250000, + 'baudRate': 250000, 'databits': 8, 'stopbits': 2, 'parity': 'none' @@ -37,7 +37,7 @@ function DMXKingUltraDMXPro(device_id, options) { } DMXKingUltraDMXPro.prototype.send_universe = function() { - if(!this.dev.isOpen()) { + if(!this.dev.writable) { return } var hdr = Buffer([ diff --git a/drivers/enttec-open-usb-dmx.js b/drivers/enttec-open-usb-dmx.js index aa3f56a..b6508c8 100644 --- a/drivers/enttec-open-usb-dmx.js +++ b/drivers/enttec-open-usb-dmx.js @@ -12,7 +12,7 @@ function EnttecOpenUsbDMX(device_id, options) { self.interval = 46 this.dev = new SerialPort(device_id, { - 'baudrate': 250000, + 'baudRate': 250000, 'databits': 8, 'stopbits': 2, 'parity': 'none' @@ -27,7 +27,7 @@ function EnttecOpenUsbDMX(device_id, options) { EnttecOpenUsbDMX.prototype.send_universe = function() { var self = this - if(!this.dev.isOpen()) { + if(!this.dev.writable) { return } diff --git a/drivers/enttec-usb-dmx-pro.js b/drivers/enttec-usb-dmx-pro.js index d854ce2..99ec7fe 100644 --- a/drivers/enttec-usb-dmx-pro.js +++ b/drivers/enttec-usb-dmx-pro.js @@ -1,75 +1,76 @@ -"use strict" +"use strict"; -var SerialPort = require("serialport") +const SerialPort = require("serialport"); -var ENTTEC_PRO_DMX_STARTCODE = 0x00 - , ENTTEC_PRO_START_OF_MSG = 0x7e - , ENTTEC_PRO_END_OF_MSG = 0xe7 - , ENTTEC_PRO_SEND_DMX_RQ = 0x06 - , ENTTEC_PRO_RECV_DMX_PKT = 0x05 - ; +const ENTTEC_PRO_DMX_STARTCODE = 0x00 +, ENTTEC_PRO_START_OF_MSG = 0x7e +, ENTTEC_PRO_END_OF_MSG = 0xe7 +, ENTTEC_PRO_SEND_DMX_RQ = 0x06 +, ENTTEC_PRO_RECV_DMX_PKT = 0x05 +; -function EnttecUSBDMXPRO(device_id, options) { - var self = this - options = options || {} - this.universe = new Buffer(513) - this.universe.fill(0) - - this.dev = new SerialPort(device_id, { - 'baudrate': 250000, - 'databits': 8, - 'stopbits': 2, - 'parity': 'none' - }, function(err) { - if(!err) { - self.send_universe() - } - }) -} - -EnttecUSBDMXPRO.prototype.send_universe = function() { - if(!this.dev.isOpen()) { - return +const EnttecUSBDMXPRO = class EnttecUSBDMXPRO { + constructor(device_id, options) { + options = options || {}; + this.universe = new Buffer(512); + this.universe.fill(0); + + this.dev = new SerialPort(device_id, { + 'baudRate': 250000, + 'databits': 8, + 'stopbits': 2, + 'parity': 'none' + }, (err) => { + if(!err) { + this.send_universe(); + } + }) } - var hdr = Buffer([ - ENTTEC_PRO_START_OF_MSG, - ENTTEC_PRO_SEND_DMX_RQ, - (this.universe.length) & 0xff, - ((this.universe.length) >> 8) & 0xff, - ENTTEC_PRO_DMX_STARTCODE - ]) - var msg = Buffer.concat([ - hdr, - this.universe.slice(1), - Buffer([ENTTEC_PRO_END_OF_MSG]) - ]) - this.dev.write(msg) -} + send_universe () { + if(!this.dev.writable) { + return; + } + const hdr = Buffer([ + ENTTEC_PRO_START_OF_MSG, + ENTTEC_PRO_SEND_DMX_RQ, + (this.universe.length + 1) & 0xff, + ((this.universe.length + 1) >> 8) & 0xff, + ENTTEC_PRO_DMX_STARTCODE + ]); + + const msg = Buffer.concat([ + hdr, + this.universe, + Buffer([ENTTEC_PRO_END_OF_MSG]) + ]); + this.dev.write(msg); + } -EnttecUSBDMXPRO.prototype.start = function() {} -EnttecUSBDMXPRO.prototype.stop = function() {} + start() {} + stop() {} -EnttecUSBDMXPRO.prototype.close = function(cb) { - this.dev.close(cb) -} + close(cb) { + this.dev.close(cb); + } -EnttecUSBDMXPRO.prototype.update = function(u) { - for(var c in u) { - this.universe[c] = u[c] + update(u) { + for(let c in u) { + this.universe[c] = u[c]; + } + this.send_universe(); } - this.send_universe() -} -EnttecUSBDMXPRO.prototype.updateAll = function(v){ - for(var i = 1; i <= 512; i++) { - this.universe[i] = v + updateAll(v) { + for(let i = 0; i < 512; i++) { + this.universe[i] = v; + } + this.send_universe(); } - this.send_universe() -} -EnttecUSBDMXPRO.prototype.get = function(c) { - return this.universe[c] + get(c) { + return this.universe[c]; + } } module.exports = EnttecUSBDMXPRO \ No newline at end of file diff --git a/index.html b/index.html index b0acbd0..66dad48 100644 --- a/index.html +++ b/index.html @@ -55,8 +55,7 @@ function get_html_id(universe, channel) { return 'channel_' + universe + '_' + channel; } - - var socket = io.connect(); + var socket = io(); socket.on('init', function (msg) { $('#presets').empty(); $('#sliders').empty(); @@ -73,7 +72,6 @@ socket.emit('update', universe, values[universe]); } };}(setup.presets[preset].values)); - console.log(html); } /* blackout button */ @@ -95,16 +93,20 @@ var html = "

" + universe + "

"; for(var device in setup.universes[universe].devices) { var dev = setup.universes[universe].devices[device]; - html += '
' - for(var channel in devices[dev.type].channels) { - var channel_id = dev.address + Number(channel) - var html_id = get_html_id(universe, channel_id); - html += '
' - html += ''; - html += '' + if (devices[dev.type]) { + html += '
' + for(var channel in devices[dev.type].channels) { + var channel_id = dev.address + Number(channel) + var html_id = get_html_id(universe, channel_id); + html += '
' + html += ''; + html += '' + html += '
' + } html += '
' + } else { + console.log("[WARNING] Device " + dev.type + " is unknown and cannot be displayed in sliders overview!") } - html += '
' } html += "
"; $(html).hide().appendTo('#sliders').fadeIn(); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..bb42994 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1355 @@ +{ + "name": "dmx", + "version": "0.0.6", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "active-x-obfuscator": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/active-x-obfuscator/-/active-x-obfuscator-0.0.1.tgz", + "integrity": "sha1-CJuJs3FF/x2ex0r2UwvlUmyuHxo=", + "requires": { + "zeparser": "0.0.5" + } + }, + "base64id": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz", + "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=" + }, + "batch": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.0.tgz", + "integrity": "sha1-/S4Fp6XWlrTbkxQBPihdj/NVfsM=" + }, + "bindings": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", + "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=" + }, + "buffer-crc32": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.1.tgz", + "integrity": "sha1-vj5TgvwCttYySVasGvmKqYsIU0w=" + }, + "bytes": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.2.1.tgz", + "integrity": "sha1-VVsIq8sGP4l1kFMCUj5M1P/f3zE=" + }, + "color-convert": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz", + "integrity": "sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg=" + }, + "connect": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/connect/-/connect-2.11.2.tgz", + "integrity": "sha1-zQXGYfaG3+m80uEiDIX+goSNsBA=", + "requires": { + "buffer-crc32": "0.2.1", + "bytes": "0.2.1", + "cookie": "0.1.0", + "cookie-signature": "1.0.1", + "debug": "0.8.1", + "fresh": "0.2.0", + "methods": "0.1.0", + "multiparty": "2.2.0", + "negotiator": "0.3.0", + "pause": "0.0.1", + "qs": "0.6.5", + "raw-body": "1.1.2", + "send": "0.1.4", + "uid2": "0.0.3" + } + }, + "cookie": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.1.0.tgz", + "integrity": "sha1-kOtGndzpBchm3mh+/EMTHYgB+dA=" + }, + "cookie-signature": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.1.tgz", + "integrity": "sha1-ROByFIrwHm6OJK+/EmkNaK5pjss=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "debug": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.8.1.tgz", + "integrity": "sha1-IP9NJvXkIstoobrLu2EDmtjBwTA=" + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "express": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/express/-/express-3.4.8.tgz", + "integrity": "sha1-qnqJht4HBTM39Lxe2aZFPZzI4uE=", + "requires": { + "buffer-crc32": "0.2.1", + "commander": "1.3.2", + "connect": "2.12.0", + "cookie": "0.1.0", + "cookie-signature": "1.0.1", + "debug": "0.8.1", + "fresh": "0.2.0", + "merge-descriptors": "0.0.1", + "methods": "0.1.0", + "mkdirp": "0.3.5", + "range-parser": "0.0.4", + "send": "0.1.4" + }, + "dependencies": { + "commander": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-1.3.2.tgz", + "integrity": "sha1-io8w7GcKb91kr1LxkUuQfXnq1bU=", + "requires": { + "keypress": "0.1.0" + } + }, + "connect": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-2.12.0.tgz", + "integrity": "sha1-Mdj6DcrN8ZCNgivSkjvootKn7Zo=", + "requires": { + "batch": "0.5.0", + "buffer-crc32": "0.2.1", + "bytes": "0.2.1", + "cookie": "0.1.0", + "cookie-signature": "1.0.1", + "debug": "0.8.1", + "fresh": "0.2.0", + "methods": "0.1.0", + "multiparty": "2.2.0", + "negotiator": "0.3.0", + "pause": "0.0.1", + "qs": "0.6.6", + "raw-body": "1.1.2", + "send": "0.1.4", + "uid2": "0.0.3" + } + }, + "qs": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz", + "integrity": "sha1-bgFQmP9RlouKPIGQAdXyyJvEsQc=" + } + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "fresh": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.2.0.tgz", + "integrity": "sha1-v9lALPPfEsSkwxDHn5mj3eE9NKc=" + }, + "function-bind": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.0.tgz", + "integrity": "sha1-FhdnFMgBeY5Ojyz391KUZ7tKV3E=" + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "keypress": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz", + "integrity": "sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=" + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "requires": { + "immediate": "3.0.6" + } + }, + "merge-descriptors": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-0.0.1.tgz", + "integrity": "sha1-L/CYDJJM+B0LXR+2ARd8uLtWwNA=" + }, + "methods": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/methods/-/methods-0.1.0.tgz", + "integrity": "sha1-M11Cnu/SG3us8unJIqjSvRSjDk8=" + }, + "mime": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", + "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=" + }, + "mkdirp": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", + "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multiparty": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/multiparty/-/multiparty-2.2.0.tgz", + "integrity": "sha1-pWfCrwAK0i3I8qZT2Rl4rh9TFvQ=", + "requires": { + "readable-stream": "1.1.14", + "stream-counter": "0.2.0" + } + }, + "nan": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", + "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" + }, + "negotiator": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.3.0.tgz", + "integrity": "sha1-cG1pLv7d9XTVfqn7GriaT6fuj2A=" + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" + }, + "object.assign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.0.4.tgz", + "integrity": "sha1-scnMBE7xuf5jYG/BQau7MuFHMMw=", + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.0", + "object-keys": "1.0.11" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" + }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" + }, + "policyfile": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/policyfile/-/policyfile-0.0.4.tgz", + "integrity": "sha1-1rgurZiueeviKOLa9ZAzEeyYLk0=" + }, + "qs": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.5.tgz", + "integrity": "sha1-KUsmjksNQlD23eGbO4s0k13/FO8=" + }, + "range-parser": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-0.0.4.tgz", + "integrity": "sha1-wEJ//vUcEKy6B4KkbJYC50T/Ygs=" + }, + "raw-body": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.2.tgz", + "integrity": "sha1-x0swBN6l3v0WlhcRBqx0DsMdYr4=", + "requires": { + "bytes": "0.2.1" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "redis": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/redis/-/redis-0.7.3.tgz", + "integrity": "sha1-7le3pE0l7BWU5ENl2BZfp9HUgRo=", + "optional": true + }, + "send": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/send/-/send-0.1.4.tgz", + "integrity": "sha1-vnDY0b4B3mGCGvE3gLUDRaT3Gr0=", + "requires": { + "debug": "0.8.1", + "fresh": "0.2.0", + "mime": "1.2.11", + "range-parser": "0.0.4" + } + }, + "serialport": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-4.0.7.tgz", + "integrity": "sha1-QhxhiophK9QM+kYbSkYVTa8iKaU=", + "requires": { + "bindings": "1.2.1", + "commander": "2.11.0", + "debug": "2.6.8", + "lie": "3.1.1", + "nan": "2.6.2", + "node-pre-gyp": "0.6.32", + "object.assign": "4.0.4" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==" + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "requires": { + "ms": "2.0.0" + } + }, + "node-pre-gyp": { + "version": "0.6.32", + "bundled": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.0.1", + "rc": "1.1.6", + "request": "2.79.0", + "rimraf": "2.5.4", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.3.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true + } + } + }, + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1.0.9" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "bundled": true + } + } + }, + "npmlog": { + "version": "4.0.1", + "bundled": true, + "requires": { + "are-we-there-yet": "1.1.2", + "console-control-strings": "1.1.0", + "gauge": "2.7.2", + "set-blocking": "2.0.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.1.2", + "bundled": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.2" + }, + "dependencies": { + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "readable-stream": { + "version": "2.2.2", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + } + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "gauge": { + "version": "2.7.2", + "bundled": true, + "requires": { + "aproba": "1.0.4", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.0", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "supports-color": "0.2.0", + "wide-align": "1.1.0" + }, + "dependencies": { + "aproba": { + "version": "1.0.4", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "bundled": true + } + } + }, + "supports-color": { + "version": "0.2.0", + "bundled": true + }, + "wide-align": { + "version": "1.1.0", + "bundled": true, + "requires": { + "string-width": "1.0.2" + } + } + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + } + } + }, + "rc": { + "version": "1.1.6", + "bundled": true, + "requires": { + "deep-extend": "0.4.1", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "1.0.4" + }, + "dependencies": { + "deep-extend": { + "version": "0.4.1", + "bundled": true + }, + "ini": { + "version": "1.3.4", + "bundled": true + }, + "minimist": { + "version": "1.2.0", + "bundled": true + }, + "strip-json-comments": { + "version": "1.0.4", + "bundled": true + } + } + }, + "request": { + "version": "2.79.0", + "bundled": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.5.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.0", + "forever-agent": "0.6.1", + "form-data": "2.1.2", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.13", + "oauth-sign": "0.8.2", + "qs": "6.3.0", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.4.3", + "uuid": "3.0.1" + }, + "dependencies": { + "aws-sign2": { + "version": "0.6.0", + "bundled": true + }, + "aws4": { + "version": "1.5.0", + "bundled": true + }, + "caseless": { + "version": "0.11.0", + "bundled": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "requires": { + "delayed-stream": "1.0.0" + }, + "dependencies": { + "delayed-stream": { + "version": "1.0.0", + "bundled": true + } + } + }, + "extend": { + "version": "3.0.0", + "bundled": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.1.2", + "bundled": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.13" + }, + "dependencies": { + "asynckit": { + "version": "0.4.0", + "bundled": true + } + } + }, + "har-validator": { + "version": "2.0.6", + "bundled": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.11.0", + "is-my-json-valid": "2.15.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "bundled": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "bundled": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "has-ansi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "ansi-regex": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "bundled": true + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.0.0", + "bundled": true + } + } + }, + "supports-color": { + "version": "2.0.0", + "bundled": true + } + } + }, + "is-my-json-valid": { + "version": "2.15.0", + "bundled": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.0", + "xtend": "4.0.1" + }, + "dependencies": { + "generate-function": { + "version": "2.0.0", + "bundled": true + }, + "generate-object-property": { + "version": "1.2.0", + "bundled": true, + "requires": { + "is-property": "1.0.2" + }, + "dependencies": { + "is-property": { + "version": "1.0.2", + "bundled": true + } + } + }, + "jsonpointer": { + "version": "4.0.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + } + } + }, + "pinkie-promise": { + "version": "2.0.1", + "bundled": true, + "requires": { + "pinkie": "2.0.4" + }, + "dependencies": { + "pinkie": { + "version": "2.0.4", + "bundled": true + } + } + } + } + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + }, + "dependencies": { + "boom": { + "version": "2.10.1", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "requires": { + "boom": "2.10.1" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "requires": { + "hoek": "2.16.3" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.3.1", + "sshpk": "1.10.1" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "bundled": true + }, + "jsprim": { + "version": "1.3.1", + "bundled": true, + "requires": { + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "extsprintf": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "requires": { + "extsprintf": "1.0.2" + } + } + } + }, + "sshpk": { + "version": "1.10.1", + "bundled": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.0", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.6", + "jodid25519": "1.0.2", + "jsbn": "0.1.0", + "tweetnacl": "0.14.4" + }, + "dependencies": { + "asn1": { + "version": "0.2.3", + "bundled": true + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.0", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.4" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "getpass": { + "version": "0.1.6", + "bundled": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "0.1.0" + } + }, + "jsbn": { + "version": "0.1.0", + "bundled": true, + "optional": true + }, + "tweetnacl": { + "version": "0.14.4", + "bundled": true, + "optional": true + } + } + } + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "mime-types": { + "version": "2.1.13", + "bundled": true, + "requires": { + "mime-db": "1.25.0" + }, + "dependencies": { + "mime-db": { + "version": "1.25.0", + "bundled": true + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true + }, + "qs": { + "version": "6.3.0", + "bundled": true + }, + "stringstream": { + "version": "0.0.5", + "bundled": true + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "requires": { + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "bundled": true + } + } + }, + "tunnel-agent": { + "version": "0.4.3", + "bundled": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true + } + } + }, + "rimraf": { + "version": "2.5.4", + "bundled": true, + "requires": { + "glob": "7.1.1" + }, + "dependencies": { + "glob": { + "version": "7.1.1", + "bundled": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.3", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + }, + "dependencies": { + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "1.1.6" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + }, + "dependencies": { + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + } + } + } + } + }, + "semver": { + "version": "5.3.0", + "bundled": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.10", + "inherits": "2.0.3" + }, + "dependencies": { + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "2.0.3" + } + }, + "fstream": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "bundled": true + } + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "tar-pack": { + "version": "3.3.0", + "bundled": true, + "requires": { + "debug": "2.2.0", + "fstream": "1.0.10", + "fstream-ignore": "1.0.5", + "once": "1.3.3", + "readable-stream": "2.1.5", + "rimraf": "2.5.4", + "tar": "2.2.1", + "uid-number": "0.0.6" + }, + "dependencies": { + "debug": { + "version": "2.2.0", + "bundled": true, + "requires": { + "ms": "0.7.1" + }, + "dependencies": { + "ms": { + "version": "0.7.1", + "bundled": true + } + } + }, + "fstream": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.5.4" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true + } + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "requires": { + "fstream": "1.0.10", + "inherits": "2.0.3", + "minimatch": "3.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "minimatch": { + "version": "3.0.3", + "bundled": true, + "requires": { + "brace-expansion": "1.1.6" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.6", + "bundled": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + } + } + } + } + } + } + }, + "once": { + "version": "1.3.3", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + }, + "dependencies": { + "wrappy": { + "version": "1.0.2", + "bundled": true + } + } + }, + "readable-stream": { + "version": "2.1.5", + "bundled": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + }, + "dependencies": { + "buffer-shims": { + "version": "1.0.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + } + } + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + } + } + } + } + } + } + }, + "socket.io": { + "version": "0.9.19", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-0.9.19.tgz", + "integrity": "sha1-SQu1/Q3FTPAC7gTmf638Q7hIo48=", + "requires": { + "base64id": "0.1.0", + "policyfile": "0.0.4", + "redis": "0.7.3", + "socket.io-client": "0.9.16" + } + }, + "socket.io-client": { + "version": "0.9.16", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-0.9.16.tgz", + "integrity": "sha1-TadRXF53MEHRtCOXBBW8xDDzX8Y=", + "requires": { + "active-x-obfuscator": "0.0.1", + "uglify-js": "1.2.5", + "ws": "0.4.32", + "xmlhttprequest": "1.4.2" + } + }, + "stream-counter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stream-counter/-/stream-counter-0.2.0.tgz", + "integrity": "sha1-3tJmVWMZyLDiIoErnPOyb6fZR94=", + "requires": { + "readable-stream": "1.1.14" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "tinycolor": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz", + "integrity": "sha1-MgtaUtg6u1l42Bo+iH1K77FaYWQ=" + }, + "uglify-js": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-1.2.5.tgz", + "integrity": "sha1-tULCx29477NLIAsgF3Y0Mw/3ArY=" + }, + "uid2": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", + "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" + }, + "ws": { + "version": "0.4.32", + "resolved": "https://registry.npmjs.org/ws/-/ws-0.4.32.tgz", + "integrity": "sha1-eHphVEFPPJntg8V3IVOyD+sM7DI=", + "requires": { + "commander": "2.1.0", + "nan": "1.0.0", + "options": "0.0.6", + "tinycolor": "0.0.1" + }, + "dependencies": { + "commander": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.1.0.tgz", + "integrity": "sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E=" + }, + "nan": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-1.0.0.tgz", + "integrity": "sha1-riT4hQgY1mL8q1rPfzuVv6oszzg=" + } + } + }, + "xmlhttprequest": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.4.2.tgz", + "integrity": "sha1-AUU6HZvtHo8XL2SVu/TIxCYyFQA=" + }, + "zeparser": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/zeparser/-/zeparser-0.0.5.tgz", + "integrity": "sha1-A3JlYbwmjy5URPVMZlt/1KjAKeI=" + } + } +} diff --git a/package.json b/package.json index 2ad0588..78acaf4 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { - "name": "dmx", - "version": "0.0.5", - "author": "Sebastian Wiedenroth ", + "name": "dmx", + "version": "0.0.6", + "author": "Sebastian Wiedenroth ", "description": "DMX library and webservice", - "url": "https://github.com/wiedi/node-dmx", - "main": "dmx.js", + "url": "https://github.com/thomfort/node-dmx", + "main": "dmx.js", "bin": { - "dmx-web": "./dmx-web.js" + "dmx-web": "./dmx-web.js" }, "repository": { "type": "git", @@ -17,16 +17,19 @@ "light control" ], "dependencies": { - "serialport": "4.0.x", - "socket.io": "0.9.x", - "connect": "2.11.x", - "express": "3.4.x", - "commander": "2.0.x" + "serialport": "6.0.4", + "socket.io": "2.0.4", + "connect": "3.6.5", + "express": "4.16.2", + "commander": "2.12.2" }, "licenses": [ { "name": "MIT", "url": "http://www.opensource.org/licenses/mit-license.php" } - ] + ], + "devDependencies": { + "color-convert": "^1.9.0" + } } diff --git a/pliabAnim.js b/pliabAnim.js new file mode 100644 index 0000000..8798c54 --- /dev/null +++ b/pliabAnim.js @@ -0,0 +1,42 @@ +const convert = require('color-convert'); + +module.exports = class plibAnim { + static convertToDMX(body) { + // {"0": 255, "1": 0, "2": 244, "3": 255} + // Channel 4c-1 + let convertedOpacity, convertedColor; + + if (body.opacity === 0) { + convertedOpacity = 0; + convertedColor = [0, 0, 0]; + } else { + convertedColor = this._convertHexToRgb(body.color); + convertedOpacity = this._convertOpacity(body.opacity); + } + + console.log('convertedOpacity', convertedOpacity); + console.log('convertedColor', convertedColor); + + return { + "0": convertedOpacity, + "1": convertedColor[0], + "2": convertedColor[1], + "3": convertedColor[2], + } + } + + static _convertOpacity(opacity) { + return (opacity * 100) * 255 / 100; + } + + static _convertHexToRgb(c) { + if (this._validHex(c)) { + return convert.hex.rgb(c); + } + return convert.keyword.rgb(c) || `Color "${c}" is invalid.`; + } + + static _validHex(c) { + return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(c); + } +}