From b5fe0b27712a27ab236e31f79ed0708e81e57dcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Austvik?= Date: Wed, 14 Dec 2022 19:14:20 +0100 Subject: [PATCH] [nanoleaf] Bugfix: Handle non-integer panel ids MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Panel ids are sometimes returned as BigInteger We haven't been able to understand why this happens somewhere and somewhere not, but this is an sledgehammer attempt to fix it quickly to unblock users, and then we will try to understand it later. Discussions: https://community.openhab.org/t/java-lang-classcastexception-class-java-math-bigdecimal-cannot-be-cast-to-class-java-lang-integer/142035/16 https://community.openhab.org/t/nanoleaf-binding-oh3-stabilization-update/116300/61 Signed-off-by: Jørgen Austvik --- .../internal/handler/NanoleafPanelHandler.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/bundles/org.openhab.binding.nanoleaf/src/main/java/org/openhab/binding/nanoleaf/internal/handler/NanoleafPanelHandler.java b/bundles/org.openhab.binding.nanoleaf/src/main/java/org/openhab/binding/nanoleaf/internal/handler/NanoleafPanelHandler.java index e80545dd901e1..bef5bfb985ed2 100644 --- a/bundles/org.openhab.binding.nanoleaf/src/main/java/org/openhab/binding/nanoleaf/internal/handler/NanoleafPanelHandler.java +++ b/bundles/org.openhab.binding.nanoleaf/src/main/java/org/openhab/binding/nanoleaf/internal/handler/NanoleafPanelHandler.java @@ -286,7 +286,21 @@ public void updatePanelGesture(int gesture) { } public Integer getPanelID() { - return (Integer) getThing().getConfiguration().get(CONFIG_PANEL_ID); + Object panelId = getThing().getConfiguration().get(CONFIG_PANEL_ID); + if (panelId instanceof Integer) { + return (Integer) panelId; + } else if (panelId instanceof Number) { + return ((Number) panelId).intValue(); + } else { + // Fall back to parsing string representation of panel if it is not returning an integer + String stringPanelId = panelId.toString(); + Integer parsedPanelId = Integer.getInteger(stringPanelId); + if (parsedPanelId == null) { + return 0; + } else { + return parsedPanelId; + } + } } private void setPanelColor(HSBType color) {