Commit 7499c71d authored by Leandro Lanzieri's avatar Leandro Lanzieri

Funcionando websockets, motor de reglas y clases

parent 9060286b
......@@ -4,16 +4,16 @@ var RuleEngine = require('node-rules'); // Para el motor de reglas
var reglas = require('./reglas.json'); // Reglas guardadas
var NodoOnOff = require("./nodo-onoff"); // Clase de nodo on off
var configuracion = require('./configuracion'); // Configuracion del sistema
var comunicacion = require('./comunicacion');
/*COMUNICACION SERIE*/
var serialport = require("serialport").SerialPort; // Para la comunicacion serie
var serialPortModule = require("serialport"); // Para la comunicacion serie
//La conexion serie es comun para todos los nodos
var conexion = new serialport("/dev/ttyAMA0", {
var conexion = new serialPortModule.SerialPort("/dev/ttyAMA0", {
baudrate: 9600,
stopBits: 1,
parser: serialport.parsers.raw
});
parser: serialPortModule.parsers.raw
}, false);
/* Los bytes para transmitir deben escribirse en este
......@@ -64,21 +64,48 @@ var hecho = {
for(i in configuracion.nodos) {
hecho.nodos.push(new NodoOnOff(configuracion.nodos[i]));
// TODO Hacer ping para ver si esta en la red
hecho.nodos[i].propiedades();
}
//Permite establecer la conecxion con el puerto serie
conexion.open(function() {
console.log("\nConexion serie establecida.");
var ws = new WebSocket(configuracion.servidor);
ws.on('open', function() {
ws.send(JSON.stringify({comando: "identificar", dato: "raspberry"}));
var ping = setInterval(function () {
ws.send(JSON.stringify({comando: "ping", dato: "Rasp dice stay alive!"}));
}, 15000);
});
ws.on('message', function(message) {
var mensaje = JSON.parse(message);
console.log("Comando recibido: " + mensaje.comando + " con el dato: " + mensaje.dato);
if(mensaje.comando == "rasptoggle") {
comandos = new Buffer([218]); // Comandos a transmitir
bufferTransmision = Buffer.concat([bufferTransmision, comandos]); // Se concatenan ak buffer de transmision
}
});
ws.on('close', function () {
setInterval(function () {
conectar();
console.log("Intentando reconexion...");
}, 5000);
});
conexion.on('data', function(mensaje) {
console.log("\nSe recibe: " + mensaje);
if(mensaje == comunicacion.ack) {
//if(mensaje == configuracion.ack) {
bufferTransmision = bufferTransmision.slice(1,bufferTransmision.length);
if(bufferTransmision.length == 0) {
console.log("\nSe vacio el buffer de transmision...");
}
}
//}
});
});
/* Este intervalo actualiza el tiempo del hecho global frente
* a los cambios de hora.
*/
......@@ -90,6 +117,7 @@ var actualizarTiempoHecho = setInterval(function () {
hecho.tiempo.mes = fecha.getMonth();
hecho.tiempo.diaSemana = fecha.getDay();
hechoAnterior = clone(hecho);
console.log(hecho);
/* Se evalua el hecho nuevo */
R.execute(hecho, function(result){
for(i in hecho.nodos) {
......@@ -97,7 +125,8 @@ var actualizarTiempoHecho = setInterval(function () {
var comando = hechoAnterior.nodos[i].actualizarEstado(hecho.nodos[i]);
// Si hay comandos, los agrego al buffer de salida
if(comando)
//bufferTransmision = Buffer.concat([bufferTransmision, comando]);
bufferTransmision = Buffer.concat([bufferTransmision, comando]);
console.log(result);
}
});
}, 1000);
\ No newline at end of file
}, 1000);
......@@ -24,24 +24,35 @@
* along with Proyecto Domotica. If not, see <http://www.gnu.org/licenses/>.
*******************************************************************************/
var util = require("util");
var Nodo = require('./nodo');
var Nodo = require('./nodo.js');
function NodoOnOff (nodo) {
Nodo.call(this, nodo);
Nodo.call(this, nodo);
this.propiedades = function () {
console.log("-----------------------");
console.log("\nPropiedades del Nodo");
console.log("\nId: " + this.id);
console.log("\nNombre: " + this.nombre);
console.log("\nFrecuencia: " + this.frecuencia);
console.log("\nTipo: " + this.tipo);
};
this.encender = function () {
console.log("\nEstoy encendido!.");
};
this.actualizarEstado = function(nodo) {
if(nodo.estado != this.estado) {
this.estado = nodo.estado;
console.log("\n" + this.nombre + " cambia su estado a: " + this.estado);
var salida = new Buffer([218]); // Se esta escribiendo RELE_TOGGLE en el puerto serie
return salida;
}
}
}
NodoOnOff.prototype.encender = function() {
console.log("\nEstoy encendido!");
}
NodoOnOff.prototype.actualizarEstado = function(nodo) {
if(nodo.estado != this.estado) {
this.estado = nodo.estado;
console.log("\n" + this.nombre + " cambia su estado a: " + this.estado);
var salida = new Buffer([218]); // Se esta escribiendo RELE_TOGGLE en el puerto serie
return salida;
}
}
util.inherits(NodoOnOff, Nodo);
module.exports = NodoOnOff;
\ No newline at end of file
module.exports = NodoOnOff;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment