Added new mode: Scheduler -- clock based switching of lights
This commit is contained in:
94
fs/init.js
94
fs/init.js
@@ -61,6 +61,8 @@ let configNumLeds = Cfg.get('led.count');
|
||||
let colorFile = Cfg.get('led.colorFile');
|
||||
let animationFile = Cfg.get('led.animationFile');
|
||||
let lampsFile = Cfg.get('led.lampsFile');
|
||||
let scheduleFile = Cfg.get('led.scheduleFile');
|
||||
let dynamicMode = Cfg.get('led.mode');
|
||||
let useDefaults = Cfg.get('led.useDefaults');
|
||||
let tickDuration = Cfg.get('led.tickDuration');
|
||||
let numberOfLeds = configNumLeds, numberOfLedDefs = 0; // from config files, count led definition entries
|
||||
@@ -155,6 +157,41 @@ function loadAnimDefs() {
|
||||
json = null;
|
||||
}
|
||||
|
||||
function loadScheduleDefs() {
|
||||
// Load Animation Definitions
|
||||
let json = File.read(scheduleFile);
|
||||
let scheduleDef = [];
|
||||
print('scheduleFile =', json);
|
||||
if (json === '') {
|
||||
print('ERROR: Schedule definition file does not exist!');
|
||||
} else {
|
||||
scheduleDef = JSON.parse(json);
|
||||
}
|
||||
LEDScheduler_init(scheduleDef.schedule.length, numberOfLeds, pin);
|
||||
LEDScheduler_setWatch(2, 0, 1); // time 02:00, clock speed = 1 real time second per model minute
|
||||
let ledMapping = scheduleDef.lampmapping;
|
||||
let mapLed = function (name) {
|
||||
for (let i=0; i<ledMapping.length; ++i) {
|
||||
if (ledMapping[i] === name) return i;
|
||||
}
|
||||
print("**** ERROR in schedule definition file: no lamp mapping found for lamp", name);
|
||||
return 0;
|
||||
};
|
||||
|
||||
for (i=0; i<scheduleDef.schedule.length; ++i) {
|
||||
print('- addScheduleItem', scheduleDef.schedule[i].time.h, ":", scheduleDef.schedule[i].time.m, "/",
|
||||
scheduleDef.schedule[i].lamp, "=", mapLed(scheduleDef.schedule[i].lamp), "/",
|
||||
scheduleDef.schedule[i].mode, "/",
|
||||
scheduleDef.schedule[i].color);
|
||||
LEDScheduler_addItem(scheduleDef.schedule[i].time.h, scheduleDef.schedule[i].time.m,
|
||||
mapLed(scheduleDef.schedule[i].lamp),
|
||||
scheduleDef.schedule[i].mode,
|
||||
scheduleDef.schedule[i].color);
|
||||
}
|
||||
json = null;
|
||||
}
|
||||
|
||||
|
||||
function initialize() {
|
||||
print('***** Start initialization', getInfo());
|
||||
let i;
|
||||
@@ -165,10 +202,30 @@ function initialize() {
|
||||
startLEDStateEngine();
|
||||
} else {
|
||||
loadColorDefs();
|
||||
loadLedDefs();
|
||||
loadAnimDefs();
|
||||
// Initialize LED State Engine
|
||||
LEDStateEngine_init(pin, numberOfLeds);
|
||||
if (dynamicMode === "animation") {
|
||||
loadLedDefs();
|
||||
loadAnimDefs();
|
||||
// Initialize LED State Engine
|
||||
LEDStateEngine_init(pin, numberOfLeds);
|
||||
print('LED', 'Color', 'R', 'G', 'B', 'Tick', 'Level', 'Room', 'Id');
|
||||
print('---', '-----', '---', '---', '-----', '---', '-----', '----', '--');
|
||||
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));
|
||||
}
|
||||
} else if (dynamicMode === "schedule") {
|
||||
loadScheduleDefs();
|
||||
} else {
|
||||
print("**** ERROR: Unknown dynamic mode", dynamicMode);
|
||||
return;
|
||||
}
|
||||
}
|
||||
allLedOff();
|
||||
print('***** End of initialization', getInfo());
|
||||
@@ -177,20 +234,7 @@ function initialize() {
|
||||
print('NumLEDs:', numberOfLeds);
|
||||
print('Ticks:', getTicks());
|
||||
print('Tick duration:', tickDuration, 'ms');
|
||||
print('Brightness:', LEDStateEngine_getBrightness(), '%');
|
||||
print('LED', 'Color', 'R', 'G', 'B', 'Tick', 'Level', 'Room', 'Id');
|
||||
print('---', '-----', '---', '---', '-----', '---', '-----', '----', '--');
|
||||
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('Brightness:', NeoPixel_getBrightness(), '%');
|
||||
}
|
||||
|
||||
Timer.set(300, false, function() {
|
||||
@@ -200,8 +244,14 @@ Timer.set(300, false, function() {
|
||||
allLedOff();
|
||||
print('***** LED test pattern', getInfo());
|
||||
showLedTestPattern();
|
||||
print('***** Start LED state engine and LED-update timer', getInfo());
|
||||
LEDStateEngine_start();
|
||||
if (dynamicMode === "animation") {
|
||||
print('***** Start LED state engine and LED-update timer', getInfo());
|
||||
LEDStateEngine_start();
|
||||
} else if (dynamicMode === "schedule") {
|
||||
print('***** Start schedule based animation', getInfo());
|
||||
NeoPixel_clear();
|
||||
LEDScheduler_run();
|
||||
}
|
||||
Timer.set(30000, true, function() {
|
||||
print("Timer: minTickTime =", LEDStateEngine_getMinTickTime(),
|
||||
"ms, maxTickTime =", LEDStateEngine_getMaxTickTime(), "ms");
|
||||
@@ -215,7 +265,7 @@ RPC.addHandler('led.setBrightness', function(args) {
|
||||
// print(args);
|
||||
if (args !== undefined && args.level !== undefined) {
|
||||
if (args.level > 0 && args.level <= 100) {
|
||||
LEDStateEngine_setBrightness(args.level);
|
||||
NeoPixel_setBrightness(args.level);
|
||||
return { result: 'ok' };
|
||||
} else {
|
||||
return { error: 'Brightness level must be in the range 1..100' };
|
||||
@@ -226,7 +276,7 @@ RPC.addHandler('led.setBrightness', function(args) {
|
||||
}, "{level: %d}");
|
||||
print(' led.getBrightness');
|
||||
RPC.addHandler('led.getBrightness', function(args) {
|
||||
let brightness = LEDStateEngine_getBrightness();
|
||||
let brightness = NeoPixel_getBrightness();
|
||||
return { result: 'ok', brightness: brightness };
|
||||
}, null);
|
||||
print(' led.pause');
|
||||
|
||||
Reference in New Issue
Block a user