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 lcontroller, boolean hasCRC) { super(controller, lcontroller, hasCRC); this.name = Shared.getMessage("Controller junction ") + " " + controller.information.name + " - " + controller.information.number; super.setName(this.name); } // 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); } } // }