Oregon is now registering unregistered reception

This commit is contained in:
Ziver Koc 2016-08-26 22:05:26 +02:00
parent 3574f7a433
commit 5351e56be7
3 changed files with 36 additions and 16 deletions

View file

@ -229,8 +229,13 @@ public class TellstickSerialComm implements Runnable,
"Device config is not an instance of "+TellstickDevice.class+": "+sensor.getClass()); "Device config is not an instance of "+TellstickDevice.class+": "+sensor.getClass());
} }
public List<TellstickDevice> getRegisteredDevices(){ public <T> List<T> getRegisteredDevices(Class<T> clazz){
return registeredDevices; ArrayList<T> list = new ArrayList<>();
for (TellstickDevice device : registeredDevices){
if (clazz.isAssignableFrom(device.getClass()))
list.add((T) device);
}
return list;
} }
@Override @Override

View file

@ -35,8 +35,9 @@ public class Oregon0x1A2D implements HalSensorConfig,TellstickDevice {
public Oregon0x1A2D() { } public Oregon0x1A2D() { }
public Oregon0x1A2D(int address) { public Oregon0x1A2D(int address, OregonSensorType sensorType) {
this.address = address; this.address = address;
this.sensorType = sensorType;
} }

View file

@ -63,36 +63,50 @@ public class Oregon0x1A2DProtocol extends TellstickProtocol {
temperature = -temperature; temperature = -temperature;
double humidity = (hum1 * 10.0) + hum2; double humidity = (hum1 * 10.0) + hum2;
// Create return objects // Create return objects
boolean humidityFound=false, temperatureFound=false;
ArrayList<TellstickDecodedEntry> list = new ArrayList<>(); ArrayList<TellstickDecodedEntry> list = new ArrayList<>();
for (Oregon0x1A2D device : getSensorByAddress(address)) { for (Oregon0x1A2D device : TellstickSerialComm.getInstance().getRegisteredDevices(Oregon0x1A2D.class)) {
if (device.getAddress() != address)
continue;
HalSensorData dataObj; HalSensorData dataObj;
OregonSensorType sensorType = device.getSensorType(); OregonSensorType sensorType = device.getSensorType();
if (sensorType == null) if (sensorType == null)
sensorType = OregonSensorType.POWER; sensorType = OregonSensorType.POWER;
switch (sensorType){ switch (sensorType){
case HUMIDITY: case HUMIDITY:
dataObj = new HumiditySensorData(humidity); break; dataObj = new HumiditySensorData(humidity);
humidityFound = true;
break;
case LIGHT: case LIGHT:
dataObj = new LightSensorData(temperature); break; dataObj = new LightSensorData(temperature);
temperatureFound = true;
break;
case TEMPERATURE: case TEMPERATURE:
dataObj = new TemperatureSensorData(temperature); break; dataObj = new TemperatureSensorData(temperature);
temperatureFound = true;
break;
default: default:
case POWER: case POWER:
dataObj = new PowerConsumptionSensorData(temperature); break; dataObj = new PowerConsumptionSensorData(temperature);
temperatureFound = true;
break;
} }
list.add(new TellstickDecodedEntry(device, dataObj)); 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<Oregon0x1A2D> getSensorByAddress(int address){
ArrayList<Oregon0x1A2D> list = new ArrayList<>();
for (TellstickDevice device : TellstickSerialComm.getInstance().getRegisteredDevices()){
if (device instanceof Oregon0x1A2D && ((Oregon0x1A2D) device).getAddress() == address)
list.add((Oregon0x1A2D) device);
}
return list; return list;
} }
} }