Ochsner Warmtepomp – Data van CSV naar MySQL
Dit voorbeeld laat zien hoe je de CSV bestanden van de Ochsner warmtepomp (dat wordt gedownload met dit script) één voor één doorleest en weer opslaat in de MySQL database.
1) Maak een SQL backup van je bestaande database.
2) Het script controleert niet of er dubbele dagen of entries tussen staan (de query vergt steeds meer tijd naarmate het aantal regels toeneemt), voorkeur is om de database leeg te maken.
3) Zet de code hieronder in een bestand, bijvoorbeeld ‘warmtepomp_csv_naar_db.php’, en start deze vanuit de browser.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
<style> @font-face { font-family: NotCourierSans; src: url(fonts/NotCourierSans.otf); } div { font-family:NotCourierSans; font-size: 80%; } </style> <div> <?php // ------------------------------------------------------------------------------ // Dit is een script dat alle CSV bestanden in de 'opslag' folder stuk voor stuk // in de database zet. // // 2014-12-20 door Sebastiaan Ebeltjes. // ------------------------------------------------------------------------------ // Verander het pad naar de folder waar dit script in draait, doe je dit niet dan pakt // bijvoorbeeld de synology NAS '/volume1/homes/admin/' om bestanden in aan te maken. chdir(dirname(__FILE__)); // Inladen van de instellingen. include 'instellingen.php'; // Lokale instellingen. $folder_naam = "warmtepomp"; $tabelnaam = "warmtepomp"; // Maak connectie met de database. echo "* Connectie met de database..."; $dbcon = mysqli_connect($database_adres, $database_login_naam, $database_login_wachtwoord, $database_naam); // Is de connectie gelukt?, zo niet...geef een foutmelding en sluit het script! if (mysqli_connect_errno()) { echo "fout!: " . mysqli_connect_error() . "<br>"; // Eindig het script. exit; } else { echo "succes!<br>"; } echo "- Gegevens wegschrijven naar de database..."; $bestanden = scandir($folder_naam . '/'); $regelteller = 0; // Een teller om het aantal toegevoegde database regels te tellen. // Een FOR loop voor alle bestanden die in de folder staan. foreach($bestanden as $bestand) { // open het CSV bestand en lees deze in. if (($bestand = fopen($folder_naam . '/' . $bestand, "r")) !== FALSE) { $vlag = true; // Zet een vlag om zo de eerste lijn van het CSV bestand over te slaan. while (($data = fgetcsv($bestand, 0, ";")) !== FALSE) { // Vlag om eerste lijn over te slaan. if ($vlag) { $vlag = false; continue; } // "explodeer" datum en tijd data in kolom 2 $data[1] en kolom 3 $data[2] // Opbouw $data[1] = 03.12.2014 list($DD, $DM, $DY) = explode('.', $data[1]); // Opbouw $data[2] = 1:39:08 list($TH, $TM, $TS) = explode(':', $data[2]); // Als er een regel met deze waarde al bestaat dan is de variabele > 0. // Als de regel niet gevonden is, dan is de variabele 0 mysqli_query($dbcon, "INSERT INTO " . $tabelnaam . " (UNIX_TIME, DY, DM, DD, TH, TM, TS, TEMP_TQA, TEMP_TQE, OC, OH, TEMP_OUT, TEMP_OUT_AV, TEMP_ROOM, TEMP_ROOM_SETPOINT, TEMP_FLOW_AHC, HUM_REL) VALUES (" .$data[0].", " .$DY.", " .$DM.", " .$DD.", " .$TH.", " .$TM.", " .$TS.", " .str_replace(",", ".", $data[3]).", " .str_replace(",", ".", $data[4]).", " .$data[5].", " .$data[6].", " .str_replace(",", ".", $data[7]).", " .str_replace(",", ".", $data[8]).", " .str_replace(",", ".", $data[9]).", " .str_replace(",", ".", $data[10]).", " .str_replace(",", ".", $data[11]).", " .$data[12].")" ); $regelteller = $regelteller + 1; } } // Sluit de connectie met het bestand. fclose($bestand); } echo "voltooid!<br>"; echo "> Aantal nieuwe regels toegevoegd aan database: " . $regelteller . "<br>"; // Sluit de database connectie. mysqli_close($dbcon); echo "<br><br>-- Einde! --"; ?> </div> |