package art.servers.etdserver.controller;
|
|
|
import art.library.interop.serialization.Serialization;
|
import art.library.model.devices.Device;
|
import art.library.model.devices.DeviceStatus;
|
import art.library.model.devices.etd.Etd;
|
import art.library.model.devices.etd.EtdStatus;
|
import art.library.model.devices.etd.information.EtdClassification;
|
import art.library.model.devices.etd.information.EtdInformationLane;
|
import art.library.model.devices.etd.information.EtdInformationSection;
|
import art.library.model.devices.etd.status.EtdStatusLane;
|
import art.library.model.devices.etd.status.EtdStatusVehicle;
|
import art.library.model.transactions.traces.Trace;
|
import art.library.utils.common.TimeUtils;
|
import art.servers.etdserver.Shared;
|
import static java.lang.Thread.sleep;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
|
|
public class ControllerDataIntegration extends art.servers.controller.Controller
|
{
|
private int status = DeviceStatus.STATUS_ALARM;
|
private boolean firstTime = true;
|
protected ControllerEtd controller = null;
|
protected String name = null;
|
private long lastPeriodQuery = 0;
|
|
|
public ControllerDataIntegration(ControllerEtd controller)
|
{
|
this.controller = controller;
|
this.name = "Controller Data integration: " + controller.device.getIdentifier();
|
this.setName(this.name);
|
}
|
|
|
public void run ()
|
{
|
boolean firstTime = true;
|
// <editor-fold defaultstate="collapsed" desc="Trace">
|
art.servers.Shared.println(Trace.getTraceInformation(art.servers.Shared.getApplicationName(), name, art.servers.Shared.getMessage("Starting"), art.servers.Shared.getMessage("Success")), true);
|
// </editor-fold>
|
status = DeviceStatus.STATUS_ONLINE;
|
|
while ((isInterrupted() == false) && (exit == false))
|
{
|
try
|
{
|
if (art.servers.Shared.isServerEnabled() == true)
|
{
|
if (firstTime == false)
|
{
|
integratePeriod();
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
|
Calendar calendar = Calendar.getInstance();
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
while ((calendar.get(Calendar.SECOND) != 0) && (exit == false))
|
{
|
try
|
{
|
sleep(50);
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
|
firstTime = false;
|
if (art.servers.Shared.model.existsDevice(controller.device.getIdentifier()) == false)
|
{
|
art.servers.Shared.println(name, art.servers.Shared.getMessage("Device no longer exists"));
|
exit = true;
|
}
|
}
|
|
// <editor-fold defaultstate="collapsed" desc="Trace">
|
art.servers.Shared.println(Trace.getTraceInformation(art.servers.Shared.getApplicationName(), name, art.servers.Shared.getMessage("Finishing"), art.servers.Shared.getMessage("Success")), true);
|
// </editor-fold>
|
}
|
|
|
|
|
private void integratePeriod ()
|
{
|
Etd deviceclone = Serialization.clone(controller.device);
|
|
try
|
{
|
sleep(15000);
|
|
if (controller instanceof ControllerDiamondRaw)
|
{
|
if (((ControllerDiamondRaw)controller).isConnected() == false)
|
{
|
offline(deviceclone);
|
return;
|
}
|
}
|
|
int period = controller.device.getDeviceInformation().period;
|
long tsPeriod = TimeUtils.thisperiod(controller.device.getDeviceInformation().period) - (controller.device.getDeviceInformation().period*1000L);
|
long tsPeriodEnd = tsPeriod + (controller.device.getDeviceInformation().period*1000L);
|
List<EtdStatusVehicle> lvehicle = controller.getVehiclesPeriod(tsPeriod, tsPeriodEnd);
|
|
System.out.println(deviceclone.getIdentifier() + " - 1.DataIntegration: " + Device.getDate(tsPeriod) + " to " + Device.getDate(tsPeriodEnd) + " - Vehicles: " + lvehicle.size());
|
System.out.println(deviceclone.getIdentifier() + " - 2.DataIntegration: " + Device.getDate(deviceclone.getDeviceStatus().measurementTimestamp));
|
|
initialiseStatus(deviceclone, tsPeriod);
|
System.out.println(deviceclone.getIdentifier() + " - 3.DataIntegration: " + Device.getDate(deviceclone.getDeviceStatus().measurementTimestamp));
|
|
for (EtdStatusVehicle vehicle : lvehicle)
|
{
|
try
|
{
|
addVehicleLane(vehicle, deviceclone);
|
addVehicleLaneTotal(vehicle, deviceclone);
|
addVehicleLaneSection(vehicle, deviceclone);
|
}
|
catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
}
|
|
for (EtdStatusLane laneStatus : deviceclone.getDeviceStatus().llane)
|
{
|
int classified = laneStatus.counting - laneStatus.unclassified;
|
|
if (classified > 0)
|
{
|
laneStatus.length = (laneStatus.length / classified);
|
int length = (int)(laneStatus.length*10);
|
laneStatus.length = (double)((double)length / 10d);
|
laneStatus.speed = (int)(laneStatus.speed / classified);
|
}
|
|
if (controller.device.getDeviceInformation().period > 0)
|
{
|
laneStatus.occupancy = (float)((laneStatus.occupancy * 100f) / (float)(controller.device.getDeviceInformation().period*1000));
|
int occupancy = (int)(laneStatus.occupancy*10);
|
laneStatus.occupancy = (float)((float)occupancy / 10f);
|
if (laneStatus.occupancy > 100f) laneStatus.occupancy = 100f;
|
}
|
}
|
|
for (EtdStatusLane sectionStatus : deviceclone.getDeviceStatus().lsection)
|
{
|
int classified = sectionStatus.counting - sectionStatus.unclassified;
|
|
if (classified > 0)
|
{
|
sectionStatus.length = (sectionStatus.length / classified);
|
int length = (int)(sectionStatus.length*10);
|
sectionStatus.length = (double)((double)length / 10d);
|
sectionStatus.speed = (int)(sectionStatus.speed / classified);
|
}
|
|
if (controller.device.getDeviceInformation().period > 0)
|
{
|
sectionStatus.occupancy = (float)((sectionStatus.occupancy * 100f) / (float)(controller.device.getDeviceInformation().period*1000));
|
int occupancy = (int)(sectionStatus.occupancy*10);
|
sectionStatus.occupancy = (float)((float)occupancy / 10f);
|
if (sectionStatus.occupancy > 100f) sectionStatus.occupancy = 100f;
|
}
|
}
|
|
int classified = deviceclone.getDeviceStatus().total.counting - deviceclone.getDeviceStatus().total.unclassified;
|
|
if (classified > 0)
|
{
|
deviceclone.getDeviceStatus().total.length = deviceclone.getDeviceStatus().total.length / classified;
|
int length = (int)(deviceclone.getDeviceStatus().total.length*10);
|
deviceclone.getDeviceStatus().total.length = (double)((double)length / 10d);
|
deviceclone.getDeviceStatus().total.speed = (int)(deviceclone.getDeviceStatus().total.speed / classified);
|
}
|
|
if (controller.device.getDeviceInformation().period > 0)
|
{
|
deviceclone.getDeviceStatus().total.occupancy = (float)((deviceclone.getDeviceStatus().total.occupancy * 100f) / (float)(controller.device.getDeviceInformation().period*1000));
|
int occupancy = (int)(deviceclone.getDeviceStatus().total.occupancy*10);
|
deviceclone.getDeviceStatus().total.occupancy = (float)((float)occupancy / 10f);
|
if (deviceclone.getDeviceStatus().total.occupancy > 100f) deviceclone.getDeviceStatus().total.occupancy = 100f;
|
}
|
|
deviceclone.setLastTimestampStatusUpdate(deviceclone.getDeviceStatus().measurementTimestamp);
|
System.out.println(deviceclone.getIdentifier() + " - 4.DataIntegration: " + Device.getDate(deviceclone.getDeviceStatus().measurementTimestamp) + " - " + deviceclone.getDeviceStatus().llane.size() + " - " + deviceclone.getDeviceStatus().lsection.size() + " - " + deviceclone.getDeviceStatus().period + " - " + deviceclone.getDeviceStatus().total);
|
online(deviceclone);
|
}
|
catch (Exception exception)
|
{
|
try{offline(deviceclone);} catch (Exception e){};
|
exception.printStackTrace();
|
}
|
}
|
|
|
private void initialiseStatus (Etd deviceclone, long tsperiod)
|
{
|
if (deviceclone.getDeviceStatus() == null)
|
{
|
deviceclone.status = new EtdStatus();
|
for (EtdInformationLane laneInformation : deviceclone.getDeviceInformation().lLane)
|
{
|
EtdStatusLane laneStatus = new EtdStatusLane();
|
laneStatus.number = laneInformation.number;
|
laneStatus.correctMeasurements = 1;
|
laneStatus.totalMeasurements = 1;
|
deviceclone.getDeviceStatus().llane.add(laneStatus);
|
}
|
|
for (EtdInformationSection sectionInformation : deviceclone.getDeviceInformation().lSection)
|
{
|
EtdStatusLane sectionStatus = new EtdStatusLane();
|
sectionStatus.number = sectionInformation.number;
|
sectionStatus.correctMeasurements = 1;
|
sectionStatus.totalMeasurements = 1;
|
deviceclone.getDeviceStatus().lsection.add(sectionStatus);
|
}
|
|
deviceclone.getDeviceStatus().total = new EtdStatusLane();
|
}
|
|
if (deviceclone.getDeviceStatus().total == null)
|
{
|
deviceclone.getDeviceStatus().total = new EtdStatusLane();
|
}
|
|
deviceclone.getDeviceStatus().llane.clear();
|
deviceclone.getDeviceStatus().lsection.clear();
|
for (EtdInformationLane laneInformation : deviceclone.getDeviceInformation().lLane)
|
{
|
EtdStatusLane laneStatus = new EtdStatusLane();
|
laneStatus.number = laneInformation.number;
|
laneStatus.totalMeasurements = 1;
|
laneStatus.correctMeasurements = 1;
|
laneStatus.lengths = new int[deviceclone.getDeviceInformation().lLengthClassification.size()];
|
for (int l=0; l<laneStatus.lengths.length; l++)
|
laneStatus.lengths[l] = 0;
|
laneStatus.speeds = new int[deviceclone.getDeviceInformation().lSpeedClassification.size()];
|
for (int s=0; s<laneStatus.speeds.length; s++)
|
laneStatus.speeds[s] = 0;
|
laneStatus.speedxlength = new int[deviceclone.getDeviceInformation().lSpeedClassification.size()][deviceclone.getDeviceInformation().lLengthClassification.size()];
|
for (int s=0; s<laneStatus.speeds.length; s++)
|
{
|
for (int l=0; l<laneStatus.lengths.length; l++)
|
{
|
laneStatus.speedxlength[s][l] = 0;
|
}
|
}
|
deviceclone.getDeviceStatus().llane.add(laneStatus);
|
}
|
|
for (EtdInformationSection sectionInformation : deviceclone.getDeviceInformation().lSection)
|
{
|
EtdStatusLane sectionStatus = new EtdStatusLane();
|
sectionStatus.number = sectionInformation.number;
|
sectionStatus.totalMeasurements = 1;
|
sectionStatus.correctMeasurements = 1;
|
sectionStatus.lengths = new int[deviceclone.getDeviceInformation().lLengthClassification.size()];
|
for (int l=0; l<sectionStatus.lengths.length; l++)
|
sectionStatus.lengths[l] = 0;
|
sectionStatus.speeds = new int[deviceclone.getDeviceInformation().lSpeedClassification.size()];
|
for (int s=0; s<sectionStatus.speeds.length; s++)
|
sectionStatus.speeds[s] = 0;
|
sectionStatus.speedxlength = new int[deviceclone.getDeviceInformation().lSpeedClassification.size()][deviceclone.getDeviceInformation().lLengthClassification.size()];
|
for (int s=0; s<sectionStatus.speeds.length; s++)
|
{
|
for (int l=0; l<sectionStatus.lengths.length; l++)
|
{
|
sectionStatus.speedxlength[s][l] = 0;
|
}
|
}
|
deviceclone.getDeviceStatus().lsection.add(sectionStatus);
|
}
|
|
deviceclone.getDeviceStatus().total.correctMeasurements = 1;
|
deviceclone.getDeviceStatus().total.totalMeasurements = 1;
|
deviceclone.getDeviceStatus().total.counting = 0;
|
deviceclone.getDeviceStatus().total.distance = 0;
|
deviceclone.getDeviceStatus().total.length = 0;
|
deviceclone.getDeviceStatus().total.occupancy = 0;
|
deviceclone.getDeviceStatus().total.speed = 0;
|
deviceclone.getDeviceStatus().total.unclassified = 0;
|
deviceclone.getDeviceStatus().total.wrongWayVehicleDetection = false;
|
deviceclone.getDeviceStatus().total.congestionDetection = false;
|
deviceclone.getDeviceStatus().total.lengths = new int[deviceclone.getDeviceInformation().lLengthClassification.size()];
|
for (int l=0; l<deviceclone.getDeviceStatus().total.lengths.length; l++)
|
deviceclone.getDeviceStatus().total.lengths[l] = 0;
|
deviceclone.getDeviceStatus().total.speeds = new int[deviceclone.getDeviceInformation().lSpeedClassification.size()];
|
for (int s=0; s<deviceclone.getDeviceStatus().total.speeds.length; s++)
|
deviceclone.getDeviceStatus().total.speeds[s] = 0;
|
deviceclone.getDeviceStatus().total.speedxlength = new int[deviceclone.getDeviceInformation().lSpeedClassification.size()][deviceclone.getDeviceInformation().lLengthClassification.size()];
|
for (int s=0; s<deviceclone.getDeviceStatus().total.speeds.length; s++)
|
{
|
for (int l=0; l<deviceclone.getDeviceStatus().total.lengths.length; l++)
|
{
|
deviceclone.getDeviceStatus().total.speedxlength[s][l] = 0;
|
}
|
}
|
|
deviceclone.getDeviceStatus().period = deviceclone.getDeviceInformation().period;
|
deviceclone.getDeviceStatus().setMeasurementTimestamp(Device.getDate(tsperiod));
|
}
|
|
|
private EtdStatusLane getEtdStatusLane(Etd deviceclone, int lane)
|
{
|
try
|
{
|
for (EtdStatusLane laneStatus : deviceclone.getDeviceStatus().llane)
|
{
|
if (laneStatus.number == lane) return(laneStatus);
|
}
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
return(null);
|
}
|
|
|
private EtdStatusLane getEtdStatusSection(EtdStatusVehicle vehicle, Etd deviceclone)
|
{
|
try
|
{
|
EtdInformationSection section = getEtdInformationSection(deviceclone, vehicle.lane);
|
for (EtdStatusLane sectionStatus : deviceclone.getDeviceStatus().lsection)
|
{
|
if (section.number == sectionStatus.number) return(sectionStatus);
|
}
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
return(null);
|
}
|
|
|
private EtdInformationSection getEtdInformationSection(Etd deviceclone, int lane)
|
{
|
try
|
{
|
for (EtdInformationSection sectionInformation : deviceclone.getDeviceInformation().lSection)
|
{
|
for (Integer number : sectionInformation.llane)
|
{
|
if (number == lane) return(sectionInformation);
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
return(null);
|
}
|
|
|
private void addVehicleLane(EtdStatusVehicle vehicle, Etd deviceclone)
|
{
|
try
|
{
|
EtdStatusLane laneStatus = getEtdStatusLane(deviceclone, vehicle.lane);
|
|
if (laneStatus == null) return;
|
|
if (vehicle.speed > 0) laneStatus.occupancy += ((((double)vehicle.length/10.0)/((double)vehicle.speed/3.6)) * 1000.0);
|
|
laneStatus.counting = laneStatus.counting + 1;
|
laneStatus.speed = laneStatus.speed + vehicle.speed;
|
laneStatus.length = laneStatus.length + ((double)vehicle.length/100d);
|
if (vehicle.length <= 0) laneStatus.unclassified = laneStatus.unclassified + 1;
|
laneStatus.totalMeasurements = 1;
|
laneStatus.correctMeasurements = 1;
|
|
int lengthPosition = getClassificationPosition(((double)vehicle.length/100d), deviceclone.getDeviceInformation().lLengthClassification);
|
laneStatus.lengths[lengthPosition] = laneStatus.lengths[lengthPosition] + 1;
|
int speedPosition = getClassificationPosition(vehicle.speed, deviceclone.getDeviceInformation().lSpeedClassification);
|
laneStatus.speeds[speedPosition] = laneStatus.speeds[speedPosition] + 1;
|
laneStatus.speedxlength[speedPosition][lengthPosition] = laneStatus.speedxlength[speedPosition][lengthPosition] + 1;
|
}
|
catch (Exception e)
|
{
|
if (controller.device.getIdentifier().equalsIgnoreCase("etdtc-rzeszów-2") == true)
|
{
|
e.printStackTrace();
|
Shared.println("Data Integration", e);
|
}
|
}
|
}
|
|
|
private int getClassificationPosition(double value, List<EtdClassification> lclassification)
|
{
|
int position = 0;
|
|
try
|
{
|
for (int i=0; i<lclassification.size(); i++)
|
{
|
EtdClassification classification = lclassification.get(i);
|
if ((classification.lowerLimit <= value) && (value <= classification.upperLimit))
|
return(i);
|
}
|
|
if (lclassification.size() > 0)
|
return(lclassification.size()-1);
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
return(position);
|
}
|
|
|
private void addVehicleLaneTotal(EtdStatusVehicle vehicle, Etd deviceclone)
|
{
|
try
|
{
|
if (vehicle.speed > 0) deviceclone.getDeviceStatus().total.occupancy += ((((double)vehicle.length/10.0)/((double)vehicle.speed/3.6)) * 1000.0);
|
|
deviceclone.getDeviceStatus().total.counting = deviceclone.getDeviceStatus().total.counting + 1;
|
deviceclone.getDeviceStatus().total.speed = deviceclone.getDeviceStatus().total.speed + vehicle.speed;
|
deviceclone.getDeviceStatus().total.length = deviceclone.getDeviceStatus().total.length + ((double)vehicle.length/100d);
|
if (vehicle.length <= 0) deviceclone.getDeviceStatus().total.unclassified = deviceclone.getDeviceStatus().total.unclassified + 1;
|
deviceclone.getDeviceStatus().total.totalMeasurements = 1;
|
deviceclone.getDeviceStatus().total.correctMeasurements = 1;
|
|
int lengthPosition = getClassificationPosition(((double)vehicle.length/100d), deviceclone.getDeviceInformation().lLengthClassification);
|
deviceclone.getDeviceStatus().total.lengths[lengthPosition] = deviceclone.getDeviceStatus().total.lengths[lengthPosition] + 1;
|
int speedPosition = getClassificationPosition(vehicle.speed, deviceclone.getDeviceInformation().lSpeedClassification);
|
deviceclone.getDeviceStatus().total.speeds[speedPosition] = deviceclone.getDeviceStatus().total.speeds[speedPosition] + 1;
|
deviceclone.getDeviceStatus().total.speedxlength[speedPosition][lengthPosition] = deviceclone.getDeviceStatus().total.speedxlength[speedPosition][lengthPosition] + 1;
|
}
|
catch (Exception e)
|
{
|
if (controller.device.getIdentifier().equalsIgnoreCase("etdtc-rzeszów-2") == true)
|
{
|
e.printStackTrace();
|
Shared.println("Data Integration", e);
|
}
|
}
|
}
|
|
|
private void addVehicleLaneSection(EtdStatusVehicle vehicle, Etd deviceclone)
|
{
|
try
|
{
|
EtdStatusLane sectionStatus = getEtdStatusSection(vehicle, deviceclone);
|
|
if (sectionStatus == null) return;
|
|
if (vehicle.speed > 0) sectionStatus.occupancy += ((((double)vehicle.length/10.0)/((double)vehicle.speed/3.6)) * 1000.0);
|
|
sectionStatus.counting = sectionStatus.counting + 1;
|
sectionStatus.speed = sectionStatus.speed + vehicle.speed;
|
sectionStatus.length = sectionStatus.length + ((double)vehicle.length/100d);
|
if (vehicle.length <= 0) sectionStatus.unclassified = sectionStatus.unclassified + 1;
|
sectionStatus.totalMeasurements = 1;
|
sectionStatus.correctMeasurements = 1;
|
|
int lengthPosition = getClassificationPosition(((double)vehicle.length/100d), deviceclone.getDeviceInformation().lLengthClassification);
|
sectionStatus.lengths[lengthPosition] = sectionStatus.lengths[lengthPosition] + 1;
|
int speedPosition = getClassificationPosition(vehicle.speed, deviceclone.getDeviceInformation().lSpeedClassification);
|
sectionStatus.speeds[speedPosition] = sectionStatus.speeds[speedPosition] + 1;
|
sectionStatus.speedxlength[speedPosition][lengthPosition] = sectionStatus.speedxlength[speedPosition][lengthPosition] + 1;
|
}
|
catch (Exception e)
|
{
|
if (controller.device.getIdentifier().equalsIgnoreCase("etdtc-rzeszów-2") == true)
|
{
|
e.printStackTrace();
|
Shared.println("Data Integration", e);
|
}
|
|
}
|
}
|
|
|
|
|
private void offline(Etd deviceclone)throws Exception
|
{
|
if (deviceclone.getAlarm("alarm_offline") <= 0)
|
{
|
deviceclone.getDeviceAlarms().clear();
|
}
|
deviceclone.setAlarm("alarm_offline", true);
|
boolean modified = Shared.model.updateDevice(controller.device, deviceclone);
|
System.out.println(deviceclone.getIdentifier() + " - OFFLINE.DataIntegration: DIF: " + modified);
|
}
|
|
|
private void online(Etd deviceclone) throws Exception
|
{
|
if ((deviceclone.alarms.alarm_offline > 0) || (firstTime == true))
|
{
|
firstTime = false;
|
String message = art.servers.Shared.getMessage("Etd online");
|
art.servers.Shared.println(name, message);
|
}
|
|
deviceclone.setAlarm("alarm_offline", false);
|
deviceclone.setAlarm("alarm_invalid", false);
|
boolean modified = Shared.model.updateDevice(controller.device, deviceclone);
|
System.out.println(deviceclone.getIdentifier() + " - ONLINE.DataIntegration: " + Device.getDate(controller.device.getDeviceStatus().measurementTimestamp) + " - " + controller.device.getDeviceStatus().llane.size() + " - " + controller.device.getDeviceStatus().lsection.size() + " - " + controller.device.getDeviceStatus().period + " - " + controller.device.getDeviceStatus().total + " - DIF: " + modified);
|
}
|
|
}
|
/*
|
|
|
|
|
private void integratePeriod ()
|
{
|
Etd deviceclone = Serialization.clone(controller.device);
|
|
try
|
{
|
sleep(1000);
|
List<EtdStatusVehicle> lvehicle = controller.getVehiclesPeriod(lastPeriodQuery, System.currentTimeMillis());
|
|
if (lvehicle.size() > 0)
|
{
|
EtdStatusVehicle vehicle0 = lvehicle.get(0);
|
int period = controller.device.getDeviceInformation().period;
|
long tsperiod = TimeUtils.thisperiod(period, vehicle0.timestamp);
|
long tsPeriodEnd = tsperiod + (period*1000L);
|
|
initialiseStatus(deviceclone, tsperiod);
|
|
boolean end = false;
|
long maxTimestamp = vehicle0.timestamp;
|
for (int i=0; (end==false) && (i<lvehicle.size()); i++)
|
{
|
try
|
{
|
EtdStatusVehicle vehicle = lvehicle.get(i);
|
|
if (vehicle.timestamp < tsPeriodEnd)
|
{
|
addVehicleLane(vehicle, deviceclone);
|
addVehicleLaneTotal(vehicle, deviceclone);
|
addVehicleLaneSection(vehicle, deviceclone);
|
}
|
else
|
{
|
maxTimestamp = vehicle.timestamp;
|
end = true;
|
}
|
}
|
catch (Exception e)
|
{
|
if (controller.device.getIdentifier().equalsIgnoreCase("etdtc-rzeszów-2") == true)
|
{
|
e.printStackTrace();
|
String message = "EX1.";
|
Shared.println("Data Integration", message, e);
|
}
|
}
|
}
|
|
if (maxTimestamp == vehicle0.timestamp)
|
{
|
// Wait until period will be really closed
|
return;
|
}
|
|
lastPeriodQuery = maxTimestamp;
|
|
for (EtdStatusLane laneStatus : deviceclone.getDeviceStatus().llane)
|
{
|
int classified = laneStatus.counting - laneStatus.unclassified;
|
|
if (classified > 0)
|
{
|
laneStatus.length = (laneStatus.length / classified);
|
int length = (int)(laneStatus.length*10);
|
laneStatus.length = (double)((double)length / 10d);
|
laneStatus.speed = (int)(laneStatus.speed / classified);
|
}
|
|
if (controller.device.getDeviceInformation().period > 0)
|
{
|
laneStatus.occupancy = (float)((laneStatus.occupancy * 100f) / (float)(controller.device.getDeviceInformation().period*1000));
|
int occupancy = (int)(laneStatus.occupancy*10);
|
laneStatus.occupancy = (float)((float)occupancy / 10f);
|
if (laneStatus.occupancy > 100f) laneStatus.occupancy = 100f;
|
}
|
}
|
|
for (EtdStatusLane sectionStatus : deviceclone.getDeviceStatus().lsection)
|
{
|
int classified = sectionStatus.counting - sectionStatus.unclassified;
|
|
if (classified > 0)
|
{
|
sectionStatus.length = (sectionStatus.length / classified);
|
int length = (int)(sectionStatus.length*10);
|
sectionStatus.length = (double)((double)length / 10d);
|
sectionStatus.speed = (int)(sectionStatus.speed / classified);
|
}
|
|
if (controller.device.getDeviceInformation().period > 0)
|
{
|
sectionStatus.occupancy = (float)((sectionStatus.occupancy * 100f) / (float)(controller.device.getDeviceInformation().period*1000));
|
int occupancy = (int)(sectionStatus.occupancy*10);
|
sectionStatus.occupancy = (float)((float)occupancy / 10f);
|
if (sectionStatus.occupancy > 100f) sectionStatus.occupancy = 100f;
|
}
|
}
|
|
int classified = deviceclone.getDeviceStatus().total.counting - deviceclone.getDeviceStatus().total.unclassified;
|
|
if (classified > 0)
|
{
|
deviceclone.getDeviceStatus().total.length = deviceclone.getDeviceStatus().total.length / classified;
|
int length = (int)(deviceclone.getDeviceStatus().total.length*10);
|
deviceclone.getDeviceStatus().total.length = (double)((double)length / 10d);
|
deviceclone.getDeviceStatus().total.speed = (int)(deviceclone.getDeviceStatus().total.speed / classified);
|
}
|
|
if (controller.device.getDeviceInformation().period > 0)
|
{
|
deviceclone.getDeviceStatus().total.occupancy = (float)((deviceclone.getDeviceStatus().total.occupancy * 100f) / (float)(controller.device.getDeviceInformation().period*1000));
|
int occupancy = (int)(deviceclone.getDeviceStatus().total.occupancy*10);
|
deviceclone.getDeviceStatus().total.occupancy = (float)((float)occupancy / 10f);
|
if (deviceclone.getDeviceStatus().total.occupancy > 100f) deviceclone.getDeviceStatus().total.occupancy = 100f;
|
}
|
|
deviceclone.setLastTimestampStatusUpdate(deviceclone.getDeviceStatus().measurementTimestamp);
|
online(deviceclone);
|
|
long nextTsPeriod = TimeUtils.thisperiod(period, maxTimestamp);
|
long tsperiodEmpty = tsperiod + (period * 1000L);
|
|
while (tsperiodEmpty < nextTsPeriod)
|
{
|
try
|
{
|
Etd deviceclone2 = Serialization.clone(controller.device);
|
initialiseStatus(deviceclone2, tsperiodEmpty);
|
deviceclone2.setLastTimestampStatusUpdate(deviceclone2.getDeviceStatus().measurementTimestamp);
|
online(deviceclone2);
|
}
|
catch (Exception e)
|
{
|
if (controller.device.getIdentifier().equalsIgnoreCase("etdtc-rzeszów-2") == true)
|
{
|
String message = controller.device.getIdentifier() + " - EX.5.IntegratePeriod: " + period + " - " + Device.getDate(nextTsPeriod) + " - " + Device.getDate(tsperiodEmpty);
|
Shared.println("Data Integration", message, e);
|
}
|
}
|
|
tsperiodEmpty = tsperiodEmpty + (period * 1000L);
|
}
|
}
|
}
|
catch (Exception exception)
|
{
|
try{offline(deviceclone);} catch (Exception e){};
|
exception.printStackTrace();
|
}
|
}
|
|
*/
|