Files
J1B3-Sensor-boxes/server/data.py

122 lines
3.4 KiB
Python

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())