예제 #1
0
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])
예제 #2
0
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])
예제 #3
0
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])
예제 #4
0
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])
예제 #5
0
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])
예제 #6
0
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])
예제 #7
0
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])
예제 #8
0
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])
예제 #9
0
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])
예제 #10
0
파일: server.py 프로젝트: rfawwaz97/IOT
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])
예제 #11
0
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
예제 #12
0
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])
예제 #13
0
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])
예제 #14
0
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])
예제 #15
0
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])
예제 #16
0
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])
예제 #17
0
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
예제 #18
0
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])
예제 #19
0
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])
예제 #20
0
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])
예제 #21
0
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])
예제 #22
0
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])
예제 #23
0
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])
예제 #24
0
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])