This commit is contained in:
Wolfgang Hottgenroth
2017-11-15 18:06:56 +01:00
parent 7df95c52b3
commit 632782cf15
18 changed files with 115 additions and 10 deletions

View File

@ -30,4 +30,16 @@ public abstract class ADataObject {
public String getName() {
return name;
}
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("<");
sb.append(name);
sb.append(", ");
sb.append(timestamp);
sb.append(", ");
sb.append(values.toString());
sb.append(">");
return sb.toString();
}
}

View File

@ -5,6 +5,6 @@ import java.util.List;
import org.openmuc.jmbus.DataRecord;
public interface ADataParser<T> {
public List<T> parse(LocalDateTime timestamp, String name, List<DataRecord> dataRecords);
public interface ADataParser {
public List<ADataObject> parse(LocalDateTime timestamp, String name, List<DataRecord> dataRecords);
}

View File

@ -0,0 +1,23 @@
package de.hottis.MeasurementCollector;
import java.time.LocalDateTime;
import java.util.HashMap;
public class ElectricEnergyDataObject extends ADataObject {
static final String ENERGY_KEY = "energy";
static final String POWER_KEY = "power";
static final String TABLE_NAME = "ElectricEnergy";
public ElectricEnergyDataObject(LocalDateTime timestamp, String name, double energy, double power) {
super(timestamp, name);
HashMap<String, Object> values = new HashMap<String, Object>();
values.put(ENERGY_KEY, energy);
values.put(POWER_KEY, power);
setValues(values);
}
@Override
public String getTableName() {
return TABLE_NAME;
}
}

View File

@ -0,0 +1,19 @@
package de.hottis.MeasurementCollector;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import org.openmuc.jmbus.DataRecord;
public class FinderOnePhasePowerMeter implements ADataParser {
public List<ADataObject> parse(LocalDateTime timestamp, String name, List<DataRecord> dataRecords) {
ArrayList<ADataObject> list = new ArrayList<ADataObject>();
ElectricEnergyDataObject tdo = new ElectricEnergyDataObject(timestamp, name,
dataRecords.get(0).getScaledDataValue(), dataRecords.get(4).getScaledDataValue());
list.add(tdo);
return list;
}
}

View File

@ -0,0 +1,19 @@
package de.hottis.MeasurementCollector;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import org.openmuc.jmbus.DataRecord;
public class FinderThreePhasePowerMeter implements ADataParser {
public List<ADataObject> parse(LocalDateTime timestamp, String name, List<DataRecord> dataRecords) {
ArrayList<ADataObject> list = new ArrayList<ADataObject>();
ElectricEnergyDataObject tdo = new ElectricEnergyDataObject(timestamp, name,
dataRecords.get(0).getScaledDataValue(), dataRecords.get(17).getScaledDataValue());
list.add(tdo);
return list;
}
}

View File

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

View File

@ -16,11 +16,17 @@ public class MBusParser extends AMessageParser {
static final String TOPIC = "IoT/Measurement/MeterbusHub";
private final JSONParser jsonParser;
private final HottisFourChannelThermometer hottisFourChannelThermometer;
private final FinderOnePhasePowerMeter finderOnePhasePowerMeter;
private final FinderThreePhasePowerMeter finderThreePhasePowerMeter;
public MBusParser() {
super(TOPIC);
JsonParserFactory jsonParserFactory = JsonParserFactory.getInstance();
jsonParser = jsonParserFactory.newJsonParser();
hottisFourChannelThermometer = new HottisFourChannelThermometer();
finderOnePhasePowerMeter = new FinderOnePhasePowerMeter();
finderThreePhasePowerMeter = new FinderThreePhasePowerMeter();
}
@Override
@ -40,8 +46,33 @@ public class MBusParser extends AMessageParser {
variableDataStructure.decode();
List<DataRecord> dataRecords = variableDataStructure.getDataRecords();
for (DataRecord dataRecord : dataRecords) {
System.out.println(dataRecord.getScaledDataValue() + " " + dataRecord.getUnit().getUnit());
//for (DataRecord dataRecord : dataRecords) {
// System.out.println(dataRecord.getScaledDataValue() + " " + dataRecord.getUnit().getUnit());
//}
List<ADataObject> measurementItems;
switch (name) {
case "thermom.":
measurementItems = hottisFourChannelThermometer.parse(timestamp, name, dataRecords);
break;
case "light":
case "computer":
case "freezer":
case "dryer":
case "laundry":
case "dishwasher":
measurementItems = finderOnePhasePowerMeter.parse(timestamp, name.substring(0,1).toUpperCase() + name.substring(1).toLowerCase(), dataRecords);
break;
case "electricity":
measurementItems = finderThreePhasePowerMeter.parse(timestamp, "Total", dataRecords);
break;
default:
System.out.println("unknown name");
measurementItems = null;
}
for (ADataObject ado : measurementItems) {
System.out.println(ado);
}
} catch (Exception e) {
System.out.println("Exception when handling mbus message: " + e);

View File

@ -15,8 +15,8 @@ public class MeasurementCollector {
MqttReceiver mqttReceiver = new MqttReceiver(config);
mqttReceiver.connect();
TestParser testParser = new TestParser();
mqttReceiver.registerParser(testParser);
// TestParser testParser = new TestParser();
// mqttReceiver.registerParser(testParser);
MBusParser mbusParser = new MBusParser();
mqttReceiver.registerParser(mbusParser);

View File

@ -5,7 +5,7 @@ import java.util.HashMap;
public class TemperatureDataObject extends ADataObject {
static final String TEMPERATURE_KEY = "temperature";
static final String TABLE_NAME = "temperature";
static final String TABLE_NAME = "Temperature";
public TemperatureDataObject(LocalDateTime timestamp, String name, double temperature) {
super(timestamp, name);