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());
}
public List<TellstickDevice> getRegisteredDevices(){
return registeredDevices;
public <T> List<T> getRegisteredDevices(Class<T> clazz){
ArrayList<T> list = new ArrayList<>();
for (TellstickDevice device : registeredDevices){
if (clazz.isAssignableFrom(device.getClass()))
list.add((T) device);
}
return list;
}
@Override

View file

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

View file

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