|
var logger = require('winston');
var rpio = require("rpio")
var channel;
var wifi_routers;
var relay_status = [
{ code: "L01", status: false, pin: 35 }, // Light - plug 4
{ code: "R01", status: true, pin: 33 }, // Satelite Link router - plug 3
{ code: "R02", status: true, pin: 31 }, // Wifi Router - plug 2
{ code: "???", status: true, pin: 29 } // Unused - plug 1
]
module.exports.start = function(router, channel_config, wifi_routers_config){
channel = channel_config;
wifi_routers = wifi_routers_config;
logger.info("Starting Relay controller module");
rpio.open(relay_status[0].pin, rpio.OUTPUT, rpio.LOW);
rpio.open(relay_status[1].pin, rpio.OUTPUT, rpio.HIGH);
rpio.open(relay_status[2].pin, rpio.OUTPUT, rpio.HIGH);
rpio.open(relay_status[3].pin, rpio.OUTPUT, rpio.HIGH);
router.post('/switch_relay', function (req, res) {
logger.info("Received request for switching relays", req.body);
if(req.body != undefined){
var relay = req.body;
if(relay.code != undefined && relay.status != undefined){
switchRelay(relay.code, relay.status);
}
}
res.sendStatus(200);
});
}
module.exports.monitor = function(socket, channel){
socket.on('relay_switch_update', function (data) {
logger.info("relay_switch_update", data);
socket.emit("relay_switch", relay_status[0]);
});
}
var switchRelay = function(code, status){
switch (code) {
case "L01":
relay_L01(status)
break;
case "R01":
relay_restart(code, 30000, 0, 1)
break;
case "R02":
relay_restart(code, 5000, 1, 2)
break;
default:
}
}
var relay_L01 = function(status){
// switch on light relay
if(status == true) {
rpio.write(relay_status[0].pin, rpio.HIGH);
logger.info("Switched L01 ON");
} else {
rpio.write(relay_status[0].pin, rpio.LOW);
logger.info("Switched L01 OFF");
}
relay_status[0].status = status;
channel.emit('relay_switch', { code: "L01", status: status });
}
var relay_restart = function(code, time, wifi_id, relay_id){
// Restart router
channel.emit('relay_switch', { code: code, status: false });
wifi_routers.change_state(wifi_id, "Restarting");
logger.info("Switched " + code + " OFF");
relay_status[relay_id].status = false;
rpio.write(relay_status[relay_id].pin, rpio.LOW);
setTimeout(function () {
channel.emit('relay_switch', { code: code, status: true });
logger.info("Switched " + code + " ON");
relay_status[relay_id].status = true;
rpio.write(relay_status[relay_id].pin, rpio.HIGH);
setTimeout(function () {
wifi_routers.check_status(wifi_id);
setTimeout(function () {
wifi_routers.send_status();
}, 3000);
}, 15000);
}, time);
}
module.exports.switchRelay = switchRelay
|