package art.servers.colorsserver.controller;
|
|
import art.library.model.devices.Device;
|
import art.servers.colorsserver.Shared;
|
import art.library.model.devices.DeviceStatus;
|
import art.library.model.devices.colors.controller.M.M_Controller;
|
import art.library.model.devices.colors.controller.M.M_ControllerStatus;
|
import art.library.model.devices.colors.controller.M.M_SubcontrollerConfiguration;
|
import art.servers.ServerException;
|
import art.servers.colorsserver.M.protocol.M_Message;
|
import art.servers.colorsserver.M.protocol.M_ProtocolConstructor;
|
import art.servers.colorsserver.configuration.Configuration;
|
import java.text.SimpleDateFormat;
|
import java.util.Calendar;
|
import java.util.List;
|
|
|
public class ControllerDynamicController extends ControllerController
|
{
|
private SimpleDateFormat sdh = new SimpleDateFormat("HH:mm");
|
private long lastTimestamp = 0;
|
private int status = DeviceStatus.STATUS_ALARM;
|
|
|
public ControllerDynamicController(M_Controller controller, boolean hasCRC)
|
{
|
super(controller, hasCRC);
|
this.name = Shared.getMessage("Controller junction ") + " " + controller.information.name + " - " + controller.information.number;
|
super.setName(this.name);
|
}
|
|
|
public ControllerDynamicController(M_Controller controller, List<M_Controller> lcontroller, boolean hasCRC)
|
{
|
super(controller, lcontroller, hasCRC);
|
this.name = Shared.getMessage("Controller junction ") + " " + controller.information.name + " - " + controller.information.number;
|
super.setName(this.name);
|
}
|
|
|
|
|
// <editor-fold defaultstate="collapsed" desc="Update functions">
|
|
public void update() throws ServerException, Exception
|
{
|
long time = ((Configuration)Shared.configuration).detail.statusTime;
|
boolean queryDetectorsRealtime = (((System.currentTimeMillis()-lastQueryDetectorsRealtime) >= (controller.getDeviceInformation().pollingRealtime*1000L)) && (controller.getDeviceStatus().detectorsRealtime == M_ControllerStatus.YES));
|
boolean queryGroupsRealtime = (((System.currentTimeMillis()-lastQueryGroupsRealtime) >= (controller.getDeviceInformation().pollingRealtime*1000L)) && (controller.getDeviceStatus().groupsRealtime == M_ControllerStatus.YES));
|
boolean queryStatusSlow = ((System.currentTimeMillis()-lastQueryStatus) >= (controller.getDeviceInformation().pollingStatus*time*1000L));
|
boolean queryStatusFast = ((System.currentTimeMillis()-lastQueryStatus) >= (controller.getDeviceInformation().pollingStatus*1000L));
|
boolean queryTrafficData = (((System.currentTimeMillis()-lastQueryTrafficData) >= (controller.getDeviceInformation().pollingTrafficData*1000L))); // && (controller.getDeviceStatus().realTime == true));
|
boolean queryTables = ((System.currentTimeMillis()-lastQueryTables) >= (controller.getDeviceInformation().pollingTables*1000L));
|
|
M_Controller controllerclone = null;
|
if ((queryDetectorsRealtime == true) || (queryGroupsRealtime == true) || (queryStatusSlow == true) || (queryTrafficData == true) || (queryTables == true) || (queryStatusFast == true))
|
{
|
controllerclone = cloneController();
|
}
|
|
try
|
{
|
controllerclone.getDeviceConfiguration().toAluvisa();
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
if ((queryDetectorsRealtime == true) || (queryGroupsRealtime == true) || (queryStatusSlow == true) || (queryTrafficData == true) || (queryTables == true) || (queryStatusFast == true))
|
{
|
if (forceCentralized == 0)
|
{
|
disable(controllerclone);
|
return;
|
}
|
}
|
|
try
|
{
|
if (commandsConfiguration != null)
|
{
|
// Save SPTP tables to controller
|
sendSPTPConfigurationToController(controllerclone.getDeviceInformation().subcontroller, commandsConfiguration);
|
}
|
|
if (commandsDemands != null)
|
{
|
getBusDemandsControllerReal(controllerclone.getDeviceInformation().subcontroller);
|
}
|
|
if (queryTables == true)
|
{
|
controllerclone.configuration = readAllTables();
|
lastQueryTables = System.currentTimeMillis();
|
recreateStatus(controllerclone);
|
}
|
|
if (queryDetectorsRealtime == true)
|
{
|
// b - 1 seg (Detectores presencia)
|
getCurrentPresenceDetectors(controllerclone);
|
|
lastQueryDetectorsRealtime = System.currentTimeMillis();
|
controllerclone.getDeviceRealtime().timestamp = lastQueryDetectorsRealtime;
|
controllerclone.getDeviceRealtime().lastTimestampUpdate = lastQueryDetectorsRealtime;
|
}
|
|
if (queryGroupsRealtime == true)
|
{
|
// k - 1 seg (Estado grupos)
|
getCurrentStatusGroups(controllerclone);
|
|
lastQueryGroupsRealtime = System.currentTimeMillis();
|
controllerclone.getDeviceRealtime().timestamp = lastQueryGroupsRealtime;
|
controllerclone.getDeviceRealtime().lastTimestampUpdate = lastQueryGroupsRealtime;
|
}
|
|
if (queryStatusSlow == true)
|
{
|
// time - 1 seg
|
try
|
{
|
long[] result = getCurrentTime(controllerclone);
|
if (getControllerConnection().address.equalsIgnoreCase("127.0.0.1") == false)
|
{
|
long currenttime = result[0];
|
int weekdayController = (int)result[1];
|
|
Calendar c1 = Calendar.getInstance();
|
Calendar c2 = Calendar.getInstance();
|
c1.setTimeInMillis(currenttime);
|
c2.setTimeInMillis(System.currentTimeMillis());
|
long dif = c2.getTimeInMillis()-c1.getTimeInMillis();
|
if (dif < 0) dif = -dif;
|
|
if (dif > ((Configuration)Shared.configuration).detail.maximumDifferenceTime)
|
{
|
M_Message request = M_ProtocolConstructor.setDateTime(0x00, System.currentTimeMillis()+1000, hasCRC);
|
getControllerConnection().send(request.toByteArray());
|
|
M_Message requestHTR = M_ProtocolConstructor.HTR();
|
getControllerConnection().send(requestHTR.toByteArray());
|
}
|
}
|
}
|
catch (Exception exception)
|
{
|
Shared.printstack(this.name, exception);
|
}
|
|
// estado subregulador - 5 seg
|
getCurrentSubcontrollersState(controllerclone);
|
|
for (M_SubcontrollerConfiguration subcontrollerConfiguration : controllerclone.getDeviceConfiguration().lsubcontroller)
|
{
|
try
|
{
|
controllerclone.getDeviceStatus().getStatusSubcontroller(subcontrollerConfiguration.number).recordablePlan = getCurrentRecordablePlan(subcontrollerConfiguration.number);
|
}
|
catch (Exception e)
|
{
|
controllerclone.getDeviceStatus().getStatusSubcontroller(subcontrollerConfiguration.number).recordablePlan = null;
|
}
|
}
|
|
lastQueryStatus = System.currentTimeMillis();
|
}
|
|
if (queryStatusFast == true)
|
{
|
// a - 1 seg (Plan en curso)
|
getCurrentPlan(controllerclone);
|
|
long current = System.currentTimeMillis();
|
controllerclone.getDeviceRealtime().timestamp = current;
|
controllerclone.getDeviceRealtime().lastTimestampUpdate = current;
|
|
// f - 5 seg (Alarmas)
|
int result = getAlarms(controllerclone);
|
|
if ((result & 0x01) != 0)
|
{
|
// g - 5 seg (Lampara fundida si activa en alarmas)
|
getBlownLampAlarms(controllerclone);
|
}
|
else
|
{
|
clearBlownLampsGroupAlarms(controllerclone);
|
}
|
|
if ((result & 0x02) != 0)
|
{
|
// h - 5 seg (Grupo averiado si activa en alarmas)
|
getDamagedGroupAlarms(controllerclone);
|
}
|
else
|
{
|
clearDamagedGroupAlarms(controllerclone);
|
}
|
|
if ((result & 0x04) != 0)
|
{
|
// i - 5 seg (Incompatibilidades si activa en alarmas)
|
getIncompatibilityAlarms(controllerclone);
|
}
|
else
|
{
|
clearIncompatibilityGroupAlarms(controllerclone);
|
}
|
|
lastQueryStatus = System.currentTimeMillis();
|
}
|
|
if (queryTrafficData == true)
|
{
|
if ((controllerclone.getDeviceConfiguration().lstrategicalDetector.size() > 0) &&
|
(controllerclone.getDeviceInformation().address.equalsIgnoreCase("127.0.0.1") == false))
|
{
|
if (controllerclone.getIdentifier().indexOf("286") > -1)
|
{
|
Shared.println(name, "1.TrafficData");
|
}
|
// d - 1 min (Detectores contaje)
|
getCurrentCountingDetectors(controllerclone);
|
}
|
|
lastQueryTrafficData = System.currentTimeMillis();
|
}
|
|
checkNewUpdateCommands(controllerclone);
|
|
if ((queryDetectorsRealtime == true) || (queryGroupsRealtime == true) || (queryStatusSlow == true) || (queryTrafficData == true) || (queryTables == true) || (queryStatusFast == true))
|
{
|
if (forceCentralized == 0)
|
{
|
disable(controllerclone);
|
}
|
else
|
{
|
online(controllerclone);
|
}
|
}
|
|
checkUpdateStatus(controllerclone);
|
}
|
catch (Exception exception)
|
{
|
Shared.printstack(name, exception);
|
Shared.println(name, Device.getDate(System.currentTimeMillis()) + " - " + this.controller.getIdentifier() + " - EXCEPTION DYNAMIC: " + exception.toString());
|
offline(controllerclone);
|
}
|
}
|
|
// </editor-fold>
|
|
}
|