JSFiddle - React, Tailwind, and code Playground
by jpencausse
JavaScript
var BUREAU = '11111';
var SALON = '22222';
var LUMENS = '33333';
exports.action = function(data, callback, config, SARAH){
// Patch for v2.9
init(SARAH);
// Get luminosity
SARAH.call('eedomus', { 'periphId' : LUMENS}, function(options){
var lumens = options.json.last_value;
var state = compute(data.learn, data.scene, lumens);
if (state != data.scene){
SARAH.speak("Finalement j'ai décidé de " + (state == 1 ? "faire" : "ne pas faire") + " l'action");
}
// Switch lights
scene(state, callback, SARAH);
});
}
// ==========================================
// BRAIN
// Don't do read/write on RaspberryPi
// ==========================================
var brain = require('./lib/brain');
var fs = require('fs');
var net = new brain.NeuralNetwork();
var file = 'plugins/41Scene/brain.json';
var set = [{'input': {l: 100/100, t: 0}, 'output': {s: 0}},
{'input': {l: 0/100, t: 0}, 'output': {s: 1}}];
// Read file once
if (fs.existsSync(file)){
set = JSON.parse(fs.readFileSync(file,'utf8'));
}
net.train(set);
var compute = function(learn, state, lum){
console.log('lumens:', lum, 'state:', state);
if (learn){
set.push({'input': {l: lum/100, t: minutes() }, 'output': {s: state}});
net.train(set);
fs.writeFileSync(file, JSON.stringify(set), 'utf8');
return state;
}
// Guess only for switch 'on'. Not 'off'
if (state == 1){
return Math.round(net.run({l: lum/100, t: minutes() }).s); // Should remember luminosity for X minutes
}
return state;
}
var moment = require('moment');
moment.lang('fr');
var minutes = function(){
var millis = moment().startOf('day').diff(moment())
return (-millis/60000) / (24*60);
}
// ==========================================
// RUN SCENE
// ==========================================
var scene = function(state, callback, SARAH){
var tts = '';
if (state == 1){
lights(BUREAU, true, SARAH);
...