diff --git a/src/main/java/de/hottis/measurementCollector/HottisFreezerThermometerParser.java b/src/main/java/de/hottis/measurementCollector/HottisFreezerThermometerParser.java new file mode 100644 index 0000000..be08806 --- /dev/null +++ b/src/main/java/de/hottis/measurementCollector/HottisFreezerThermometerParser.java @@ -0,0 +1,61 @@ +package de.hottis.measurementCollector; + +import java.lang.reflect.Constructor; +import java.time.LocalDateTime; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + + +import com.json.parsers.JSONParser; +import com.json.parsers.JsonParserFactory; +import de.hottis.common.MyQueue; +import de.hottis.smarthomelib.ADataObject; +import de.hottis.smarthomelib.TemperatureDataObject; +import java.util.ArrayList; + +public class HottisFreezerThermometerParser extends AMessageParser { + /* + { "metadata": { "device": "ModbusHub", "Slave": "Thermometer", "connectionValid": "1", "requests": 151, "successfulRequests": 150, "failedRequests": 1, "exceptionErrors": 0, "retries": 0}, "data": {"n1": 194825, "u1": 1.86, "r1": 1035.02, "offset1": -0.24, "factor1": 1.00, "tRaw1": 9.09, "t1": 9.07, "alpha1": 1.00, "n2": 198656, "u2": 1.89, "r2": 951.77, "offset2": -0.31, "factor2": 0.99, "tRaw2": -12.52, "t2": -12.52, "alpha2": 1.00, "uptime": 3183}} + */ + + + static final String TOPIC = "IoT/Measurement/ModbusHub"; + + private final JSONParser jsonParser; + + private HashMap dataParsers; + + public HottisFreezerThermometerParser(Properties config, MyQueue queue) { + super(TOPIC, config, queue); + JsonParserFactory jsonParserFactory = JsonParserFactory.getInstance(); + jsonParser = jsonParserFactory.newJsonParser(); + } + + + @Override + public void execute(LocalDateTime timestamp, String msgPayload) { + try { + @SuppressWarnings("rawtypes") + Map payloadMap = jsonParser.parseJson(msgPayload); + + ArrayList temperatureList = new ArrayList<>(); + @SuppressWarnings("rawtypes") + double tFreezer = Double.parseDouble((String)(((Map)(payloadMap.get("data"))).get("t2"))); + TemperatureDataObject tdo = new TemperatureDataObject(timestamp, "Freezer", tFreezer); + temperatureList.add(tdo); + @SuppressWarnings("rawtypes") + double tFridge = Double.parseDouble((String)(((Map)(payloadMap.get("data"))).get("t1"))); + tdo = new TemperatureDataObject(timestamp, "Fridge", tFridge); + temperatureList.add(tdo); + + enqueue(temperatureList); + } catch (Exception e) { + logger.error("Exception when handling Modbus thermometer message: ", e); + } + + } + +} diff --git a/src/main/java/de/hottis/measurementCollector/MeasurementCollector.java b/src/main/java/de/hottis/measurementCollector/MeasurementCollector.java index 3d5c081..2a48a7c 100644 --- a/src/main/java/de/hottis/measurementCollector/MeasurementCollector.java +++ b/src/main/java/de/hottis/measurementCollector/MeasurementCollector.java @@ -40,6 +40,11 @@ public class MeasurementCollector { mqttReceiver.registerParser(espThermometerParser); logger.debug("EspThermometerParser started"); + HottisFreezerThermometerParser hottisFreezerThermometerParser = new HottisFreezerThermometerParser(config, queue); + hottisFreezerThermometerParser.init(); + mqttReceiver.registerParser(hottisFreezerThermometerParser); + logger.debug("HottisFreezerThermometerParser started"); + mqttReceiver.connect(); logger.debug("MqttReceiver connected"); }