diff --git a/.classpath b/.classpath
index a306a2f..9855d06 100644
--- a/.classpath
+++ b/.classpath
@@ -4,5 +4,6 @@
+
diff --git a/bin/de/hottis/MeasurementCollector/ADataObject.class b/bin/de/hottis/MeasurementCollector/ADataObject.class
new file mode 100644
index 0000000..556693a
Binary files /dev/null and b/bin/de/hottis/MeasurementCollector/ADataObject.class differ
diff --git a/bin/de/hottis/MeasurementCollector/MBusParser.class b/bin/de/hottis/MeasurementCollector/MBusParser.class
new file mode 100644
index 0000000..7751f98
Binary files /dev/null and b/bin/de/hottis/MeasurementCollector/MBusParser.class differ
diff --git a/bin/de/hottis/MeasurementCollector/MeasurementCollector.class b/bin/de/hottis/MeasurementCollector/MeasurementCollector.class
index 0d268c9..df80c96 100644
Binary files a/bin/de/hottis/MeasurementCollector/MeasurementCollector.class and b/bin/de/hottis/MeasurementCollector/MeasurementCollector.class differ
diff --git a/bin/de/hottis/MeasurementCollector/MeasurementCollectorException.class b/bin/de/hottis/MeasurementCollector/MeasurementCollectorException.class
index b4f6ebe..9a2e8c3 100644
Binary files a/bin/de/hottis/MeasurementCollector/MeasurementCollectorException.class and b/bin/de/hottis/MeasurementCollector/MeasurementCollectorException.class differ
diff --git a/bin/de/hottis/MeasurementCollector/MqttReceiver$Listener.class b/bin/de/hottis/MeasurementCollector/MqttReceiver$Listener.class
index 7a93753..5eeadad 100644
Binary files a/bin/de/hottis/MeasurementCollector/MqttReceiver$Listener.class and b/bin/de/hottis/MeasurementCollector/MqttReceiver$Listener.class differ
diff --git a/bin/de/hottis/MeasurementCollector/MqttReceiver.class b/bin/de/hottis/MeasurementCollector/MqttReceiver.class
index d1d5592..993fb3d 100644
Binary files a/bin/de/hottis/MeasurementCollector/MqttReceiver.class and b/bin/de/hottis/MeasurementCollector/MqttReceiver.class differ
diff --git a/bin/de/hottis/MeasurementCollector/TemperatureDataObject.class b/bin/de/hottis/MeasurementCollector/TemperatureDataObject.class
new file mode 100644
index 0000000..4f52554
Binary files /dev/null and b/bin/de/hottis/MeasurementCollector/TemperatureDataObject.class differ
diff --git a/bin/measurementCollector.props b/bin/measurementCollector.props
index 81c10be..7cb4554 100644
--- a/bin/measurementCollector.props
+++ b/bin/measurementCollector.props
@@ -1,3 +1,3 @@
-mqtt.broker = tcp://eupenstrasse20.dynamic.hottis.de:2883
-mqtt.username = tron
-mqtt.password = geheim123
+mqtt.broker = tcp://172.16.2.15:1883
+; mqtt.username = tron
+; mqtt.password = geheim123
diff --git a/libraries/quick-json-1.0.2.3.jar b/libraries/quick-json-1.0.2.3.jar
new file mode 100644
index 0000000..5b1af44
Binary files /dev/null and b/libraries/quick-json-1.0.2.3.jar differ
diff --git a/src/de/hottis/MeasurementCollector/ADataObject.java b/src/de/hottis/MeasurementCollector/ADataObject.java
new file mode 100644
index 0000000..16d3445
--- /dev/null
+++ b/src/de/hottis/MeasurementCollector/ADataObject.java
@@ -0,0 +1,33 @@
+package de.hottis.MeasurementCollector;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+public abstract class ADataObject {
+ private LocalDateTime timestamp;
+ private String name;
+ private Map values;
+
+ public ADataObject(LocalDateTime timestamp, String name) {
+ this.timestamp = timestamp;
+ this.name = name;
+ }
+
+ public void setValues(Map values) {
+ this.values = values;
+ }
+
+ abstract public String getTableName();
+
+ public LocalDateTime getTimestamp() {
+ return timestamp;
+ }
+
+ public Map getValues() {
+ return values;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/src/de/hottis/MeasurementCollector/ADataParser.java b/src/de/hottis/MeasurementCollector/ADataParser.java
new file mode 100644
index 0000000..d109410
--- /dev/null
+++ b/src/de/hottis/MeasurementCollector/ADataParser.java
@@ -0,0 +1,10 @@
+package de.hottis.MeasurementCollector;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import org.openmuc.jmbus.DataRecord;
+
+public interface ADataParser {
+ public List parse(LocalDateTime timestamp, String name, List dataRecords);
+}
diff --git a/src/de/hottis/MeasurementCollector/HottisFourChannelThermometer.java b/src/de/hottis/MeasurementCollector/HottisFourChannelThermometer.java
new file mode 100644
index 0000000..2dede56
--- /dev/null
+++ b/src/de/hottis/MeasurementCollector/HottisFourChannelThermometer.java
@@ -0,0 +1,20 @@
+package de.hottis.MeasurementCollector;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openmuc.jmbus.DataRecord;
+
+public class HottisFourChannelThermometer implements ADataParser {
+ public List parse(LocalDateTime timestamp, String name, List dataRecords) {
+ ArrayList list = new ArrayList();
+
+ TemperatureDataObject tdo = new TemperatureDataObject(timestamp, "Hedge", dataRecords.get(5).getScaledDataValue());
+ list.add(tdo);
+
+ tdo = new TemperatureDataObject(timestamp, "House", dataRecords.get(7).getScaledDataValue());
+
+ return list;
+ }
+}
diff --git a/src/de/hottis/MeasurementCollector/MBusParser.java b/src/de/hottis/MeasurementCollector/MBusParser.java
new file mode 100644
index 0000000..f321780
--- /dev/null
+++ b/src/de/hottis/MeasurementCollector/MBusParser.java
@@ -0,0 +1,52 @@
+package de.hottis.MeasurementCollector;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Map;
+
+import org.openmuc.jmbus.DataRecord;
+import org.openmuc.jmbus.MBusMessage;
+import org.openmuc.jmbus.VariableDataStructure;
+
+import com.json.parsers.JSONParser;
+import com.json.parsers.JsonParserFactory;
+
+public class MBusParser extends AMessageParser {
+
+ static final String TOPIC = "IoT/Measurement/MeterbusHub";
+
+ private final JSONParser jsonParser;
+
+ public MBusParser() {
+ super(TOPIC);
+ JsonParserFactory jsonParserFactory = JsonParserFactory.getInstance();
+ jsonParser = jsonParserFactory.newJsonParser();
+ }
+
+ @Override
+ public void execute(LocalDateTime timestamp, String msgPayload) {
+ try {
+ Map payloadMap = jsonParser.parseJson(msgPayload);
+ String name = (String)(((Map)(payloadMap.get("metadata"))).get("name"));
+ String mbusMsgTxt = (String)(((Map)(payloadMap.get("data"))).get("telegram"));
+ String [] octetsTxt = mbusMsgTxt.split(" ");
+ byte [] octets = new byte[octetsTxt.length];
+ for (int i = 0; i < octetsTxt.length; i++) {
+ octets[i] = (byte)(Integer.parseInt(octetsTxt[i], 16) & 0xff);
+ }
+
+ MBusMessage mbusMsg = MBusMessage.decode(octets, octets.length);
+ VariableDataStructure variableDataStructure = mbusMsg.getVariableDataResponse();
+ variableDataStructure.decode();
+ List dataRecords = variableDataStructure.getDataRecords();
+
+ for (DataRecord dataRecord : dataRecords) {
+ System.out.println(dataRecord.getScaledDataValue() + " " + dataRecord.getUnit().getUnit());
+ }
+ } catch (Exception e) {
+ System.out.println("Exception when handling mbus message: " + e);
+ }
+
+ }
+
+}
diff --git a/src/de/hottis/MeasurementCollector/MeasurementCollector.java b/src/de/hottis/MeasurementCollector/MeasurementCollector.java
index 91b6f84..f31f048 100644
--- a/src/de/hottis/MeasurementCollector/MeasurementCollector.java
+++ b/src/de/hottis/MeasurementCollector/MeasurementCollector.java
@@ -18,34 +18,9 @@ public class MeasurementCollector {
TestParser testParser = new TestParser();
mqttReceiver.registerParser(testParser);
+ MBusParser mbusParser = new MBusParser();
+ mqttReceiver.registerParser(mbusParser);
+
}
-/*
-import org.openmuc.jmbus.DataRecord;
-import org.openmuc.jmbus.MBusMessage;
-import org.openmuc.jmbus.VariableDataStructure;
-import java.util.List;
-
- // String txtMsg = "68 38 38 68 08 54 72 21 00 13 00 2E 19 24 02 43 00 00 00 8C 10 04 97 84 16 00 8C 11 04 97 84 16 00 02 FD C9 FF 01 DF 00 02 FD DB FF 01 0D 00 02 AC FF 01 1B 00 82 40 AC FF 01 00 00 1A 16";
- String txtMsg = "68 61 61 68 08 21 72 00 00 00 00 00 00 01 00 B5 00 00 00 01 24 08 01 25 10 01 26 0D 02 27 01 01 05 67 C8 44 C0 3C 05 67 34 E9 0C 41 05 67 B7 F3 9A 41 05 67 71 86 25 41 0F E0 7A 32 00 B5 99 04 00 73 98 02 00 00 00 00 00 A6 06 00 00 A2 C3 7F 3F A5 BA 7F 3F 85 A7 7F 3F E7 F9 7F 3F CD CC CC 3D E8 03 00 00 12 16";
- String [] octetsTxt = txtMsg.split(" ");
- byte [] octets = new byte[octetsTxt.length];
- System.out.println("Start");
- for (int i = 0; i < octetsTxt.length; i++) {
- System.out.println(octetsTxt[i]);
- octets[i] = (byte)(Integer.parseInt(octetsTxt[i], 16) & 0xff);
- }
- System.out.println("End");
-
- MBusMessage mbusMsg = MBusMessage.decode(octets, octets.length);
- //System.out.println("MBusMessage: " + mbusMsg.toString());
- VariableDataStructure variableDataStructure = mbusMsg.getVariableDataResponse();
- variableDataStructure.decode();
- List dataRecords = variableDataStructure.getDataRecords();
-
- for (DataRecord dataRecord : dataRecords) {
- System.out.println(dataRecord.getScaledDataValue() + " " + dataRecord.getUnit().getUnit());
- }
- }
-*/
}
diff --git a/src/de/hottis/MeasurementCollector/MeasurementCollectorException.java b/src/de/hottis/MeasurementCollector/MeasurementCollectorException.java
index 0039b9b..0a4dc20 100644
--- a/src/de/hottis/MeasurementCollector/MeasurementCollectorException.java
+++ b/src/de/hottis/MeasurementCollector/MeasurementCollectorException.java
@@ -1,6 +1,8 @@
package de.hottis.MeasurementCollector;
public class MeasurementCollectorException extends Exception {
+ private static final long serialVersionUID = -5819010697931904741L;
+
public MeasurementCollectorException(String msg, Throwable cause) {
super(msg, cause);
}
diff --git a/src/de/hottis/MeasurementCollector/TemperatureDataObject.java b/src/de/hottis/MeasurementCollector/TemperatureDataObject.java
new file mode 100644
index 0000000..1a9969f
--- /dev/null
+++ b/src/de/hottis/MeasurementCollector/TemperatureDataObject.java
@@ -0,0 +1,20 @@
+package de.hottis.MeasurementCollector;
+
+import java.time.LocalDateTime;
+import java.util.HashMap;
+
+public class TemperatureDataObject extends ADataObject {
+ static final String TEMPERATURE_KEY = "temperature";
+ static final String TABLE_NAME = "temperature";
+
+ public TemperatureDataObject(LocalDateTime timestamp, String name, double temperature) {
+ super(timestamp, name);
+ HashMap values = new HashMap();
+ values.put(TEMPERATURE_KEY, temperature);
+ setValues(values);
+ }
+
+ public String getTableName() {
+ return TABLE_NAME;
+ }
+}
diff --git a/src/measurementCollector.props b/src/measurementCollector.props
index 81c10be..7cb4554 100644
--- a/src/measurementCollector.props
+++ b/src/measurementCollector.props
@@ -1,3 +1,3 @@
-mqtt.broker = tcp://eupenstrasse20.dynamic.hottis.de:2883
-mqtt.username = tron
-mqtt.password = geheim123
+mqtt.broker = tcp://172.16.2.15:1883
+; mqtt.username = tron
+; mqtt.password = geheim123