package art.servers.etdserver.controller;
|
|
|
import art.library.model.devices.DeviceStatus;
|
import art.library.model.devices.etd.Etd;
|
import art.library.interop.serialization.Serialization;
|
import art.library.model.devices.Device;
|
import art.library.model.devices.dps.DPS;
|
import art.library.model.devices.dps.types.DPSVehicle;
|
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.transactions.traces.Trace;
|
import art.library.utils.common.TimeUtils;
|
import art.servers.etdserver.Shared;
|
import art.servers.etdserver.configuration.Configuration;
|
import art.servers.etdserver.configuration.ConfigurationEtd;
|
import art.servers.etdserver.configuration.EtdConfigurationLaneDPS;
|
import static java.lang.Thread.sleep;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
|
public class ControllerEtdDPS extends ControllerEtd
|
{
|
private SimpleDateFormat sdh = new SimpleDateFormat("HH:mm");
|
private long lastTimestamp = 0;
|
private int status = DeviceStatus.STATUS_ALARM;
|
private boolean firstTime = true;
|
|
|
public ControllerEtdDPS(Etd etd)
|
{
|
super(etd);
|
this.device = etd;
|
this.name = Shared.getMessage("Controller etd") + " " + etd.information.name;
|
this.setName(name);
|
}
|
|
|
|
|
public void run()
|
{
|
String message = Shared.getMessage("Running");
|
// <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))
|
{
|
long startTimestamp = System.currentTimeMillis();
|
|
try
|
{
|
if (art.servers.Shared.isServerEnabled() == true)
|
{
|
update();
|
}
|
}
|
catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
|
if (startTimestamp > System.currentTimeMillis())
|
{
|
startTimestamp = System.currentTimeMillis();
|
}
|
|
long stopTimestamp = startTimestamp + (device.getDeviceInformation().polling * 1000);
|
|
while ((System.currentTimeMillis() < stopTimestamp) && (exit == false))
|
{
|
try
|
{
|
sleep(50);
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
|
if (art.servers.Shared.model.existsDevice(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 controller functions
|
*/
|
|
private void update() throws Exception
|
{
|
Etd deviceclone = (Etd)Serialization.clone(device);
|
|
try
|
{
|
readAlarms(deviceclone);
|
|
if (deviceclone.getAlarm("alarm_offline") > 0)
|
{
|
offline(deviceclone);
|
return;
|
}
|
|
readCurrentTrafficData(deviceclone);
|
online(deviceclone);
|
}
|
catch (Exception exception)
|
{
|
exception.printStackTrace();
|
offline(deviceclone);
|
}
|
}
|
|
|
private void readAlarms(Etd deviceclone) throws Exception
|
{
|
try
|
{
|
Configuration configuration = (Configuration)Shared.configuration;
|
ConfigurationEtd configurationEtd = configuration.getConfigurationEtd(deviceclone.getIdentifier());
|
ControllerDPS controllerDPS = Shared.getControllerDPS(configurationEtd.dpsIdentifier);
|
DPS dps = controllerDPS.getDPS();
|
|
if (dps.getAlarm("alarm_offline") > 0)
|
{
|
if (allDpsLanesOffline(deviceclone) == true)
|
{
|
deviceclone.getDeviceAlarms().clear();
|
deviceclone.setAlarm("alarm_offline", true);
|
return;
|
}
|
}
|
|
deviceclone.setAlarm("alarm_offline", false);
|
deviceclone.setAlarm("alarm_batteries_disconnected", dps.getAlarm("alarm_battery"));
|
deviceclone.setAlarm("alarm_power_stopped", dps.getAlarm("alarm_magnetometer"));
|
}
|
catch (Exception e)
|
{
|
e.printStackTrace();
|
throw e;
|
}
|
}
|
|
|
private boolean allDpsLanesOffline(Etd deviceclone) throws Exception
|
{
|
try
|
{
|
Configuration configuration = (Configuration)Shared.configuration;
|
ConfigurationEtd configurationEtd = configuration.getConfigurationEtd(deviceclone.getIdentifier());
|
for (EtdConfigurationLaneDPS laneDPS : configurationEtd.llanesDPS)
|
{
|
ControllerDPS controllerDPS = Shared.getControllerDPS(laneDPS.dps);
|
if (controllerDPS == null)
|
{
|
System.out.println(Device.getDate(System.currentTimeMillis()) + " DPS LANES NULL: " + deviceclone.getIdentifier() + " - DPS: " + laneDPS.dps + " - Lane: " + laneDPS.lane);
|
}
|
DPS dps = controllerDPS.getDPS();
|
if (dps.getAlarm("alarm_offline") <= 0)
|
{
|
return(false);
|
}
|
}
|
|
}
|
catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
|
return(true);
|
}
|
|
|
private void readCurrentTrafficData(Etd deviceclone) throws Exception
|
{
|
try
|
{
|
long tsPeriod = TimeUtils.thisperiod(deviceclone.getDeviceInformation().period);
|
long tsPeriodFrom = tsPeriod - (deviceclone.getDeviceInformation().period*1000L);
|
Configuration configuration = (Configuration)Shared.configuration;
|
ConfigurationEtd configurationEtd = configuration.getConfigurationEtd(deviceclone.getIdentifier());
|
List<DPSVehicle> lvehicles = new ArrayList<DPSVehicle>();
|
for (EtdConfigurationLaneDPS laneDPS : configurationEtd.llanesDPS)
|
{
|
ControllerDPS controllerDPS = Shared.getControllerDPS(laneDPS.dps);
|
try
|
{
|
if (controllerDPS == null)
|
{
|
System.out.println(Device.getDate(System.currentTimeMillis()) + " DPS NULL: " + deviceclone.getIdentifier() + " - DPS: " + laneDPS.dps + " - Lane: " + laneDPS.lane);
|
}
|
lvehicles.addAll(controllerDPS.getVehicles(tsPeriodFrom, tsPeriod, laneDPS.dpsLane));
|
}
|
catch (Exception e)
|
{
|
|
}
|
}
|
|
// lvehicles contains all vehicles of etd lanes
|
initialiseStatus(deviceclone, tsPeriod);
|
|
for (DPSVehicle vehicle : lvehicles)
|
{
|
try
|
{
|
addVehicleLane(vehicle, deviceclone, configurationEtd);
|
addVehicleLaneTotal(vehicle, deviceclone, configurationEtd);
|
addVehicleLaneSection(vehicle, deviceclone, configurationEtd);
|
}
|
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 (deviceclone.getDeviceInformation().period > 0)
|
{
|
if (deviceclone.getIdentifier().indexOf("21022") > -1)
|
{
|
System.out.println(deviceclone.getIdentifier() + " 1.Lane: " + laneStatus.number + " - Occ: " + laneStatus.occupancy + " - Period: " + deviceclone.getDeviceInformation().period);
|
}
|
laneStatus.occupancy = (float)((laneStatus.occupancy * 100f) / (float)(deviceclone.getDeviceInformation().period*1000));
|
if (deviceclone.getIdentifier().indexOf("21022") > -1)
|
{
|
System.out.println(deviceclone.getIdentifier() + " 2.Lane: " + laneStatus.number + " - Occ: " + laneStatus.occupancy + " - Period: " + deviceclone.getDeviceInformation().period);
|
}
|
int occupancy = (int)(laneStatus.occupancy*10);
|
laneStatus.occupancy = (float)((float)occupancy / 10f);
|
if (deviceclone.getIdentifier().indexOf("21022") > -1)
|
{
|
System.out.println(deviceclone.getIdentifier() + " 3.Lane: " + laneStatus.number + " - Occ: " + laneStatus.occupancy + " - Period: " + deviceclone.getDeviceInformation().period);
|
}
|
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 (deviceclone.getDeviceInformation().period > 0)
|
{
|
if (deviceclone.getIdentifier().indexOf("21022") > -1)
|
{
|
System.out.println(deviceclone.getIdentifier() + " 1.Section: " + sectionStatus.number + " - Occ: " + sectionStatus.occupancy + " - Period: " + deviceclone.getDeviceInformation().period);
|
}
|
sectionStatus.occupancy = (float)((sectionStatus.occupancy * 100f) / (float)(deviceclone.getDeviceInformation().period*1000));
|
if (deviceclone.getIdentifier().indexOf("21022") > -1)
|
{
|
System.out.println(deviceclone.getIdentifier() + " 2.Section: " + sectionStatus.number + " - Occ: " + sectionStatus.occupancy + " - Period: " + deviceclone.getDeviceInformation().period);
|
}
|
EtdInformationSection sectionInformation = deviceclone.getDeviceInformation().getSection(sectionStatus.number);
|
sectionStatus.occupancy = (float)((sectionStatus.occupancy) / (float)(sectionInformation.llane.size()));
|
int occupancy = (int)(sectionStatus.occupancy*10);
|
sectionStatus.occupancy = (float)((float)occupancy / 10f);
|
if (deviceclone.getIdentifier().indexOf("21022") > -1)
|
{
|
System.out.println(deviceclone.getIdentifier() + " 3.Section: " + sectionStatus.number + " - Occ: " + sectionStatus.occupancy + " - Period: " + deviceclone.getDeviceInformation().period);
|
}
|
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 (deviceclone.getDeviceInformation().period > 0)
|
{
|
deviceclone.getDeviceStatus().total.occupancy = (float)((deviceclone.getDeviceStatus().total.occupancy * 100f) / (float)(deviceclone.getDeviceInformation().period*1000));
|
deviceclone.getDeviceStatus().total.occupancy = (float)((deviceclone.getDeviceStatus().total.occupancy) / (float)(deviceclone.getDeviceInformation().lLane.size()));
|
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);
|
}
|
catch (Exception e)
|
{
|
throw e;
|
}
|
}
|
|
|
|
|
private void offline(Etd etdclone)throws Exception
|
{
|
if ((device.alarms.alarm_offline <= 0) || (firstTime == true))
|
{
|
firstTime = false;
|
String message = art.servers.Shared.getMessage("Etd offline");
|
art.servers.Shared.println(name, message);
|
}
|
|
if (etdclone.getAlarm("alarm_offline") <= 0)
|
{
|
etdclone.getDeviceAlarms().clear();
|
}
|
etdclone.setAlarm("alarm_offline", true);
|
Shared.model.updateDevice(device, etdclone);
|
}
|
|
|
private void online(Etd etdclone) throws Exception
|
{
|
if ((device.alarms.alarm_offline > 0) || (firstTime == true))
|
{
|
firstTime = false;
|
String message = art.servers.Shared.getMessage("Etd online");
|
art.servers.Shared.println(name, message);
|
}
|
|
etdclone.setAlarm("alarm_offline", false);
|
etdclone.setAlarm("alarm_invalid", false);
|
Shared.model.updateDevice(device, etdclone);
|
}
|
|
|
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;
|
laneStatus.status = DeviceStatus.STATUS_ONLINE;
|
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;
|
sectionStatus.status = DeviceStatus.STATUS_ONLINE;
|
deviceclone.getDeviceStatus().lsection.add(sectionStatus);
|
}
|
|
deviceclone.getDeviceStatus().total = new EtdStatusLane();
|
}
|
|
if (deviceclone.getDeviceStatus().total == null)
|
{
|
deviceclone.getDeviceStatus().total = new EtdStatusLane();
|
}
|
|
deviceclone.getDeviceStatus().total.status = DeviceStatus.STATUS_ONLINE;
|
|
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.status = DeviceStatus.STATUS_ONLINE;
|
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.status = DeviceStatus.STATUS_ONLINE;
|
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 void addVehicleLane(DPSVehicle vehicle, Etd deviceclone, ConfigurationEtd configurationEtd)
|
{
|
try
|
{
|
List<EtdStatusLane> llaneStatus = getEtdStatusLane(deviceclone, vehicle, configurationEtd);
|
if ((llaneStatus == null) || (llaneStatus.size() == 0)) return;
|
|
for (EtdStatusLane laneStatus : llaneStatus)
|
{
|
laneStatus.counting = laneStatus.counting + 1;
|
if (vehicle.speed > -1) laneStatus.speed = laneStatus.speed + vehicle.speed;
|
if (vehicle.length > -1) laneStatus.length = laneStatus.length + ((double)vehicle.length);
|
laneStatus.occupancy = laneStatus.occupancy + vehicle.occupancy;
|
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)
|
{
|
e.printStackTrace();
|
}
|
}
|
|
|
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(DPSVehicle vehicle, Etd deviceclone, ConfigurationEtd configurationEtd)
|
{
|
try
|
{
|
List<EtdStatusLane> llaneStatus = getEtdStatusLane(deviceclone, vehicle, configurationEtd);
|
int number = 1;
|
if ((llaneStatus == null) || (llaneStatus.size() == 0)) number = 1;
|
else
|
number = llaneStatus.size();
|
|
deviceclone.getDeviceStatus().total.counting = deviceclone.getDeviceStatus().total.counting + number;
|
if (vehicle.speed > -1)
|
{
|
for (int i=0; i<number; i++)
|
deviceclone.getDeviceStatus().total.speed = deviceclone.getDeviceStatus().total.speed + vehicle.speed;
|
}
|
if (vehicle.length > -1)
|
{
|
for (int i=0; i<number; i++)
|
deviceclone.getDeviceStatus().total.length = deviceclone.getDeviceStatus().total.length + ((double)vehicle.length);
|
}
|
for (int i=0; i<number; i++)
|
deviceclone.getDeviceStatus().total.occupancy = deviceclone.getDeviceStatus().total.occupancy + vehicle.occupancy;
|
|
if (vehicle.length <= 0) deviceclone.getDeviceStatus().total.unclassified = deviceclone.getDeviceStatus().total.unclassified + number;
|
deviceclone.getDeviceStatus().total.totalMeasurements = number;
|
deviceclone.getDeviceStatus().total.correctMeasurements = number;
|
|
// 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)
|
{
|
e.printStackTrace();
|
}
|
}
|
|
|
private void addVehicleLaneSection(DPSVehicle vehicle, Etd deviceclone, ConfigurationEtd configurationEtd)
|
{
|
try
|
{
|
List<EtdStatusLane> lsectionStatus = getEtdStatusSection(vehicle, deviceclone, configurationEtd);
|
|
if ((lsectionStatus == null) || (lsectionStatus.size() == 0)) return;
|
|
for (EtdStatusLane sectionStatus : lsectionStatus)
|
{
|
sectionStatus.counting = sectionStatus.counting + 1;
|
if (vehicle.speed > -1) sectionStatus.speed = sectionStatus.speed + vehicle.speed;
|
if (vehicle.length > -1) sectionStatus.length = sectionStatus.length + ((double)vehicle.length);
|
sectionStatus.occupancy = sectionStatus.occupancy + vehicle.occupancy;
|
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)
|
{
|
e.printStackTrace();
|
}
|
}
|
|
|
private List<EtdStatusLane> getEtdStatusLane(Etd deviceclone, DPSVehicle vehicle, ConfigurationEtd configurationEtd)
|
{
|
List<EtdStatusLane> llanes = new ArrayList<EtdStatusLane>();
|
|
try
|
{
|
List<EtdConfigurationLaneDPS> list = configurationEtd.getLaneEtd(vehicle.device, vehicle.lane);
|
if ((list == null) || (list.size() == 0)) System.out.println(deviceclone.getIdentifier() + " - LANE NULL: " + vehicle.device + " - " + vehicle.lane);
|
for (EtdConfigurationLaneDPS lane : list)
|
{
|
for (EtdStatusLane laneStatus : deviceclone.getDeviceStatus().llane)
|
{
|
if (laneStatus.number == lane.lane) llanes.add(laneStatus);
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
return(llanes);
|
}
|
|
|
private List<EtdStatusLane> getEtdStatusSection(DPSVehicle vehicle, Etd deviceclone, ConfigurationEtd configurationEtd)
|
{
|
List<EtdStatusLane> lsections = new ArrayList<EtdStatusLane>();
|
|
try
|
{
|
List<EtdInformationSection> lsection = getEtdInformationSection(deviceclone, vehicle, configurationEtd);
|
for (EtdInformationSection section : lsection)
|
{
|
for (EtdStatusLane sectionStatus : deviceclone.getDeviceStatus().lsection)
|
{
|
if (section.number == sectionStatus.number) lsections.add(sectionStatus);
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
if ((lsections == null) || (lsections.size() == 0)) System.out.println(deviceclone.getIdentifier() + " - LANE_SECTION_STATUS NULL: " + vehicle.device + " - " + vehicle.lane);
|
return(lsections);
|
}
|
|
|
private List<EtdInformationSection> getEtdInformationSection(Etd deviceclone, DPSVehicle vehicle, ConfigurationEtd configurationEtd)
|
{
|
List<EtdInformationSection> lsections = new ArrayList<EtdInformationSection>();
|
|
try
|
{
|
List<EtdConfigurationLaneDPS> list = configurationEtd.getLaneEtd(vehicle.device, vehicle.lane);
|
if ((list == null) || (list.size() == 0)) System.out.println(deviceclone.getIdentifier() + " - LANE_SECTION NULL: " + vehicle.device + " - " + vehicle.lane);
|
for (EtdConfigurationLaneDPS lane : list)
|
{
|
for (EtdInformationSection sectionInformation : deviceclone.getDeviceInformation().lSection)
|
{
|
for (Integer number : sectionInformation.llane)
|
{
|
if (number == lane.lane) lsections.add(sectionInformation);
|
}
|
}
|
}
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
return(lsections);
|
}
|
|
}
|