package art.servers.colorsserver.controller;
|
|
import art.servers.colorsserver.Shared;
|
import art.library.interop.serialization.Serialization;
|
import art.library.model.devices.DeviceCommands;
|
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_ControllerCommands;
|
import art.library.model.devices.colors.controller.M.M_ControllerRealtime;
|
import art.library.model.devices.colors.controller.M.M_ControllerStatus;
|
import art.library.model.devices.colors.controller.M.M_ControllerStatusSubcontroller;
|
import art.library.model.devices.colors.controller.M.M_SubcontrollerConfiguration;
|
import art.library.model.devices.colors.controller.M.configuration.M_Plan;
|
import art.library.model.devices.colors.controller.M.realtime.M_ControllerRealtimeSubcontroller;
|
import art.servers.ServerException;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
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;
|
private long lastQueryDetectorsRealtime = 0;
|
private long lastQueryGroupsRealtime = 0;
|
private long lastQueryStatus = 0;
|
private long lastQueryTrafficData = 0;
|
private long lastQueryTables = 0;
|
private boolean firstTime = true;
|
|
|
public ControllerDynamicController(M_Controller controller, boolean hasCRC)
|
{
|
super(controller, hasCRC);
|
this.name = Shared.getMessage("Controller junction ") + " " + controller.information.name;
|
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;
|
super.setName(this.name);
|
}
|
|
|
public void run()
|
{
|
String message = Shared.getMessage("Running");
|
Shared.controllerStatus.setStatus(DeviceStatus.STATUS_ONLINE, name, message);
|
Shared.logger.saveAnnotation(name, Shared.getMessage("Running"));
|
|
while ((isInterrupted() == false) && (exit == false))
|
{
|
long startTimestamp = System.currentTimeMillis();
|
|
try
|
{
|
if (art.servers.Shared.isServerEnabled() == true)
|
{
|
update();
|
}
|
}
|
catch (Exception e)
|
{
|
e.printStackTrace();
|
}
|
|
try
|
{
|
long stopTimestamp = startTimestamp + 100;
|
|
while ((System.currentTimeMillis() < stopTimestamp) && (exit == false))
|
{
|
try
|
{
|
sleep(50);
|
}
|
catch (Exception e)
|
{
|
}
|
}
|
|
try{sleep(50);}catch (Exception e){};
|
}
|
catch (Exception e)
|
{
|
try
|
{
|
sleep(1000);
|
}
|
catch (Exception ex)
|
{
|
|
}
|
}
|
}
|
|
Shared.controllerStatus.removeStatus(name);
|
message = art.servers.Shared.getMessage("Interrupted");
|
}
|
|
|
|
|
// <editor-fold defaultstate="collapsed" desc="Update functions">
|
|
private void update() throws ServerException, Exception
|
{
|
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 queryStatus = ((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) || (queryStatus == true) || (queryTrafficData == true) || (queryTables == true))
|
{
|
controllerclone = (M_Controller)Serialization.clone(controller);
|
|
controllerclone.realtime = controller.realtime;
|
if (controllerclone.realtime == null)
|
{
|
controllerclone.realtime = new M_ControllerRealtime();
|
}
|
|
controllerclone.getDeviceRealtime().identifier = controllerclone.getIdentifier();
|
if (controllerclone.getDeviceRealtime().lastTimestampUpdate <= 0)
|
{
|
controllerclone.getDeviceRealtime().lastTimestampUpdate = System.currentTimeMillis();
|
}
|
|
if (forceRealtime == 0)
|
{
|
controllerclone.getDeviceStatus().detectorsRealtime = M_ControllerStatus.NO;
|
controllerclone.getDeviceStatus().groupsRealtime = M_ControllerStatus.NO;
|
controllerclone.getDeviceRealtime().lpresence.clear();
|
controllerclone.getDeviceRealtime().lgroup.clear();
|
forceRealtime = -1;
|
}
|
else if (forceRealtime == 1)
|
{
|
controllerclone.getDeviceStatus().detectorsRealtime = M_ControllerStatus.YES;
|
controllerclone.getDeviceStatus().groupsRealtime = M_ControllerStatus.YES;
|
forceRealtime = -1;
|
}
|
|
if (controllerclone.getDeviceStatus().detectorsRealtime != M_ControllerStatus.YES)
|
{
|
controllerclone.getDeviceRealtime().lpresence.clear();
|
}
|
|
if (controllerclone.getDeviceStatus().groupsRealtime != M_ControllerStatus.YES)
|
{
|
controllerclone.getDeviceRealtime().lgroup.clear();
|
}
|
|
if ((controllerclone.getDeviceStatus().detectorsRealtime != M_ControllerStatus.NO) &&
|
(controllerclone.getDeviceStatus().detectorsRealtime != M_ControllerStatus.YES))
|
{
|
controllerclone.getDeviceStatus().detectorsRealtime = M_ControllerStatus.NO;
|
}
|
|
if ((controllerclone.getDeviceStatus().groupsRealtime != M_ControllerStatus.NO) &&
|
(controllerclone.getDeviceStatus().groupsRealtime != M_ControllerStatus.YES))
|
{
|
controllerclone.getDeviceStatus().groupsRealtime = M_ControllerStatus.NO;
|
}
|
|
for (M_ControllerStatusSubcontroller subcontrollerStatus : controllerclone.getDeviceStatus().lsubcontroller)
|
{
|
if ((subcontrollerStatus.userControlManual != M_ControllerStatus.NO) &&
|
(subcontrollerStatus.userControlManual != M_ControllerStatus.YES))
|
{
|
subcontrollerStatus.userControlManual = M_ControllerStatus.NO;
|
}
|
|
if ((subcontrollerStatus.userControlPlan != M_ControllerStatus.NO) &&
|
(subcontrollerStatus.userControlPlan != M_ControllerStatus.YES))
|
{
|
subcontrollerStatus.userControlPlan = M_ControllerStatus.NO;
|
}
|
}
|
|
for (int i=0; i<forcedUserControlPlan.length; i++)
|
{
|
if (forcedUserControlPlan[i] == M_ControllerCommands.CONDITION_NO)
|
{
|
controllerclone.getDeviceStatus().getStatusSubcontroller(i+1).userControlPlan = M_ControllerStatus.NO;
|
forcedUserControlPlan[i] = -1;
|
}
|
else if (forcedUserControlPlan[i] == M_ControllerCommands.CONDITION_YES)
|
{
|
controllerclone.getDeviceStatus().getStatusSubcontroller(i+1).userControlPlan = M_ControllerStatus.YES;
|
forcedUserControlPlan[i] = -1;
|
}
|
}
|
}
|
|
try
|
{
|
controllerclone.getDeviceConfiguration().toAluvisa();
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
try
|
{
|
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 (queryStatus == true)
|
{
|
// time - 1 seg
|
getCurrentTime(controllerclone);
|
|
// estado subregulador - 5 seg
|
getCurrentSubcontrollersState(controllerclone);
|
|
// 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);
|
}
|
|
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 (queryTrafficData == true)
|
{
|
if (controllerclone.getDeviceConfiguration().lstrategicalDetector.size() > 0)
|
{
|
// d - 1 min (Detectores contaje)
|
getCurrentCountingDetectors(controllerclone);
|
}
|
|
lastQueryTrafficData = System.currentTimeMillis();
|
}
|
|
checkNewUpdateCommands(controllerclone);
|
|
if ((queryDetectorsRealtime == true) || (queryGroupsRealtime == true) || (queryStatus == true) || (queryTrafficData == true) || (queryTables == true))
|
{
|
online(controllerclone);
|
}
|
|
checkUpdateStatus(controllerclone);
|
}
|
catch (Exception exception)
|
{
|
System.out.println(this.controller.getIdentifier() + " - EXCEPTION: " + exception.toString());
|
exception.printStackTrace();
|
offline(controllerclone);
|
}
|
}
|
|
|
private void offline(M_Controller controllerclone)throws Exception
|
{
|
if (this.lcontroller.size() == 0)
|
{
|
if ((controllerclone.alarms.alarm_offline <= 0) || (firstTime == true))
|
{
|
firstTime = false;
|
String message = art.servers.Shared.getMessage("Controller offline");
|
art.servers.Shared.controllerStatus.setStatus(DeviceStatus.STATUS_ALARM, name, message);
|
art.servers.Shared.logger.saveAnnotation(name, message);
|
}
|
|
controllerclone.setAlarm("alarm_offline", System.currentTimeMillis());
|
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate != null)
|
{
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate.size() <= 0)
|
{
|
controllerclone.getDeviceStatus().lsubcontrollerUpdate = null;
|
}
|
}
|
|
try
|
{
|
controllerclone.getDeviceRealtime().lcounting.clear();
|
controllerclone.getDeviceRealtime().lgroup.clear();
|
controllerclone.getDeviceRealtime().lpresence.clear();
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
Shared.model.updateDevice(controller, controllerclone);
|
}
|
else if (this.lcontroller.size() > 0)
|
{
|
if ((controllerclone.alarms.alarm_offline <= 0) || (firstTime == true))
|
{
|
firstTime = false;
|
String message = art.servers.Shared.getMessage("Controller offline");
|
art.servers.Shared.controllerStatus.setStatus(DeviceStatus.STATUS_ALARM, name, message);
|
art.servers.Shared.logger.saveAnnotation(name, message);
|
}
|
|
controllerclone.setAlarm("alarm_offline", System.currentTimeMillis());
|
|
controllerclone.getDeviceInformation().serverAddress = art.servers.Shared.configuration.listener.address;
|
controllerclone.getDeviceInformation().serverPort = art.servers.Shared.configuration.listener.port;
|
controllerclone.getDeviceInformation().serverAddressExternal = art.servers.Shared.configuration.listener.addressExternal;
|
controllerclone.getDeviceInformation().serverPortExternal = art.servers.Shared.configuration.listener.portExternal;
|
controllerclone.getDeviceInformation().serverServiceName = art.servers.Shared.controllerStatus.getApplication().getDeviceInformation().serverServiceName;
|
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate != null)
|
{
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate.size() <= 0)
|
{
|
controllerclone.getDeviceStatus().lsubcontrollerUpdate = null;
|
}
|
}
|
|
try
|
{
|
controllerclone.getDeviceRealtime().lcounting.clear();
|
controllerclone.getDeviceRealtime().lgroup.clear();
|
controllerclone.getDeviceRealtime().lpresence.clear();
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
this.controller.updateDevice(controllerclone);
|
|
// Have more than one subcontroller
|
// Must be clone for every subcontroller
|
for (M_Controller m_controllerSubcontroller : this.lcontroller)
|
{
|
int subcontroller = m_controllerSubcontroller.getDeviceInformation().subcontroller;
|
M_Controller m_subcontroller = Serialization.clone(controllerclone);
|
m_subcontroller.realtime = Serialization.clone(controllerclone.getDeviceRealtime());
|
m_subcontroller.getDeviceRealtime().identifier = m_controllerSubcontroller.getIdentifier();
|
|
// Update M_ControllerInformation with subcontroller information
|
m_subcontroller.information = m_controllerSubcontroller.getDeviceInformation();
|
|
// Remove from M_ControllerConfiguration.lsubcontroller the other subcontrollers
|
List<M_SubcontrollerConfiguration> lremoveConfiguration = new ArrayList<M_SubcontrollerConfiguration>();
|
for (M_SubcontrollerConfiguration subcontrollerConfiguration : m_subcontroller.getDeviceConfiguration().lsubcontroller)
|
{
|
if (subcontrollerConfiguration.number != subcontroller)
|
{
|
lremoveConfiguration.add(subcontrollerConfiguration);
|
}
|
}
|
|
m_subcontroller.getDeviceConfiguration().lsubcontroller.removeAll(lremoveConfiguration);
|
|
// Remove from M_ControllerStatus.lsubcontroller the other subcontrollers
|
List<M_ControllerStatusSubcontroller> lremoveStatus = new ArrayList<M_ControllerStatusSubcontroller>();
|
for (M_ControllerStatusSubcontroller subcontrollerStatus : m_subcontroller.getDeviceStatus().lsubcontroller)
|
{
|
if (subcontrollerStatus.number != subcontroller)
|
{
|
lremoveStatus.add(subcontrollerStatus);
|
}
|
}
|
|
m_subcontroller.getDeviceStatus().lsubcontroller.removeAll(lremoveStatus);
|
|
if (m_subcontroller.getDeviceStatus().lsubcontrollerUpdate != null)
|
{
|
// Remove from M_ControllerStatus.lsubcontrollerUpdate the other subcontrollers
|
List<M_ControllerStatusSubcontroller> lremoveStatusUpdate = new ArrayList<M_ControllerStatusSubcontroller>();
|
for (M_ControllerStatusSubcontroller subcontrollerStatusUpdate : m_subcontroller.getDeviceStatus().lsubcontrollerUpdate)
|
{
|
if (subcontrollerStatusUpdate.number != subcontroller)
|
{
|
lremoveStatusUpdate.add(subcontrollerStatusUpdate);
|
}
|
}
|
|
m_subcontroller.getDeviceStatus().lsubcontrollerUpdate.removeAll(lremoveStatusUpdate);
|
}
|
|
// Remove from M_ControllerRealtime.lsubcontroller the other subcontrollers
|
List<M_ControllerRealtimeSubcontroller> lremoveRealtime = new ArrayList<M_ControllerRealtimeSubcontroller>();
|
for (M_ControllerRealtimeSubcontroller subcontrollerRealtime : m_subcontroller.getDeviceRealtime().lsubcontroller)
|
{
|
if (subcontrollerRealtime.number != subcontroller)
|
{
|
lremoveRealtime.add(subcontrollerRealtime);
|
}
|
}
|
|
m_subcontroller.getDeviceRealtime().lsubcontroller.removeAll(lremoveRealtime);
|
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate != null)
|
{
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate.size() <= 0)
|
{
|
controllerclone.getDeviceStatus().lsubcontrollerUpdate = null;
|
}
|
}
|
|
Shared.model.updateDevice(m_controllerSubcontroller, m_subcontroller);
|
}
|
|
try
|
{
|
this.controller.getDeviceConfiguration().toAluvisa();
|
}
|
catch (Exception e)
|
{
|
|
}
|
}
|
|
lastQueryDetectorsRealtime = 0;
|
lastQueryGroupsRealtime = 0;
|
lastQueryStatus = 0;
|
lastQueryTrafficData = 0;
|
lastQueryTables = 0;
|
}
|
|
|
private void online(M_Controller controllerclone) throws ServerException, Exception
|
{
|
if (this.lcontroller.size() == 0)
|
{
|
// Only have one subcontroller, so it works how until now
|
if ((controllerclone.alarms.alarm_offline > 0) || (firstTime == true))
|
{
|
firstTime = false;
|
String message = art.servers.Shared.getMessage("Controller online");
|
art.servers.Shared.controllerStatus.setStatus(DeviceStatus.STATUS_ONLINE, name, message);
|
art.servers.Shared.logger.saveAnnotation(name, message);
|
}
|
|
controllerclone.setAlarm("alarm_offline", false);
|
controllerclone.setAlarm("alarm_invalid", false);
|
|
// Update alarm_off and alarm_flashing
|
boolean alarm_off = false;
|
boolean alarm_flashing = false;
|
for (M_ControllerStatusSubcontroller statusSubcontroller : controllerclone.getDeviceStatus().lsubcontroller)
|
{
|
if (statusSubcontroller.colorsMode == M_ControllerStatusSubcontroller.COLORS_OFF) alarm_off = true;
|
if (statusSubcontroller.colorsMode == M_ControllerStatusSubcontroller.COLORS_FLASHING) alarm_flashing = true;
|
}
|
|
controllerclone.setAlarm("alarm_off", alarm_off);
|
controllerclone.setAlarm("alarm_flashing", alarm_flashing);
|
|
if (controllerclone.getAlarm("alarm_manual_control") > 0)
|
{
|
for (M_ControllerStatusSubcontroller statusSubcontroller : controllerclone.getDeviceStatus().lsubcontroller)
|
{
|
statusSubcontroller.localControl = DeviceCommands.CONDITION_YES;
|
}
|
}
|
else if (controllerclone.getAlarm("alarm_manual_control") <= 0)
|
{
|
for (M_ControllerStatusSubcontroller statusSubcontroller : controllerclone.getDeviceStatus().lsubcontroller)
|
{
|
if (statusSubcontroller.userControlManual == DeviceCommands.CONDITION_NO)
|
statusSubcontroller.localControl = DeviceCommands.CONDITION_NO;
|
}
|
}
|
|
for (M_SubcontrollerConfiguration subcontrollerConfiguration : controllerclone.getDeviceConfiguration().lsubcontroller)
|
{
|
for (M_Plan m_plan : subcontrollerConfiguration.lplan)
|
{
|
m_plan.cycleTime = calculateCycleTime(m_plan, controllerclone, subcontrollerConfiguration.number);
|
}
|
}
|
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate != null)
|
{
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate.size() <= 0)
|
{
|
controllerclone.getDeviceStatus().lsubcontrollerUpdate = null;
|
}
|
}
|
|
Shared.model.updateDevice(controller, controllerclone);
|
|
try
|
{
|
this.controller.getDeviceConfiguration().toAluvisa();
|
}
|
catch (Exception e)
|
{
|
|
}
|
}
|
else if (this.lcontroller.size() > 0)
|
{
|
if ((controllerclone.alarms.alarm_offline > 0) || (firstTime == true))
|
{
|
firstTime = false;
|
String message = art.servers.Shared.getMessage("Controller online");
|
art.servers.Shared.controllerStatus.setStatus(DeviceStatus.STATUS_ONLINE, name, message);
|
art.servers.Shared.logger.saveAnnotation(name, message);
|
}
|
|
controllerclone.setAlarm("alarm_offline", false);
|
controllerclone.setAlarm("alarm_invalid", false);
|
|
controllerclone.getDeviceInformation().serverAddress = art.servers.Shared.configuration.listener.address;
|
controllerclone.getDeviceInformation().serverPort = art.servers.Shared.configuration.listener.port;
|
controllerclone.getDeviceInformation().serverAddressExternal = art.servers.Shared.configuration.listener.addressExternal;
|
controllerclone.getDeviceInformation().serverPortExternal = art.servers.Shared.configuration.listener.portExternal;
|
controllerclone.getDeviceInformation().serverServiceName = art.servers.Shared.controllerStatus.getApplication().getDeviceInformation().serverServiceName;
|
|
for (M_SubcontrollerConfiguration subcontrollerConfiguration : controllerclone.getDeviceConfiguration().lsubcontroller)
|
{
|
for (M_Plan m_plan : subcontrollerConfiguration.lplan)
|
{
|
m_plan.cycleTime = calculateCycleTime(m_plan, controllerclone, subcontrollerConfiguration.number);
|
}
|
}
|
|
this.controller.updateDevice(controllerclone);
|
|
// Have more than one subcontroller
|
// Must be clone for every subcontroller
|
for (M_Controller m_controllerSubcontroller : this.lcontroller)
|
{
|
int subcontroller = m_controllerSubcontroller.getDeviceInformation().subcontroller;
|
M_Controller m_subcontroller = Serialization.clone(controllerclone);
|
m_subcontroller.realtime = Serialization.clone(controllerclone.getDeviceRealtime());
|
m_subcontroller.getDeviceRealtime().identifier = m_controllerSubcontroller.getIdentifier();
|
|
// Update M_ControllerInformation with subcontroller information
|
m_subcontroller.information = m_controllerSubcontroller.getDeviceInformation();
|
|
// Remove from M_ControllerConfiguration.lsubcontroller the other subcontrollers
|
List<M_SubcontrollerConfiguration> lremoveConfiguration = new ArrayList<M_SubcontrollerConfiguration>();
|
for (M_SubcontrollerConfiguration subcontrollerConfiguration : m_subcontroller.getDeviceConfiguration().lsubcontroller)
|
{
|
if (subcontrollerConfiguration.number != subcontroller)
|
{
|
lremoveConfiguration.add(subcontrollerConfiguration);
|
}
|
}
|
|
m_subcontroller.getDeviceConfiguration().lsubcontroller.removeAll(lremoveConfiguration);
|
|
// Remove from M_ControllerStatus.lsubcontroller the other subcontrollers
|
List<M_ControllerStatusSubcontroller> lremoveStatus = new ArrayList<M_ControllerStatusSubcontroller>();
|
for (M_ControllerStatusSubcontroller subcontrollerStatus : m_subcontroller.getDeviceStatus().lsubcontroller)
|
{
|
if (subcontrollerStatus.number != subcontroller)
|
{
|
lremoveStatus.add(subcontrollerStatus);
|
}
|
}
|
|
m_subcontroller.getDeviceStatus().lsubcontroller.removeAll(lremoveStatus);
|
|
// Remove from M_ControllerStatus.lsubcontrollerUpdate the other subcontrollers
|
List<M_ControllerStatusSubcontroller> lremoveStatusUpdate = new ArrayList<M_ControllerStatusSubcontroller>();
|
for (M_ControllerStatusSubcontroller subcontrollerStatusUpdate : m_subcontroller.getDeviceStatus().lsubcontrollerUpdate)
|
{
|
if (subcontrollerStatusUpdate.number != subcontroller)
|
{
|
lremoveStatusUpdate.add(subcontrollerStatusUpdate);
|
}
|
}
|
|
m_subcontroller.getDeviceStatus().lsubcontrollerUpdate.removeAll(lremoveStatusUpdate);
|
|
// Remove from M_ControllerRealtime.lsubcontroller the other subcontrollers
|
List<M_ControllerRealtimeSubcontroller> lremoveRealtime = new ArrayList<M_ControllerRealtimeSubcontroller>();
|
for (M_ControllerRealtimeSubcontroller subcontrollerRealtime : m_subcontroller.getDeviceRealtime().lsubcontroller)
|
{
|
if (subcontrollerRealtime.number != subcontroller)
|
{
|
lremoveRealtime.add(subcontrollerRealtime);
|
}
|
}
|
|
m_subcontroller.getDeviceRealtime().lsubcontroller.removeAll(lremoveRealtime);
|
|
// Update alarm_off and alarm_flashing
|
boolean alarm_off = false;
|
boolean alarm_flashing = false;
|
for (M_ControllerStatusSubcontroller statusSubcontroller : m_subcontroller.getDeviceStatus().lsubcontroller)
|
{
|
if (statusSubcontroller.colorsMode == M_ControllerStatusSubcontroller.COLORS_OFF) alarm_off = true;
|
if (statusSubcontroller.colorsMode == M_ControllerStatusSubcontroller.COLORS_FLASHING) alarm_flashing = true;
|
}
|
|
m_subcontroller.setAlarm("alarm_off", alarm_off);
|
m_subcontroller.setAlarm("alarm_flashing", alarm_flashing);
|
|
if (controllerclone.getAlarm("alarm_manual_control") > 0)
|
{
|
for (M_ControllerStatusSubcontroller statusSubcontroller : controllerclone.getDeviceStatus().lsubcontroller)
|
{
|
statusSubcontroller.localControl = DeviceCommands.CONDITION_YES;
|
}
|
}
|
else if (controllerclone.getAlarm("alarm_manual_control") <= 0)
|
{
|
for (M_ControllerStatusSubcontroller statusSubcontroller : controllerclone.getDeviceStatus().lsubcontroller)
|
{
|
if (statusSubcontroller.userControlManual == DeviceCommands.CONDITION_NO)
|
statusSubcontroller.localControl = DeviceCommands.CONDITION_NO;
|
}
|
}
|
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate != null)
|
{
|
if (controllerclone.getDeviceStatus().lsubcontrollerUpdate.size() <= 0)
|
{
|
controllerclone.getDeviceStatus().lsubcontrollerUpdate = null;
|
}
|
}
|
|
Shared.model.updateDevice(m_controllerSubcontroller, m_subcontroller);
|
}
|
|
try
|
{
|
this.controller.getDeviceConfiguration().toAluvisa();
|
}
|
catch (Exception e)
|
{
|
|
}
|
}
|
}
|
|
// </editor-fold>
|
|
}
|