You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
7.6 KiB
220 lines
7.6 KiB
<?php |
|
// higher max_time is required because of distance calculation |
|
// 300 s = 5 minutes |
|
ini_set('max_execution_time', 300); |
|
|
|
// Current filename from script before |
|
if(!empty($out_file_name)) { |
|
$file_name = $out_file_name; |
|
} else { |
|
|
|
// For Debugging |
|
// gpsobdlog.de/save_to_database.php |
|
$file_name = "uploads/Log_20171208_060134.csv"; |
|
// Log_20171128_163056 |
|
// Log_20171206_181312 |
|
// Log_20171207_063511 |
|
// Log_20171207_174242 |
|
// Log_20171208_060134 |
|
} |
|
|
|
// Start connection to database; |
|
try { |
|
$pdo = new PDO('mysql:host=localhost;dbname=observer', 'observer', '6BjUdh7n'); |
|
} |
|
catch( PDOException $Exception ) { |
|
try { |
|
$pdo = new PDO('mysql:host=localhost;dbname=obd_data', 'root', ''); |
|
} |
|
catch( PDOException $Exception ) { |
|
echo "Error in connection"; |
|
exit; |
|
} |
|
} |
|
|
|
$file = fopen ($file_name, 'r'); |
|
// Erste Zeile mit Informationen |
|
$line = fgetcsv($file, 500, ";", "\"") ; |
|
|
|
$new_setup = array(); |
|
$new_setup['lat_start'] = $line[6]; |
|
$new_setup['long_start'] = $line[8]; |
|
$new_setup['alt_start'] = $line[10]; |
|
$new_setup['imei'] = $line[12]; |
|
$new_setup['vin'] = $line[14]; |
|
$new_setup['fuel_type'] = $line[16]; |
|
$new_setup['name_drv'] = $line[18]; |
|
$new_setup['age_drv'] = $line[20]; |
|
$new_setup['gender_drv'] = $line[22]; |
|
$new_setup['version'] = $line[24]; |
|
$new_setup['obd_logging'] = $line[26]; |
|
|
|
// set actual time for upload_time |
|
date_default_timezone_set("Europe/Berlin"); |
|
$new_setup['upload_time'] = date("Y-m-d H:i:s"); |
|
|
|
$logging_start_time = $line[28]; |
|
$datetime = new DateTime(date("Y-m-d H:i:s", ($logging_start_time/1000))); |
|
$datetime->setTimezone(new DateTimeZone('Europe/Berlin')); |
|
$new_setup['logging_start_time'] = $datetime->format("Y-m-d H:i:s"); |
|
|
|
echo "<br>"; |
|
print_r($line); |
|
echo "<br>"; |
|
echo "Following setup will be inserted"; |
|
echo "<br>"; |
|
print_r($new_setup); |
|
echo "<br>"; |
|
|
|
$statement = $pdo->prepare("INSERT INTO setup (version, imei, vin, logging_start_time, lat_start, long_start, alt_start, fuel_type, name_drv, age_drv, gender_drv, obd_logging, upload_time )VALUES (:version, :imei, :vin, :logging_start_time, :lat_start, :long_start, :alt_start, :fuel_type, :name_drv, :age_drv, :gender_drv, :obd_logging, :upload_time)"); |
|
$statement->execute($new_setup); |
|
|
|
// important for obd_raw_data |
|
$setup_id = $pdo->lastInsertId(); |
|
echo "New setup was inserted with the following id: $setup_id "; |
|
echo "<br>"; |
|
|
|
// Jump to line 4 |
|
$line = fgetcsv($file, 500, ";", "\""); |
|
$line = fgetcsv($file, 500, ";", "\"") ; |
|
$line = fgetcsv($file, 500, ";", "\"") ; |
|
|
|
// create array for rawdata |
|
$new_rawdata = array(); |
|
// is constant for the whole dataset |
|
$new_rawdata['setup_ID'] = $setup_id; |
|
|
|
// for distance calculation |
|
$speed_ms = array(); |
|
$delta_time = array(); |
|
$temp_time = 0; |
|
$i = 0; |
|
|
|
// last location |
|
$lat_end = -1.0; |
|
$long_end = -1.0; |
|
$alt_end = -1.0; |
|
|
|
// write SQL statement |
|
$statement = $pdo->prepare("INSERT INTO rawdata (setup_ID, time, time_system_clock, time_utc, latitude, longitude, altitude, gps_speed, x_accel, y_accel, z_accel, x_gyro, y_gyro, z_gyro, compass, number_satelites, accuracy, gps_bearing, speed, engine_load, engine_rpm, maf, accelerator_pedal, ambient_air_temp ) VALUES (:setup_ID, :time, :time_system_clock, :time_utc, :latitude, :longitude, :altitude, :gps_speed, :x_accel, :y_accel, :z_accel, :x_gyro, :y_gyro, :z_gyro, :compass, :number_satelites, :accuracy, :gps_bearing, :speed, :engine_load, :engine_rpm, :maf, :accelerator_pedal, :ambient_air_temp )"); |
|
|
|
function na_to_null(string $s) { return trim($s) === "NA" ? null : $s; } |
|
// loop for iterating through lines of csv_file |
|
while (($line = fgetcsv($file, 500, ";", "\"")) !== FALSE) { |
|
// last line is most of the time "userinterface: stop" |
|
if(count($line) !== 23) { |
|
break; |
|
} |
|
|
|
// for calculating distance |
|
if($new_setup['obd_logging'] == 1) { |
|
// use obd speed |
|
$speed_ms[] = $line[17] / 3.6; // [km/h] to [m/s] |
|
} else { |
|
// use gps speed |
|
$speed_ms[] = $line[6]; // [m/s] |
|
} |
|
|
|
if($temp_time != 0) { |
|
// calculate diff-time and save previous time |
|
$current_time = $line[0] / 1000; //[ms] to [seconds] |
|
$delta_time[] = $current_time - $temp_time; |
|
$temp_time = $current_time; |
|
} else { |
|
//firstround temp is not set |
|
$temp_time = $line[0] / 1000; //[ms] to [seconds] |
|
} |
|
// fill array with csv-information |
|
$new_rawdata['time'] = $line[0]; |
|
$new_rawdata['time_system_clock'] = $line[1]; |
|
$new_rawdata['time_utc'] = $line[2]; |
|
$new_rawdata['latitude'] = $line[3]; |
|
$new_rawdata['longitude'] = $line[4]; |
|
$new_rawdata['altitude'] = $line[5]; |
|
$new_rawdata['gps_speed'] = $line[6]; |
|
$new_rawdata['x_accel'] = $line[7]; |
|
$new_rawdata['y_accel'] = $line[8]; |
|
$new_rawdata['z_accel'] = $line[9]; |
|
$new_rawdata['x_gyro'] = $line[10]; |
|
$new_rawdata['y_gyro'] = $line[11]; |
|
$new_rawdata['z_gyro'] = $line[12]; |
|
$new_rawdata['compass'] = $line[13]; |
|
$new_rawdata['number_satelites'] = $line[14]; |
|
$new_rawdata['accuracy'] = $line[15]; |
|
$new_rawdata['gps_bearing'] = $line[16]; |
|
$new_rawdata['speed'] = $line[17]; |
|
$new_rawdata['engine_load'] = na_to_null($line[18]); |
|
$new_rawdata['engine_rpm'] = na_to_null($line[19]); |
|
$new_rawdata['maf'] = na_to_null($line[20]); |
|
$new_rawdata['accelerator_pedal'] = na_to_null($line[21]); |
|
$new_rawdata['ambient_air_temp'] = na_to_null($line[22]); |
|
|
|
// write into database |
|
$statement->execute($new_rawdata); |
|
// Only for row counting |
|
$i = $i +1; |
|
//remember last lat/long position |
|
if( $new_rawdata['latitude'] != 0 AND $new_rawdata['longitude'] != 0) { |
|
$lat_end = $new_rawdata['latitude']; |
|
$long_end = $new_rawdata['longitude']; |
|
$alt_end = $new_rawdata['altitude']; |
|
} |
|
} |
|
echo "New lines added to database: $i "; |
|
echo "<br>"; |
|
|
|
$pieces = array(); |
|
for($i = 0; $i < count($delta_time); ++$i) { |
|
// Calculate all small s |
|
$pieces[] = $delta_time[$i] * ($speed_ms[$i] + (($speed_ms[$i+1]-$speed_ms[$i])/2) ); |
|
} |
|
// Sum of s is whole distance -> [m] to [km] |
|
$distance = array_sum($pieces) / 1000; |
|
|
|
echo "Distance was calculated: $distance "; |
|
echo "<br>"; |
|
if( $distance < 0) { |
|
echo "distance was negative -> set to 0 ";echo "<br>"; |
|
$distance = 0; |
|
} |
|
|
|
$end_time = new DateTime(date("Y-m-d H:i:s", ($new_rawdata['time']/1000)) ) ; |
|
$start_time = new DateTime(date("Y-m-d H:i:s", ($logging_start_time/1000)) ) ;// [ms] to [s] // convert to call diff |
|
echo "<br>"; |
|
echo "end time raw data: "; echo ($new_rawdata['time']/1000); |
|
echo "<br>"; |
|
echo "ENDTIME"; |
|
print_r($end_time); |
|
echo "<br>"; |
|
echo "STARTTIME"; |
|
print_r($start_time); |
|
echo "<br>"; |
|
$diff_time = $end_time->diff($start_time); |
|
print_r($diff_time); |
|
// duration in hh:mm:ss |
|
$duration = sprintf( |
|
'%02d:%02d:%02d', |
|
($diff_time->d * 24) + $diff_time->h, |
|
$diff_time->i, |
|
$diff_time->s ); |
|
// $duration = "$diff_time->h:$diff_time->i:$diff_time->s"; // old |
|
|
|
// Update DB, setup table, add distance |
|
$statement = $pdo->prepare("UPDATE setup SET distance=?, lat_end=?, long_end=?, alt_end=?, duration=? WHERE setup_ID=?"); |
|
$statement->execute(array($distance, $lat_end, $long_end, $alt_end, $duration, $setup_id)); |
|
|
|
|
|
echo "Finish: close connections and delete file"; |
|
echo "<br>"; |
|
// Close connection |
|
$statement = null; |
|
$pdo = null; |
|
// Close file |
|
fclose ($file); |
|
// Delete file |
|
if(!empty($out_file_name)) { |
|
unlink($out_file_name); |
|
} |
|
|
|
// vim: set tabstop=4 shiftwidth=4 noexpandtab : |
|
?>
|
|
|