This commit is contained in:
Wolfgang Hottgenroth
2017-11-15 16:50:49 +01:00
parent 5bf591185c
commit 7df95c52b3
18 changed files with 147 additions and 34 deletions

View File

@ -4,5 +4,6 @@
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="lib" path="/home/wn/workspace-java/MeasurementCollector/libraries/jmbus-3.0.1.jar"/>
<classpathentry kind="lib" path="/home/wn/workspace-java/MeasurementCollector/libraries/org.eclipse.paho.client.mqttv3-1.2.0.jar"/>
<classpathentry kind="lib" path="/home/wn/workspace-java/MeasurementCollector/libraries/quick-json-1.0.2.3.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

Binary file not shown.

Binary file not shown.

View File

@ -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

Binary file not shown.

View File

@ -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<String, Object> values;
public ADataObject(LocalDateTime timestamp, String name) {
this.timestamp = timestamp;
this.name = name;
}
public void setValues(Map<String, Object> values) {
this.values = values;
}
abstract public String getTableName();
public LocalDateTime getTimestamp() {
return timestamp;
}
public Map<String, Object> getValues() {
return values;
}
public String getName() {
return name;
}
}

View File

@ -0,0 +1,10 @@
package de.hottis.MeasurementCollector;
import java.time.LocalDateTime;
import java.util.List;
import org.openmuc.jmbus.DataRecord;
public interface ADataParser<T> {
public List<T> parse(LocalDateTime timestamp, String name, List<DataRecord> dataRecords);
}

View File

@ -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<TemperatureDataObject> {
public List<TemperatureDataObject> parse(LocalDateTime timestamp, String name, List<DataRecord> dataRecords) {
ArrayList<TemperatureDataObject> list = new ArrayList<TemperatureDataObject>();
TemperatureDataObject tdo = new TemperatureDataObject(timestamp, "Hedge", dataRecords.get(5).getScaledDataValue());
list.add(tdo);
tdo = new TemperatureDataObject(timestamp, "House", dataRecords.get(7).getScaledDataValue());
return list;
}
}

View File

@ -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<DataRecord> 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);
}
}
}

View File

@ -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<DataRecord> dataRecords = variableDataStructure.getDataRecords();
for (DataRecord dataRecord : dataRecords) {
System.out.println(dataRecord.getScaledDataValue() + " " + dataRecord.getUnit().getUnit());
}
}
*/
}

View File

@ -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);
}

View File

@ -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<String, Object> values = new HashMap<String, Object>();
values.put(TEMPERATURE_KEY, temperature);
setValues(values);
}
public String getTableName() {
return TABLE_NAME;
}
}

View File

@ -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