From b5bdda68634e8bb4c0c3aa3a861400bc35e69e93 Mon Sep 17 00:00:00 2001 From: TMineCola Date: Thu, 7 Jun 2018 15:03:59 +0800 Subject: [PATCH] rfid and door module(MVP) --- index.js | 2 +- modules/doorControl.js | 79 +++++++++++++++++++++++++++--------------- modules/rfidReader.js | 37 ++++++++++++++++---- route/door.js | 0 4 files changed, 84 insertions(+), 34 deletions(-) create mode 100644 route/door.js diff --git a/index.js b/index.js index 29f6ac4..cabea0c 100644 --- a/index.js +++ b/index.js @@ -15,7 +15,7 @@ app.use(bodyParser.json()); rpio.init({mapping: 'physical'}); setInterval(function(){ - console.log(rfid.read()); + rfid.read(); }, 500); var server = app.listen(config.main.port || 8080, function() { diff --git a/modules/doorControl.js b/modules/doorControl.js index 9d45a0b..06c7710 100644 --- a/modules/doorControl.js +++ b/modules/doorControl.js @@ -2,53 +2,78 @@ module.exports = function (rpio, config) { var module = {}; - module.doorInit = function () { - _doorAttach(); - } - - // control functions - - module.doorPowerSwitch = function () { - rpio.read(config.lock.powerPIN) == 0 ? rpio.write(config.lock.powerPIN, rpio.HIGH) : rpio.write(config.lock.powerPIN, rpio.LOW) - - return rpio.read(config.lock.powerPIN); - } - - module.doorOpenSwitch = function () { - rpio.read(config.lock.openPIN) == 0 ? rpio.write(config.lock.openPIN, rpio.HIGH) : rpio.write(config.lock.openPIN, rpio.LOW) - - return rpio.read(config.lock.openPIN); - } - - module.doorPowerState = function () { - return rpio.read(config.lock.powerPIN); - } - - module.doorOpenState = function () { - return rpio.read(config.lock.openPIN); - } + var log = new logSystem(config.main.logDirectory, doorControl); + var powerState = false; function _doorAttach() { // connect relay and default power open and door close rpio.open(config.lock.powerPIN, rpio.OUTPUT, rpio.HIGH); rpio.open(config.lock.openPIN, rpio.OUTPUT, rpio.LOW); + // let module allow be use + powerState = true; } function _doorDetach() { + // disconnect rpio rpio.close(config.lock.powerPIN, rpio.PIN_RESET); rpio.close(config.lock.openPIN, rpio.PIN_RESET); + // let module disabled + powerState = false; } - // listen event functions + // event functions function _doorPowerPush() { + if(powerState == false) { + + } else { + + } // push Line API // logging } - function _doorStatePush() { + function _doorStatePush(state, message) { + if(state == 0) { + + } else { + + } // push Line API // logging } + module.doorInit = function () { + _doorAttach(); + } + + // control functions + + module.doorPowerSwitch = function () { + powerState == false ? _doorAttach() : _doorDetach(); + _doorPowerPush(); + + return powerState; + } + + module.doorOpenSwitch = function (message) { + if(powerState == true) { + rpio.read(config.lock.openPIN) == 0 ? rpio.write(config.lock.openPIN, rpio.HIGH) : rpio.write(config.lock.openPIN, rpio.LOW); + let currentState = rpio.read(config.lock.openPIN); + _doorStatePush(currentState, message); + + return currentState; + } else { + // log failed record + } + } + + module.doorPowerState = function () { + return rpio.read(config.lock.powerPIN); + } + + module.doorOpenState = function () { + return rpio.read(config.lock.openPIN); + } + return module; }; \ No newline at end of file diff --git a/modules/rfidReader.js b/modules/rfidReader.js index 75c1e4b..1352ab7 100644 --- a/modules/rfidReader.js +++ b/modules/rfidReader.js @@ -1,11 +1,16 @@ const rfid = require('mfrc522-rpi'); +const fs = require('fs'); +const logSystem = require('./modules/logControl'); module.exports = rfidReader; -function rfidReader(config) { +function rfidReader(config, door) { var module = {}; + var userData = JSON.parse(fs.readFileSync('../offlineData/user.json', 'utf8')); + var log = new logSystem(config.main.logDirectory, rfid); + // listen to SPI channel 0 rfid.initWiringPi(0); @@ -34,11 +39,26 @@ function rfidReader(config) { }; } - module.verify = function() { + function _verify(id) { + for(let studentid in userData) { + for(let index in userData[studentid].card) { + if(userData[studentid].card[index].cardID == id) { + //open + let state = door.doorOpenSwitch("message"); + //log.record(); + if(state == 0) { + + } else { + return true; + } + } + } + } + return false; } - function read() { + module.read = function () { // reset card rfid.reset(); @@ -57,9 +77,14 @@ function rfidReader(config) { // If we have the UID, continue const uid = response.data; - //# Rebuild uid to match card's ID - var cardID = uid[3].toString(16).padStart(2, "0") + uid[2].toString(16).padStart(2, "0") + uid[1].toString(16).padStart(2, "0") + uid[0].toString(16).padStart(2, "0") - return parseInt(cardID, 16); + // Rebuild uid to match card's ID + var cardID = uid[3].toString(16).padStart(2, "0") + uid[2].toString(16).padStart(2, "0") + uid[1].toString(16).padStart(2, "0") + uid[0].toString(16).padStart(2, "0"); + + return _verify(parseInt(cardID, 16)); + } + + module.jsonReload = function() { + userData = JSON.parse(fs.readFileSync('../offlineData/user.json', 'utf8')); } return module; diff --git a/route/door.js b/route/door.js new file mode 100644 index 0000000..e69de29