From 5351e56be72dec9aa1f5f667421d648787db57a8 Mon Sep 17 00:00:00 2001 From: Ziver Koc Date: Fri, 26 Aug 2016 22:05:26 +0200 Subject: [PATCH] Oregon is now registering unregistered reception --- .../plugin/tellstick/TellstickSerialComm.java | 9 ++++- .../plugin/tellstick/device/Oregon0x1A2D.java | 3 +- .../protocol/Oregon0x1A2DProtocol.java | 40 +++++++++++++------ 3 files changed, 36 insertions(+), 16 deletions(-) diff --git a/src/se/hal/plugin/tellstick/TellstickSerialComm.java b/src/se/hal/plugin/tellstick/TellstickSerialComm.java index ebee8672..db267b85 100755 --- a/src/se/hal/plugin/tellstick/TellstickSerialComm.java +++ b/src/se/hal/plugin/tellstick/TellstickSerialComm.java @@ -229,8 +229,13 @@ public class TellstickSerialComm implements Runnable, "Device config is not an instance of "+TellstickDevice.class+": "+sensor.getClass()); } - public List getRegisteredDevices(){ - return registeredDevices; + public List getRegisteredDevices(Class clazz){ + ArrayList list = new ArrayList<>(); + for (TellstickDevice device : registeredDevices){ + if (clazz.isAssignableFrom(device.getClass())) + list.add((T) device); + } + return list; } @Override diff --git a/src/se/hal/plugin/tellstick/device/Oregon0x1A2D.java b/src/se/hal/plugin/tellstick/device/Oregon0x1A2D.java index f6331667..c84b880f 100755 --- a/src/se/hal/plugin/tellstick/device/Oregon0x1A2D.java +++ b/src/se/hal/plugin/tellstick/device/Oregon0x1A2D.java @@ -35,8 +35,9 @@ public class Oregon0x1A2D implements HalSensorConfig,TellstickDevice { public Oregon0x1A2D() { } - public Oregon0x1A2D(int address) { + public Oregon0x1A2D(int address, OregonSensorType sensorType) { this.address = address; + this.sensorType = sensorType; } diff --git a/src/se/hal/plugin/tellstick/protocol/Oregon0x1A2DProtocol.java b/src/se/hal/plugin/tellstick/protocol/Oregon0x1A2DProtocol.java index 39a9d610..f571c71b 100755 --- a/src/se/hal/plugin/tellstick/protocol/Oregon0x1A2DProtocol.java +++ b/src/se/hal/plugin/tellstick/protocol/Oregon0x1A2DProtocol.java @@ -63,36 +63,50 @@ public class Oregon0x1A2DProtocol extends TellstickProtocol { temperature = -temperature; double humidity = (hum1 * 10.0) + hum2; + + // Create return objects + boolean humidityFound=false, temperatureFound=false; ArrayList list = new ArrayList<>(); - for (Oregon0x1A2D device : getSensorByAddress(address)) { + for (Oregon0x1A2D device : TellstickSerialComm.getInstance().getRegisteredDevices(Oregon0x1A2D.class)) { + if (device.getAddress() != address) + continue; HalSensorData dataObj; OregonSensorType sensorType = device.getSensorType(); if (sensorType == null) sensorType = OregonSensorType.POWER; switch (sensorType){ case HUMIDITY: - dataObj = new HumiditySensorData(humidity); break; + dataObj = new HumiditySensorData(humidity); + humidityFound = true; + break; case LIGHT: - dataObj = new LightSensorData(temperature); break; + dataObj = new LightSensorData(temperature); + temperatureFound = true; + break; case TEMPERATURE: - dataObj = new TemperatureSensorData(temperature); break; + dataObj = new TemperatureSensorData(temperature); + temperatureFound = true; + break; default: case POWER: - dataObj = new PowerConsumptionSensorData(temperature); break; + dataObj = new PowerConsumptionSensorData(temperature); + temperatureFound = true; + break; } list.add(new TellstickDecodedEntry(device, dataObj)); } - return list; - } + // Add new sensors if we did not find a registered one + if (!temperatureFound) + list.add(new TellstickDecodedEntry( + new Oregon0x1A2D(address, OregonSensorType.TEMPERATURE), + new TemperatureSensorData(temperature))); + if (!humidityFound) + list.add(new TellstickDecodedEntry( + new Oregon0x1A2D(address, OregonSensorType.HUMIDITY), + new HumiditySensorData(humidity))); - private List getSensorByAddress(int address){ - ArrayList list = new ArrayList<>(); - for (TellstickDevice device : TellstickSerialComm.getInstance().getRegisteredDevices()){ - if (device instanceof Oregon0x1A2D && ((Oregon0x1A2D) device).getAddress() == address) - list.add((Oregon0x1A2D) device); - } return list; } }