WeerstationConnector.java 23 KB

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