Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Accident_data/accidents19and21_with_quadrant_rank.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
OBJECTID,LAND,BEZ,LOR_ab_2021,UJAHR,UMONAT,USTUNDE,UWOCHENTAG,UKATEGORIE,UART,UTYP1,ULICHTVERH,IstRad,IstPKW,IstFuss,IstKrad,IstGkfz,IstSonstige,USTRZUSTAND,LINREFX,LINREFY,XGCSWGS84,YGCSWGS84,LOR,STRASSE,quadrant,quadrant_rank
ObjectID,State,District,LOR_ab_2021,AccidentYear,AccidentMonth,AccidentHour,DayOfWeek,AccidentCategory,AccidentType,AccidentTypeDetail,LightingCondition,InvolvingBike,InvolvingCar,InvolvingPedestrian,InvolvingMotorcycle,InvolvingHGV,InvolvingOther,RoadCondition,GraphicCoord1,GraphicCoord2,LongitudeWGS84,LatitudeWGS84,quadrant,quadrant_rank
219249,11,3,3701658.0,2021,11,18,2,3,0,3,2,0,1,0,1,0,0,1,"800202,0742","5829640,204","13,42689483","52,53393955",,,3773.0,57.0
219248,11,7,7501134.0,2021,12,19,7,3,6,2,2,0,1,1,0,0,0,1,"798479,5317","5819049,219","13,39209027","52,43995086",,,4865.0,35.0
219247,11,4,4100101.0,2021,12,17,4,3,5,2,2,0,1,0,0,0,0,0,"793352,6128","5829680,195","13,32624193","52,53802784",,,4069.0,34.0
Expand Down
14 changes: 9 additions & 5 deletions Hardware/Sensors.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
{
"velocity": "30",
"Temperature": "15",
"Humidity": "23",
"Speed": "20",
"Light": "9"
"Velocity": 30,
"Temperature": 15,
"Humidity": 23,
"Light": 9,
"Longitude": 52.512937,
"Latitude": 13.389481,
"Day": 2,
"Month": 5,
"Hour": 16
}
87 changes: 76 additions & 11 deletions Hardware/Server/serverDummy.py
Original file line number Diff line number Diff line change
@@ -1,35 +1,99 @@
from http.server import BaseHTTPRequestHandler, HTTPServer
import json
import numpy as np
from sklearn.preprocessing import StandardScaler
from keras.models import load_model

model=load_model('Model/NNModel.h5') #parameters

class RequestHandler(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()

stored_sensor_data = []

def do_POST(self):
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
sensor_data = json.loads(post_data.decode('utf-8'))

# Process sensor data
print("Received sensor data:", sensor_data)
self.stored_sensor_data.append(sensor_data)

self._set_headers()


risk_severity = None

if sensor_data:
risk_severity=risk_model.send_data_to_model(sensor_data)

if risk_severity:
# Include the sent data in the response
response_message = {'message': f'Data received successfully {sensor_data}'}
response_message = {'message': {sensor_data}}
else:
response_message = {'message': f'Error Risk severity was not calculated'}

response = json.dumps(response_message)

self.wfile.write(response.encode('utf-8'))

def do_GET(self):
self._set_headers()
response = json.dumps(self.stored_sensor_data)
self.wfile.write(response.encode('utf-8'))

class risk_model():

@staticmethod
def send_data_to_model(sensor_data):
risk_model.run_risk_model(sensor_data['Temperature'],sensor_data['Humidity'],sensor_data['Light'],sensor_data['Longitude'],sensor_data['Latitude'],sensor_data['Day'], sensor_data['Month'],sensor_data['Hour'])
@staticmethod
def run_risk_model(temp, hum, light, lon, lat, day, month, hour):
quadrant = risk_model.calculate_quadrant(rtv_lat=lat,rtv_lon=lon)
rc = risk_model.calculate_road_condition(temp=temp,hum=hum)
model_risk = risk_model.calc_model_risk(month=month, hour=hour, day=day, light=light, rc=rc,quadrant=quadrant)
return model_risk

@staticmethod
def calculate_quadrant(rtv_lat,rtv_lon): #script from asssigner to convert coordinates to quadrant
berlin_latitude_range = (52.336724, 52.675287)
berlin_long_range = (13.090365, 13.756247)
multiplication_factor = 1000000
lat_range = (int(berlin_latitude_range[0] * multiplication_factor), int(berlin_latitude_range[1] * multiplication_factor))
lon_range = (int(berlin_long_range[0] * multiplication_factor), int(berlin_long_range[1] * multiplication_factor))
step = 100
lat_range=np.linspace(lat_range[0],lat_range[1],step)
lat_range=lat_range.flatten()
lon_range=np.linspace(lon_range[0],lon_range[1],step)
lat_delta = lat_range[1]-lat_range[0]
lon_delta = lon_range[1]-lon_range[0]

quadrant_code = 0
for lon in lon_range:
for lat in lat_range:
quadrant_code=quadrant_code+1
if lon <= rtv_lon*multiplication_factor <= lon + lon_delta and lat <= rtv_lat*multiplication_factor <= lat + lat_delta:
return quadrant_code
return None

@staticmethod
def calculate_road_condition(temp=None, hum=None): #use nicologic to convert temp and humidity to road condition (0:dry,1,wet,2:icy)
if temp < 0:
return 2
elif temp < 10 and hum > 70:
return 2
elif temp < 10:
return 1
elif temp >= 30 and hum < 30:
return 0
elif temp >= 30:
return 1
else:
return 0

@staticmethod
def calc_model_risk(month=None, hour=None, day=None, light=None, rc=None, quadrant=None): #run model with follow parameters: month, hour, day, light condition, road condition, quadrant,
print("running model")
rtv_values_raw = np.array([[month,hour,day,light,rc,quadrant]]) #month, hour, day, light condition, road condition, quadrant_rank,
rtv_vales_scaled = StandardScaler().transform(rtv_values_raw)
model_severity=model.predict(rtv_vales_scaled)
print(model_severity[0][0])
return model_severity[0][0]


def run(server_class=HTTPServer, handler_class=RequestHandler, port=8080):
server_address = ('', port)
Expand All @@ -39,3 +103,4 @@ def run(server_class=HTTPServer, handler_class=RequestHandler, port=8080):

if __name__ == "__main__":
run()

25 changes: 0 additions & 25 deletions Hardware/getpostSampleClient.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,3 @@
# import requests

# sensor = {"Temperature": "15",
# "Speed": "20"}

# response = requests.get("http://127.0.0.42:8080/Sample.Json")#, params= payload)
# print(response)
# print(response.content)

# answer = requests.post("http://127.0.0.42:8080/Post.json", data= sensor)#, params= payload)
# print(answer)
# print(answer.content)
###########################################################
import requests
import json

Expand All @@ -20,22 +7,10 @@

url = "http://127.0.0.1:8080/" # Change this to your server's address

# Send multiple POST requests with sensor data readings
#for sensor_data in sensor_data_list:
post_response = requests.post(url, json=sensor_data_list)
if post_response.status_code == 200:
print("POST request successful")
print("Server response:", post_response.json())
else:
print("Error:", post_response.status_code)

# Send a GET request to retrieve all stored sensor data
get_response = requests.get(url)

if get_response.status_code == 200:
print("GET request successful")
stored_sensor_data = get_response.json()
print(stored_sensor_data)
else:
print("Error:", get_response.status_code)

Binary file added Model/NNModel.h5
Binary file not shown.
Empty file added Model/NNmodel.ipynb
Empty file.
Loading