From dd0b22334847b38566a9bf2e54083990d7a8f0e5 Mon Sep 17 00:00:00 2001 From: Wolfgang Hottgenroth Date: Mon, 7 Sep 2020 22:34:24 +0200 Subject: [PATCH] loop shutdown preparation --- .../hottis/mbusMaster/ConfigProperties.java | 5 ++- .../java/de/hottis/mbusMaster/MbusDevice.java | 5 +-- .../mbusMaster/MbusScheduledQuerier.java | 37 +++++++++++++++++-- .../mbusMaster/MbusStatisticsDataObject.java | 9 ++++- 4 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/hottis/mbusMaster/ConfigProperties.java b/src/main/java/de/hottis/mbusMaster/ConfigProperties.java index 2450c52..00c57bb 100644 --- a/src/main/java/de/hottis/mbusMaster/ConfigProperties.java +++ b/src/main/java/de/hottis/mbusMaster/ConfigProperties.java @@ -14,7 +14,8 @@ import org.apache.logging.log4j.Logger; public class ConfigProperties extends Properties { static final String DEFAULT_PROPS_FILENAME = "mbusMaster.props"; static final String PROPS_VERBOSE = "verbose"; - static final String PRPOS_MAINCONFIGFILE = "mainConfigFile"; + static final String PROPS_MAINCONFIGFILE = "mainConfigFile"; + static final String PROPS_ERRORRATIOTHRESHOLD = "errorRatioThreshold"; static final Logger logger = LogManager.getRootLogger(); @@ -23,7 +24,7 @@ public class ConfigProperties extends Properties { public ConfigProperties() throws ConfigPropertiesException { super(); - String propsFilename = System.getProperty(PRPOS_MAINCONFIGFILE, DEFAULT_PROPS_FILENAME); + String propsFilename = System.getProperty(PROPS_MAINCONFIGFILE, DEFAULT_PROPS_FILENAME); try { try (FileInputStream propsFileInputStream = new FileInputStream(propsFilename)) { load(propsFileInputStream); diff --git a/src/main/java/de/hottis/mbusMaster/MbusDevice.java b/src/main/java/de/hottis/mbusMaster/MbusDevice.java index 1b7130c..101ad3c 100644 --- a/src/main/java/de/hottis/mbusMaster/MbusDevice.java +++ b/src/main/java/de/hottis/mbusMaster/MbusDevice.java @@ -57,11 +57,8 @@ abstract public class MbusDevice { this.errorCnt++; } - public void resetSuccessCnt() { + public void resetCounter() { this.successCnt = 0; - } - - public void resetErrorCnt() { this.errorCnt = 0; } diff --git a/src/main/java/de/hottis/mbusMaster/MbusScheduledQuerier.java b/src/main/java/de/hottis/mbusMaster/MbusScheduledQuerier.java index 6797abb..a4e7aa6 100644 --- a/src/main/java/de/hottis/mbusMaster/MbusScheduledQuerier.java +++ b/src/main/java/de/hottis/mbusMaster/MbusScheduledQuerier.java @@ -11,19 +11,22 @@ import org.apache.logging.log4j.Logger; public class MbusScheduledQuerier extends Thread { - static final Logger logger = LogManager.getRootLogger(); + static final double DEFAULT_ERRORRATIOTHRESHOLD = 0.5; + + static final Logger logger = LogManager.getRootLogger(); private ArrayList devices; private boolean stopSignal = false; private ConfigProperties config; private BlockingQueue queue; + public MbusScheduledQuerier(ConfigProperties config, BlockingQueue queue) { super("MbusScheduledQuerier"); this.config = config; this.queue = queue; - + this.devices = new ArrayList<>(); this.devices.add(new FinderThreePhasePowerMeter("Total Electricity", (byte)80, 0)); this.devices.add(new FinderOnePhasePowerMeter("Dryer", (byte)81, 0)); @@ -47,6 +50,11 @@ public class MbusScheduledQuerier extends Thread { int cnt = 0; int errCnt = 0; int successCnt = 0; + int shutdownCnt = 0; + double maxErrorRatio = 0; + int timeSinceLastLoopShutdown = 0; + int meantimeBetweenLoopShutdowns = 0; + while (! this.stopSignal) { cnt++; @@ -67,9 +75,32 @@ public class MbusScheduledQuerier extends Thread { errCnt++; logger.error("Error " + e.toString() + " in Meterbus dialog for device " + device.shortString()); } + this.maxErrorRatio = (this.maxErrorRatio > device.getErrorRatio()) ? this.maxErrorRatio : device.getErrorRatio(); } + + if (this.maxErrorRatio > config.getDoubleProperties(ConfigProperties.PROPS_ERRORRATIOTHRESHOLD, DEFAULT_ERRORRATIOTHRESHOLD)) { + // disable loop + shutdownCnt++; + + // reset counters in devices + for (MbusDevice device : this.devices) { + device.resetCounter(); + } + // reset local counters + errCnt = 0; + successCnt = 0; + + // remember time of loop shutdown + // calculate time since last shutdown + // calculate mean time between shutdowns + } + + logger.info("CycleCnt: " + cnt + ", SuccessCnt: " + successCnt + ", ErrCnt: " + errCnt); - this.queue.add(new MbusStatisticsDataObject("MbusgwChild", errCnt, successCnt, ((double)errCnt / (double)(errCnt+successCnt)))); + this.queue.add(new MbusStatisticsDataObject("MbusgwChild", errCnt, successCnt, shutdownCnt, + ((double)errCnt / (double)(errCnt+successCnt))), + timeSinceLastLoopShutdown, meantimeBetweenLoopShutdowns); + try { Thread.sleep(5*1000); } catch (InterruptedException e) { diff --git a/src/main/java/de/hottis/mbusMaster/MbusStatisticsDataObject.java b/src/main/java/de/hottis/mbusMaster/MbusStatisticsDataObject.java index 20d0844..882d4fe 100644 --- a/src/main/java/de/hottis/mbusMaster/MbusStatisticsDataObject.java +++ b/src/main/java/de/hottis/mbusMaster/MbusStatisticsDataObject.java @@ -7,15 +7,22 @@ public class MbusStatisticsDataObject extends ADataObject { static final String ERROR_CNT_KEY = "error"; static final String SUCCESS_CNT_KEY = "success"; static final String ERROR_RATIO_KEY = "errorRatio"; + static final String TIME_SINCE_LAST_SHUTDOWN_KEY = "timeSinceLastShutdown"; + static final String MEANTIME_BETWEEN_SHUTDOWNS_KEY = "meantimeBetweenShutdowns"; + static final String SHUTDOWNS_KEY = "shutdowns"; static final String TABLE_NAME = "Statistics"; static final String KIND_NAME = "Statistics"; - public MbusStatisticsDataObject(String name, int error, int success, double errorRatio) { + public MbusStatisticsDataObject(String name, int error, int success, int shutdowns, + double errorRatio, int timeSinceLastShutdown, int meantimeBetweenShutdowns) { super(name, KIND_NAME); HashMap values = new HashMap(); values.put(ERROR_CNT_KEY, error); values.put(SUCCESS_CNT_KEY, success); values.put(ERROR_RATIO_KEY, errorRatio); + values.put(TIME_SINCE_LAST_SHUTDOWN_KEY, timeSinceLastShutdown); + values.put(MEANTIME_BETWEEN_SHUTDOWNS_KEY, meantimeBetweenShutdowns); + values.put(SHUTDOWNS_KEY, shutdowns); setValues(values); }