mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-25 14:55:55 +01:00
[airthings] Enhance logging (#11043)
Signed-off-by: Davy Wong <davy.wong.on+github@gmail.com>
This commit is contained in:
parent
65b4db7526
commit
0f3289a937
@ -27,6 +27,7 @@ import org.openhab.binding.bluetooth.BluetoothUtils;
|
|||||||
import org.openhab.binding.bluetooth.notification.BluetoothConnectionStatusNotification;
|
import org.openhab.binding.bluetooth.notification.BluetoothConnectionStatusNotification;
|
||||||
import org.openhab.core.thing.Thing;
|
import org.openhab.core.thing.Thing;
|
||||||
import org.openhab.core.thing.ThingStatus;
|
import org.openhab.core.thing.ThingStatus;
|
||||||
|
import org.openhab.core.thing.ThingStatusDetail;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -49,6 +50,10 @@ abstract public class AbstractAirthingsHandler extends BeaconBluetoothHandler {
|
|||||||
private @Nullable ScheduledFuture<?> scheduledTask;
|
private @Nullable ScheduledFuture<?> scheduledTask;
|
||||||
|
|
||||||
private volatile int refreshInterval;
|
private volatile int refreshInterval;
|
||||||
|
private volatile int errorConnectCounter;
|
||||||
|
private volatile int errorReadCounter;
|
||||||
|
private volatile int errorDisconnectCounter;
|
||||||
|
private volatile int errorResolvingCounter;
|
||||||
|
|
||||||
private volatile ServiceState serviceState = ServiceState.NOT_RESOLVED;
|
private volatile ServiceState serviceState = ServiceState.NOT_RESOLVED;
|
||||||
private volatile ReadState readState = ReadState.IDLE;
|
private volatile ReadState readState = ReadState.IDLE;
|
||||||
@ -129,20 +134,42 @@ abstract public class AbstractAirthingsHandler extends BeaconBluetoothHandler {
|
|||||||
private void connect() {
|
private void connect() {
|
||||||
logger.debug("Connect to device {}...", address);
|
logger.debug("Connect to device {}...", address);
|
||||||
if (!device.connect()) {
|
if (!device.connect()) {
|
||||||
logger.debug("Connecting to device {} failed", address);
|
errorConnectCounter++;
|
||||||
|
if (errorConnectCounter < 6) {
|
||||||
|
logger.debug("Connecting to device {} failed {} times", address, errorConnectCounter);
|
||||||
|
} else {
|
||||||
|
logger.debug("ERROR: Controller reset needed. Connecting to device {} failed {} times", address,
|
||||||
|
errorConnectCounter);
|
||||||
|
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, "Connecting to device failed");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.debug("Connected to device {}", address);
|
||||||
|
errorConnectCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disconnect() {
|
private void disconnect() {
|
||||||
logger.debug("Disconnect from device {}...", address);
|
logger.debug("Disconnect from device {}...", address);
|
||||||
if (!device.disconnect()) {
|
if (!device.disconnect()) {
|
||||||
logger.debug("Disconnect from device {} failed", address);
|
errorDisconnectCounter++;
|
||||||
|
if (errorDisconnectCounter < 6) {
|
||||||
|
logger.debug("Disconnect from device {} failed {} times", address, errorDisconnectCounter);
|
||||||
|
} else {
|
||||||
|
logger.debug("ERROR: Controller reset needed. Disconnect from device {} failed {} times", address,
|
||||||
|
errorDisconnectCounter);
|
||||||
|
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
|
||||||
|
"Disconnect from device failed");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.debug("Disconnected from device {}", address);
|
||||||
|
errorDisconnectCounter = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void read() {
|
private void read() {
|
||||||
switch (serviceState) {
|
switch (serviceState) {
|
||||||
case NOT_RESOLVED:
|
case NOT_RESOLVED:
|
||||||
|
logger.debug("Discover services on device {}", address);
|
||||||
discoverServices();
|
discoverServices();
|
||||||
break;
|
break;
|
||||||
case RESOLVED:
|
case RESOLVED:
|
||||||
@ -152,6 +179,8 @@ abstract public class AbstractAirthingsHandler extends BeaconBluetoothHandler {
|
|||||||
BluetoothCharacteristic characteristic = device.getCharacteristic(getDataUUID());
|
BluetoothCharacteristic characteristic = device.getCharacteristic(getDataUUID());
|
||||||
if (characteristic != null) {
|
if (characteristic != null) {
|
||||||
readState = ReadState.READING;
|
readState = ReadState.READING;
|
||||||
|
errorReadCounter = 0;
|
||||||
|
errorResolvingCounter = 0;
|
||||||
device.readCharacteristic(characteristic).whenComplete((data, ex) -> {
|
device.readCharacteristic(characteristic).whenComplete((data, ex) -> {
|
||||||
try {
|
try {
|
||||||
logger.debug("Characteristic {} from device {}: {}", characteristic.getUuid(),
|
logger.debug("Characteristic {} from device {}: {}", characteristic.getUuid(),
|
||||||
@ -165,14 +194,34 @@ abstract public class AbstractAirthingsHandler extends BeaconBluetoothHandler {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
logger.debug("Read data from device {} failed", address);
|
errorReadCounter++;
|
||||||
|
if (errorReadCounter < 6) {
|
||||||
|
logger.debug("Read data from device {} failed {} times", address, errorReadCounter);
|
||||||
|
} else {
|
||||||
|
logger.debug(
|
||||||
|
"ERROR: Controller reset needed. Read data from device {} failed {} times",
|
||||||
|
address, errorReadCounter);
|
||||||
|
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
|
||||||
|
"Read data from device failed");
|
||||||
|
}
|
||||||
disconnect();
|
disconnect();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
logger.debug("Unhandled Resolved readState {} on device {}", readState, address);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
break;
|
||||||
|
default: // serviceState RESOLVING
|
||||||
|
errorResolvingCounter++;
|
||||||
|
if (errorResolvingCounter < 6) {
|
||||||
|
logger.debug("Unhandled serviceState {} on device {}", serviceState, address);
|
||||||
|
} else {
|
||||||
|
logger.debug("ERROR: Controller reset needed. Unhandled serviceState {} on device {}",
|
||||||
|
serviceState, address);
|
||||||
|
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
|
||||||
|
"Service discovery for device failed");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -197,6 +246,7 @@ abstract public class AbstractAirthingsHandler extends BeaconBluetoothHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionStateChange(BluetoothConnectionStatusNotification connectionNotification) {
|
public void onConnectionStateChange(BluetoothConnectionStatusNotification connectionNotification) {
|
||||||
|
logger.debug("Connection State Change Event is {}", connectionNotification.getConnectionState());
|
||||||
switch (connectionNotification.getConnectionState()) {
|
switch (connectionNotification.getConnectionState()) {
|
||||||
case DISCONNECTED:
|
case DISCONNECTED:
|
||||||
if (serviceState == ServiceState.RESOLVING) {
|
if (serviceState == ServiceState.RESOLVING) {
|
||||||
|
Loading…
Reference in New Issue
Block a user