diff --git a/server/data.py b/server/data.py new file mode 100644 index 0000000..891fd8f --- /dev/null +++ b/server/data.py @@ -0,0 +1,121 @@ +import asyncio +import websockets +import mysql.connector +import json + +sensorNodeArray = [] +enqueteNodeArray = [] + +async def processSensorNodeData(data): + try: + mydb = dbLogin() + cursor = mydb.cursor() + + # MACDataReading = mydb.cursor() + # MACDataReading.execute("SELECT MAC FROM Node") + + print('some_response') + query = "INSERT INTO `Measurement` (NodeID, Type, Value) VALUES (%s, %s, %s)" + processedData = json.loads(data) + + processedTemp = (processedData['Temp']) + processedHumi = (processedData['Humi']) + processedeCO2 = (processedData['eCO2']) + processedTVOC = (processedData['TVOC']) + processedMAC = (processedData['node']) + MACTuple = (processedMAC,) + + # MACDataFetching = MACDataReading.fetchall() + # MACArray = list(MACDataFetching) + + + # if MACTuple not in MACArray: + # addingNode = "INSERT INTO `Node` (MAC) VALUES (%s)" + # cursor.execute(addingNode, MACTuple) + # mydb.commit() + + pushingDataArray = [(1, "Temp", processedTemp), (1, "Humi", processedHumi), (1, "eCO2", processedeCO2), (1, "TVOC", processedTVOC)] + for i in pushingDataArray: + print(query ,i) + cursor.execute(query, i) + mydb.commit() + + except mysql.connector.Error as err: + print("MySQL Error:", err) + finally: + cursor.close() + mydb.close() + +async def receive_data(): + uri = "ws://145.92.8.114/ws" + + try: + async with websockets.connect(uri) as websocket: + while True: + data = await websocket.recv() + print(f"Received data: {data}") + processedData = json.loads(data) + macAdress = processedData['node'] + if processedData["Temp"]: + type = 'sensor' + else: + type = 'enquete' + + await getNodeInfo('sensor') + await getNodeInfo('enquete') + + if macAdress in sensorNodeArray: + await processSensorNodeData(data) + elif macAdress in enqueteNodeArray: + await processEnqueteNodeData(data) + else: + await newNode(macAdress, type) + except websockets.ConnectionClosedError as e: + print("WebSocket connection closed:", e) + +async def processEnqueteNodeData(data): + mydb = dbLogin() + cursor = mydb.cursor() + + query = "INSERT INTO `Response` (NodeID, QuestionID, Response) VALUES (%s, %s, %s)" + processedData = json.loads(data) + + + +async def main(): + await receive_data() + +def dbLogin(): + mydb = mysql.connector.connect( + host="localhost", + user="root", + password="Dingleberries69!", + database="NodeData" + ) + + return mydb + +async def getNodeInfo(type): + id = (type,) + mydb = dbLogin() + cursor = mydb.cursor() + cursor.execute("""SELECT * FROM Node WHERE Type = %s""", id) + nodeInfo = cursor.fetchall() + print(nodeInfo) + if nodeInfo != None: + if type == 'sensor': + sensorNodeArray.append(nodeInfo[]) + elif type == 'enquete': + enqueteNodeArray.append(nodeInfo) + +async def newNode(mac, type): + id = (mac, type,) + mydb = dbLogin() + + cursor = mydb.cursor() + cursor.execute("INSERT INTO `Node` (MAC, Type) VALUES (%s, %s)", id) + print("new node assigned") + mydb.commit() + +asyncio.run(main()) +