def apidata_getdata(): if request.method == 'POST' or request.method == 'GET': try: #jsonc.data_to_json( data = { 'chart_data': json.loads( jsonc.data_to_json(dynamodb.get_data_from_dynamodb())), 'title': "IOT Data" } #data = data.replace("\"","'") print("before json loads") global counter global result_df # Convert to dataframe, dropping dynamoDB id column df = pd.DataFrame(data['chart_data'], dtype=float).drop( ['id', 'speedkmhour', 'datetime_value'], axis=1) result_df = ml.predict_danger(df) print('RESULT DF') print(result_df) #dataj = json.loads(data) print() print("after json loads") #print(dataj) #return data return jsonify(data) #return jsonify(data) except: import sys print(sys.exc_info()[0]) print(sys.exc_info()[1])
def get_numofbid_and_maxspeed(datetimestart_value): try: data = [] dynamodb = boto3.resource('dynamodb', region_name='us-east-1') table = dynamodb.Table('GrabDataTable') numofbid = len(getListofBIDforLatestDTS()) data.append(numofbid) response = table.query( KeyConditionExpression=Key('device_id').eq('deviceid_zhiyang'), ProjectionExpression='speedkmhour, bookingid', FilterExpression=Key('datetimestart_value').eq( datetimestart_value)) maxspeedlist = response['Items'] maxspeedlist = jsonc.data_to_json(maxspeedlist) maxspeed = 0.0 bidWithMaxSpeed = '' for i in json.loads(maxspeedlist): currentspeed = i.get('speedkmhour') if currentspeed > maxspeed: maxspeed = currentspeed bidWithMaxSpeed = i.get('bookingid') data.append(round(maxspeed, 2)) data.append(bidWithMaxSpeed) return data except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def getIndivividualDashboard(bookingid): try: data = [] dynamodb = boto3.resource('dynamodb', region_name='us-east-1') table = dynamodb.Table('GrabDataTable') response = table.query( KeyConditionExpression=Key('device_id').eq("deviceid_zhiyang"), ProjectionExpression='speedkmhour', FilterExpression=Key('bookingid').eq(bookingid)) items = jsonc.data_to_json(response['Items']) numofrows = response['Count'] totalSpeed = 0.0 highestSpeed = 0.0 for i in json.loads(items): speed = i.get('speedkmhour') if speed > highestSpeed: highestSpeed = speed totalSpeed += speed avgspeed = totalSpeed / numofrows data.append(avgspeed) data.append(highestSpeed) data.append(numofrows) return data except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def apidata_getSummaryTable(): try: data = dynamodb.getSummaryTableData() return jsonify(json.loads(jsonc.data_to_json(data))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def apidata_getdata(): if request.method == 'POST' or request.method == 'GET': try: #jsonc.data_to_json( data = { 'chart_data': json.loads( jsonc.data_to_json(dynamodb.get_data_from_dynamodb())), 'title': "IOT Data" } #data = data.replace("\"","'") print("before json loads") print(data) #dataj = json.loads(data) print() print("after json loads") #print(dataj) #return data return jsonify(data) #return jsonify(data) except: import sys print(sys.exc_info()[0]) print(sys.exc_info()[1])
def getBooking(bid): try: dataRows = dynamodb.getindividualBookingData(bid) return jsonify(json.loads(jsonc.data_to_json(dataRows))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def getDriverSpeedingDetails(): try: driversImages = dynamodb.getLatest3DriversthatSped() return jsonify(json.loads(jsonc.data_to_json(driversImages))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def getIndividualMapData(bid): try: bookingid = bid mapdata = dynamodb.getIndividualMapData(bookingid) return jsonify(json.loads(jsonc.data_to_json(mapdata))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def getIndividualSpeedDetails(bid): try: bookingid = bid data = dynamodb.getIndivividualDashboard(bookingid) return jsonify(json.loads(jsonc.data_to_json(data))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def apidata_getdata3(): if request.method == 'POST' or request.method == 'GET': try: data = {'chart_data': jsonc.data_to_json(dynamodb3.get_data_from_dynamodb()), 'title': "IOT Data"} return jsonify(data) except: import sys print(sys.exc_info()[0]) print(sys.exc_info()[1])
def api_getChartData(): if request.method == 'POST': try: data = jsonc.data_to_json(dynamodb.get_chart_data()) loaded_data = jsonc.json.loads(data) # print(loaded_data) return jsonify(loaded_data) except: print(sys.exc_info()[0]) print(sys.exc_info()[1]) return None
def checkLatestImage(bid): try: bookingid = bid data = [] image, facesimilarity, ageDetails = dynamodb.retrieveImageFromS3forIndex( bookingid) data = [image, facesimilarity, ageDetails] return jsonify(json.loads(jsonc.data_to_json(data))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def apidata_getTotalNumOfVehicles(): try: datarows = [] maxdatetimestart = dynamodb.get_maxdatetimestart_from_dynamodb() datarows.append(dynamodb.get_numofbid_and_maxspeed(maxdatetimestart)) datarows.append( dynamodb.getDistinctBidandAvgSpeedandCount(maxdatetimestart)) return jsonify(json.loads(jsonc.data_to_json(datarows))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def getMapData(): try: data = [] maxdatetimestart = dynamodb.get_maxdatetimestart_from_dynamodb() listofBID = dynamodb.getListofBIDforLatestDTS() for bid in listofBID: data.append(dynamodb.getMapData(bid, maxdatetimestart)) return jsonify(json.loads(jsonc.data_to_json(data))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def apidata_getdata(): try: maxdatetimestart = dynamodb.get_maxdatetimestart_from_dynamodb() data_reversed = dynamodb.get_top10data_from_dynamodb(maxdatetimestart) datarows = jsonc.data_to_json(data_reversed) #return data_reversed''' return jsonify(json.loads(datarows)) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def apidata_getdata(): if request.method == 'POST' or request.method == 'GET': try: all_unique = dynamodb.get_all_unique() daily_unique_rfid = dynamodb.get_daily_urfid_dynamodb() data = { 'ambient_data': jsonc.data_to_json(dynamodb.get_data_from_dynamodb()), 'human_data': len(daily_unique_rfid) } counter = 1 for i in all_unique: emp_data = jsonc.data_to_json(dynamodb.fetch_past_rfid(i)) #wott = 'emp_data' + str(counter) data[i] = emp_data #counter = counter + 1 return jsonify(data) except: import sys print(sys.exc_info()[0]) print(sys.exc_info()[1])
def status(): try: data = jsonc.data_to_json(dynamodb.get_status()) loaded_data = jsonc.json.loads(data) # print(loaded_data) return jsonify(loaded_data) status = loaded_data[0].status return status except: print(sys.exc_info()[0]) print(sys.exc_info()[1]) return None
def apidata_getdata(): if request.method == 'POST': try: data = { 'chart_data': jsonc.data_to_json(dynamodb.get_data_from_dynamodb()), 'lightnow': real_time(), 'title': "IOT Data" } print(data) return jsonify(data) except: print("apidata_getdata error") print(sys.exc_info()[0]) print(sys.exc_info()[1])
def captureDriverImage(bid): try: bookingid = bid cam = cv2.VideoCapture("http://27.104.173.113:8081/out.jpg") ret, frame = cam.read() if not ret: exit() currentdatetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S") imgpathaddon = currentdatetime.replace(":", ".") imgpathaddon = imgpathaddon.replace(" ", "_") + ".jpg" imgname = bookingid + "_" + imgpathaddon success = dynamodb.uploadImageFileToS3(frame, imgname) print(success) #cv2.imwrite(imgname,frame) print(imgname) cam.release() host = "a3kfg2bxlkhyhy-ats.iot.us-east-1.amazonaws.com" rootCAPath = "certs/rootca.pem" certificatePath = "certs/certificate.pem.crt" privateKeyPath = "certs/private.pem.key" my_rpi = AWSIoTMQTTClient("p1828430") my_rpi.configureEndpoint(host, 8883) my_rpi.configureCredentials(rootCAPath, privateKeyPath, certificatePath) my_rpi.configureOfflinePublishQueueing( -1) # Infinite offline Publish queueing my_rpi.configureDrainingFrequency(2) # Draining: 2 Hz my_rpi.configureConnectDisconnectTimeout(10) # 10 sec my_rpi.configureMQTTOperationTimeout(5) # 5 sec # Connect and subscribe to AWS IoT my_rpi.connect() imageData = { 'VehicleType': 'GrabCar', 'datetime_value': currentdatetime, 'bookingid': bookingid, 'KeyName': imgname } my_rpi.publish("iotdatabase/image", json.dumps(imageData), 1) return jsonify(json.loads(jsonc.data_to_json(success))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def getDistinctBidandAvgSpeedandCount(datetimestart_value): try: data = [] bidData = [] bidList = [] bidCounter = [] bidTotalSpeed = [] dynamodb = boto3.resource('dynamodb', region_name='us-east-1') table = dynamodb.Table('GrabDataTable') response = table.query( KeyConditionExpression=Key('device_id').eq('deviceid_zhiyang'), FilterExpression=Key('datetimestart_value').eq( datetimestart_value), ProjectionExpression='bookingid, speedkmhour') items = response['Items'] items = jsonc.data_to_json(items) for i in json.loads(items): currentbid = i.get('bookingid') currentbidspeed = i.get('speedkmhour') if currentbid not in bidList: bidList.append(currentbid) bidCounter.append(1) bidTotalSpeed.append(currentbidspeed) else: index = bidList.index(currentbid) totalspeed = bidTotalSpeed[index] bidTotalSpeed[index] = totalspeed + currentbidspeed totalcount = bidCounter[index] bidCounter[index] = totalcount + 1 for i in range(len(bidList)): bidData = [] bidData.append(bidList[i]) totalspeed = bidTotalSpeed[i] avgspeed = totalspeed / bidCounter[i] bidData.append(round(avgspeed, 2)) bidData.append(bidCounter[i]) data.append(bidData) return data except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def apidata_getdata(): if request.method == 'POST' or request.method == 'GET': try: data = { 'chart_data': jsonc.data_to_json(dynamodb.get_data_from_dynamodb()), 'title': "Visitor Data" } #print("TEMP DATA") #print("***") #print(jsonify(data)) #print("***") return jsonify(data) except: import sys print(sys.exc_info()[0]) print(sys.exc_info()[1])
def apidata_getdata(): if request.method == 'POST' or request.method == 'GET': try: global timevalues global oldSpeed global client my_bot_token = '1222581641:AAERMoml2QxBI_pYyLmmV2fdrm059rKSDps' bot = telepot.Bot(my_bot_token) limit = 1000 bookingid = "ALL" if 'bookingid' in request.form: bookingid = request.form['bookingid'] if 'datalimit' in request.form: limit = request.form['datalimit'] loaded_r = json.loads(jsonc.data_to_json(get_data_from_dynamodb())) loadedDict = loaded_r[-1] bookingid = float(loadedDict.get('bookingid')) accuracy = float(loadedDict.get('accuracy')) bearing = float(loadedDict.get('bearing')) acceleration_x = float(loadedDict.get('acceleration_x')) acceleration_y = float(loadedDict.get('acceleration_y')) acceleration_z = float(loadedDict.get('acceleration_z')) gyro_x = float(loadedDict.get('gyro_x')) gyro_y = float(loadedDict.get('gyro_y')) gyro_z = float(loadedDict.get('gyro_z')) seconds = float(loadedDict.get('seconds')) speed = float(loadedDict.get('speed')) testingBookingID = [[ bookingid, accuracy, bearing, acceleration_x, acceleration_y, acceleration_z, gyro_x, gyro_y, gyro_z, seconds, speed ]] loaded_model = pickle.load(open('iotModel', 'rb')) df = pd.DataFrame(testingBookingID, columns=[ 'bookingid', 'accuracy', 'bearing', 'acceleration_x', 'acceleration_y', 'acceleration_z', 'gyro_x', 'gyro_y', 'gyro_z', 'seconds', 'speed' ]) predictedSafety = loaded_model.predict(df) safetyValue = predictedSafety.item(0) # dataSpeed = loaded_r["data"][-1]["speedkmhour"] # dataBookingid = loaded_r["data"][-1]["bookingid"] if safetyValue == 1: returnStr = "You are going at %.3f for BookingID %s. Please slow down" % ( speed, bookingid) print("Message has been sent!") bot.sendMessage(324643817, returnStr) if safetyValue == 1: print("A bit fast there buddy") print(safetyValue) data = {'chart_data': loaded_r, 'title': "IOT Data"} return data except: import sys print(sys.exc_info()[0]) print(sys.exc_info()[1])
def getSummaryTableData(): try: data = [] datetimestartList = [] dynamodb = boto3.resource('dynamodb', region_name='us-east-1') table = dynamodb.Table('GrabDataTable') listofbid = getListofAllBID() for bid in listofbid: bidData = [bid] response = table.query( KeyConditionExpression=Key('device_id').eq('deviceid_zhiyang'), ProjectionExpression= 'seconds, speedkmhour, datetime_value , datetimestart_value', FilterExpression=Key('bookingid').eq(bid)) items = response['Items'] items = jsonc.data_to_json(items) numofreadings = response['Count'] counter = 0 prevSpeed = 0.0 latestSpeed = 0.0 totalspeed = 0.0 totalduration = 0 latestdatetime = '' speedingCounter = 0 datetimestartList = [] for i in json.loads(items): counter += 1 totalduration += i.get('seconds') speed = i.get('speedkmhour') datetimestartvalue = i.get('datetimestart_value') if datetimestartvalue not in datetimestartList: datetimestartList.append(datetimestartvalue) if speed > 90: speedingCounter += 1 if counter == 1: latestSpeed = speed latestdatetime = i.get('datetime_value') if counter == 2: prevSpeed = speed totalspeed += speed avgspeed = totalspeed / numofreadings bidData.append(totalduration) bidData.append(len(datetimestartList)) bidData.append(avgspeed) bidData.append(prevSpeed) bidData.append(latestSpeed) bidData.append(latestdatetime) bidData.append(numofreadings) bidData.append(speedingCounter) data.append(bidData) return data except: print(sys.exc_info()[0]) print(sys.exc_info()[1])
def predictSafety(bid): try: # Obtain SQL Reading for selected BookingID (SQLQuery) # https://www.kite.com/python/answers/how-to-convert-an-sql-query-result-to-a-pandas-dataframe-in-python # https://stackoverflow.com/questions/12047193/how-to-convert-sql-query-result-to-pandas-data-structure dynamodb = boto3.resource('dynamodb', region_name='us-east-1') table = dynamodb.Table('modedata') response = table.query(KeyConditionExpression=Key('bookingid').eq(bid)) datarows = response['Items'] df = pd.DataFrame(datarows, dtype=float) #resoverall is yr sql statement # df = DataFrame(resoverall.fetchall()) # df.columns = resoverall.keys() df.drop(['accuracy'], axis=1, inplace=True) df['acceleration'] = np.sqrt( (df.loc[:, ('acceleration_x', 'acceleration_y', 'acceleration_z')]**2).sum(axis=1)) df.drop([ 'acceleration_x', 'acceleration_y', 'acceleration_z', 'speedkmhour' ], axis=1, inplace=True) pca_gyro = PCA(n_components=1).fit( df.loc[:, ['gyro_x', 'gyro_y', 'gyro_z']]) df['gyro'] = pca_gyro.transform(df.loc[:, ('gyro_x', 'gyro_y', 'gyro_z')]) df.drop(['gyro_x', 'gyro_y', 'gyro_z'], axis=1, inplace=True) data = pd.DataFrame() for col in df.columns: if col != "bookingid" and col != "label": temp = df.groupby("bookingid")[col].agg( ["mean", "sum", "max", "min"]) data[col + "_mean"] = temp["mean"] data[col + "_sum"] = temp["sum"] data[col + "_max"] = temp["max"] data[col + "_min"] = temp["min"] #data = data.drop(columns=["bookingid"]).reset_index(drop=True) data.drop(columns=["seconds_min"], inplace=True) # generate distance, velocity and angle features for col in data.columns: if col.startswith("seconds"): agg_method = col.split("_")[1] data["distance_" + agg_method] = data[col] * data["speed_" + agg_method] data["velocity_" + agg_method] = data[col] * data["acceleration_" + agg_method] data["angle_" + agg_method] = data[col] * data["gyro_" + agg_method] data = data.drop(columns=['seconds_sum', 'seconds_mean']).reset_index( drop=True) # Once Obtain model after hyper tuning save weights here and predict from joblib import load sr = load("GBR.joblib") y_pred = sr.predict(data) print("regression value: ", y_pred[0]) return jsonify(json.loads(jsonc.data_to_json(y_pred[0]))) except: print(sys.exc_info()[0]) print(sys.exc_info()[1])