diff --git a/src/main/java/de/hottis/mbusMaster/ADataObject.java b/src/main/java/de/hottis/mbusMaster/ADataObject.java new file mode 100644 index 0000000..65ea2c3 --- /dev/null +++ b/src/main/java/de/hottis/mbusMaster/ADataObject.java @@ -0,0 +1,77 @@ +package de.hottis.mbusMaster; + +import java.io.Serializable; +import java.util.Map; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public abstract class ADataObject implements Serializable { + private static final long serialVersionUID = 1L; + + static final String KIND_KEY = "kind"; + + final protected Logger logger = LogManager.getRootLogger(); + + private String name; + private Map values; + private String kind; + + public ADataObject(String name, String kind) { + this.name = name; + this.kind = kind; + } + + public void setValues(Map values) { + this.values = values; + } + + abstract public String getTableName(); + + public Map getValues() { + return values; + } + + public String getName() { + return name; + } + + public String toString() { + StringBuffer sb = new StringBuffer(); + sb.append("{\"name\":\""); + sb.append(name); + sb.append("\", \"kind\":\""); + sb.append(kind); + sb.append("\", \"values\":{"); + boolean first = true; + for (Map.Entry entry : values.entrySet()) { + if (! first) { + sb.append(", "); + } else { + first = false; + } + sb.append("\""); + sb.append(entry.getKey()); + sb.append("\":"); + Object value = entry.getValue(); + if (! (value instanceof Double)) { + sb.append("\""); + } + sb.append(value); + if (! (value instanceof Double)) { + sb.append("\""); + } + } + sb.append("}}"); +/* + sb.append("<"); + sb.append(name); + sb.append(", "); + sb.append(timestamp); + sb.append(", "); + sb.append(values.toString()); + sb.append(">"); +*/ + return sb.toString(); + } +} diff --git a/src/main/java/de/hottis/mbusMaster/DummyDequeuer.java b/src/main/java/de/hottis/mbusMaster/DummyDequeuer.java index b7e0450..e01e50f 100644 --- a/src/main/java/de/hottis/mbusMaster/DummyDequeuer.java +++ b/src/main/java/de/hottis/mbusMaster/DummyDequeuer.java @@ -8,9 +8,9 @@ import org.apache.logging.log4j.Logger; public class DummyDequeuer extends Thread { static final Logger logger = LogManager.getRootLogger(); - private BlockingQueue queue; + private BlockingQueue queue; - public DummyDequeuer(BlockingQueue queue) { + public DummyDequeuer(BlockingQueue queue) { super("DummyDequeuer"); this.queue = queue; @@ -19,8 +19,8 @@ public class DummyDequeuer extends Thread { public void run() { while(true) { try { - String o = this.queue.take(); - System.out.println("DummyDequeuer: " + o); + ADataObject o = this.queue.take(); + System.out.println("DummyDequeuer: " + o.toString()); } catch (InterruptedException e) { } } diff --git a/src/main/java/de/hottis/mbusMaster/ElectricEnergyDataObject.java b/src/main/java/de/hottis/mbusMaster/ElectricEnergyDataObject.java new file mode 100644 index 0000000..e3102e1 --- /dev/null +++ b/src/main/java/de/hottis/mbusMaster/ElectricEnergyDataObject.java @@ -0,0 +1,24 @@ +package de.hottis.mbusMaster; + +import java.util.HashMap; + +public class ElectricEnergyDataObject extends ADataObject { + private static final long serialVersionUID = 1L; + static final String ENERGY_KEY = "energy"; + static final String POWER_KEY = "power"; + static final String TABLE_NAME = "ElectricEnergy"; + static final String KIND_NAME = "ElectricEnergy"; + + public ElectricEnergyDataObject(String name, double energy, double power) { + super(name, KIND_NAME); + HashMap values = new HashMap(); + values.put(ENERGY_KEY, energy); + values.put(POWER_KEY, power); + setValues(values); + } + + @Override + public String getTableName() { + return TABLE_NAME; + } +} diff --git a/src/main/java/de/hottis/mbusMaster/FinderOnePhasePowerMeter.java b/src/main/java/de/hottis/mbusMaster/FinderOnePhasePowerMeter.java index 5979efa..d3caa82 100644 --- a/src/main/java/de/hottis/mbusMaster/FinderOnePhasePowerMeter.java +++ b/src/main/java/de/hottis/mbusMaster/FinderOnePhasePowerMeter.java @@ -9,4 +9,8 @@ public class FinderOnePhasePowerMeter extends MbusDevice { this.dataPoints.add(new DataPoint("activePower", 4)); this.dataPoints.add(new DataPoint("reactivePower", 5)); } + + public ADataObject getDataObject() throws MbusException { + return new ElectricEnergyDataObject(this.getName(), this.getValue("energy"), this.getValue("activePower")); + } } \ No newline at end of file diff --git a/src/main/java/de/hottis/mbusMaster/FinderThreePhasePowerMeter.java b/src/main/java/de/hottis/mbusMaster/FinderThreePhasePowerMeter.java index ecc04de..e0c1065 100644 --- a/src/main/java/de/hottis/mbusMaster/FinderThreePhasePowerMeter.java +++ b/src/main/java/de/hottis/mbusMaster/FinderThreePhasePowerMeter.java @@ -19,4 +19,8 @@ public class FinderThreePhasePowerMeter extends MbusDevice { this.dataPoints.add(new DataPoint("activePowerTotal", 16)); this.dataPoints.add(new DataPoint("reactivePowerTotal", 17)); } + + public ADataObject getDataObject() throws MbusException { + return new ElectricEnergyDataObject(this.getName(), this.getValue("energy"), this.getValue("activePowerTotal")); + } } \ No newline at end of file diff --git a/src/main/java/de/hottis/mbusMaster/MbusDevice.java b/src/main/java/de/hottis/mbusMaster/MbusDevice.java index 94fa92e..32b06db 100644 --- a/src/main/java/de/hottis/mbusMaster/MbusDevice.java +++ b/src/main/java/de/hottis/mbusMaster/MbusDevice.java @@ -108,4 +108,6 @@ abstract public class MbusDevice { } throw new MbusException("dataPoint " + dataPointName + " in getValue not found"); } + + abstract public ADataObject getDataObject() throws MbusException; } \ No newline at end of file diff --git a/src/main/java/de/hottis/mbusMaster/MbusMaster.java b/src/main/java/de/hottis/mbusMaster/MbusMaster.java index 04cdc9a..66338ce 100644 --- a/src/main/java/de/hottis/mbusMaster/MbusMaster.java +++ b/src/main/java/de/hottis/mbusMaster/MbusMaster.java @@ -30,7 +30,7 @@ public class MbusMaster { logger.debug("Shutdown hook added"); */ - LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); + LinkedBlockingQueue queue = new LinkedBlockingQueue<>(); MbusScheduledQuerier querier = new MbusScheduledQuerier(config, queue); diff --git a/src/main/java/de/hottis/mbusMaster/MbusScheduledQuerier.java b/src/main/java/de/hottis/mbusMaster/MbusScheduledQuerier.java index bdec3c0..434683b 100644 --- a/src/main/java/de/hottis/mbusMaster/MbusScheduledQuerier.java +++ b/src/main/java/de/hottis/mbusMaster/MbusScheduledQuerier.java @@ -16,9 +16,9 @@ public class MbusScheduledQuerier extends Thread { private ArrayList devices; private boolean stopSignal = false; private ConfigProperties config; - private BlockingQueue queue; + private BlockingQueue queue; - public MbusScheduledQuerier(ConfigProperties config, BlockingQueue queue) { + public MbusScheduledQuerier(ConfigProperties config, BlockingQueue queue) { super("MbusScheduledQuerier"); this.config = config; @@ -58,7 +58,7 @@ public class MbusScheduledQuerier extends Thread { device.parse(frame); logger.info("Got: " + device.toString()); - this.queue.add(device.toString()); + this.queue.add(device.getDataObject()); successCnt++; } catch (IOException e) {