} else {
if (driver.isModemDBComplete() && !addr.isX10()) {
logger.warn("device {} not found in the modem database. Did you forget to link?", addr);
+ handler.deviceNotLinked(addr);
}
}
return dbes.size();
if (!dbes.containsKey(a)) {
if (!a.isX10()) {
logger.warn("device {} not found in the modem database. Did you forget to link?", a);
+ handler.deviceNotLinked(a);
}
} else {
if (!dev.hasModemDBEntry()) {
import java.util.stream.Stream;
import org.eclipse.jdt.annotation.NonNullByDefault;
-import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.insteon.internal.InsteonBinding;
import org.openhab.binding.insteon.internal.InsteonBindingConstants;
import org.openhab.binding.insteon.internal.config.InsteonChannelConfiguration;
private final Logger logger = LoggerFactory.getLogger(InsteonDeviceHandler.class);
- private @Nullable InsteonDeviceConfiguration config;
+ private @NonNullByDefault({}) InsteonDeviceConfiguration config;
+ private boolean deviceLinked = true;
public InsteonDeviceHandler(Thing thing) {
super(thing);
@Override
public void initialize() {
config = getConfigAs(InsteonDeviceConfiguration.class);
+ deviceLinked = true;
scheduler.execute(() -> {
final Bridge bridge = getBridge();
});
if (ThingStatus.ONLINE == bridge.getStatus()) {
- updateStatus(ThingStatus.ONLINE);
+ if (deviceLinked) {
+ updateStatus(ThingStatus.ONLINE);
+ }
} else {
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.BRIDGE_OFFLINE);
}
logger.debug("channel {} unlinked ", channelUID.getAsString());
}
+ public InsteonAddress getInsteonAddress() {
+ return new InsteonAddress(config.getAddress());
+ }
+
+ public void deviceNotLinked() {
+ String msg = "device with the address '" + config.getAddress()
+ + "' was not found in the modem database. Did you forget to link?";
+ updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, msg);
+
+ deviceLinked = false;
+ }
+
private InsteonNetworkHandler getInsteonNetworkHandler() {
Bridge bridge = getBridge();
if (bridge == null) {
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.insteon.internal.InsteonBinding;
import org.openhab.binding.insteon.internal.config.InsteonNetworkConfiguration;
+import org.openhab.binding.insteon.internal.device.InsteonAddress;
import org.openhab.binding.insteon.internal.discovery.InsteonDeviceDiscoveryService;
import org.openhab.core.io.console.Console;
import org.openhab.core.io.transport.serial.SerialPortManager;
});
}
+ public void deviceNotLinked(InsteonAddress addr) {
+ getThing().getThings().stream().forEach((thing) -> {
+ InsteonDeviceHandler handler = (InsteonDeviceHandler) thing.getHandler();
+ if (handler != null && addr.equals(handler.getInsteonAddress())) {
+ handler.deviceNotLinked();
+ return;
+ }
+ });
+ }
+
public void displayDevices(Console console) {
display(console, deviceInfo);
}