diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoBindingConstants.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoBindingConstants.java index 13c7668b4a493..aab1fe502ee56 100644 --- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoBindingConstants.java +++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/MiIoBindingConstants.java @@ -107,6 +107,10 @@ public final class MiIoBindingConstants { public static final String PROPERTY_TIMEOUT = "timeout"; public static final String PROPERTY_CLOUDSERVER = "cloudServer"; + public static final Set PERSISTENT_CHANNELS = Collections.unmodifiableSet( + Stream.of(CHANNEL_COMMAND, CHANNEL_RPC, CHANNEL_SSID, CHANNEL_BSSID, CHANNEL_RSSI, CHANNEL_LIFE) + .collect(Collectors.toSet())); + public static final byte[] DISCOVER_STRING = org.openhab.binding.miio.internal.Utils .hexStringToByteArray("21310020ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); public static final int PORT = 54321; diff --git a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoBasicHandler.java b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoBasicHandler.java index bffcdb8addb45..ba5a5854e056b 100644 --- a/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoBasicHandler.java +++ b/bundles/org.openhab.binding.miio/src/main/java/org/openhab/binding/miio/internal/handler/MiIoBasicHandler.java @@ -411,6 +411,13 @@ private boolean buildChannelStructure(String deviceName) { actions = new HashMap<>(); final MiIoBasicDevice device = this.miioDevice; if (device != null) { + for (Channel cn : getThing().getChannels()) { + logger.trace("Channel '{}' for thing {} already exist... removing", cn.getUID(), + getThing().getUID()); + if (!PERSISTENT_CHANNELS.contains(cn.getUID().getId().toString())) { + thingBuilder.withoutChannels(cn); + } + } for (MiIoBasicChannel miChannel : device.getDevice().getChannels()) { logger.debug("properties {}", miChannel); if (!miChannel.getType().isEmpty()) { @@ -454,13 +461,6 @@ private boolean buildChannelStructure(String deviceName) { return null; } ChannelUID channelUID = new ChannelUID(getThing().getUID(), channel); - - // TODO: Need to understand if this harms anything. If yes, channel only to be added when not there already. - // current way allows to have no issues when channels are changing. - if (getThing().getChannel(channel) != null) { - logger.info("Channel '{}' for thing {} already exist... removing", channel, getThing().getUID()); - thingBuilder.withoutChannel(new ChannelUID(getThing().getUID(), channel)); - } ChannelBuilder newChannel = ChannelBuilder.create(channelUID, dataType).withLabel(miChannel.getFriendlyName()); boolean useGeneratedChannelType = false; if (!miChannel.getChannelType().isBlank()) {