Skip to content
Snippets Groups Projects
Commit 2ccb1c5e authored by 남성찬's avatar 남성찬
Browse files
parents b74d7d87 398a2279
Branches
No related tags found
No related merge requests found
#!/usr/bin/env python #!/usr/bin/env python
import getopt import getopt
import sys import sys
import threading
import _thread
from coapthon.server.coap import CoAP from coapthon.server.coap import CoAP
from exampleresources import BleInfoResource, RasbpNodeInfoResource, RasbpGraphInfoResource from exampleresources import BleInfoResource, RasbpNodeInfoResource, RasbpGraphInfoResource
...@@ -16,6 +17,10 @@ class CoAPServer(CoAP): ...@@ -16,6 +17,10 @@ class CoAPServer(CoAP):
print(("CoAP Server start on " + host + ":" + str(port))) print(("CoAP Server start on " + host + ":" + str(port)))
print((self.root.dump())) print((self.root.dump()))
def updateUserLocation(self):
pass
def usage(): # pragma: no cover def usage(): # pragma: no cover
print("coapserver.py -i <ip address> -p <port>") print("coapserver.py -i <ip address> -p <port>")
...@@ -43,7 +48,10 @@ def main(argv): # pragma: no cover ...@@ -43,7 +48,10 @@ def main(argv): # pragma: no cover
server = CoAPServer(ip, port, multicast) server = CoAPServer(ip, port, multicast)
try: try:
updateUserLocationThread = threading.Thread(target = server.updateUserLocation)
updateUserLocationThread.start()
server.listen(10) server.listen(10)
except KeyboardInterrupt: except KeyboardInterrupt:
print("Server Shutdown") print("Server Shutdown")
server.close() server.close()
......
...@@ -4,7 +4,6 @@ from pymongo import MongoClient ...@@ -4,7 +4,6 @@ from pymongo import MongoClient
from coapthon import defines from coapthon import defines
from coapthon.resources.resource import Resource from coapthon.resources.resource import Resource
class RasbpNodeInfoResource(Resource): class RasbpNodeInfoResource(Resource):
def __init__(self, name="RasbpNodeInfo"): def __init__(self, name="RasbpNodeInfo"):
super(RasbpNodeInfoResource, self).__init__(name) super(RasbpNodeInfoResource, self).__init__(name)
...@@ -20,6 +19,10 @@ class RasbpNodeInfoResource(Resource): ...@@ -20,6 +19,10 @@ class RasbpNodeInfoResource(Resource):
self.payload = request.payload self.payload = request.payload
from coapthon.messages.response import Response from coapthon.messages.response import Response
assert(isinstance(response, Response)) assert(isinstance(response, Response))
self.payload = json.loads(self.payload)
if self.payload['option'] == 1:
self.calculateNodePosition(sefl.payload)
else :
response.payload = self.postRasbpNodeInfoInDB(self.payload) response.payload = self.postRasbpNodeInfoInDB(self.payload)
response.code = defines.Codes.CREATED.number response.code = defines.Codes.CREATED.number
return self, response return self, response
...@@ -28,21 +31,23 @@ class RasbpNodeInfoResource(Resource): ...@@ -28,21 +31,23 @@ class RasbpNodeInfoResource(Resource):
self.payload = request.payload self.payload = request.payload
from coapthon.messages.response import Response from coapthon.messages.response import Response
assert(isinstance(response, Response)) assert(isinstance(response, Response))
self.payload = json.loads(self.payload)
if self.payload['option'] == 1:
self.calculateNodePosition(self.payload)
else :
response.payload = self.postRasbpNodeInfoInDB(self.payload) response.payload = self.postRasbpNodeInfoInDB(self.payload)
response.code = defines.Codes.CHANGED.number response.code = defines.Codes.CHANGED.number
return self, response return self, response
def postRasbpNodeInfoInDB(self, info): def postRasbpNodeInfoInDB(self, info):
info = info.decode('ascii') info = info['myMAC']
self.collection.delete_many({ 'rasbpMAC' : info }) self.collection.delete_many({ 'rasbpMAC' : info })
ruuid = "52528282"+str(uuid.uuid4())[8:] ruuid = "52528282"+str(uuid.uuid4())[8:]
ruuid = ruuid.replace("-","")
if self.collection.count() == 0: if self.collection.count() == 0:
payload = { payload = {
'rasbpMAC' : info, 'rasbpMAC' : info,
'uuid' : ruuid, 'uuid' : ruuid
'x' : '0',
'y' : '0'
} }
self.collection.insert_one(payload) self.collection.insert_one(payload)
...@@ -54,26 +59,33 @@ class RasbpNodeInfoResource(Resource): ...@@ -54,26 +59,33 @@ class RasbpNodeInfoResource(Resource):
payload = { payload = {
'rasbpMAC' : info, 'rasbpMAC' : info,
'uuid' : ruuid, 'uuid' : ruuid,
'x' : '-1',
'y' : '-1'
} }
self.collection.insert_one(payload) self.collection.insert_one(payload)
response = json.dumps({ response = json.dumps({
'uuid' : str(ruuid), 'uuid' : ruuid,
'operate' : 1 'operate' : 1
}) })
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 : else :
# mydocList = list(mydoc) print("This is not registered Node")
# if mydocList[0]['operation'] != '1':
# self.collection.update_one(mydocList[0], { "$set" : {"operation" : '1'}})
# response = "re-operate"
# else :
# response = "already operate"
return response
class RasbpGraphInfoResource(Resource): class RasbpGraphInfoResource(Resource):
def __init__(self, name="RasbpGraphInfo"): def __init__(self, name="RasbpGraphInfo"):
...@@ -115,13 +127,27 @@ class RasbpGraphInfoResource(Resource): ...@@ -115,13 +127,27 @@ class RasbpGraphInfoResource(Resource):
return True, response return True, response
def postRasbpGraphInfoInDB(self, info): def postRasbpGraphInfoInDB(self, info):
"""
info = json.loads(info) info = json.loads(info)
mydoc = self.collection.find({'v1':info['v1'], 'v2':info['v2']}) 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: if mydoc.count() == 0:
mydoc = self.collection.find({ 'v1' : info['v2'], 'v2' : info['v1']}) self.collection.update({ 'v1' : info['v1'], 'v2':info['v2']}, {
""" 'v1':info['v1'],
pass 'v2': info['v2'],
'distance' : float(info['distance']),
'sum': float(info['distance']),
'count': 1
}, upsert=True)
class BleInfoResource(Resource): class BleInfoResource(Resource):
def __init__(self, name="BleInfo"): def __init__(self, name="BleInfo"):
...@@ -164,8 +190,4 @@ class BleInfoResource(Resource): ...@@ -164,8 +190,4 @@ class BleInfoResource(Resource):
return True, response return True, response
def postBLEInfoInDB(self, payload): def postBLEInfoInDB(self, payload):
j = json.loads(payload)
for i in j:
self.collection
self.collection.insert_many(json.loads(payload)) self.collection.insert_many(json.loads(payload))
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
...@@ -2,7 +2,7 @@ var express = require('express'); ...@@ -2,7 +2,7 @@ var express = require('express');
var router = express.Router(); var router = express.Router();
var uuidv1 = require('uuid/v1'); var uuidv1 = require('uuid/v1');
var User = require('../models/users'); var User = require('../models/users');
var Tracking = require('../models/tracking');
/* /*
var User = require('../models/users'); var User = require('../models/users');
...@@ -50,13 +50,25 @@ router.post('/DeleteUser', function(req, res) { ...@@ -50,13 +50,25 @@ router.post('/DeleteUser', function(req, res) {
// ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY ) // ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY )
//if(!output.result.n) return res.status(404).json({ error: "user not found" }); //if(!output.result.n) return res.status(404).json({ error: "user not found" });
//res.json({ message: "user deleted" }); //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}); res.json({message: output, res : req.body});
}) })
}); });
router.post('/', function(req, res, next) { router.post('/', function(req, res, next) {
console.log(req.body) console.log(req.body)
res.render('index', { title: 'Express' }); res.render('index', { title: 'Express' });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment