Skip to content
Snippets Groups Projects
Commit cf25c726 authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Initial commit

parents
Branches
No related tags found
No related merge requests found
Pipeline #308 canceled
target/
classes/
# Carrot rust fly (Psila rosae) temperature model
Documentation is available [here](https://www.vips-landbruk.no/forecasts/models/PSILARTEMP/)
pom.xml 0 → 100755
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>no.nibio.vips.model</groupId>
<artifactId>YellowStemBorerTempModel</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>no.nibio.vips.common</groupId>
<artifactId>VIPSCommon</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<name>YellowStemBorerTempModel</name>
</project>
/*
* Copyright (c) 2016 NIBIO <http://www.nibio.no/>.
*
* This file is part of PsilaRosaeTempModel.
* PsilaRosaeTempModel is free software: you can redistribute it and/or modify
* it under the terms of the NIBIO Open Source License as published by
* NIBIO, either version 1 of the License, or (at your option) any
* later version.
*
* PsilaRosaeTempModel is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* NIBIO Open Source License for more details.
*
* You should have received a copy of the NIBIO Open Source License
* along with PsilaRosaeTempModel. If not, see <http://www.nibio.no/licenses/>.
*
*/
package no.nibio.vips.model.yellowstemborertempmodel;
import no.nibio.vips.util.DateMap;
/**
* @copyright 2016 <a href="http://www.nibio.no/">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no>
*/
public class DataMatrix extends DateMap{
public final static String TND = "TN";
public final static String TXD = "TX";
public final static String DAILY_CONTRIB = "DC";
public final static String HEAT_SUM = "HEAT_SUM";
public final static String PHASE = "PHASE";
}
/*
* Copyright (c) 2021 NIBIO <http://www.nibio.no/>.
*
* This file is part of YellowStemborerTempModel.
* YellowStemborerTempModel is free software: you can redistribute it and/or modify
* it under the terms of the NIBIO Open Source License as published by
* NIBIO, either version 1 of the License, or (at your option) any
* later version.
*
* YellowStemborerTempModel is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* NIBIO Open Source License for more details.
*
* You should have received a copy of the NIBIO Open Source License
* along with YellowStemborerTempModel. If not, see <http://www.nibio.no/licenses/>.
*
*/
package no.nibio.vips.model.yellowstemborertempmodel;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import no.nibio.vips.entity.ModelConfiguration;
import no.nibio.vips.entity.Result;
import no.nibio.vips.entity.ResultImpl;
import no.nibio.vips.entity.WeatherObservation;
import no.nibio.vips.i18n.I18nImpl;
import no.nibio.vips.model.ConfigValidationException;
import no.nibio.vips.model.Model;
import no.nibio.vips.model.ModelExcecutionException;
import no.nibio.vips.model.ModelId;
import no.nibio.vips.util.ModelUtil;
import no.nibio.vips.model.maths.NonLinearCurves;
import no.nibio.vips.util.CommonNamespaces;
import no.nibio.vips.util.WeatherElements;
import no.nibio.vips.util.WeatherUtil;
/**
* @copyright 2021 <a href="http://www.nibio.no/">NIBIO</a>
* @author Tor-Einar Skog <tor-einar.skog@nibio.no>
*/
public class YellowStemborerTempModel extends I18nImpl implements Model {
public final static ModelId MODEL_ID = new ModelId("YSTEMBTEMP");
private final ModelUtil modelUtil;
private TimeZone timeZone;
private DataMatrix dataMatrix;
private Date biofixDate;
private String[] phases = {"EGG","LARVAE","PUPA","ADULT"};
// Threshold values
// MUST BE ADJUSTED!!!!!!
private final Double dd_lower = 0.0;
private final Double dd_upper = 40.0;
private final Double THRESHOLD_1 = 260.0; // Egg to larvae
private final Double THRESHOLD_2 = 360.0; // Larvae to pupa
private final Double THRESHOLD_3 = 560.0; // Pupa to adult
public YellowStemborerTempModel()
{
super("no.nibio.vips.model.yellowstemborertempmodel.texts");
this.modelUtil = new ModelUtil();
}
@Override
public List<Result> getResult() throws ModelExcecutionException {
this.calculateTemperatureSum();
List<Result> retVal = new ArrayList<>();
Date currentDate = this.dataMatrix.getFirstDateWithParameterValue(DataMatrix.HEAT_SUM);
Calendar cal = Calendar.getInstance(this.timeZone);
DecimalFormat dFormat = new DecimalFormat("###.##");
while(this.dataMatrix.getParamDoubleValueForDate(currentDate, DataMatrix.HEAT_SUM) != null)
{
Result result = new ResultImpl();
result.setValidTimeStart(currentDate);
Double TNDCurrentDate = ((WeatherObservation) this.dataMatrix.getParamValueForDate(currentDate, DataMatrix.TND)).getValue();
Double TXDCurrentDate = ((WeatherObservation) this.dataMatrix.getParamValueForDate(currentDate, DataMatrix.TXD)).getValue();
Double DAILY_CONTRIB = this.dataMatrix.getParamDoubleValueForDate(currentDate, DataMatrix.DAILY_CONTRIB);
Double HEAT_SUM = this.dataMatrix.getParamDoubleValueForDate(currentDate, DataMatrix.HEAT_SUM);
result.setValue(CommonNamespaces.NS_WEATHER, DataMatrix.TND, dFormat.format(TNDCurrentDate));
result.setValue(CommonNamespaces.NS_WEATHER, DataMatrix.TXD, dFormat.format(TXDCurrentDate));
result.setValue(YellowStemborerTempModel.MODEL_ID.toString(), DataMatrix.DAILY_CONTRIB, dFormat.format(DAILY_CONTRIB));
result.setValue(YellowStemborerTempModel.MODEL_ID.toString(), DataMatrix.HEAT_SUM, dFormat.format(HEAT_SUM));
result.setValue(YellowStemborerTempModel.MODEL_ID.toString(), "THRESHOLD_1", dFormat.format(this.THRESHOLD_1));
result.setValue(YellowStemborerTempModel.MODEL_ID.toString(), "THRESHOLD_2", dFormat.format(this.THRESHOLD_2));
result.setValue(YellowStemborerTempModel.MODEL_ID.toString(), "THRESHOLD_3", dFormat.format(this.THRESHOLD_3));
Integer warningStatus = Result.WARNING_STATUS_NO_RISK;
if(HEAT_SUM < this.THRESHOLD_1)
{
result.setValue(YellowStemborerTempModel.MODEL_ID.toString(), DataMatrix.PHASE, this.phases[0]);
}
if(HEAT_SUM >= this.THRESHOLD_1)
{
result.setValue(YellowStemborerTempModel.MODEL_ID.toString(), DataMatrix.PHASE, this.phases[1]);
warningStatus = Result.WARNING_STATUS_MINOR_RISK;
}
if(HEAT_SUM >= this.THRESHOLD_2)
{
result.setValue(YellowStemborerTempModel.MODEL_ID.toString(), DataMatrix.PHASE, this.phases[2]);
warningStatus = Result.WARNING_STATUS_HIGH_RISK;
}
if(HEAT_SUM >= this.THRESHOLD_3)
{
result.setValue(YellowStemborerTempModel.MODEL_ID.toString(), DataMatrix.PHASE, this.phases[3]);
warningStatus = Result.WARNING_STATUS_NO_WARNING;
}
result.setWarningStatus(warningStatus);
retVal.add(result);
// Moving on...
cal.setTime(currentDate);
cal.add(Calendar.DATE, 1);
currentDate = cal.getTime();
}
return retVal;
}
@Override
public ModelId getModelId() {
return YellowStemborerTempModel.MODEL_ID;
}
@Override
public String getModelName() {
return this.getModelName(Model.DEFAULT_LANGUAGE);
}
@Override
public String getModelName(String language) {
return this.getText("name", language);
}
@Override
public String getLicense() {
return "Copyright (c) 2021 NIBIO <http://www.nibio.no/>. \n" +
"\n" +
"This file is part of YellowStemborerTempModel. \n" +
"YellowStemborerTempModel is free software: you can redistribute it and/or modify \n" +
"it under the terms of the NIBIO Open Source License as published by \n" +
"NIBIO, either version 1 of the License, or (at your option) any \n" +
"later version. \n" +
"\n" +
"YellowStemborerTempModel is distributed in the hope that it will be useful, \n" +
"but WITHOUT ANY WARRANTY; without even the implied warranty of \n" +
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the \n" +
"NIBIO Open Source License for more details. \n" +
"" +
"You should have received a copy of the NIBIO Open Source License \n" +
"along with YellowStemborerTempModel. If not, see <http://www.nibio.no/licenses/>. \n";
}
@Override
public String getCopyright() {
return "(c) 2021 NIBIO (http://www.nibio.no/). Contact: post@nibio.no";
}
@Override
public String getModelDescription() {
return this.getModelDescription(Model.DEFAULT_LANGUAGE);
}
@Override
public String getModelDescription(String language) {
try
{
return this.modelUtil.getTextWithBase64EncodedImages(this.getText("description", language), this.getClass());
}
catch(IOException ex)
{
return this.getText("description", language);
}
}
@Override
public String getWarningStatusInterpretation() {
return this.getWarningStatusInterpretation(Model.DEFAULT_LANGUAGE);
}
@Override
public String getWarningStatusInterpretation(String language) {
return this.getText("statusInterpretation", language);
}
@Override
public String getModelUsage() {
return this.getModelUsage(Model.DEFAULT_LANGUAGE);
}
@Override
public String getModelUsage(String language) {
return this.getText("usage", language);
}
@Override
public String getSampleConfig() {
return "{\n" +
"\t\"loginInfo\":{\n" +
"\t\t\"username\":\"example\",\n" +
"\t\t\"password\":\"example\"\n" +
"\t},\n" +
"\t\"modelId\":\"" + MODEL_ID.toString() + "\",\n" +
"\t\"configParameters\":{\n" +
"\t\t\"timeZone\": \"Europe/Oslo\",\n" +
"\t\t\"observations\":[\n" +
"\t\t{\n" +
"\t\t\t\t\"timeMeasured\": \"2015-01-01T00:00:00+02:00\",\n" +
"\t\t\t\t\"elementMeasurementTypeId\":\"TN\",\n" +
"\t\t\t\t\"logIntervalId\":2,\n" +
"\t\t\t\t\"value\":10.1\n" +
"\t\t}.\n" +
"\t\t{\n" +
"\t\t\t\t\"timeMeasured\": \"2015-01-01T00:00:00+02:00\",\n" +
"\t\t\t\t\"elementMeasurementTypeId\":\"TX\",\n" +
"\t\t\t\t\"logIntervalId\":2,\n" +
"\t\t\t\t\"value\":25.1\n" +
"\t\t}\n" +
"]}\n";
}
@Override
public void setConfiguration(ModelConfiguration config) throws ConfigValidationException {
// Init data matrix
this.dataMatrix = new DataMatrix();
// Setting timezone
this.timeZone = TimeZone.getTimeZone((String) config.getConfigParameter("timeZone"));
//System.out.println("TimeZone=" + this.timeZone);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(timeZone);
try
{
this.biofixDate = format.parse((String) config.getConfigParameter("biofixDate"));
System.out.println("BiofixDate=" + this.biofixDate);
}
catch(ParseException ex)
{
throw new ConfigValidationException(ex.getMessage());
}
// Importing weather data, creating collections
// Can accept both hourly and daily data
WeatherUtil wUtil = new WeatherUtil();
List<WeatherObservation> observations = modelUtil.extractWeatherObservationList(config.getConfigParameter("observations"));
if(observations == null || observations.isEmpty())
{
throw new ConfigValidationException("Please provide weather data.");
}
for(WeatherObservation o:observations)
{
switch(o.getElementMeasurementTypeId())
{
case WeatherElements.TEMPERATURE_MINIMUM:
o.setTimeMeasured(wUtil.pragmaticAdjustmentToMidnight(o.getTimeMeasured(), timeZone));
this.dataMatrix.setParamValueForDate(o.getTimeMeasured(), DataMatrix.TND, o);
break;
case WeatherElements.TEMPERATURE_MAXIMUM:
o.setTimeMeasured(wUtil.pragmaticAdjustmentToMidnight(o.getTimeMeasured(), timeZone));
this.dataMatrix.setParamValueForDate(o.getTimeMeasured(), DataMatrix.TXD, o);
break;
default:
// Keep calm and continue importing data
break;
}
}
//System.out.println("DataMatrix");
//System.out.println(this.dataMatrix.toCSV());
}
/**
* Operates on the datamatrix
* @param inputParameterName the parameter to sum
* @param outputParameterName the result
*/
private void calculateTemperatureSum() throws ModelExcecutionException {
Date today = this.biofixDate;
if(
(this.dataMatrix.getFirstDateWithParameterValue(DataMatrix.TND) == null || this.dataMatrix.getFirstDateWithParameterValue(DataMatrix.TXD) == null)
|| ! this.dataMatrix.getFirstDateWithParameterValue(DataMatrix.TND).equals(this.dataMatrix.getFirstDateWithParameterValue(DataMatrix.TXD))
|| ! this.dataMatrix.getLastDateWithParameterValue(DataMatrix.TND).equals(this.dataMatrix.getLastDateWithParameterValue(DataMatrix.TXD))
|| this.dataMatrix.getFirstDateWithParameterValue(DataMatrix.TND).after(today)
)
{
// TODO Improve this
throw new ModelExcecutionException("Problems with weather data. Either missing max or min temperatures (maybe starting after biofix date), or they are not aligned.");
}
NonLinearCurves nlc = new NonLinearCurves();
Date lastDate = this.dataMatrix.getLastDateWithParameterValue(DataMatrix.TND);
Calendar cal = Calendar.getInstance(this.timeZone);
Double sum = 0.0;
while(today.compareTo(lastDate) <= 0)
{
WeatherObservation todayMinTemp = (WeatherObservation)this.dataMatrix.getParamValueForDate(today, DataMatrix.TND);
WeatherObservation todayMaxTemp = (WeatherObservation)this.dataMatrix.getParamValueForDate(today, DataMatrix.TXD);
if(todayMinTemp == null || todayMaxTemp == null)
{
throw new ModelExcecutionException("Missing weather data at " + today + ": " + (todayMinTemp == null ? "TND ": "") + (todayMaxTemp == null ? "TXD ": ""));
}
//System.out.println("today=" + today + ",todayTemp=" + todayTemp);
Double dailyContribution = nlc.calculateSingleSineWaveWithCutoff(todayMinTemp.getValue(), todayMaxTemp.getValue(), this.dd_lower, this.dd_upper);
this.dataMatrix.setParamDoubleValueForDate(today, DataMatrix.DAILY_CONTRIB, dailyContribution);
sum += dailyContribution;
this.dataMatrix.setParamDoubleValueForDate(today, DataMatrix.HEAT_SUM, sum);
cal.setTime(today);
cal.add(Calendar.DATE, 1);
today = cal.getTime();
}
}
}
src/main/resources/images/plh-2007-0232.jpg

184 KiB

# Copyright (c) 2016 NIBIO <http://www.nibio.no/>.
#
# This file is part of LygusRugulipennisModel.
# LygusRugulipennisModel is free software: you can redistribute it and/or modify
# it under the terms of the NIBIO Open Source License as published by
# NIBIO, either version 1 of the License, or (at your option) any
# later version.
#
# LygusRugulipennisModel is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# NIBIO Open Source License for more details.
#
# You should have received a copy of the NIBIO Open Source License
# along with LygusRugulipennisModel. If not, see <http://www.nibio.no/licenses/>.
#
name=Yellow stemborer (Scirpophaga incertulas) temperature model
usage=TODO
statusInterpretation=TODO
description=TODO
# Copyright (c) 2016 NIBIO <http://www.nibio.no/>.
#
# This file is part of LygusRugulipennisModel.
# LygusRugulipennisModel is free software: you can redistribute it and/or modify
# it under the terms of the NIBIO Open Source License as published by
# NIBIO, either version 1 of the License, or (at your option) any
# later version.
#
# LygusRugulipennisModel is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# NIBIO Open Source License for more details.
#
# You should have received a copy of the NIBIO Open Source License
# along with LygusRugulipennisModel. If not, see <http://www.nibio.no/licenses/>.
#
name=Yellow stemborer d\u00f8gngradmodell
usage=TODO
statusInterpretation=TODO
description=TODO
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package no.nibio.vips.model.yellowstemborertempmodel;
import java.util.List;
import no.nibio.vips.entity.ModelConfiguration;
import no.nibio.vips.entity.Result;
import no.nibio.vips.model.ModelId;
import no.nibio.vips.util.ModelUtil;
import no.nibio.vips.util.test.WeatherDataFileReader;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author treinar
*/
public class YellowStemborerTempModelTest {
public YellowStemborerTempModelTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
/**
* Test of getResult method, of class YellowStemborerTempModel.
*/
@Test
public void testGetResult() throws Exception {
System.out.println("getResult");
WeatherDataFileReader wfr = new WeatherDataFileReader();
ModelConfiguration config = wfr.getModelConfigurationWithWeatherData("/test_data_2019.json", YellowStemborerTempModel.MODEL_ID.toString());
config.setConfigParameter("timeZone", "GMT+05:30");
config.setConfigParameter("biofixDate", "2019-01-05");
YellowStemborerTempModel instance = new YellowStemborerTempModel();
instance.setConfiguration(config);
List<Result> result = instance.getResult();
assertNotNull(result);
result.forEach(r->System.out.println(r));
}
}
[{"timeMeasured": "2019-01-01T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "10.5"}, {"timeMeasured": "2019-01-01T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "24.2"}, {"timeMeasured": "2019-01-02T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "11.3"}, {"timeMeasured": "2019-01-02T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "26"}, {"timeMeasured": "2019-01-03T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "10"}, {"timeMeasured": "2019-01-03T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28"}, {"timeMeasured": "2019-01-04T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "10.5"}, {"timeMeasured": "2019-01-04T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "30"}, {"timeMeasured": "2019-01-05T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "10.2"}, {"timeMeasured": "2019-01-05T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "31"}, {"timeMeasured": "2019-01-06T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "11.2"}, {"timeMeasured": "2019-01-06T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32"}, {"timeMeasured": "2019-01-07T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "10.5"}, {"timeMeasured": "2019-01-07T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.5"}, {"timeMeasured": "2019-01-08T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "11.5"}, {"timeMeasured": "2019-01-08T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.2"}, {"timeMeasured": "2019-01-09T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "12"}, {"timeMeasured": "2019-01-09T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "31.5"}, {"timeMeasured": "2019-01-10T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "13"}, {"timeMeasured": "2019-01-10T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "31.5"}, {"timeMeasured": "2019-01-11T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "10.5"}, {"timeMeasured": "2019-01-11T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28"}, {"timeMeasured": "2019-01-12T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "13.3"}, {"timeMeasured": "2019-01-12T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "27.3"}, {"timeMeasured": "2019-01-13T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "13"}, {"timeMeasured": "2019-01-13T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "26.9"}, {"timeMeasured": "2019-01-14T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "11"}, {"timeMeasured": "2019-01-14T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28.2"}, {"timeMeasured": "2019-01-15T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "12.2"}, {"timeMeasured": "2019-01-15T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "27.3"}, {"timeMeasured": "2019-01-16T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "11"}, {"timeMeasured": "2019-01-16T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "25"}, {"timeMeasured": "2019-01-17T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "11.9"}, {"timeMeasured": "2019-01-17T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "26.3"}, {"timeMeasured": "2019-01-18T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "12"}, {"timeMeasured": "2019-01-18T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28"}, {"timeMeasured": "2019-01-19T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "15.2"}, {"timeMeasured": "2019-01-19T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "27.3"}, {"timeMeasured": "2019-01-20T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "12.2"}, {"timeMeasured": "2019-01-20T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28.6"}, {"timeMeasured": "2019-01-21T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "13.2"}, {"timeMeasured": "2019-01-21T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "29"}, {"timeMeasured": "2019-01-22T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "14.2"}, {"timeMeasured": "2019-01-22T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28.2"}, {"timeMeasured": "2019-01-23T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "13"}, {"timeMeasured": "2019-01-23T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28.5"}, {"timeMeasured": "2019-01-24T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "15.5"}, {"timeMeasured": "2019-01-24T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28.2"}, {"timeMeasured": "2019-01-25T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "14"}, {"timeMeasured": "2019-01-25T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28"}, {"timeMeasured": "2019-01-26T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "15.3"}, {"timeMeasured": "2019-01-26T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28.1"}, {"timeMeasured": "2019-01-27T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.2"}, {"timeMeasured": "2019-01-27T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28.5"}, {"timeMeasured": "2019-01-28T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.2"}, {"timeMeasured": "2019-01-28T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "24.5"}, {"timeMeasured": "2019-01-29T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.5"}, {"timeMeasured": "2019-01-29T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "26.5"}, {"timeMeasured": "2019-01-30T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16"}, {"timeMeasured": "2019-01-30T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "25.4"}, {"timeMeasured": "2019-01-31T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "15.8"}, {"timeMeasured": "2019-01-31T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "26.1"}, {"timeMeasured": "2019-02-01T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "15.1"}, {"timeMeasured": "2019-02-01T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "27.5"}, {"timeMeasured": "2019-02-02T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "15.1"}, {"timeMeasured": "2019-02-02T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "29.0"}, {"timeMeasured": "2019-02-03T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.1"}, {"timeMeasured": "2019-02-03T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "28.9"}, {"timeMeasured": "2019-02-04T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.5"}, {"timeMeasured": "2019-02-04T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "31.0"}, {"timeMeasured": "2019-02-05T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.4"}, {"timeMeasured": "2019-02-05T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "29.8"}, {"timeMeasured": "2019-02-06T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "17.1"}, {"timeMeasured": "2019-02-06T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.0"}, {"timeMeasured": "2019-02-07T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.8"}, {"timeMeasured": "2019-02-07T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.5"}, {"timeMeasured": "2019-02-08T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.6"}, {"timeMeasured": "2019-02-08T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "31.8"}, {"timeMeasured": "2019-02-09T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.8"}, {"timeMeasured": "2019-02-09T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "30.6"}, {"timeMeasured": "2019-02-10T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "17.0"}, {"timeMeasured": "2019-02-10T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.2"}, {"timeMeasured": "2019-02-11T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.2"}, {"timeMeasured": "2019-02-11T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.4"}, {"timeMeasured": "2019-02-12T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "16.1"}, {"timeMeasured": "2019-02-12T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "29.5"}, {"timeMeasured": "2019-02-13T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "15.2"}, {"timeMeasured": "2019-02-13T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "29.6"}, {"timeMeasured": "2019-02-14T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "15.0"}, {"timeMeasured": "2019-02-14T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "31.0"}, {"timeMeasured": "2019-02-15T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "15.6"}, {"timeMeasured": "2019-02-15T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.5"}, {"timeMeasured": "2019-02-16T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "17.0"}, {"timeMeasured": "2019-02-16T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "27.2"}, {"timeMeasured": "2019-02-17T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "17.6"}, {"timeMeasured": "2019-02-17T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "27.5"}, {"timeMeasured": "2019-02-18T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "17.5"}, {"timeMeasured": "2019-02-18T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "30.6"}, {"timeMeasured": "2019-02-19T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "17.5"}, {"timeMeasured": "2019-02-19T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.0"}, {"timeMeasured": "2019-02-20T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "17.6"}, {"timeMeasured": "2019-02-20T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "34.2"}, {"timeMeasured": "2019-02-21T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "18.0"}, {"timeMeasured": "2019-02-21T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "34.0"}, {"timeMeasured": "2019-02-22T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "19.0"}, {"timeMeasured": "2019-02-22T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "35.0"}, {"timeMeasured": "2019-02-23T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "19.2"}, {"timeMeasured": "2019-02-23T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "34.8"}, {"timeMeasured": "2019-02-24T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "20.0"}, {"timeMeasured": "2019-02-24T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "36.0"}, {"timeMeasured": "2019-02-25T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "20.0"}, {"timeMeasured": "2019-02-25T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.0"}, {"timeMeasured": "2019-02-26T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "21.0"}, {"timeMeasured": "2019-02-26T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "32.2"}, {"timeMeasured": "2019-02-27T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "21.5"}, {"timeMeasured": "2019-02-27T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "31.0"}, {"timeMeasured": "2019-02-28T00:00:00.000+05:30", "elementMeasurementTypeId": "TN", "logIntervalId": 2, "value": "20.6"}, {"timeMeasured": "2019-02-28T00:00:00.000+05:30", "elementMeasurementTypeId": "TX", "logIntervalId": 2, "value": "30.0"}]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment