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