Skip to content

Instantly share code, notes, and snippets.

@LeoDJ
Last active February 22, 2019 02:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LeoDJ/7f24556e6ac2c8a2e2ca204af22a3ce9 to your computer and use it in GitHub Desktop.
Save LeoDJ/7f24556e6ac2c8a2e2ca204af22a3ce9 to your computer and use it in GitHub Desktop.
Artnet2MQTT
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();
{
"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