package art.servers.colorsserver.controller;
|
|
import art.library.interop.serialization.SerializationException;
|
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.ColorsServer;
|
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.io.BufferedWriter;
|
import java.io.File;
|
import java.io.FileOutputStream;
|
import java.io.OutputStreamWriter;
|
import java.text.SimpleDateFormat;
|
import java.util.Calendar;
|
import java.util.List;
|
|
|
|
public class ControllerRtacController extends ControllerController
|
{
|
private SimpleDateFormat sdh = new SimpleDateFormat("HH:mm");
|
private long lastTimestamp = 0;
|
private int status = DeviceStatus.STATUS_ALARM;
|
private BufferedWriter out = null;
|
|
|
|
public ControllerRtacController(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 ControllerRtacController(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
|
{
|
if (ColorsServer.REQUEST_RTAC == false) return;
|
|
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 = cloneController();
|
}
|
|
try
|
{
|
controllerclone.getDeviceConfiguration().toAluvisa();
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
if ((queryDetectorsRealtime == true) || (queryGroupsRealtime == true) || (queryStatus == true) || (queryTrafficData == true) || (queryTables == true))
|
{
|
if (forceCentralized == 0)
|
{
|
disable(controllerclone);
|
return;
|
}
|
}
|
|
try
|
{
|
if (queryTables == true)
|
{
|
// TODO
|
// View how to query tables for RTAC controllers
|
// In Mataro we have problems when reading tables, that sometimes RTAC controllers lose tables configuration
|
// 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
|
try
|
{
|
long[] result = getCurrentTime(controllerclone);
|
long currenttime = result[0];
|
int weekdayController = (int)result[1];
|
|
Calendar c1 = Calendar.getInstance();
|
Calendar c2 = Calendar.getInstance();
|
c1.setTimeInMillis(currenttime);
|
c2.setTimeInMillis(System.currentTimeMillis());
|
// int weekdayController = c1.get(Calendar.DAY_OF_WEEK);
|
int weekdayCurrent = c2.get(Calendar.DAY_OF_WEEK);
|
c1.set(Calendar.DATE, 1);
|
c1.set(Calendar.MONTH, 1);
|
c1.set(Calendar.YEAR, 2008);
|
c1.set(Calendar.MILLISECOND, 0);
|
c2.set(Calendar.DATE, 1);
|
c2.set(Calendar.MONTH, 1);
|
c2.set(Calendar.YEAR, 2008);
|
c2.set(Calendar.MILLISECOND, 0);
|
long dif = c2.getTimeInMillis()-c1.getTimeInMillis();
|
if (dif < 0) dif = -dif;
|
|
int current = 0;
|
if (weekdayCurrent == Calendar.MONDAY) current = 0;
|
if (weekdayCurrent == Calendar.TUESDAY) current = 1;
|
if (weekdayCurrent == Calendar.WEDNESDAY) current = 2;
|
if (weekdayCurrent == Calendar.THURSDAY) current = 3;
|
if (weekdayCurrent == Calendar.FRIDAY) current = 4;
|
if (weekdayCurrent == Calendar.SATURDAY) current = 5;
|
if (weekdayCurrent == Calendar.SUNDAY) current = 6;
|
|
if ((dif > ((Configuration)Shared.configuration).detail.maximumDifferenceTime) || (weekdayController != current))
|
{
|
writeLog("\t" + controllerclone.getIdentifier() + " - 1.DIFTIME: " + dif + " - " + weekdayController + " - " + current + " - Controller: " + Device.getDate(c1.getTimeInMillis()) + " - Server: " + Device.getDate(c2.getTimeInMillis()));
|
|
int currentWeekday = 0;
|
Calendar c3 = Calendar.getInstance();
|
c3.setTimeInMillis(System.currentTimeMillis());
|
int weekday = c3.get(Calendar.DAY_OF_WEEK); // c1.get(Calendar.DAY_OF_WEEK);
|
if (weekday == Calendar.MONDAY) currentWeekday = 0;
|
if (weekday == Calendar.TUESDAY) currentWeekday = 1;
|
if (weekday == Calendar.WEDNESDAY) currentWeekday = 2;
|
if (weekday == Calendar.THURSDAY) currentWeekday = 3;
|
if (weekday == Calendar.FRIDAY) currentWeekday = 4;
|
if (weekday == Calendar.SATURDAY) currentWeekday = 5;
|
if (weekday == Calendar.SUNDAY) currentWeekday = 6;
|
writeLog("\t" + controllerclone.getIdentifier() + " - 3.DIFTIME: " + dif + " - CurrentWeekday: " + currentWeekday);
|
setTime(currentWeekday);
|
}
|
}
|
catch (Exception e)
|
{
|
|
}
|
|
// 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)
|
{
|
// long query = System.currentTimeMillis();
|
// 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))
|
{
|
if (forceCentralized == 0)
|
{
|
disable(controllerclone);
|
}
|
else
|
{
|
online(controllerclone);
|
}
|
}
|
|
checkUpdateStatus(controllerclone);
|
}
|
catch (Exception exception)
|
{
|
if ((controllerclone.alarms.alarm_offline <= 0) || (firstTime == true))
|
{
|
Shared.println(name, this.controller.getIdentifier() + " - EXCEPTION RTAC OFFLINE: " + exception.toString());
|
Shared.printstack(name, exception);
|
}
|
|
offline(controllerclone);
|
}
|
}
|
|
|
public void setTime(int weekday) throws SerializationException
|
{
|
try
|
{
|
M_Message request = M_ProtocolConstructor.setDateTimeRTAC(this, 0x00, System.currentTimeMillis()+1000, weekday, hasCRC);
|
getControllerConnection().send(request.toByteArray());
|
|
M_Message requestHTR = M_ProtocolConstructor.HTR();
|
getControllerConnection().send(requestHTR.toByteArray());
|
}
|
catch (Exception exception)
|
{
|
Shared.printstack(name, exception);
|
}
|
}
|
|
// </editor-fold>
|
|
|
private void createLog ()
|
{
|
try
|
{
|
if (ColorsServer.LOG_TIME == true)
|
{
|
File fdir = new File("Logs/" + this.controller.getIdentifier());
|
fdir.mkdirs();
|
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fdir.getAbsolutePath() + "/" + System.currentTimeMillis() + ".log")));
|
}
|
}
|
catch (Exception e)
|
{
|
|
}
|
}
|
|
|
public void writeLog (String message)
|
{
|
try
|
{
|
if (ColorsServer.LOG_TIME == true)
|
{
|
if (out == null)
|
{
|
createLog();
|
}
|
|
String s = Device.getDate(System.currentTimeMillis()) + " - " + message;
|
out.write(s);
|
out.newLine();
|
out.flush();
|
}
|
}
|
catch (Exception e)
|
{
|
|
}
|
}
|
|
}
|