def data_to_csv(data_obj: RadioData, filename: str = "buggydata.csv"): # Creating a new CSV if there doesn't exist one if not csv_funcs.exists_csv(filename): csv_funcs.create_csv_file(filename, data_obj.get_fieldnames()) # Writing to the CSV csv_funcs.write_to_csv(filename, data_obj.get_data_dict())
def data_to_csv(data_obj: RadioData, filename: str): # Creating a new CSV if there doesn't exist one if not exists_csv(filename): create_csv_file(filename, data_obj.get_fieldnames()) # Writing to the CSV # (For loop is there for testing purposes; script will only add one data row per call) # for i in range(5): write_to_csv(filename, randomize_data(data_obj.get_data_dict()))
def send_json(obj: RadioData): ser = Serial(SEND_JSON_PORT, baudrate=BAUDRATE, timeout=1) timestamp = datetime.now().strftime("%Y-%b-%d;%I:%M:%S:%p").split(';') obj.OBC_date = timestamp.pop(0) obj.OBC_time = timestamp.pop(0) data_to_send = {"data": obj.get_data_dict(), "buggy_id": obj.BUGGY_ID} data = json.dumps(data_to_send, cls=MyEncoder) ser.write(data.encode('utf-8')) # ser.flush() ser.close()
def process_data(threadID): arduino = serial.Serial( 'COM5', 9600 ) #Replace 'COM' port for 'ttyACM*some number*' when not using windows # Raspberry Pi sends through one port GPIO.setmode(GPIO.BOARD) decoded_data = None GPS_Input = GPIO.setup(8, input) print("Thread ID: #{} is online.\nReading data from Arduino.\n".format( threadID)) # print(arduino) while True: time.sleep(0.2) # data refers to direct arduino reads data = arduino.readline() # Assume 'data' is true when signal is not lost and is receiving data if data: decoded_data = data.decode("utf-8") cleaned_data_list, gps_data_list = parser(decoded_data, GPS_Input) obj = RadioData( cleaned_data_list, gps_data_list ) # Creates object of type RadioData with parsed data lists // Comment if it does not work correctly data_to_csv(obj, "DataLog.csv") # Comment if it does not work correctly
def setup(): arduino = serial.Serial( 'COM5', 9600 ) #Replace 'COM' port for 'ttyACM*some number*' when not using windows GPIO.setmode(GPIO.BOARD) decoded_data = None GPS_Input = GPIO.setup(8, input) # print(arduino) while True: # data refers to direct arduino reads data = arduino.readline() # We flag for signal, True = connected flag = True # serial.read() # Serial read from groundstation # Possibly neeed to set it to the same port? # What happens if read doesnt read? Does it stay hanging?? # Make sure read returns atleast garbage values and not hangs. # Does serial.read() read from any source?? Is there a way to make it a specific read??? # reconnect flags for specific behavior once reconnection happens reconnect = False # Assume 'data' is true when signal is not lost and is receiving data if data: decoded_data = data.decode("utf-8") cleaned_data_list, gps_data_list = parser(decoded_data, GPS_Input) obj = RadioData( cleaned_data_list, gps_data_list ) # Creates object of type RadioData with parsed data lists // Comment if it does not work correctly data_to_csv(obj, "DataLog.csv") # Comment if it does not work correctly # Keep local CSV file that is appended so that data loss is prevented in case of signal loss. if flag: # print(data.decode("utf-8")) # Prototype functionality for disconection and reconnection # Assuming existing functions if reconnect: # Create function "local_upload" to upload local data log # Implement multithreading to prevent data back ups # Use try-except-finally send_json(csv_to_json("DataLog_Local.csv")) reconnect = False #ifdef obj send_json(obj) # Comment if it does not work correctly #endif else: reconnect = True # Buffer log for data collected during disconnection if data: data_to_csv(obj, "DataLog_Local.csv")
rnd.randint(0, 100), # strain_front_lft_3 rnd.randint(0, 100), # strain_front_rt_1 rnd.randint(0, 100), # strain_front_rt_2 rnd.randint(0, 100), # strain_front_rt_3 rnd.randint(0, 100), # strain_center_1 rnd.randint(0, 100), # strain_center_2 rnd.randint(0, 100), # strain_center_3 rnd.randint(0, 100), # vibration_front_lft rnd.randint(0, 100), # vibration_front_rt rnd.randint(0, 100), # vibration_rear_lft rnd.randint(0, 100), # vibration_rear_rt rnd.randint(0, 100), # vibration_center rnd.randint(0, 100), # battery_status ] return data def generate_random_positions(): return [ rnd.uniform(0, 100), # latitude rnd.uniform(0, 100) # longitude ] if __name__ == "__main__": filename = "buggyData.csv" dataObj = RadioData(generate_random_data(), generate_random_positions()) dataObj.OBC_date = d.today() dataObj.OBC_time = t.ctime().split()[3] data_to_csv(dataObj, filename)
def get_buggy_name_by_id(pk): return "NewBuggy" if pk == 1 else "OldBuggy" class MyEncoder(json.JSONEncoder): def default(self, o): return o.__dict__ def send_json(obj: RadioData): ser = Serial(SEND_JSON_PORT, baudrate=BAUDRATE, timeout=1) timestamp = datetime.now().strftime("%Y-%b-%d;%I:%M:%S:%p").split(';') obj.OBC_date = timestamp.pop(0) obj.OBC_time = timestamp.pop(0) data_to_send = {"data": obj.get_data_dict(), "buggy_id": obj.BUGGY_ID} data = json.dumps(data_to_send, cls=MyEncoder) ser.write(data.encode('utf-8')) # ser.flush() ser.close() if __name__ == '__main__': # for port in list(ports.comports()): # print(port) dummy_obj = RadioData(generate_random_data(), generate_random_positions()) dummy_obj.OBC_date, dummy_obj.OBC_time = datetime.now().strftime("%Y-%b-%d;%I:%M:%S:%p").split(';') send_json(dummy_obj)
import random as rnd import time as t from datetime import date as d from radiodata.radiodata import RadioData from data_to_csv import data_to_csv date = d.today() time = t.ctime().split()[3] filename = "buggyData.csv" data_list = [rnd.randint(0, 100) for i in range(15)] gps_list = [rnd.randint(0, 100), rnd.randint(0, 100)] dataObj = RadioData(data_list, gps_list) dataObj.OBC_time = dataObj.GSC_time = time dataObj.OBC_date = dataObj.GSC_date = date data_to_csv(dataObj, filename)