No Description

relay_controller.js 2.7KB

    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