Last active
February 22, 2019 02:24
-
-
Save LeoDJ/7f24556e6ac2c8a2e2ca204af22a3ce9 to your computer and use it in GitHub Desktop.
Artnet2MQTT
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const artnet = require('./modules/artnet.module'); | |
const mqtt = require('mqtt'); | |
const port = 0x1936; | |
const listenUniverse = 42; | |
//MQTT stuff | |
var client = mqtt.connect('mqtt://localhost'); | |
var domain = "RGB-LED-control"; | |
var topicRegistration = domain + "/registration"; | |
var topicACK = domain + "/ack/+"; | |
var topicControl = domain + "/data/RGB/"; | |
var topicFade = domain + "/data/fade/"; | |
var devices = { | |
"68:C6:3A:9F:4D:88": {room: 1}, //Window 1 | |
"5C:CF:7F:1B:6F:85": {room: 2}, // 2 | |
"5C:CF:7F:8B:C5:03": {room: 3}, // 3 | |
"5C:CF:7F:88:1E:04": {room: 4}, // 4 | |
"18:FE:34:D3:F0:B2": {room: 5}, //Counter | |
"5C:CF:7F:8B:C6:AA": {room: 6}, //Coding Pen | |
"5C:CF:7F:1D:BB:11": {room: 7}, //Farmbot Room | |
} | |
let deviceCount = Object.keys(devices).length; | |
function intToHexStr(num) { | |
return ("0" + num.toString(16)).substr(-2); | |
} | |
function colorToRgbStr(color) { | |
let r = intToHexStr(color[0]); | |
let g = intToHexStr(color[1]); | |
let b = intToHexStr(color[2]); | |
return "#" + r + g + b; | |
} | |
function sendRGB(id, rgb) { | |
let rgbStr = colorToRgbStr(rgb); | |
let mac = Object.keys(devices)[id]; | |
client.publish(topicControl + mac, rgbStr) | |
} | |
function sendFade(id, rgb, fadeTime) // | |
{ | |
let rgbStr = colorToRgbStr(rgb); | |
let mac = Object.keys(devices)[id]; | |
let fadeStr = rgbStr + ";" + fadeTime; | |
client.publish(topicFade + mac, fadeStr); | |
//console.log(mac + " <fade " + rgb + " in " + fadeTime + "ms"); | |
} | |
function dataCbk(frame, peer) { | |
if(frame.universe == listenUniverse) { | |
let data = frame.data; | |
if(data.length < deviceCount * 4) { | |
return; | |
} | |
// console.log(JSON.stringify(data.slice(0,24))); | |
for(let i = 0; i < deviceCount; i++) { | |
let offset = i * 4; | |
let color = [data[offset + 0], data[offset + 1], data[offset + 2]]; | |
let fade = data[offset + 3] || 0; | |
if(fade == 0) { | |
sendRGB(i, color); | |
} | |
} | |
} | |
} | |
function start() { | |
artnet.listen(port, dataCbk); | |
console.log("Artnet2MQTT Bridge started..."); | |
console.log("Receiving on universe", listenUniverse); | |
} | |
start(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "artnet2mqtt", | |
"version": "0.0.1", | |
"description": "https://gist.github.com/LeoDJ/7f24556e6ac2c8a2e2ca204af22a3ce9", | |
"main": "index.js", | |
"dependencies": { | |
"dgram": "^1.0.1", | |
"mqtt": "^1.14.1" | |
}, | |
"devDependencies": {}, | |
"scripts": { | |
"app": "node index" | |
}, | |
"keywords": [ | |
"rgb", | |
"led", | |
"esp", | |
"esp8266", | |
"arduino", | |
"control", | |
"mqtt", | |
"artnet" | |
], | |
"author": "@LeoDJ", | |
"license": "MIT" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment