Reading and using config files for lamps, colors and animation
This commit is contained in:
16
fs/animations.cfg
Normal file
16
fs/animations.cfg
Normal file
@@ -0,0 +1,16 @@
|
||||
[
|
||||
{"led": 0, "mode": "on", "ticks": 10},
|
||||
{"led": 0, "mode": "off", "ticks": 10},
|
||||
{"led": 1, "mode": "on", "ticks": 20},
|
||||
{"led": 1, "mode": "off", "ticks": 20},
|
||||
{"led": 2, "mode": "on", "ticks": 40},
|
||||
{"led": 2, "mode": "off", "ticks": 40},
|
||||
{"led": 3, "mode": "on", "ticks": 80},
|
||||
{"led": 3, "mode": "off", "ticks": 80},
|
||||
{"led": 4, "mode": "on", "ticks": 160},
|
||||
{"led": 4, "mode": "off", "ticks": 160},
|
||||
{"led": 5, "mode": "on", "ticks": 320},
|
||||
{"led": 5, "mode": "off", "ticks": 320},
|
||||
{"led": 6, "mode": "on", "ticks": 640},
|
||||
{"led": 6, "mode": "off", "ticks": 640}
|
||||
]
|
7
fs/colors.cfg
Normal file
7
fs/colors.cfg
Normal file
@@ -0,0 +1,7 @@
|
||||
[
|
||||
{"name": "off", "red": 0, "green": 0, "blue": 0},
|
||||
{"name": "candle", "red": 50, "green": 45, "blue": 10},
|
||||
{"name": "warmWhite", "red": 100, "green": 100, "blue": 80},
|
||||
{"name": "coldWhite", "red": 100, "green": 100, "blue": 100},
|
||||
{"name": "brightWhite", "red": 255, "green": 255, "blue": 255}
|
||||
]
|
142
fs/init.js
142
fs/init.js
@@ -6,6 +6,7 @@ load('api_sys.js');
|
||||
load('api_rpc.js');
|
||||
load('api_timer.js');
|
||||
load("api_math.js");
|
||||
load("api_file.js");
|
||||
load("api_neopixel.js");
|
||||
|
||||
|
||||
@@ -58,9 +59,10 @@ Net.setStatusEventHandler(function(ev, arg) {
|
||||
|
||||
// Initialize LED controller
|
||||
let addColor = ffi('void addColor(char *,int,int,int)');
|
||||
let addLedDefinition = ffi('void addLedDefinition(char *, char *, char *, int, int, int)');
|
||||
let addAnimationStep = ffi('void addAnimationStep(int, int, int)');
|
||||
let addLedDefinition = ffi('void addLedDefinition(char *, char *, char *, char *)');
|
||||
let addAnimationStep = ffi('void addAnimationStep(int, char *, int)');
|
||||
let LEDMode_on=1, LEDMode_off=2, LEDMode_blink=3, LEDMode_tv=4, LEDMode_fire=5;
|
||||
let LEDStateEngine_init = ffi('void LEDStateEngine_init(int)');
|
||||
let LEDStateEngine_start = ffi('void startLEDStateEngine(void)');
|
||||
let LEDStateEngine_pause = ffi('void pauseLEDStateEngine(void)');
|
||||
let LEDState_getRed = ffi('int LEDState_getLedRed(int)');
|
||||
@@ -76,9 +78,19 @@ let LEDDefinition_getOnColorRed = ffi('int LEDDefinition_getOnColorRed(int)');
|
||||
let LEDDefinition_getOnColorGreen = ffi('int LEDDefinition_getOnColorGreen(int)');
|
||||
let LEDDefinition_getOnColorBlue = ffi('int LEDDefinition_getOnColorBlue(int)');
|
||||
let getTicks = ffi('int getTicks(void)');
|
||||
let printColor = ffi('void printColor(char *)');
|
||||
|
||||
let pin = Cfg.get('led.pin'), numPixels = Cfg.get('led.count'), colorOrder = NeoPixel.GRB;
|
||||
let pin = Cfg.get('led.pin');
|
||||
let numPixels = Cfg.get('led.count');
|
||||
let colorOrder = NeoPixel.GRB;
|
||||
let strip = NeoPixel.create(pin, numPixels, colorOrder);
|
||||
let colorFile = Cfg.get('led.colorFile');
|
||||
let animationFile = Cfg.get('led.animationFile');
|
||||
let lampsFile = Cfg.get('led.lampsFile');
|
||||
let useDefaults = Cfg.get('led.useDefaults');
|
||||
let updateCycle = Cfg.get('led.updateCycle');
|
||||
let brightnessAdjustment = Cfg.get('led.brightness');
|
||||
let numberOfLeds = 0; // from config files, count led definition entries
|
||||
|
||||
/* Create test pattern */
|
||||
function createLedTestPattern() {
|
||||
@@ -93,31 +105,6 @@ function createLedTestPattern() {
|
||||
if (switchMod === 4) strip.setPixel(i, 0, 100, 100);
|
||||
if (switchMod === 5) strip.setPixel(i, 0, 0, 100);
|
||||
if (switchMod < 0 || switchMod > 5) print("WRONG -- should never reach this in switch statement!");
|
||||
/*
|
||||
switch (switchMod) {
|
||||
case 0:
|
||||
strip.setPixel(i, 100, 100, 100);
|
||||
break;
|
||||
case 1:
|
||||
strip.setPixel(i, 100, 0, 0);
|
||||
break;
|
||||
case 2:
|
||||
strip.setPixel(i, 100, 100, 0);
|
||||
break;
|
||||
case 3:
|
||||
strip.setPixel(i, 0, 100, 0);
|
||||
break;
|
||||
case 4:
|
||||
strip.setPixel(i, 0, 100, 100);
|
||||
break;
|
||||
case 5:
|
||||
strip.setPixel(i, 0, 0, 100);
|
||||
break;
|
||||
default:
|
||||
print("WRONG -- should never reach this in switch statement!");
|
||||
}
|
||||
*/
|
||||
// strip.setPixel(i, 100, 100, 100);
|
||||
}
|
||||
strip.show();
|
||||
}
|
||||
@@ -135,34 +122,105 @@ function allLedOff() {
|
||||
strip.show();
|
||||
}
|
||||
|
||||
function adjustBrightness(value) {
|
||||
return Math.floor(value * brightnessAdjustment/100);
|
||||
}
|
||||
|
||||
// initialize LEDs
|
||||
let i;
|
||||
allLedOff();
|
||||
|
||||
if (useDefaults) {
|
||||
print('Using default color definition');
|
||||
numberOfLeds = numPixels;
|
||||
startLEDStateEngine();
|
||||
} else {
|
||||
// Load Color definitions
|
||||
let json = File.read(colorFile);
|
||||
let colors = [];
|
||||
|
||||
print('colorJson =', json);
|
||||
if (json === '') {
|
||||
print('ERROR: Color definition file does not exist!');
|
||||
} else {
|
||||
colors = JSON.parse(json);
|
||||
}
|
||||
for (i=0; i<colors.length; ++i) {
|
||||
print('- addColor', colors[i].name, colors[i].red, colors[i].green, colors[i].blue);
|
||||
addColor(colors[i].name, colors[i].red, colors[i].green, colors[i].blue);
|
||||
}
|
||||
json = null;
|
||||
// colors = null; // NO! Do not do this, as the strings are still referenced!
|
||||
|
||||
// Load LED Definitions
|
||||
let json = File.read(lampsFile);
|
||||
let ledDef = [];
|
||||
print('ledDefFile =', json);
|
||||
if (json === '') {
|
||||
print('ERROR: LED definition file does not exist!');
|
||||
} else {
|
||||
ledDef = JSON.parse(json);
|
||||
}
|
||||
for (i=0; i<ledDef.length; ++i) {
|
||||
++numberOfLeds;
|
||||
print('- addLedDefinition', ledDef[i].level, ledDef[i].room, ledDef[i].id, ledDef[i].onColor);
|
||||
addLedDefinition(ledDef[i].level, ledDef[i].room, ledDef[i].id, ledDef[i].onColor);
|
||||
// printColor(ledDef[i].onColor);
|
||||
}
|
||||
json = null;
|
||||
// ledDef = null; // NO! Do not do this, as the strings are still referenced!
|
||||
|
||||
// Load Animation Definitions
|
||||
let json = File.read(animationFile);
|
||||
let animation = [];
|
||||
print('ledDefFile =', json);
|
||||
if (json === '') {
|
||||
print('ERROR: Animation definition file does not exist!');
|
||||
} else {
|
||||
animation = JSON.parse(json);
|
||||
}
|
||||
for (i=0; i<animation.length; ++i) {
|
||||
print('- addAnimationStep', animation[i].led, animation[i].mode, animation[i].ticks);
|
||||
addAnimationStep(animation[i].led, animation[i].mode, animation[i].ticks);
|
||||
}
|
||||
json = null;
|
||||
|
||||
// Initialize LED State Engine
|
||||
LEDStateEngine_init(numberOfLeds);
|
||||
}
|
||||
|
||||
print('_______________________________________________________');
|
||||
print('End of initialization:');
|
||||
print('LedPin:', pin);
|
||||
print('NumLEDs:', numPixels);
|
||||
print('NumLEDs:', numberOfLeds);
|
||||
print('Ticks:', getTicks());
|
||||
let i;
|
||||
print('Brightness:', brightnessAdjustment, '%');
|
||||
print('LED Update Cycle:', updateCycle, 'ms');
|
||||
print('LED', 'Color', 'R', 'G', 'B', 'Tick', 'Level', 'Room', 'Id');
|
||||
print('---', '-----', '---', '---', '-----', '---', '-----', '----', '--');
|
||||
for (i=0; i<numPixels; ++i) {
|
||||
for (i=0; i<numberOfLeds; ++i) {
|
||||
// print(i, LEDState_getRed(i), LEDState_getGreen(i), LEDState_getBlue(i), LEDState_getCurrentTick(i), LEDDefinition_getLevel(i), LEDDefinition_getRoom(i), LEDDefinition_getId(i))
|
||||
print(i, LEDState_getColorName(i), LEDDefinition_getOnColorRed(i), LEDDefinition_getOnColorGreen(i), LEDDefinition_getOnColorBlue(i), LEDState_getCurrentTick(i), LEDDefinition_getLevel(i), LEDDefinition_getRoom(i), LEDDefinition_getId(i))
|
||||
print(i, LEDState_getColorName(i), adjustBrightness(LEDDefinition_getOnColorRed(i)), adjustBrightness(LEDDefinition_getOnColorGreen(i)), adjustBrightness(LEDDefinition_getOnColorBlue(i), LEDState_getCurrentTick(i), LEDDefinition_getLevel(i), LEDDefinition_getRoom(i), LEDDefinition_getId(i)));
|
||||
}
|
||||
Timer.set(500 /* 0,5 sec */, false /* repeat */, function() {
|
||||
createLedTestPattern();
|
||||
print('Created LED test pattern, uptime:', Sys.uptime(), getInfo());
|
||||
LEDStateEngine_start();
|
||||
Timer.set(100, true, function () {
|
||||
let i;
|
||||
for (i=0; i<numPixels; ++i) {
|
||||
strip.setPixel(i, LEDState_getRed(i), LEDState_getGreen(i), LEDState_getBlue(i));
|
||||
}
|
||||
strip.show();
|
||||
|
||||
allLedOn();
|
||||
Timer.set(1000, false, function() {
|
||||
allLedOff();
|
||||
Timer.set(1000 /* 0,5 sec */, false /* repeat */, function() {
|
||||
createLedTestPattern();
|
||||
print('Created LED test pattern, uptime:', Sys.uptime(), getInfo());
|
||||
LEDStateEngine_start();
|
||||
Timer.set(updateCycle, true, function () {
|
||||
let i;
|
||||
for (i=0; i<numberOfLeds; ++i) {
|
||||
strip.setPixel(i, adjustBrightness(LEDState_getRed(i)), adjustBrightness(LEDState_getGreen(i)), adjustBrightness(LEDState_getBlue(i)));
|
||||
}
|
||||
strip.show();
|
||||
}, null);
|
||||
}, null);
|
||||
}, null);
|
||||
|
||||
|
||||
/*
|
||||
Timer.set(30000, true, function () {
|
||||
let i;
|
||||
|
9
fs/lamps.cfg
Normal file
9
fs/lamps.cfg
Normal file
@@ -0,0 +1,9 @@
|
||||
[
|
||||
{"level": "EG", "room": "Wohnzimmer", "id": "eg-wozi", "onColor": "candle"},
|
||||
{"level": "EG", "room": "Buero", "id": "eg-office", "onColor": "coldWhite"},
|
||||
{"level": "EG", "room": "Bad", "id": "eg-bad", "onColor": "warmWhite"},
|
||||
{"level": "EG", "room": "Kueche", "id": "eg-kueche", "onColor": "warmWhite"},
|
||||
{"level": "EG", "room": "Flur", "id": "eg-flur", "onColor": "candle"},
|
||||
{"level": "OG", "room": "Wohnzimmer", "id": "og-wozi", "onColor": "candle"},
|
||||
{"level": "OG", "room": "Buero", "id": "og-office", "onColor": "coldWhite"}
|
||||
]
|
Reference in New Issue
Block a user