WeerstationConnector.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.sql.Statement;
  6. import java.sql.Timestamp;
  7. import java.util.ArrayList;
  8. import java.util.Calendar;
  9. import java.util.GregorianCalendar;
  10. /**
  11. * Connect met de database
  12. *
  13. * @author Diederich Kroeske
  14. * @version 2
  15. */
  16. public class WeerstationConnector
  17. {
  18. private Connection myConn = null;
  19. public WeerstationConnector()
  20. {
  21. this("145.48.203.28","5329","aws_data","aws","aws");
  22. }
  23. //Start connection with Databse
  24. public WeerstationConnector(String host, String port, String dbName, String userName, String password)
  25. {
  26. try
  27. {
  28. String url = "jdbc:mysql://" + host + ":" + port + "/"+ dbName + "?user="
  29. + userName
  30. + "&password="
  31. + password;
  32. Class.forName("com.mysql.jdbc.Driver").newInstance ();
  33. myConn = DriverManager.getConnection(url);
  34. }
  35. catch( SQLException ex)
  36. {
  37. System.out.println("SQLException: " + ex.getMessage());
  38. System.out.println("SQLState: " + ex.getSQLState());
  39. System.out.println("VendorError: " + ex.getErrorCode());
  40. }
  41. catch(Exception ex)
  42. {
  43. System.out.println("Error : " + ex.getMessage());
  44. }
  45. }
  46. //Get most recent value of all columns
  47. public Measurement getMostRecentMeasurement()
  48. {
  49. Measurement m = new Measurement();
  50. try
  51. {
  52. // query:
  53. Statement s = myConn.createStatement();
  54. s.executeQuery("SELECT stationId, timestamp, " +
  55. "barometer, " +
  56. "insideTemp, " +
  57. "insideHum, " +
  58. "outsideTemp, " +
  59. "windSpeed, " +
  60. "avgWindSpeed, " +
  61. "windDir, " +
  62. "outsideHum, " +
  63. "rainRate, " +
  64. "UVLevel, " +
  65. "solarRad, " +
  66. "xmitBatt, " +
  67. "battLevel, " +
  68. "sunrise, " +
  69. "sunset " +
  70. "FROM measurement order by measurementId desc limit 1");
  71. ResultSet rs = s.getResultSet();
  72. int count = 0;
  73. while( rs.next() )
  74. {
  75. m.setStationId( rs.getString("stationId") );
  76. m.setDateStamp( rs.getTimestamp(2));
  77. m.setRawBarometer( Short.valueOf(rs.getString("barometer")) );
  78. m.setRawInsideTemp( Short.valueOf(rs.getString("insideTemp")) );
  79. m.setRawInsideHum( Short.valueOf(rs.getString("insideHum")) );
  80. m.setRawOutsideTemp( Short.valueOf(rs.getString("outsideTemp")) );
  81. m.setRawWindSpeed( Short.valueOf(rs.getString("windSpeed")) );
  82. m.setRawAvgWindSpeed( Short.valueOf(rs.getString("avgWindSpeed")) );
  83. m.setRawWindDir( Short.valueOf(rs.getString("windDir")) );
  84. m.setRawOutsideHum( Short.valueOf(rs.getString("outsideHum")) );
  85. m.setRawRainRate( Short.valueOf(rs.getString("rainRate")) );
  86. m.setRawUVLevel( Short.valueOf(rs.getString("UVLevel")) );
  87. m.setRawSolarRad( Short.valueOf(rs.getString("solarRad")) );
  88. m.setRawXmitBatt( Short.valueOf(rs.getString("xmitBatt")) );
  89. m.setRawBattLevel( Short.valueOf(rs.getString("battLevel")) );
  90. m.setRawSunrise( Short.valueOf(rs.getString("sunrise")) );
  91. m.setRawSunset( Short.valueOf(rs.getString("sunset")) );
  92. count++;
  93. }
  94. rs.close();
  95. s.close();
  96. }
  97. catch( SQLException ex)
  98. {
  99. System.out.println("SQLException: " + ex.getMessage());
  100. System.out.println("SQLState: " + ex.getSQLState());
  101. System.out.println("VendorError: " + ex.getErrorCode());
  102. }
  103. catch( Exception ex)
  104. {
  105. System.out.println("getMeasurement: " + ex.getMessage());
  106. }
  107. return m;
  108. }
  109. //Get specified values of all columns
  110. public ArrayList<Measurement> getAllMeasurementsBetween(GregorianCalendar d1, GregorianCalendar d2)
  111. {
  112. String sd1 = d1.get(Calendar.YEAR) + "-" + (d1.get(Calendar.MONTH)+1) + "-" + d1.get(Calendar.DATE) + " 0:0:0";
  113. String sd2 = d2.get(Calendar.YEAR) + "-" + (d2.get(Calendar.MONTH)+1) + "-" + d2.get(Calendar.DATE) + " 23:59:59";
  114. ArrayList<Measurement> mArr = new ArrayList<Measurement>();
  115. try
  116. {
  117. // query:
  118. Statement s = myConn.createStatement();
  119. s.executeQuery("SELECT stationId, timestamp, " +
  120. "barometer, " +
  121. "insideTemp, " +
  122. "insideHum, " +
  123. "outsideTemp, " +
  124. "windSpeed, " +
  125. "avgWindSpeed, " +
  126. "windDir, " +
  127. "outsideHum, " +
  128. "rainRate, " +
  129. "UVLevel, " +
  130. "solarRad, " +
  131. "xmitBatt, " +
  132. "battLevel, " +
  133. "sunrise, " +
  134. "sunset " +
  135. "FROM measurement where timestamp between " +
  136. "'" + sd1 + "' and '" + sd2 + "'");
  137. ResultSet rs = s.getResultSet();
  138. int count = 0;
  139. short prevBaro = 0;
  140. short prevInsideTemp = 0;
  141. short prevInsideHum = 0;
  142. short prevOutsideTemp = 0;
  143. short prevOutsideHum = 0;
  144. short prevWindDir = 0;
  145. short prevWindSpeed = 0;
  146. short prevAvgWindSpeed = 0;
  147. short prevRainRate = 0;
  148. short prevUVLevel = 0;
  149. short prevSolarRad = 0;
  150. short prevSunrise = 0;
  151. short prevSunset = 0;
  152. while( rs.next() )
  153. {
  154. Measurement m = new Measurement();
  155. m.setStationId( rs.getString("stationId") );
  156. m.setDateStamp( rs.getTimestamp(2));
  157. m.setRawXmitBatt( Short.valueOf(rs.getString("xmitBatt")) );
  158. m.setRawBattLevel( Short.valueOf(rs.getString("battLevel")) );
  159. //Check barometer
  160. if(Short.valueOf(rs.getString("barometer"))==0)
  161. {
  162. m.setRawBarometer( prevBaro );
  163. }
  164. else
  165. {
  166. m.setRawBarometer( Short.valueOf(rs.getString("barometer")) );
  167. }
  168. prevBaro = m.getRawBarometer();
  169. //Check insideTemp
  170. if(Short.valueOf(rs.getString("insideTemp"))==Short.MAX_VALUE)
  171. {
  172. m.setRawInsideTemp( prevInsideTemp );
  173. }
  174. else
  175. {
  176. m.setRawInsideTemp( Short.valueOf(rs.getString("insideTemp")) );
  177. }
  178. prevInsideTemp = m.getRawInsideTemp();
  179. //Check insideHum
  180. if(Short.valueOf(rs.getString("insideHum"))==255)
  181. {
  182. m.setRawInsideHum( prevInsideHum );
  183. }
  184. else
  185. {
  186. m.setRawInsideHum( Short.valueOf(rs.getString("insideHum")) );
  187. }
  188. prevInsideHum = m.getRawInsideHum();
  189. //Check outsideTemp
  190. if(Short.valueOf(rs.getString("outsideTemp"))==Short.MAX_VALUE)
  191. {
  192. m.setRawOutsideTemp( prevOutsideTemp );
  193. }
  194. else
  195. {
  196. m.setRawOutsideTemp( Short.valueOf(rs.getString("outsideTemp")) );
  197. }
  198. prevOutsideTemp = m.getRawOutsideTemp();
  199. //Check outsideHum
  200. if(Short.valueOf(rs.getString("outsideHum"))==255)
  201. {
  202. m.setRawOutsideHum( prevOutsideHum );
  203. }
  204. else
  205. {
  206. m.setRawOutsideHum( Short.valueOf(rs.getString("outsideHum")) );
  207. }
  208. prevOutsideHum = m.getRawOutsideHum();
  209. //Check windDir
  210. if(Short.valueOf(rs.getString("windDir"))==Short.MAX_VALUE)
  211. {
  212. m.setRawWindDir( prevWindDir );
  213. }
  214. else
  215. {
  216. m.setRawWindDir( Short.valueOf(rs.getString("windDir")) );
  217. }
  218. prevWindDir = m.getRawWindDir();
  219. //Check windSpeed
  220. if(Short.valueOf(rs.getString("windSpeed"))==255)
  221. {
  222. m.setRawWindSpeed( prevWindSpeed );
  223. }
  224. else
  225. {
  226. m.setRawWindSpeed( Short.valueOf(rs.getString("windSpeed")) );
  227. }
  228. prevWindSpeed = m.getRawWindSpeed();
  229. //Check AvgWindSpeed
  230. if(Short.valueOf(rs.getString("avgWindSpeed"))==255)
  231. {
  232. m.setRawAvgWindSpeed( prevAvgWindSpeed );
  233. }
  234. else
  235. {
  236. m.setRawAvgWindSpeed( Short.valueOf(rs.getString("avgWindSpeed")) );
  237. }
  238. prevAvgWindSpeed = m.getRawAvgWindSpeed();
  239. //Check RainRate
  240. if(Short.valueOf(rs.getString("rainRate"))==Short.MAX_VALUE)
  241. {
  242. m.setRawRainRate( prevRainRate );
  243. }
  244. else
  245. {
  246. m.setRawRainRate( Short.valueOf(rs.getString("rainRate")) );
  247. }
  248. prevRainRate = m.getRawRainRate();
  249. //Check UVLevel
  250. if(Short.valueOf(rs.getString("UVLevel"))==255)
  251. {
  252. m.setRawUVLevel( prevUVLevel );
  253. }
  254. else
  255. {
  256. m.setRawUVLevel( Short.valueOf(rs.getString("UVLevel")) );
  257. }
  258. prevUVLevel = m.getRawUVLevel();
  259. //Check solarRad
  260. if(Short.valueOf(rs.getString("solarRad"))==Short.MAX_VALUE)
  261. {
  262. m.setRawSolarRad( prevSolarRad );
  263. }
  264. else
  265. {
  266. m.setRawSolarRad( Short.valueOf(rs.getString("solarRad")) );
  267. }
  268. prevSolarRad = m.getRawSolarRad();
  269. //Check sunrise
  270. if(Short.valueOf(rs.getString("sunrise"))==Short.MAX_VALUE)
  271. {
  272. m.setRawSunrise( prevSunrise );
  273. }
  274. else
  275. {
  276. m.setRawSunrise( Short.valueOf(rs.getString("sunrise")) );
  277. }
  278. prevSunrise = m.getRawSunrise();
  279. //Check sunset
  280. if(Short.valueOf(rs.getString("sunset"))==Short.MAX_VALUE)
  281. {
  282. m.setRawSunset( prevSunset );
  283. }
  284. else
  285. {
  286. m.setRawSunset( Short.valueOf(rs.getString("sunset")) );
  287. }
  288. prevSunset = m.getRawSunset();
  289. mArr.add(m);
  290. count++;
  291. }
  292. rs.close();
  293. s.close();
  294. }
  295. catch( SQLException ex)
  296. {
  297. System.out.println("SQLException: " + ex.getMessage());
  298. System.out.println("SQLState: " + ex.getSQLState());
  299. System.out.println("VendorError: " + ex.getErrorCode());
  300. }
  301. catch( Exception ex)
  302. {
  303. System.out.println("getMeasurement: " + ex.getMessage());
  304. }
  305. return mArr;
  306. }
  307. //Get most recent values of one column
  308. public Timestamp getMostRecentTimeStamp()
  309. {
  310. Measurement m = getMostRecentMeasurement();
  311. return m.getDateStamp();
  312. }
  313. public short getMostRecentBarometer()
  314. {
  315. Measurement m = getMostRecentMeasurement();
  316. return m.getRawBarometer();
  317. }
  318. public short getMostRecentInsideTemp()
  319. {
  320. Measurement m = getMostRecentMeasurement();
  321. return m.getRawInsideTemp();
  322. }
  323. public short getMostRecentInsideHum()
  324. {
  325. Measurement m = getMostRecentMeasurement();
  326. return m.getRawInsideHum();
  327. }
  328. public short getMostRecentOutsideTemp()
  329. {
  330. Measurement m = getMostRecentMeasurement();
  331. return m.getRawOutsideTemp();
  332. }
  333. public short getMostRecentWindSpeed()
  334. {
  335. Measurement m = getMostRecentMeasurement();
  336. return m.getRawWindSpeed();
  337. }
  338. public short getMostRecentAvgWindSpeed()
  339. {
  340. Measurement m = getMostRecentMeasurement();
  341. return m.getRawAvgWindSpeed();
  342. }
  343. public short getMostRecentWindDir()
  344. {
  345. Measurement m = getMostRecentMeasurement();
  346. return m.getRawWindDir();
  347. }
  348. public short getMostRecentOutsideHum()
  349. {
  350. Measurement m = getMostRecentMeasurement();
  351. return m.getRawOutsideHum();
  352. }
  353. public short getMostRecentRainRate()
  354. {
  355. Measurement m = getMostRecentMeasurement();
  356. return m.getRawRainRate();
  357. }
  358. public short getMostRecentUVLevel()
  359. {
  360. Measurement m = getMostRecentMeasurement();
  361. return m.getRawUVLevel();
  362. }
  363. public short getMostRecentSolarRadiation()
  364. {
  365. Measurement m = getMostRecentMeasurement();
  366. return m.getRawSolarRad();
  367. }
  368. public short getMostRecentXmitBatt()
  369. {
  370. Measurement m = getMostRecentMeasurement();
  371. return m.getRawXmitBatt();
  372. }
  373. public short getMostRecentBattLevel()
  374. {
  375. Measurement m = getMostRecentMeasurement();
  376. return m.getRawBattLevel();
  377. }
  378. public short getMostRecentSunrise()
  379. {
  380. Measurement m = getMostRecentMeasurement();
  381. return m.getRawSunrise();
  382. }
  383. public short getMostRecentSunset()
  384. {
  385. Measurement m = getMostRecentMeasurement();
  386. return m.getRawSunset();
  387. }
  388. //Get all values of one column
  389. public short[] getAllOutsideTemp()
  390. {
  391. ArrayList<Measurement> mArr = getAllMeasurements();
  392. short[] values = new short[mArr.size()];
  393. int count = 0;
  394. for(Measurement m: mArr )
  395. {
  396. values[count++] = m.getRawOutsideTemp();
  397. }
  398. return values;
  399. }
  400. public short[] getAllBarometer()
  401. {
  402. ArrayList<Measurement> mArr = getAllMeasurements();
  403. short[] values = new short[mArr.size()];
  404. int count = 0;
  405. for(Measurement m: mArr )
  406. {
  407. values[count++] = m.getRawBarometer();
  408. }
  409. return values;
  410. }
  411. //Get all values of all columns
  412. public ArrayList<Measurement> getAllMeasurements()
  413. {
  414. ArrayList<Measurement> mArr = new ArrayList<Measurement>();
  415. try
  416. {
  417. // query:
  418. Statement s = myConn.createStatement();
  419. s.executeQuery("SELECT stationId, timestamp, " +
  420. "barometer, " +
  421. "insideTemp, " +
  422. "insideHum, " +
  423. "outsideTemp, " +
  424. "windSpeed, " +
  425. "avgWindSpeed, " +
  426. "windDir, " +
  427. "outsideHum, " +
  428. "rainRate, " +
  429. "UVLevel, " +
  430. "solarRad, " +
  431. "xmitBatt, " +
  432. "battLevel, " +
  433. "sunrise, " +
  434. "sunset " +
  435. "FROM measurement");
  436. ResultSet rs = s.getResultSet();
  437. int count = 0;
  438. while( rs.next() )
  439. {
  440. Measurement m = new Measurement();
  441. m.setStationId( rs.getString("stationId") );
  442. m.setDateStamp( rs.getTimestamp(2));
  443. m.setRawBarometer( Short.valueOf(rs.getString("barometer")) );
  444. m.setRawInsideTemp( Short.valueOf(rs.getString("insideTemp")) );
  445. m.setRawInsideHum( Short.valueOf(rs.getString("insideHum")) );
  446. m.setRawOutsideTemp( Short.valueOf(rs.getString("outsideTemp")) );
  447. m.setRawWindSpeed( Short.valueOf(rs.getString("windSpeed")) );
  448. m.setRawAvgWindSpeed( Short.valueOf(rs.getString("avgWindSpeed")) );
  449. m.setRawWindDir( Short.valueOf(rs.getString("windDir")) );
  450. m.setRawOutsideHum( Short.valueOf(rs.getString("outsideHum")) );
  451. m.setRawRainRate( Short.valueOf(rs.getString("rainRate")) );
  452. m.setRawUVLevel( Short.valueOf(rs.getString("UVLevel")) );
  453. m.setRawSolarRad( Short.valueOf(rs.getString("solarRad")) );
  454. m.setRawXmitBatt( Short.valueOf(rs.getString("xmitBatt")) );
  455. m.setRawBattLevel( Short.valueOf(rs.getString("battLevel")) );
  456. m.setRawSunrise( Short.valueOf(rs.getString("sunrise")) );
  457. m.setRawSunset( Short.valueOf(rs.getString("sunset")) );
  458. mArr.add(m);
  459. count++;
  460. }
  461. rs.close();
  462. s.close();
  463. }
  464. catch( SQLException ex)
  465. {
  466. System.out.println("SQLException: " + ex.getMessage());
  467. System.out.println("SQLState: " + ex.getSQLState());
  468. System.out.println("VendorError: " + ex.getErrorCode());
  469. }
  470. catch( Exception ex)
  471. {
  472. System.out.println("getMeasurement: " + ex.getMessage());
  473. }
  474. return mArr;
  475. }
  476. //Get last 86400 values of all columns
  477. public ArrayList<Measurement> getAllMeasurementsLast24h()
  478. {
  479. return getAllMeasurementsLastHours(24);
  480. }
  481. //Get specified values of all columns
  482. public ArrayList<Measurement> getAllMeasurementsLastHours(int hour)
  483. {
  484. ArrayList<Measurement> mArr = new ArrayList<Measurement>();
  485. try
  486. {
  487. // query:
  488. Statement s = myConn.createStatement();
  489. s.executeQuery("SELECT stationId, timestamp, " +
  490. "barometer, " +
  491. "insideTemp, " +
  492. "insideHum, " +
  493. "outsideTemp, " +
  494. "windSpeed, " +
  495. "avgWindSpeed, " +
  496. "windDir, " +
  497. "outsideHum, " +
  498. "rainRate, " +
  499. "UVLevel, " +
  500. "solarRad, " +
  501. "xmitBatt, " +
  502. "battLevel, " +
  503. "sunrise, " +
  504. "sunset " +
  505. "FROM measurement where timestamp between NOW() - INTERVAL " +
  506. hour + " HOUR and NOW()");
  507. ResultSet rs = s.getResultSet();
  508. int count = 0;
  509. while( rs.next() )
  510. {
  511. Measurement m = new Measurement();
  512. m.setStationId( rs.getString("stationId") );
  513. m.setDateStamp( rs.getTimestamp(2));
  514. m.setRawBarometer( Short.valueOf(rs.getString("barometer")) );
  515. m.setRawInsideTemp( Short.valueOf(rs.getString("insideTemp")) );
  516. m.setRawInsideHum( Short.valueOf(rs.getString("insideHum")) );
  517. m.setRawOutsideTemp( Short.valueOf(rs.getString("outsideTemp")) );
  518. m.setRawWindSpeed( Short.valueOf(rs.getString("windSpeed")) );
  519. m.setRawAvgWindSpeed( Short.valueOf(rs.getString("avgWindSpeed")) );
  520. m.setRawWindDir( Short.valueOf(rs.getString("windDir")) );
  521. m.setRawOutsideHum( Short.valueOf(rs.getString("outsideHum")) );
  522. m.setRawRainRate( Short.valueOf(rs.getString("rainRate")) );
  523. m.setRawUVLevel( Short.valueOf(rs.getString("UVLevel")) );
  524. m.setRawSolarRad( Short.valueOf(rs.getString("solarRad")) );
  525. m.setRawXmitBatt( Short.valueOf(rs.getString("xmitBatt")) );
  526. m.setRawBattLevel( Short.valueOf(rs.getString("battLevel")) );
  527. m.setRawSunrise( Short.valueOf(rs.getString("sunrise")) );
  528. m.setRawSunset( Short.valueOf(rs.getString("sunset")) );
  529. mArr.add(m);
  530. count++;
  531. }
  532. rs.close();
  533. s.close();
  534. }
  535. catch( SQLException ex)
  536. {
  537. System.out.println("SQLException: " + ex.getMessage());
  538. System.out.println("SQLState: " + ex.getSQLState());
  539. System.out.println("VendorError: " + ex.getErrorCode());
  540. }
  541. catch( Exception ex)
  542. {
  543. System.out.println("getMeasurement: " + ex.getMessage());
  544. }
  545. return mArr;
  546. }
  547. //Exectute a custom query
  548. private ResultSet executeCustomQuery(String query)
  549. {
  550. ResultSet returnSet = null;
  551. try{
  552. Statement s = myConn.createStatement();
  553. s.executeQuery(query);
  554. ResultSet rs = s.getResultSet();
  555. returnSet = rs;
  556. rs.close();
  557. s.close();
  558. }
  559. catch( SQLException ex)
  560. {
  561. System.out.println("SQLException: " + ex.getMessage());
  562. System.out.println("SQLState: " + ex.getSQLState());
  563. System.out.println("VendorError: " + ex.getErrorCode());
  564. }
  565. catch( Exception ex)
  566. {
  567. System.out.println("getMeasurement: " + ex.getMessage());
  568. }
  569. return returnSet;
  570. }
  571. //Close connection with Database
  572. protected void finalize() throws Throwable
  573. {
  574. // Close database connection
  575. if( myConn != null )
  576. {
  577. try
  578. {
  579. myConn.close();
  580. System.out.println("Database connection terminated");
  581. }
  582. catch( Exception e ) {}
  583. }
  584. super.finalize();
  585. }
  586. }