Add data processing functions and WebSocket connection handling
This commit is contained in:
121
server/data.py
Normal file
121
server/data.py
Normal file
@@ -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())
|
||||
|
Reference in New Issue
Block a user