Well measurements now can be stored in database

also added some more sample data
This commit is contained in:
Patrick McDonagh
2017-02-06 18:06:35 -06:00
parent 73d376038c
commit 02b28ca1e6
22 changed files with 446 additions and 108 deletions

View File

@@ -1,25 +1,54 @@
package com.henrypump.poc;
import static java.lang.Math.abs;
/**
* Created by patrickjmcd on 2/3/17.
*/
public class Measurement {
private String tagName;
private double currentValue;
private double lastValue;
private double average;
private double total;
private double max;
private double min;
private double dailyMax;
private double dailyMin;
private double[] totalHistory = new double[30];
private double[] averageHistory = new double[30];
private long numMeasurements;
private boolean storeInDatabase;
private double lastSentValue;
private double sendDelta;
private Database db;
private long lastSentTimestamp;
private long sendTimeDelta;
Measurement(){
Measurement(String tagName, boolean storeInDatabase, Database db, double sendDelta, long sendTimeDelta){
this.tagName = tagName;
average = 0;
total = 0;
numMeasurements = 0;
max = Double.MIN_VALUE;
min = Double.MAX_VALUE;
dailyMax = Double.MIN_VALUE;
dailyMin = Double.MAX_VALUE;
// Database code
this.storeInDatabase = storeInDatabase;
this.db = db;
this.sendDelta = sendDelta;
this.lastSentValue = 0.0;
this.sendTimeDelta = sendTimeDelta;
}
Measurement(String tagName, boolean storeInDatabase){
this.tagName = tagName;
average = 0;
total = 0;
numMeasurements = 0;
dailyMax = Double.MIN_VALUE;
dailyMin = Double.MAX_VALUE;
// Database code
this.storeInDatabase = storeInDatabase;
}
public double getCurrentValue() {
@@ -42,8 +71,21 @@ public class Measurement {
return numMeasurements;
}
public String getTagName() {
return tagName;
}
public double getDailyMax() {
return dailyMax;
}
public double getDailyMin() {
return dailyMin;
}
public void update(double value)
{
long currentTimestamp = System.currentTimeMillis();
lastValue = currentValue;
currentValue = value;
@@ -51,11 +93,22 @@ public class Measurement {
average = average * (((float)numMeasurements - 1)/(float)numMeasurements) + (currentValue / (float)numMeasurements);
total = total + value;
max = Math.max(max, currentValue);
min = Math.min(min, currentValue);
};
dailyMax = Math.max(dailyMax, currentValue);
dailyMin = Math.min(dailyMin, currentValue);
if(storeInDatabase){
if(abs(currentValue - lastSentValue) > sendDelta ||
currentTimestamp - lastSentTimestamp > (sendTimeDelta * 1000)){
db.newMeasurement(this);
lastSentValue = currentValue;
}
}
}
public void endOfDay(){
if (storeInDatabase){
db.newDailyTotal(this);
}
for(int i = 28; i >= 0; i--){
totalHistory[i] = totalHistory[i+1];
averageHistory[i] = averageHistory[i+1];
@@ -66,8 +119,8 @@ public class Measurement {
total = 0;
average = 0;
max = Double.MIN_VALUE;
min = Double.MAX_VALUE;
dailyMax = Double.MIN_VALUE;
dailyMin = Double.MAX_VALUE;
}