Browse Source

added new methods for working with rolling

pull/12715/head
IrynaMatveieva 1 year ago
parent
commit
6f1dd5a2d6
  1. 119
      common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbelCfTsRollingArg.java

119
common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbelCfTsRollingArg.java

@ -20,6 +20,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@ -60,6 +61,10 @@ public class TbelCfTsRollingArg implements TbelCfArg, Iterable<TbelCfTsDoubleVal
}
public double max() {
if (values.isEmpty()) {
return 0;
}
double max = Double.MIN_VALUE;
for (TbelCfTsDoubleVal value : values) {
double val = value.getValue();
@ -73,6 +78,120 @@ public class TbelCfTsRollingArg implements TbelCfArg, Iterable<TbelCfTsDoubleVal
return max;
}
public double min() {
if (values.isEmpty()) {
return 0;
}
double min = Double.MAX_VALUE;
for (TbelCfTsDoubleVal value : values) {
double val = value.getValue();
if (Double.isNaN(val)) {
return Double.NaN;
}
if (min > val) {
min = val;
}
}
return min;
}
public double mean() {
if (values.isEmpty()) {
return 0;
}
double sum = sum();
return Double.isNaN(sum) ? Double.NaN : sum / values.size();
}
public double std() {
if (values.isEmpty()) {
return 0;
}
double mean = mean();
if (Double.isNaN(mean)) {
return Double.NaN;
}
double sum = 0;
for (TbelCfTsDoubleVal value : values) {
double val = value.getValue();
if (Double.isNaN(val)) {
return Double.NaN;
}
sum += Math.pow(val - mean, 2);
}
return Math.sqrt(sum / values.size());
}
public double median() {
if (values.isEmpty()) {
return 0;
}
List<Double> sortedValues = new ArrayList<>();
for (TbelCfTsDoubleVal value : values) {
double val = value.getValue();
if (Double.isNaN(val)) {
return Double.NaN;
}
sortedValues.add(val);
}
Collections.sort(sortedValues);
int size = sortedValues.size();
return (size % 2 == 1)
? sortedValues.get(size / 2)
: (sortedValues.get(size / 2 - 1) + sortedValues.get(size / 2)) / 2.0;
}
public double count() {
return hasNaN() ? Double.NaN : values.size();
}
public double last() {
if (values.isEmpty()) {
return 0;
}
return hasNaN() ? Double.NaN : values.get(values.size() - 1).getValue();
}
public double first() {
if (values.isEmpty()) {
return 0;
}
return hasNaN() ? Double.NaN : values.get(0).getValue();
}
public double sum() {
if (values.isEmpty()) {
return 0;
}
double sum = 0;
for (TbelCfTsDoubleVal value : values) {
double val = value.getValue();
if (Double.isNaN(val)) {
return Double.NaN;
}
sum += val;
}
return sum;
}
private boolean hasNaN() {
for (TbelCfTsDoubleVal value : values) {
if (Double.isNaN(value.getValue())) {
return true;
}
}
return false;
}
@JsonIgnore
public int getSize() {
return values.size();

Loading…
Cancel
Save