diff --git a/Server_CoAP/CoAPthon3/coapserver.py b/Server_CoAP/CoAPthon3/coapserver.py index 86cac8a02db4c751112e28f76bd2159da917678f..373183afc4ffa7ad5622999ce4fb6228e20d9591 100644 --- a/Server_CoAP/CoAPthon3/coapserver.py +++ b/Server_CoAP/CoAPthon3/coapserver.py @@ -1,7 +1,8 @@ #!/usr/bin/env python - import getopt import sys +import threading +import _thread from coapthon.server.coap import CoAP from exampleresources import BleInfoResource, RasbpNodeInfoResource, RasbpGraphInfoResource @@ -16,6 +17,10 @@ class CoAPServer(CoAP): print(("CoAP Server start on " + host + ":" + str(port))) print((self.root.dump())) + def updateUserLocation(self): + + pass + def usage(): # pragma: no cover print("coapserver.py -i <ip address> -p <port>") @@ -43,7 +48,10 @@ def main(argv): # pragma: no cover server = CoAPServer(ip, port, multicast) try: + updateUserLocationThread = threading.Thread(target = server.updateUserLocation) + updateUserLocationThread.start() server.listen(10) + except KeyboardInterrupt: print("Server Shutdown") server.close() diff --git a/Server_CoAP/CoAPthon3/exampleresources.py b/Server_CoAP/CoAPthon3/exampleresources.py index dd9dc62ad7c5f6c2471c8058f477b5c48eb8c593..cffc127728f3e74371313766ad8ea857673ff30e 100644 --- a/Server_CoAP/CoAPthon3/exampleresources.py +++ b/Server_CoAP/CoAPthon3/exampleresources.py @@ -4,7 +4,6 @@ from pymongo import MongoClient from coapthon import defines from coapthon.resources.resource import Resource - class RasbpNodeInfoResource(Resource): def __init__(self, name="RasbpNodeInfo"): super(RasbpNodeInfoResource, self).__init__(name) @@ -20,7 +19,11 @@ class RasbpNodeInfoResource(Resource): self.payload = request.payload from coapthon.messages.response import Response assert(isinstance(response, Response)) - response.payload = self.postRasbpNodeInfoInDB(self.payload) + self.payload = json.loads(self.payload) + if self.payload['option'] == 1: + self.calculateNodePosition(sefl.payload) + else : + response.payload = self.postRasbpNodeInfoInDB(self.payload) response.code = defines.Codes.CREATED.number return self, response @@ -28,21 +31,23 @@ class RasbpNodeInfoResource(Resource): self.payload = request.payload from coapthon.messages.response import Response assert(isinstance(response, Response)) - response.payload = self.postRasbpNodeInfoInDB(self.payload) + self.payload = json.loads(self.payload) + if self.payload['option'] == 1: + self.calculateNodePosition(self.payload) + else : + response.payload = self.postRasbpNodeInfoInDB(self.payload) response.code = defines.Codes.CHANGED.number return self, response - def postRasbpNodeInfoInDB(self, info): - info = info.decode('ascii') + info = info['myMAC'] self.collection.delete_many({ 'rasbpMAC' : info }) ruuid = "52528282"+str(uuid.uuid4())[8:] + ruuid = ruuid.replace("-","") if self.collection.count() == 0: payload = { 'rasbpMAC' : info, - 'uuid' : ruuid, - 'x' : '0', - 'y' : '0' + 'uuid' : ruuid } self.collection.insert_one(payload) @@ -54,27 +59,34 @@ class RasbpNodeInfoResource(Resource): payload = { 'rasbpMAC' : info, 'uuid' : ruuid, - 'x' : '-1', - 'y' : '-1' } self.collection.insert_one(payload) response = json.dumps({ - 'uuid' : str(ruuid), + 'uuid' : ruuid, 'operate' : 1 }) - - - # else : - # mydocList = list(mydoc) - # if mydocList[0]['operation'] != '1': - # self.collection.update_one(mydocList[0], { "$set" : {"operation" : '1'}}) - # response = "re-operate" - # else : - # response = "already operate" - return response + def calculateNodePosition(self, info): + print("Start calculateNodePosition") + info = info['myuuid'] + graphColletion = self.db.RasbpGraphData + mydoc = self.collection.find({'uuid': info}) + if mydoc.count() == 1: + if self.collection.count() == 1: + pass + else if self.collection.count() == 2: + pass + else if self.collection.count() == 3: + pass + else: + pass + + else : + print("This is not registered Node") + + class RasbpGraphInfoResource(Resource): def __init__(self, name="RasbpGraphInfo"): super(RasbpGraphInfoResource, self).__init__(name) @@ -115,13 +127,27 @@ class RasbpGraphInfoResource(Resource): return True, response def postRasbpGraphInfoInDB(self, info): - """ info = json.loads(info) - mydoc = self.collection.find({ 'v1' : info['v1'], 'v2' : info['v2'] }) - if mydoc.count() == 0: - mydoc = self.collection.find({ 'v1' : info['v2'], 'v2' : info['v1']}) - """ - pass + mydoc = self.collection.find({'v1':info['v1'], 'v2':info['v2']}) + if mydoc.count() > 0: + distance = (mydoc[0]['sum']+info['distance']) / (mydoc[0]['count'] + 1) + + self.collection.update({ 'v1' : info['v1'], 'v2':info['v2']}, { + 'v1':info['v1'], + 'v2': info['v2'], + 'distance' : distance, + 'sum': mydoc[0]['sum']+float(info['distance']), + 'count': mydoc[0]['count']+1 + }, upsert=True) + + if mydoc.count() == 0: + self.collection.update({ 'v1' : info['v1'], 'v2':info['v2']}, { + 'v1':info['v1'], + 'v2': info['v2'], + 'distance' : float(info['distance']), + 'sum': float(info['distance']), + 'count': 1 + }, upsert=True) class BleInfoResource(Resource): def __init__(self, name="BleInfo"): @@ -164,8 +190,4 @@ class BleInfoResource(Resource): return True, response def postBLEInfoInDB(self, payload): - j = json.loads(payload) - - for i in j: - self.collection self.collection.insert_many(json.loads(payload)) diff --git a/Server_Vue_Express/backend/models/tracking.js b/Server_Vue_Express/backend/models/tracking.js new file mode 100644 index 0000000000000000000000000000000000000000..3d74d63da317633222d0d66c05b94d0117ee23c7 --- /dev/null +++ b/Server_Vue_Express/backend/models/tracking.js @@ -0,0 +1,16 @@ +var mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const trackingSchema = new Schema({ + rasbpID: { type: String, default: "" }, + uuid: { type: String, default: "" }, + distance: { type: Number, default: 0 }, + updateTime : { type: Number, default: 0 } +}, { collection : 'TrackingData', // 컬렉션명 지정 + versionKey : false, // "__v" 필드 생성X + strict : false } +); + + +//users collection +module.exports = mongoose.model('TrackingData', trackingSchema); \ No newline at end of file diff --git a/Server_Vue_Express/backend/routes/api.js b/Server_Vue_Express/backend/routes/api.js index 4d0ec53047392f78ddca626d296e1325c1b70b96..054519273c6480c7e1e7ca61d71317b654467e8d 100644 --- a/Server_Vue_Express/backend/routes/api.js +++ b/Server_Vue_Express/backend/routes/api.js @@ -2,7 +2,7 @@ var express = require('express'); var router = express.Router(); var uuidv1 = require('uuid/v1'); var User = require('../models/users'); - +var Tracking = require('../models/tracking'); /* var User = require('../models/users'); @@ -50,13 +50,25 @@ router.post('/DeleteUser', function(req, res) { // ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY ) //if(!output.result.n) return res.status(404).json({ error: "user not found" }); //res.json({ message: "user deleted" }); - - res.json({message: output, res : req.body}); }) }); +router.post('/findByUUID', function(req, res) { + uuid = req.body.uuid + + Tracking.find({uuid:req.body.uuid}, function(err, output){ + if(err) return res.status(500).json({ error: "database failure" }); + + // ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY ) + //if(!output.result.n) return res.status(404).json({ error: "user not found" }); + //res.json({ message: "user deleted" }); + + res.json({message: output, res : req.body}); + }) +}); + router.post('/', function(req, res, next) { console.log(req.body) res.render('index', { title: 'Express' });