State value = UnDefType.UNDEF;
try {
if (owc.exists("/" + sensorId)) {
int attempt = 1;
Item item = provider.getItem(itemName);
while (value == UnDefType.UNDEF && attempt <= retry) {
String valueString = owc.read(sensorId + "/" + unitId);
logger.debug("{}: Read value '{}' from {}/{}, attempt={}",
new Object[] { itemName, valueString, sensorId, unitId, attempt });
if (valueString != null) {
if (item instanceof ContactItem) {
value = valueString.trim().equals("1") ? OpenClosedType.CLOSED : OpenClosedType.OPEN;
} else if (item instanceof SwitchItem) {
value = valueString.trim().equals("1") ? OnOffType.ON : OnOffType.OFF;
} else if (item instanceof NumberItem) {
value = new DecimalType(Double.valueOf(valueString));
if (filter != null) {
value = filter.filter((DecimalType)value);
}
} else {
throw new IllegalStateException(
"The item with name " + itemName + " is not a valid type.");
}
}
attempt++;
}
} else {
logger.info("there is no sensor for path {}",
sensorId);
}
logger.debug("Found sensor {} with value {}", sensorId, value);
} catch (OwfsException oe) {
logger.warn("couldn't read from path {}", sensorId);
if (logger.isDebugEnabled()) {
logger.debug("reading from path " + sensorId + " throws exception", oe);
}
} catch (IOException ioe) {
logger.error(
"couldn't establish network connection while reading '" + sensorId + "'", ioe);
} finally {
Item item = provider.getItem(itemName);
if (item != null) {
synchronized (item) {
if (!item.getState().equals(value)) {
eventPublisher.postUpdate(itemName, value);
}
}
}
}