From 5ae581f4e142efadd713fc584f869aae8c7d46ad Mon Sep 17 00:00:00 2001 From: jlaur Date: Wed, 8 Sep 2021 20:34:08 +0200 Subject: [PATCH] Fix broken things file support. (#11218) Fixes #8877 Signed-off-by: Jacob Laursen --- .../internal/handler/MieleApplianceHandler.java | 14 ++++++++------ .../miele/internal/handler/MieleBridgeHandler.java | 12 +++++++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/MieleApplianceHandler.java b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/MieleApplianceHandler.java index 560eed510e17c..d6c000340b79e 100644 --- a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/MieleApplianceHandler.java +++ b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/MieleApplianceHandler.java @@ -143,8 +143,7 @@ public void handleCommand(ChannelUID channelUID, Command command) { @Override public void onApplianceStateChanged(String UID, DeviceClassObject dco) { - String myUID = (getThing().getProperties().get(PROTOCOL_PROPERTY_NAME)) - + (String) getThing().getConfiguration().getProperties().get(APPLIANCE_ID); + String myUID = (String) getThing().getConfiguration().getProperties().get(APPLIANCE_ID); String modelID = StringUtils.right(dco.DeviceClass, dco.DeviceClass.length() - new String("com.miele.xgw3000.gateway.hdm.deviceclasses.Miele").length()); @@ -167,8 +166,7 @@ public void onApplianceStateChanged(String UID, DeviceClassObject dco) { @Override public void onAppliancePropertyChanged(String UID, DeviceProperty dp) { - String myUID = (getThing().getProperties().get(PROTOCOL_PROPERTY_NAME)) - + (String) getThing().getConfiguration().getProperties().get(APPLIANCE_ID); + String myUID = (String) getThing().getConfiguration().getProperties().get(APPLIANCE_ID); if (myUID.equals(UID)) { try { @@ -230,7 +228,7 @@ public void onAppliancePropertyChanged(String UID, DeviceProperty dp) { @Override public void onApplianceRemoved(HomeDevice appliance) { if (uid != null) { - if (uid.equals(appliance.UID)) { + if (uid.equals(appliance.getApplianceId())) { updateStatus(ThingStatus.OFFLINE); } } @@ -239,7 +237,11 @@ public void onApplianceRemoved(HomeDevice appliance) { @Override public void onApplianceAdded(HomeDevice appliance) { if (uid != null) { - if (uid.equals(appliance.UID)) { + if (uid.equals(appliance.getApplianceId())) { + Map properties = editProperties(); + properties.put(PROTOCOL_PROPERTY_NAME, appliance.getProtocol()); + updateProperties(properties); + updateStatus(ThingStatus.ONLINE); } } diff --git a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/MieleBridgeHandler.java b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/MieleBridgeHandler.java index b02df0947f593..ad2ac3d7671f0 100644 --- a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/MieleBridgeHandler.java +++ b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/MieleBridgeHandler.java @@ -266,8 +266,14 @@ public void run() { for (Thing appliance : getThing().getThings()) { if (appliance.getStatus() == ThingStatus.ONLINE) { - String UID = appliance.getProperties().get(PROTOCOL_PROPERTY_NAME) - + (String) appliance.getConfiguration().getProperties().get(APPLIANCE_ID); + String applianceId = (String) appliance.getConfiguration().getProperties() + .get(APPLIANCE_ID); + String protocol = appliance.getProperties().get(PROTOCOL_PROPERTY_NAME); + if (protocol == null) { + logger.error("Protocol property is missing for {}", applianceId); + continue; + } + String UID = protocol + applianceId; Object[] args = new Object[2]; args[0] = UID; @@ -280,7 +286,7 @@ public void run() { DeviceClassObject dco = gson.fromJson(obj, DeviceClassObject.class); for (ApplianceStatusListener listener : applianceStatusListeners) { - listener.onApplianceStateChanged(UID, dco); + listener.onApplianceStateChanged(applianceId, dco); } } catch (Exception e) { logger.debug("An exception occurred while quering an appliance : '{}'",