From ab4df98479109e579df7ccf1a35e6373daed5851 Mon Sep 17 00:00:00 2001 From: Kenneth van Ewijk Date: Sun, 19 Oct 2014 14:38:43 +0200 Subject: [PATCH] Added code for StatisticsCalculator, Periode.. etc Added a lot of code. Currently not functioning for Periode is acting strange. Not tested... --- Calculator.java | 131 ++++++++++++++++++++-------------- LangsteZomerPeriode.java | 48 +++++++++++++ MaximaleRegenPeriode.java | 43 +++++++++++ Measurement.java | 8 +-- Periode.java | 59 +++++++++++++-- StatisticsCalculator.java | 146 +++++++++++++++++++++++++++++++++----- Weerstation.java | 12 +++- 7 files changed, 363 insertions(+), 84 deletions(-) create mode 100644 LangsteZomerPeriode.java create mode 100644 MaximaleRegenPeriode.java diff --git a/Calculator.java b/Calculator.java index ef9781a..c7eaeaa 100644 --- a/Calculator.java +++ b/Calculator.java @@ -1,23 +1,25 @@ - +import java.sql.Timestamp; +import java.util.Calendar; +import java.util.Date; public class Calculator { - - // Luchtdruk in hPa - // Malek&Tom - public static double luchtdruk(short mval) + + // Luchtdruk in hPa + // Malek&Tom + public static double luchtdruk(short mval) { double luchtdruk = (mval / 1000f) * 33.86389; return luchtdruk; } - - // Temperatuur in graden Celcius + + // Temperatuur in graden Celcius // Malek&Tom public static double temperatuur(short mval) { double temperatuur = (((double)mval / 10) -32) / 1.8; return temperatuur; } - + // Relatieve luchtvochtigheid in % // Malek&Tom public static double luchtVochtigheid(short mval) @@ -27,15 +29,15 @@ public class Calculator { } // Windsnelheid in m/s - // Janco&Tim - public static double windSnelheid(short mval) - { - double windSpeed = mval * 0.44704; - return windSpeed; - } - - // Windrichting in noord, oost, zuid en west. - // Kenneth&Daniël + // Janco&Tim + public static double windSnelheid(short mval) + { + double windSpeed = mval * 0.44704; + return windSpeed; + } + + // Windrichting in noord, oost, zuid en west. + // Kenneth&Daniël public static String windRichting(short mval) { String direction = "Error"; @@ -111,16 +113,16 @@ public class Calculator { return direction; } - + // Regenmeter in mm // Kenneth&Daniël public static double regenmeter(short mval) - { - double rainAmount = (double)mval*0.2; - return rainAmount; - } + { + double rainAmount = (double)mval*0.2; + return rainAmount; + } - // uvIndex in index + // uvIndex in index // Kenneth&Daniël public static double uvIndex(short mval) { @@ -131,37 +133,37 @@ public class Calculator { // BatterySpanning in Volt // Janco&Tim public static double batterySpanning(short mval){ - double voltage = (((double)mval * 300)/512)/100; - return voltage; - } - + double voltage = (((double)mval * 300)/512)/100; + return voltage; + } + // sunRise en Sunset in tijdformaat hh:mm - // Janco&Tim + // Janco&Tim public static String sunRise(short mval){ - return sun(mval); + return sun(mval); } public static String sunSet(short mval){ - return sun(mval); + return sun(mval); } - private static String sun(short sunRaw){ - String tijd = ""; - for(int i = 0; i <= 3; i++){ - tijd = sunRaw % 10 + tijd; - sunRaw /= 10; - if(i == 1){ - tijd = ":" + tijd; - } - } - return tijd; - } - - public static double solarRad(short mval){ - double zonSterkte = mval; - return zonSterkte; + private static String sun(short sunRaw){ + String tijd = ""; + for(int i = 0; i <= 3; i++){ + tijd = sunRaw % 10 + tijd; + sunRaw /= 10; + if(i == 1){ + tijd = ":" + tijd; + } + } + return tijd; + } + + public static double solarRad(short mval){ + double zonSterkte = mval; + return zonSterkte; } //windchill in graden Celcius - //Janco en Keneth + //Janco en Keneth public static double windChill(short grdnFh, short mph) { double gradenFahrenheit = grdnFh; @@ -172,7 +174,7 @@ public class Calculator { } //Heatindex in celcius - //Tom met Malek + //Tom met Malek public static double heatIndex(double RH, double T) { double HI = -42.379 + 2.04901523*T + 10.14333127*RH - .22475541*T*RH - .00683783*T*T - .05481717*RH*RH + .00122874*T*T*RH + .00085282*T*RH*RH - .00000199*T*T*RH*RH; @@ -188,11 +190,36 @@ public class Calculator { double dauwpunt = Math.pow( hm, (1/8f)) * (112 + 0.9*omgevingsTemp) + (0.1*omgevingsTemp) - 112; return dauwpunt; } - + public static double cloudHeight(double temp, short luchtVochtigheid ){ - - double wolkhoogte = 125 * (temp-dewPoint(temp, luchtVochtigheid)); - return wolkhoogte; - } + double wolkhoogte = 125 * (temp-dewPoint(temp, luchtVochtigheid)); + return wolkhoogte; + } + + + public static Periode timeStampToPeriode(Timestamp timeStamp1, Timestamp timeStamp2) + { + Periode periode = new Periode(); + Calendar cal = Calendar.getInstance(); + int year,month,day; + + //Zet de eerste TimeStamp om + cal.setTime(new Date(timeStamp1.getTime())); + year = cal.get(Calendar.YEAR); + month = cal.get(Calendar.MONTH+1); + day = cal.get(Calendar.DAY_OF_MONTH); + + periode.setBeginPeriode(year,month, day); + + //Zet de tweede TimeStamp om + cal.setTime(new Date(timeStamp2.getTime())); + year = cal.get(Calendar.YEAR); + month = cal.get(Calendar.MONTH+1); + day = cal.get(Calendar.DAY_OF_MONTH); + + periode.setEindePeriode(year,month, day); + + return periode; + } } diff --git a/LangsteZomerPeriode.java b/LangsteZomerPeriode.java new file mode 100644 index 0000000..ab8ed26 --- /dev/null +++ b/LangsteZomerPeriode.java @@ -0,0 +1,48 @@ +import java.util.ArrayList; + +public class LangsteZomerPeriode extends Grootheid{ + private ArrayList list; + private Periode zomerPeriode; + + //constructor + public LangsteZomerPeriode(Measurement measurement1, ArrayList measurement2, Periode totalePeriode){ + list = new ArrayList(); + zomerPeriode = new Periode(); + updateRecent(measurement1); + update24Hour(measurement2); + } + + + public void updateRecent(Measurement measurement1){ + setCurrent(measurement1.getOutsideTemp()); + } + public void update24Hour(ArrayList measurement2){ + createList(measurement2); + calculateMaxMinAvg(list); + + int[] index = StatisticsCalculator.langsteZomersePeriode(list); + zomerPeriode = Calculator.timeStampToPeriode( measurement2.get(index[0]).getDateStamp(), measurement2.get(index[1]).getDateStamp()); + } + + public void display(){ + GUIboard.writePageToMatrix("Langste zomerse periode", zomerPeriode.toString(), ""); + } + + public void displayGraph() + { + display(); + } + + private void createList(ArrayList measurement2) + { + if(!list.isEmpty()) + { + list.clear(); + } + + for(Measurement ms : measurement2) + { + list.add(ms.getOutsideTemp()); + } + } +} diff --git a/MaximaleRegenPeriode.java b/MaximaleRegenPeriode.java new file mode 100644 index 0000000..3a3d226 --- /dev/null +++ b/MaximaleRegenPeriode.java @@ -0,0 +1,43 @@ +import java.util.ArrayList; + +public class MaximaleRegenPeriode extends Grootheid{ + private ArrayList list; + + //constructor + public MaximaleRegenPeriode(Measurement measurement1, ArrayList measurement2){ + list = new ArrayList(); + updateRecent(measurement1); + update24Hour(measurement2); + } + + + public void updateRecent(Measurement measurement1){ + setCurrent(measurement1.getRainRate()); + } + public void update24Hour(ArrayList measurement2){ + createList(measurement2); + calculateMaxMinAvg(list); + } + + public void display(){ + GUIboard.writePageToMatrix("Periode met meeste regen", StatisticsCalculator.maximaleRegenPeriode(list) + "", ""); + } + + public void displayGraph() + { + display(); + } + + private void createList(ArrayList measurement2) + { + if(!list.isEmpty()) + { + list.clear(); + } + + for(Measurement ms : measurement2) + { + list.add(ms.getRainRate()); + } + } +} diff --git a/Measurement.java b/Measurement.java index 51ef152..8c1548a 100644 --- a/Measurement.java +++ b/Measurement.java @@ -1,12 +1,12 @@ - +import java.sql.Timestamp; import java.math.BigDecimal; public class Measurement { private String stationId; - private java.sql.Timestamp dateStamp; + private Timestamp dateStamp; private short barometer; private short insideTemp; private short insideHum; @@ -32,8 +32,8 @@ public class Measurement public String getStationId () { return stationId; }; // dateStamp - public void setDateStamp (java.sql.Timestamp ts) { this.dateStamp = ts;}; - public java.sql.Timestamp getDateStamp () { return dateStamp; }; + public void setDateStamp (Timestamp ts) { this.dateStamp = ts;}; + public Timestamp getDateStamp () { return dateStamp; }; // barometer public void setRawBarometer (short val) { this.barometer = val;}; diff --git a/Periode.java b/Periode.java index 99d4d30..1dd9e49 100644 --- a/Periode.java +++ b/Periode.java @@ -1,20 +1,34 @@ import java.util.GregorianCalendar; +import java.util.Calendar; public class Periode { - public GregorianCalendar beginPeriode; - public GregorianCalendar eindePeriode; + private GregorianCalendar beginPeriode; + private GregorianCalendar eindePeriode; public Periode() { + beginPeriode = new GregorianCalendar(); + eindePeriode = new GregorianCalendar(); } public Periode(int jaar, int maand, int dag, int eindjaar, int eindmaand, int einddag) { - beginPeriode = new GregorianCalendar(); - eindePeriode = new GregorianCalendar(); - beginPeriode.set(jaar, maand, dag,0,0,0); - eindePeriode.set(eindjaar, eindmaand, einddag,23,59,59); + beginPeriode = new GregorianCalendar(jaar, maand, dag); + eindePeriode = new GregorianCalendar(eindjaar, eindmaand, einddag); + + /* + if(eindjaar > jaar && eindmaand > maand && einddag > dag) + { + beginPeriode.set(eindjaar, eindmaand, einddag); + eindePeriode.set(jaar, maand, dag); + } + else + { + beginPeriode.set(jaar, maand, dag); + eindePeriode.set(eindjaar, eindmaand, einddag); + } + */ } public GregorianCalendar getBeginPeriode() @@ -26,4 +40,35 @@ public class Periode { return eindePeriode; } -} \ No newline at end of file + + public void setBeginPeriode(int jaar, int maand, int dag) + { + beginPeriode.set(jaar, maand, dag); + } + + public void setEindePeriode(int jaar, int maand, int dag) + { + eindePeriode.set(jaar, maand, dag); + } + + public String toString() + { + Calendar cal = getBeginPeriode().getInstance(); + Calendar cal2 = getEindePeriode().getInstance(); + String returnString = cal.get(Calendar.YEAR) + "-" + (cal.get(Calendar.MONTH)+1) + "-" + cal.get(Calendar.DATE); + returnString += " | "; + returnString += cal2.get(Calendar.YEAR) + "-" + (cal2.get(Calendar.MONTH)+1) + "-" + cal2.get(Calendar.DATE); + return returnString; + } +} + + + + + + + + + + + diff --git a/StatisticsCalculator.java b/StatisticsCalculator.java index 5d81ec8..96d9de1 100644 --- a/StatisticsCalculator.java +++ b/StatisticsCalculator.java @@ -1,6 +1,5 @@ -package weerstation1; -import java.util.ArrayList; -import java.util.Collections; +import java.util.ArrayList; +import java.util.Collections; public class StatisticsCalculator { @@ -41,7 +40,7 @@ public class StatisticsCalculator { return avg; } - public static double median(ArrayList array){ + public static double median(ArrayList array){ Collections.sort(array); //sort the array double median = 0; @@ -86,36 +85,147 @@ public class StatisticsCalculator { } - public static Periode langsteDroogstePeriode(ArrayList array) + public static double graagDagen(ArrayList array) { - Periode periode = new Periode(); + int graaddagen = 0; + //Code - return periode; + return graaddagen; } - public static Periode langsteDroogstePeriodeMetMax(ArrayList array, int maxNeerslag) + public static int[] langsteDroogstePeriode(ArrayList array) { - Periode periode = new Periode(); - - - return periode; + return langsteDroogstePeriodeMetMax(array, 0); } - public static Periode langsteRegenPeriode(ArrayList array) + public static int[] langsteDroogstePeriodeMetMax(ArrayList array, int maxNeerslag) { - Periode periode = new Periode(); + int[] index = new int[2]; + int index1 = 0; + int index2 = 0; + //Code - return periode; + index[0] = index1; + index[1] = index2; + return index; } - public static double meesteRegenAchterElkaar(ArrayList array) + public static int[] langsteRegenPeriode(ArrayList array) { - double regenHoeveelheid = 0; + int[] index = new int[2]; + int index1 = 0; + int index2 = 0; + //Code - return regenHoeveelheid; + index[0] = index1; + index[1] = index2; + return index; + } + + public static double maximaleRegenPeriode(ArrayList array) + { + double totaleRegen = 0; + + for(double db : array) + { + totaleRegen += db; + } + + return totaleRegen; + } + + public static int[] langsteZomersePeriode(ArrayList array) + { + + ArrayList maxTempDag = new ArrayList(); + int i = 0; + double maxTemp = 0; + + //Bereken de maximale temperatuur per dag. + for(double db : array) + { + i++; + if(i%1440==0) + { + maxTempDag.add(maxTemp); + maxTemp = 0; + } + + if(db > maxTemp) + { + maxTemp = db; + } + } + + //Creer een array met twee indexen + int[] index = new int[2]; + int index1 = 0; + int index2 = 0; + + //Een tijdelijke index om bij te houden wat de index was in het geval dat de vorige groter was. + int index1_1 = 0; + + //Een boolean + boolean zomers = false; + + int p = 0; + int maxDays = 0; + + //Doorloop je maximale temperaturen en zoek de langste periode + for(int t=0; t 25) { + p++; + if(!zomers) + { + zomers = true; + index1_1 = t; + } + } + else { + if(p > maxDays) { + maxDays = p; + index1 = index1_1; + index2 = t-1; + zomers=false; + } + p=0; + } + } + + //Het terugsturen van de gevonden indexen. Je doet ze keer 1440 omdat je bij het berekenen van + //de temperatuur per dag je het in stukken van 1440 samenvoegde. + index[0] = index1*1440; + index[1] = index2*1440; + return index; + } + + public static int[] langsteHitteGolfPeriode(ArrayList array) + { + int[] index = new int[2]; + int index1 = 0; + int index2 = 0; + + //Code + + index[0] = index1; + index[1] = index2; + return index; + } + + public static int[] langsteTempStijgingPeriode(ArrayList array) + { + int[] index = new int[2]; + int index1 = 0; + int index2 = 0; + + //Code + + index[0] = index1; + index[1] = index2; + return index; } } diff --git a/Weerstation.java b/Weerstation.java index 959d207..4c47f1c 100644 --- a/Weerstation.java +++ b/Weerstation.java @@ -1,5 +1,5 @@ -import java.lang.reflect.InvocationTargetException; + import java.util.ArrayList; import java.util.List; import java.util.Timer; @@ -8,9 +8,11 @@ import java.util.Calendar; public class Weerstation { WeerstationConnector weerstation1; + Calendar now; - Measurement meting1; Periode periodeDag; + + Measurement meting1; ArrayList meting2; Timer starter; int currentScreen; @@ -22,7 +24,8 @@ public class Weerstation { weerstation1 = new WeerstationConnector(); now = Calendar.getInstance(); - periodeDag = new Periode(Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH,Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH); + periodeDag = new Periode(2013,12,25,2014,1,5); + System.out.println(periodeDag); GUIboard.init(); starter = new Timer(); @@ -30,6 +33,7 @@ public class Weerstation { meting1 = weerstation1.getMostRecentMeasurement(); meting2 = weerstation1.getAllMeasurementsBetween(periodeDag.getBeginPeriode(), periodeDag.getEindePeriode()); + System.out.println(meting2.size()); stopAnimatie(); while(startup) @@ -53,6 +57,8 @@ public class Weerstation { //All the different screen classes final List lstScreens = new ArrayList(); + lstScreens.add(new LangsteZomerPeriode(meting1, meting2, periodeDag)); + lstScreens.add(new MaximaleRegenPeriode(meting1, meting2)); lstScreens.add(new WindDirection(meting1, meting2)); lstScreens.add(new OutsideTemp(meting1, meting2)); lstScreens.add(new WindChill(meting1, meting2));