From b0e3479c82bd7468c7e9fccfe580fdad5af398a6 Mon Sep 17 00:00:00 2001 From: "Server (Shared Users)" <shmd01.iptime.org> Date: Tue, 10 Dec 2019 11:07:19 +0000 Subject: [PATCH] delete testfile --- Server_CoAP/CoAPthon3/testresource.py | 265 -------------------------- Server_CoAP/CoAPthon3/testserver.py | 175 ----------------- 2 files changed, 440 deletions(-) delete mode 100644 Server_CoAP/CoAPthon3/testresource.py delete mode 100644 Server_CoAP/CoAPthon3/testserver.py diff --git a/Server_CoAP/CoAPthon3/testresource.py b/Server_CoAP/CoAPthon3/testresource.py deleted file mode 100644 index 16e8d64..0000000 --- a/Server_CoAP/CoAPthon3/testresource.py +++ /dev/null @@ -1,265 +0,0 @@ -import json -import uuid -import math -import triangulation -from pymongo import MongoClient -from coapthon import defines -from coapthon.resources.resource import Resource - -class RpNodeInfoResource(Resource): - def __init__(self, name="RpNodeInfo"): - super(RpNodeInfoResource, self).__init__(name) - self.payload = "RpNodeInfo resource" - try: - self.conn = MongoClient('mongodb://iotuser:iotsystem@localhost/IoT_System', 27017) - self.db = self.conn.IoT_System - self.collection = self.db.testNode - except: - print("Could not connect to MongoDB") - - def render_POST_advanced(self, request, response): - self.payload = request.payload - from coapthon.messages.response import Response - assert(isinstance(response, Response)) - self.payload = json.loads(self.payload) - if self.payload['option'] == -1: - self.deleteNodeData(self.payload) - elif self.payload['option'] == 1: - response.payload = self.calculateNodePosition(self.payload) - else : - response.payload = self.postRpNodeInfoInDB(self.payload) - response.code = defines.Codes.CREATED.number - return self, response - - def render_PUT_advanced(self, request, response): - self.payload = request.payload - from coapthon.messages.response import Response - assert(isinstance(response, Response)) - self.payload = json.loads(self.payload) - if self.payload['option'] == -1: - # coapclient.py에서 clearMyData()가 호출된 경우 - self.deleteNodeData(self.payload) - elif self.payload['option'] == 1: - # coapclient.py에서 calculateNodePositionAtServer()이 호출된 경우 - response.payload = self.calculateNodePosition(self.payload) - else : - # coapclient.py에서 obtainMyID()가 호출된 경우 - response.payload = self.postRpNodeInfoInDB(self.payload) - response.code = defines.Codes.CHANGED.number - return self, response - - def deleteNodeData(self, info): # complete - info = info['rpMAC'] - graphColletion = self.db.testGraph - if self.collection.find({'rpMAC' : info}).count() != 0: - rpuuid = self.collection.find({'rpMAC' : info})[0]['rpuuid'] - graphColletion.remove({'v2' : rpuuid}) - self.collection.remove({'rpMAC' : info}) - - def postRpNodeInfoInDB(self, info): # complete - info = info['rpMAC'] - rpuuid = "52528282"+str(uuid.uuid4())[8:] - rpuuid = rpuuid.replace("-","") - if self.collection.count() == 0: # 첫번째 rpNode인 경우 - payload = { - 'rpMAC' : info, - 'rpuuid' : rpuuid - } - self.collection.insert_one(payload) - - response = json.dumps({ - 'rpuuid' : rpuuid, - 'operate' : 0 # advertise할 필요가 없다. - }) - else: - payload = { - 'rpMAC' : info, - 'rpuuid' : rpuuid - } - self.collection.insert_one(payload) - - response = json.dumps({ - 'rpuuid' : rpuuid, - 'operate' : 1 # advertise를 해야한다. - }) - return response - - def calculateNodePosition(self, info): # complete , need to check 4-th case. - print("Start calculateNodePosition") - info = info['rpuuid'] - graphColletion = self.db.testGraph - mydoc = self.collection.find({'rpuuid': info}) - response = { - 'operate' : 1 - } - if mydoc.count() == 1: # 자기 자신이 RpNodeData에 있는 경우 - if self.collection.count() == 1: # 자신이 첫번째 RpNode인 경우 - self.collection.update_one({'rpuuid' : info}, {'$set':{'x': 0.0, 'y': 0.0}}, False) - elif self.collection.count() == 2: # 자신이 두번째 RpNode인 경우 - graphB = graphColletion.find({'v2': info}) - x = graphB[0]['distance'] - self.collection.update_one({'rpuuid' : info}, {'$set':{'x': x, 'y': 0.0}}, False) - elif self.collection.count() == 3: # 자신이 세번째 RpNode인 경우 - graphC = graphColletion.find({'v2': info}) - for doc in graphC: - tempdoc = self.collection.find({'rpuuid': doc['v1']}) - if tempdoc[0]['x'] == 0 and tempdoc[0]['y'] == 0: # 첫번째 RpNode 즉, (0,0) - vertexA = tempdoc[0]# 첫번째 RpNode를 vertexA라 한다. - elif tempdoc[0]['y'] == 0: - vertexB = tempdoc[0]#두번째 RpNode를 vertexB라 한다. - - dis = { - 'a': graphColletion.find({'v1': vertexB['rpuuid'], 'v2': info})[0]['distance'], - 'b': graphColletion.find({'v1': vertexA['rpuuid'], 'v2': info})[0]['distance'], - 'c': vertexB['x'] - } - if ((dis['a'] + dis['b']) <= dis['c']) or dis['a'] == 0 or dis['b'] == 0 or dis['c'] == 0: - # 3번째 rpNode를 만들 수 없는 경우 - print("3번째 rpNode를 만들 수 없습니다.(no triangle)") - response['operate'] = 0 - return json.dumps(response) - - cosA = (math.pow(dis['b'], 2) + math.pow(dis['c'], 2) - math.pow(dis['a'], 2)) / (2 * dis['b'] * dis['c']) - if cosA >= 1 or cosA <= -1 : - # 3번째 rpNode를 만들 수 없는 경우 - print("3번째 rpNode를 만들 수 없습니다.(impossible cosA)",cosA) - response['operate'] = 0 - return json.dumps(response) - - sinA = math.sqrt((1 - math.pow(cosA,2))) - x = dis['b'] * cosA - y = dis['b'] * sinA - self.collection.update_one({'rpuuid' : info}, {'$set':{'x': x, 'y': y}}, False) - else: - graphD = graphColletion.find({'v2' : info}) - nodeLocationData = [] - - for g in graphD: - nodeLocationData.append({ - 'rpuuid': g['v1'], - 'distance': g['distance'] - }) - - nodeLocationData = sorted(nodeLocationData, key=lambda k: k['distance'], reverse = False) - - if len(nodeLocationData) < 3: - # 4번째 이상의 rpNode를 만들 수 없는 경우 - print("4번째 이상의 rpNode를 만들 수 없습니다.") - response['operate'] = 0 - return json.dumps(response) - - nodeList = [] - - for i in range(3): - print(self.collection.find({'rpuuid': nodeLocationData[i]['rpuuid']})[0]) - nodeList.append({ - 'x': self.collection.find({'rpuuid': nodeLocationData[i]['rpuuid']})[0]['x'], - 'y': self.collection.find({'rpuuid': nodeLocationData[i]['rpuuid']})[0]['y'], - 'distance': nodeLocationData[i]['distance'] - }) - - triangulationInst = triangulation.Triangulation(nodeList[:3]) - print("test : ", nodeList[:3]) - x, y = triangulationInst.doTriangulation() - print("x: ",x,"y : ",y) - if x == None: - # 4번째 이상의 rpNode를 만들 수 없는 경우 - print("4번째 이상의 rpNode를 만들 수 없습니다.") - response['operate'] = 0 - return json.dumps(response) - - self.collection.update_one({'rpuuid' : info}, {'$set':{'x': x, 'y': y}}, False) - - return json.dumps(response) - else: - response['operate'] = 0 - return json.dumps(response) - -class RpGraphInfoResource(Resource): # complete - def __init__(self, name="RpGraphInfo"): - super(RpGraphInfoResource, self).__init__(name) - self.payload = "RpGraphInfo resource" - try: - self.conn = MongoClient('mongodb://iotuser:iotsystem@localhost/IoT_System', 27017) - except: - print("Could not connect to MongoDB") - self.db = self.conn.IoT_System - self.collection = self.db.testGraph - - def render_GET_advanced(self, request, response): - response.payload = self.payload - response.max_age = 20 - response.code = defines.Codes.CONTENT.number - return self, response - - def render_POST_advanced(self, request, response): - self.payload = request.payload - from coapthon.messages.response import Response - assert(isinstance(response, Response)) - response.payload = self.postRpGraphInfoInDB(self.payload) - response.code = defines.Codes.CREATED.number - return self, response - - def render_PUT_advanced(self, request, response): - self.payload = request.payload - from coapthon.messages.response import Response - assert(isinstance(response, Response)) - response.payload = self.postRpGraphInfoInDB(self.payload) - response.code = defines.Codes.CHANGED.number - return self, response - - def render_DELETE_advanced(self, request, response): - response.payload = "Response deleted" - response.code = defines.Codes.DELETED.number - return True, response - - def postRpGraphInfoInDB(self, info): # complete - info = json.loads(info) - self.collection.insert_one({ - 'v1':info['v1'], - 'v2': info['v2'], - 'rssi' : float(info['rssi']), - }) - -class BleInfoResource(Resource): # complete - def __init__(self, name="BleInfo"): - super(BleInfoResource, self).__init__(name) - self.payload = "BleInfo resource" - try: - self.conn = MongoClient('mongodb://iotuser:iotsystem@localhost/IoT_System', 27017) - self.db = self.conn.IoT_System - self.collection = self.db.testTracking - except: - print("Could not connect to MongoDB") - - def render_GET_advanced(self, request, response): - response.payload = self.payload - response.max_age = 20 - response.code = defines.Codes.CONTENT.number - return self, response - - def render_POST_advanced(self, request, response): - self.payload = request.payload - self.postBLEInfoInDB(self.payload) - from coapthon.messages.response import Response - assert isinstance(response, Response) - response.payload = "Response changed through POST" - response.code = defines.Codes.CREATED.number - return self, response - - def render_PUT_advanced(self, request, response): - self.payload = request.payload - self.postBLEInfoInDB(self.payload) - from coapthon.messages.response import Response - assert isinstance(response, Response) - response.payload = "Response changed through PUT" - response.code = defines.Codes.CHANGED.number - return self, response - - def render_DELETE_advanced(self, request, response): - response.payload = "Response deleted" - response.code = defines.Codes.DELETED.number - return True, response - - def postBLEInfoInDB(self, payload): - self.collection.insert_many(json.loads(payload)) \ No newline at end of file diff --git a/Server_CoAP/CoAPthon3/testserver.py b/Server_CoAP/CoAPthon3/testserver.py deleted file mode 100644 index c56150d..0000000 --- a/Server_CoAP/CoAPthon3/testserver.py +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/env python -import getopt -import sys -import threading -import _thread -import time -import datetime -import json -import triangulation -from coapthon.server.coap import CoAP -from testresource import BleInfoResource, RpNodeInfoResource, RpGraphInfoResource -from pymongo import MongoClient - -class CoAPServer(CoAP): - def __init__(self, host, port, multicast=False): # complete - CoAP.__init__(self, (host, port), multicast) - self.add_resource('bleInfoPath/', BleInfoResource()) - self.add_resource('rpNodeInfoPath/', RpNodeInfoResource()) - self.add_resource('rpGraphInfoPath/', RpGraphInfoResource()) - - print(("CoAP Server start on " + host + ":" + str(port))) - print((self.root.dump())) - - try: - self.conn = MongoClient('mongodb://iotuser:iotsystem@localhost/IoT_System', 27017) - self.db = self.conn.IoT_System - self.piNodeCollection = self.db.RpNodeData - self.userNodeCollection = self.db.UserNodeData - self.trackingCollection = self.db.TrackingData - self.usersCollection = self.db.users - self.updatePeriod = 10 - self.limitDistance = 40 - except: - print("Could not connect to MongoDB") - - def updateUserLocation(self): # complete - try: - while True: - cursor = self.usersCollection.find() - for c in cursor: - positionCalculationThread = threading.Thread(target = self.positionCalculation, args=([c['uuid']])) - positionCalculationThread.start() - time.sleep(self.updatePeriod) - #trackingCursor = self.trackingCollection.remove({'updateTime': {'$lte' : currentTime - self.updatePeriod}}) - except KeyboardInterrupt: - print("existing updateUserLocation") - - def positionCalculation(self, useruuid): # complete but need to check triangulation.py - print(useruuid) - currentTime = time.time() - trackingCursor = self.trackingCollection.find({'$and':[{'useruuid': useruuid}, - {'updateTime':{'$gt' : currentTime - self.updatePeriod}},{'distance': {'$lt' : self.limitDistance}}]}) - #trackingCursor = self.trackingCollection.find({'$and':[{'useruuid':{'$eq' : useruuid}}]}) - userLocationData =[] - - flag = 0 - for c in trackingCursor: - for i in userLocationData: - if i['rpuuid'] == c['rpuuid']: - i['sum']+= c['distance'] - i['count']+=1 - i['distance'] = i['sum']/i['count'] - flag = 1 - break - if flag == 0: - userLocationData.append({ - 'rpuuid': c['rpuuid'], - 'distance': c['distance'], - 'sum': c['distance'], - 'count':1 - }) - flag = 0 - - userLocationData = sorted(userLocationData, key=lambda k: k['distance'], reverse = False) - for u in userLocationData: - print(userLocationData) - - if len(userLocationData) == 0: - print("userLocationData == 0") - return - - rp1uuid = userLocationData[0]['rpuuid'] - rp1 = self.piNodeCollection.find({'rpuuid' : rp1uuid}) - - if len(userLocationData) < 3: - print("userLocationData < 3") - dd = datetime.datetime.utcnow() - userNodeData = { - 'rp1': {'rpuuid' : userLocationData[0]['rpuuid'], 'distance': userLocationData[0]['distance']}, - 'useruuid': useruuid, - 'x' : rp1[0]['x'], - 'y' : rp1[0]['y'], - 'updateTime': str(dd) - } - print(userNodeData) - self.userNodeCollection.insert_one(userNodeData) - return - - else : - nodeList = [] - for i in range(3): - nodeList.append({ - 'x': self.piNodeCollection.find({'rpuuid': userLocationData[i]['rpuuid']})[0]['x'], - 'y': self.piNodeCollection.find({'rpuuid': userLocationData[i]['rpuuid']})[0]['y'], - 'distance': userLocationData[i]['distance'] - }) - - triangulationInst = triangulation.Triangulation(nodeList[:3]) - x, y = triangulationInst.doTriangulation() - - if x == None: - print("no solution") - dd = datetime.datetime.utcnow() - userNodeData = { - 'rp1': {'rpuuid' : userLocationData[0]['rpuuid'], 'distance': userLocationData[0]['distance']}, - 'useruuid': useruuid, - 'x': rp1[0]['x'], - 'y': rp1[0]['y'], - 'updateTime': str(dd) - } - print(userNodeData) - self.userNodeCollection.insert_one(userNodeData) - return - - dd = datetime.datetime.utcnow() - userNodeData = { - 'rp1': {'rpuuid' : userLocationData[0]['rpuuid'], 'distance': userLocationData[0]['distance']}, - 'rp2': {'rpuuid' : userLocationData[1]['rpuuid'], 'distance' : userLocationData[1]['distance']}, - 'rp3': {'rpuuid' : userLocationData[2]['rpuuid'], 'distance' : userLocationData[2]['distance']}, - 'useruuid': useruuid, - 'x': x, - 'y': y, - 'updateTime': str(dd) - } - print(userNodeData) - self.userNodeCollection.insert_one(userNodeData) - -def usage(): # pragma: no cover - print("coapserver.py -i <ip address> -p <port>") - - -def main(argv): # pragma: no cover - ip = "0.0.0.0" - port = 5683 - multicast = False - try: - opts, args = getopt.getopt(argv, "hi:p:m", ["ip=", "port=", "multicast"]) - except getopt.GetoptError: - usage() - sys.exit(2) - for opt, arg in opts: - if opt == '-h': - usage() - sys.exit() - elif opt in ("-i", "--ip"): - ip = arg - elif opt in ("-p", "--port"): - port = int(arg) - elif opt in ("-m", "--multicast"): - multicast = True - - server = CoAPServer(ip, port, multicast) - try: - #updateUserLocationThread = threading.Thread(target = server.updateUserLocation) - #updateUserLocationThread.start() - server.listen(10) - - except KeyboardInterrupt: - print("Server Shutdown") - server.close() - print("Exiting...") - - -if __name__ == "__main__": # pragma: no cover - main(sys.argv[1:]) -- GitLab