[sensebox] Fix NPE (#14879)

Signed-off-by: Christoph Weitkamp <github@christophweitkamp.de>
This commit is contained in:
Christoph Weitkamp 2023-05-01 19:44:08 +02:00 committed by GitHub
parent fafcc68423
commit b07dd3c48f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -71,86 +71,92 @@ public class SenseBoxAPIConnection {
logger.trace("Fetched Data: {}", body); logger.trace("Fetched Data: {}", body);
SenseBoxData parsedData = gson.fromJson(body, SenseBoxData.class); SenseBoxData parsedData = gson.fromJson(body, SenseBoxData.class);
// Assume all is well at first if (parsedData != null) {
parsedData.setStatus(ThingStatus.ONLINE); // Assume all is well at first
parsedData.setStatus(ThingStatus.ONLINE);
// Could perhaps be simplified via triply-nested arrays // Could perhaps be simplified via triply-nested arrays
// http://stackoverflow.com/questions/36946875/how-can-i-parse-geojson-with-gson // http://stackoverflow.com/questions/36946875/how-can-i-parse-geojson-with-gson
for (SenseBoxLoc loc : parsedData.getLocs()) { for (SenseBoxLoc loc : parsedData.getLocs()) {
if (loc.getGeometry() != null) { if (loc.getGeometry() != null) {
List<Double> locationData = loc.getGeometry().getData(); List<Double> locationData = loc.getGeometry().getData();
if (locationData != null) { if (locationData != null) {
int locationDataCount = locationData.size(); int locationDataCount = locationData.size();
SenseBoxLocation location = new SenseBoxLocation(); SenseBoxLocation location = new SenseBoxLocation();
if (locationDataCount > 0) { if (locationDataCount > 0) {
location.setLongitude(locationData.get(0)); location.setLongitude(locationData.get(0));
}
if (locationDataCount > 1) {
location.setLatitude(locationData.get(1));
}
if (locationDataCount > 2) {
location.setHeight(locationData.get(2));
}
parsedData.setLocation(location);
} }
if (locationDataCount > 1) {
location.setLatitude(locationData.get(1));
}
if (locationDataCount > 2) {
location.setHeight(locationData.get(2));
}
parsedData.setLocation(location);
} }
} }
}
for (SenseBoxSensor sensor : parsedData.getSensors()) { for (SenseBoxSensor sensor : parsedData.getSensors()) {
if ("VEML6070".equals(sensor.getSensorType())) { if ("VEML6070".equals(sensor.getSensorType())) {
// "unit" is not nicely comparable, so use sensor type for now // "unit" is not nicely comparable, so use sensor type for now
parsedData.setUvIntensity(sensor); parsedData.setUvIntensity(sensor);
} else if ("SDS 011".equals(sensor.getSensorType())) { } else if ("SDS 011".equals(sensor.getSensorType())) {
// "unit" is not nicely comparable, neither is type, so use sensor title for now // "unit" is not nicely comparable, neither is type, so use sensor title for now
if ("PM2.5".equals(sensor.getTitle())) { if ("PM2.5".equals(sensor.getTitle())) {
parsedData.setParticulateMatter2dot5(sensor); parsedData.setParticulateMatter2dot5(sensor);
} else if ("PM10".equals(sensor.getTitle())) { } else if ("PM10".equals(sensor.getTitle())) {
parsedData.setParticulateMatter10(sensor); parsedData.setParticulateMatter10(sensor);
} else { } else {
logger.debug("SDS 011 sensor title is {}", sensor.getTitle()); logger.debug("SDS 011 sensor title is {}", sensor.getTitle());
}
} else if ("lx".equals(sensor.getUnit())) {
if (sensor.getLastMeasurement() != null) {
if (!(INVALID_BRIGHTNESS.equals(sensor.getLastMeasurement().getValue()))) {
parsedData.setLuminance(sensor);
} }
} } else if ("lx".equals(sensor.getUnit())) {
} else if ("Pa".equals(sensor.getUnit()) || "hPa".equals(sensor.getUnit())) {
parsedData.setPressure(sensor);
} else if ("%".equals(sensor.getUnit())) {
parsedData.setHumidity(sensor);
} else if ("°C".equals(sensor.getUnit())) {
parsedData.setTemperature(sensor);
} else {
if (logger.isDebugEnabled()) {
logger.debug(" Sensor: {}", sensor);
logger.debug(" Sensor unit: {}", sensor.getUnit());
logger.debug(" Sensor type: {}", sensor.getSensorType());
logger.debug(" Sensor LM: {}", sensor.getLastMeasurement());
if (sensor.getLastMeasurement() != null) { if (sensor.getLastMeasurement() != null) {
logger.debug(" Sensor LM value: {}", sensor.getLastMeasurement().getValue()); if (!(INVALID_BRIGHTNESS.equals(sensor.getLastMeasurement().getValue()))) {
logger.debug(" Sensor LM date: '{}'", sensor.getLastMeasurement().getCreatedAt()); parsedData.setLuminance(sensor);
}
}
} else if ("Pa".equals(sensor.getUnit()) || "hPa".equals(sensor.getUnit())) {
parsedData.setPressure(sensor);
} else if ("%".equals(sensor.getUnit())) {
parsedData.setHumidity(sensor);
} else if ("°C".equals(sensor.getUnit())) {
parsedData.setTemperature(sensor);
} else {
if (logger.isDebugEnabled()) {
logger.debug(" Sensor: {}", sensor);
logger.debug(" Sensor unit: {}", sensor.getUnit());
logger.debug(" Sensor type: {}", sensor.getSensorType());
logger.debug(" Sensor LM: {}", sensor.getLastMeasurement());
if (sensor.getLastMeasurement() != null) {
logger.debug(" Sensor LM value: {}", sensor.getLastMeasurement().getValue());
logger.debug(" Sensor LM date: '{}'", sensor.getLastMeasurement().getCreatedAt());
}
} }
} }
} }
SenseBoxDescriptor descriptor = new SenseBoxDescriptor();
descriptor.setApiUrl(query);
String image = parsedData.getImage();
if (image != null && !image.isEmpty()) {
descriptor.setImageUrl(SENSEMAP_IMAGE_URL_BASE + "/" + image);
}
descriptor.setMapUrl(SENSEMAP_MAP_URL_BASE + "/explore/" + senseBoxId);
parsedData.setDescriptor(descriptor);
logger.trace("=================================");
result = parsedData;
} else {
logger.debug("An error occurred while parsing the data into desired class: {} / {}", body,
SenseBoxData.class.getName());
result.setStatus(ThingStatus.OFFLINE);
} }
SenseBoxDescriptor descriptor = new SenseBoxDescriptor();
descriptor.setApiUrl(query);
String image = parsedData.getImage();
if (image != null && !image.isEmpty()) {
descriptor.setImageUrl(SENSEMAP_IMAGE_URL_BASE + "/" + image);
}
descriptor.setMapUrl(SENSEMAP_MAP_URL_BASE + "/explore/" + senseBoxId);
parsedData.setDescriptor(descriptor);
logger.trace("=================================");
result = parsedData;
} catch (JsonSyntaxException e) { } catch (JsonSyntaxException e) {
logger.debug("An error occurred while parsing the data into desired class: {} / {} / {}", body, logger.debug("An error occurred while parsing the data into desired class: {} / {} / {}", body,
SenseBoxData.class.getName(), e.getMessage()); SenseBoxData.class.getName(), e.getMessage());
@ -159,7 +165,6 @@ public class SenseBoxAPIConnection {
logger.debug("IO problems while fetching data: {} / {}", query, e.getMessage()); logger.debug("IO problems while fetching data: {} / {}", query, e.getMessage());
result.setStatus(ThingStatus.OFFLINE); result.setStatus(ThingStatus.OFFLINE);
} }
return result; return result;
} }
} }