From: Ethan Dye Date: Tue, 16 Mar 2021 19:51:25 +0000 (-0600) Subject: [OmniLink] Minor restructuring of binding code (#10280) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=df4a22ba9b20fa2a2fa76b25e552e2d66db94553;p=openhab-addons.git [OmniLink] Minor restructuring of binding code (#10280) * Minor restructuring of binding code Signed-off-by: Ethan Dye * Ensure that SystemType is present before switch Signed-off-by: Ethan Dye * Log on invalid System Type Signed-off-by: Ethan Dye --- diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/SystemType.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/SystemType.java index 5ac9cf644d..a17159463b 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/SystemType.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/SystemType.java @@ -13,6 +13,7 @@ package org.openhab.binding.omnilink.internal; import java.util.Arrays; +import java.util.Optional; import java.util.Set; import org.eclipse.jdt.annotation.NonNullByDefault; @@ -34,8 +35,7 @@ public enum SystemType { this.modelNumbers = Set.of(modelNumbers); } - public static SystemType getType(int modelNumber) { - return Arrays.stream(values()).filter(s -> s.modelNumbers.contains(modelNumber)).findFirst() - .orElseThrow(IllegalArgumentException::new); + public static Optional getType(int modelNumber) { + return Arrays.stream(values()).filter(s -> s.modelNumbers.contains(modelNumber)).findFirst(); } } diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/TemperatureFormat.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/TemperatureFormat.java new file mode 100644 index 0000000000..58f02afefe --- /dev/null +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/TemperatureFormat.java @@ -0,0 +1,92 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.omnilink.internal; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +import com.digitaldan.jomnilinkII.MessageUtils; + +/** + * The {@link TemperatureFormat} defines some methods that are used to + * convert OmniLink temperature values into Fahrenheit or Celsius. + * + * @author Craig Hamilton - Initial contribution + * @author Ethan Dye - openHAB3 rewrite + */ +@NonNullByDefault +public enum TemperatureFormat { + // Don't convert zero - it appears that is what omni returns when there is no value. + CELSIUS(2) { + @Override + public float omniToFormat(int omniNumber) { + return MessageUtils.omniToC(omniNumber); + } + + @Override + public int formatToOmni(float celsius) { + return MessageUtils.CToOmni(celsius); + } + }, + FAHRENHEIT(1) { + @Override + public float omniToFormat(int omniNumber) { + return MessageUtils.omniToF(omniNumber); + } + + @Override + public int formatToOmni(float fahrenheit) { + return MessageUtils.FtoOmni(fahrenheit); + } + }; + + private final int formatNumber; + + private TemperatureFormat(int formatNumber) { + this.formatNumber = formatNumber; + } + + /** + * Convert a number represented by the omni to the format. + * + * @param omniNumber Number to convert + * @return Number converted to appropriate format. + */ + public abstract float omniToFormat(int omniNumber); + + /** + * Convert a number from this format into an omni number. + * + * @param format Number in the current format. + * @return Omni formatted number. + */ + public abstract int formatToOmni(float format); + + /** + * Get the number which identifies this format as defined by the omniprotocol. + * + * @return Number which identifies this temperature format. + */ + public int getFormatNumber() { + return formatNumber; + } + + public static TemperatureFormat valueOf(int tempFormat) { + if (tempFormat == CELSIUS.formatNumber) { + return CELSIUS; + } else if (tempFormat == FAHRENHEIT.formatNumber) { + return FAHRENHEIT; + } else { + throw new IllegalArgumentException("Invalid temperature format!"); + } + } +} diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/discovery/ObjectPropertyRequest.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/discovery/ObjectPropertyRequest.java index 7cf1dd8a2a..f44c8e12b6 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/discovery/ObjectPropertyRequest.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/discovery/ObjectPropertyRequest.java @@ -17,7 +17,7 @@ import java.util.Iterator; import java.util.List; import org.eclipse.jdt.annotation.NonNullByDefault; -import org.openhab.binding.omnilink.internal.handler.BridgeOfflineException; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.binding.omnilink.internal.handler.OmnilinkBridgeHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/discovery/OmnilinkDiscoveryService.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/discovery/OmnilinkDiscoveryService.java index 86ceadf7c6..e796ad6611 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/discovery/OmnilinkDiscoveryService.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/discovery/OmnilinkDiscoveryService.java @@ -21,11 +21,12 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.omnilink.internal.SystemType; -import org.openhab.binding.omnilink.internal.handler.BridgeOfflineException; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.binding.omnilink.internal.handler.OmnilinkBridgeHandler; import org.openhab.core.config.discovery.AbstractDiscoveryService; import org.openhab.core.config.discovery.DiscoveryResult; @@ -62,7 +63,7 @@ public class OmnilinkDiscoveryService extends AbstractDiscoveryService private final Logger logger = LoggerFactory.getLogger(OmnilinkDiscoveryService.class); private static final int DISCOVER_TIMEOUT_SECONDS = 30; private @Nullable OmnilinkBridgeHandler bridgeHandler; - private @Nullable SystemType systemType; + private Optional systemType = Optional.empty(); private @Nullable List areas; /** @@ -389,7 +390,6 @@ public class OmnilinkDiscoveryService extends AbstractDiscoveryService int thingNumber = areaProperties.getNumber(); String thingName = areaProperties.getName(); String thingID = Integer.toString(thingNumber); - ThingUID thingUID = null; /* * It seems that for simple OmniLink Controller configurations there @@ -405,27 +405,24 @@ public class OmnilinkDiscoveryService extends AbstractDiscoveryService Map properties = Map.of(THING_PROPERTIES_NAME, thingName); - final SystemType systemType = this.systemType; - if (systemType != null) { - switch (systemType) { + final String name = thingName; + systemType.ifPresentOrElse(t -> { + ThingUID thingUID = null; + switch (t) { case LUMINA: thingUID = new ThingUID(THING_TYPE_LUMINA_AREA, bridgeUID, thingID); break; - case OMNI: - thingUID = new ThingUID(THING_TYPE_OMNI_AREA, bridgeUID, thingID); - break; default: - throw new IllegalStateException("Unknown System Type"); + thingUID = new ThingUID(THING_TYPE_OMNI_AREA, bridgeUID, thingID); } - } - - if (thingUID != null) { DiscoveryResult discoveryResult = DiscoveryResultBuilder.create(thingUID).withProperties(properties) .withProperty(THING_PROPERTIES_NUMBER, thingID) - .withRepresentationProperty(THING_PROPERTIES_NUMBER).withBridge(bridgeUID) - .withLabel(thingName).build(); + .withRepresentationProperty(THING_PROPERTIES_NUMBER).withBridge(bridgeUID).withLabel(name) + .build(); thingDiscovered(discoveryResult); - } + }, () -> { + logger.warn("Unknown System Type"); + }); areas.add(areaProperties); } diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/exceptions/BridgeOfflineException.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/exceptions/BridgeOfflineException.java new file mode 100644 index 0000000000..7b35721280 --- /dev/null +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/exceptions/BridgeOfflineException.java @@ -0,0 +1,29 @@ +/** + * Copyright (c) 2010-2021 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.omnilink.internal.exceptions; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * The {@link BridgeOfflineException} defines an exception for when the OmniLink + * Bridge is offline or unavailable. + * + * @author Craig Hamilton - Initial contribution + */ +@NonNullByDefault +@SuppressWarnings("serial") +public class BridgeOfflineException extends Exception { + public BridgeOfflineException(Exception e) { + super(e); + } +} diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AbstractAreaHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AbstractAreaHandler.java index f848860a31..1201d30b9b 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AbstractAreaHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AbstractAreaHandler.java @@ -22,6 +22,7 @@ import java.util.Optional; import org.eclipse.jdt.annotation.NonNullByDefault; import org.openhab.binding.omnilink.internal.AreaAlarm; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.StringType; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AbstractOmnilinkHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AbstractOmnilinkHandler.java index f17f716a1c..587b253dc6 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AbstractOmnilinkHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AbstractOmnilinkHandler.java @@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.thing.Bridge; import org.openhab.core.thing.Thing; import org.openhab.core.thing.binding.BaseThingHandler; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AudioSourceHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AudioSourceHandler.java index 9846edf7d1..e5501cc60b 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AudioSourceHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AudioSourceHandler.java @@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.StringType; import org.openhab.core.thing.ChannelUID; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AudioZoneHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AudioZoneHandler.java index f80e28da5a..6a51b68f34 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AudioZoneHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/AudioZoneHandler.java @@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.omnilink.internal.AudioPlayer; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.NextPreviousType; import org.openhab.core.library.types.OnOffType; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/BridgeOfflineException.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/BridgeOfflineException.java deleted file mode 100644 index 891d4c4a69..0000000000 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/BridgeOfflineException.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2010-2021 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.omnilink.internal.handler; - -import org.eclipse.jdt.annotation.NonNullByDefault; - -/** - * The {@link BridgeOfflineException} defines an exception for when the OmniLink - * Bridge is offline or unavailable. - * - * @author Craig Hamilton - Initial contribution - */ -@NonNullByDefault -public class BridgeOfflineException extends Exception { - private static final long serialVersionUID = -9081729691518514097L; - - public BridgeOfflineException(Exception e) { - super(e); - } -} diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/HumiditySensorHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/HumiditySensorHandler.java index 002c4dcc8f..4e865439ea 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/HumiditySensorHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/HumiditySensorHandler.java @@ -22,8 +22,10 @@ import javax.measure.quantity.Dimensionless; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.omnilink.internal.TemperatureFormat; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.unit.Units; import org.openhab.core.thing.ChannelUID; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/LockHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/LockHandler.java index b2e554c525..6c2bfa8f60 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/LockHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/LockHandler.java @@ -21,6 +21,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.OnOffType; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/OmnilinkBridgeHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/OmnilinkBridgeHandler.java index c02dadaa0d..a0991bb9a5 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/OmnilinkBridgeHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/OmnilinkBridgeHandler.java @@ -28,8 +28,10 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.omnilink.internal.AudioPlayer; import org.openhab.binding.omnilink.internal.SystemType; +import org.openhab.binding.omnilink.internal.TemperatureFormat; import org.openhab.binding.omnilink.internal.config.OmnilinkBridgeConfig; import org.openhab.binding.omnilink.internal.discovery.OmnilinkDiscoveryService; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.DateTimeType; import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.StringType; @@ -93,7 +95,7 @@ public class OmnilinkBridgeHandler extends BaseBridgeHandler implements Notifica private @Nullable ScheduledFuture eventPollingJob; private final int autoReconnectPeriod = 60; private Optional audioPlayer = Optional.empty(); - private @Nullable SystemType systemType = null; + private Optional systemType = Optional.empty(); private final Gson gson = new Gson(); private int eventLogNumber = 0; @@ -306,28 +308,23 @@ public class OmnilinkBridgeHandler extends BaseBridgeHandler implements Notifica theThing.map(Thing::getHandler) .ifPresent(theHandler -> ((ZoneHandler) theHandler).handleStatus(zoneStatus)); } else if (status instanceof ExtendedAreaStatus) { - final SystemType systemType = this.systemType; ExtendedAreaStatus areaStatus = (ExtendedAreaStatus) status; int areaNumber = areaStatus.getNumber(); - if (systemType != null) { - logger.debug("Received status update for Area: {}, status: {}", areaNumber, areaStatus); - Optional theThing; - switch (systemType) { - case OMNI: - theThing = getChildThing(THING_TYPE_OMNI_AREA, areaNumber); - break; + logger.debug("Received status update for Area: {}, status: {}", areaNumber, areaStatus); + systemType.ifPresent(t -> { + Optional theThing = Optional.empty(); + switch (t) { case LUMINA: theThing = getChildThing(THING_TYPE_LUMINA_AREA, areaNumber); break; - default: - theThing = Optional.empty(); + case OMNI: + theThing = getChildThing(THING_TYPE_OMNI_AREA, areaNumber); + break; } theThing.map(Thing::getHandler) .ifPresent(theHandler -> ((AbstractAreaHandler) theHandler).handleStatus(areaStatus)); - } else { - logger.debug("Received null System Type!"); - } + }); } else if (status instanceof ExtendedAccessControlReaderLockStatus) { ExtendedAccessControlReaderLockStatus lockStatus = (ExtendedAccessControlReaderLockStatus) status; int lockNumber = lockStatus.getNumber(); diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/TempSensorHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/TempSensorHandler.java index 75152c27f1..969527e91a 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/TempSensorHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/TempSensorHandler.java @@ -22,8 +22,10 @@ import javax.measure.quantity.Temperature; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.omnilink.internal.TemperatureFormat; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.unit.ImperialUnits; import org.openhab.core.library.unit.SIUnits; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/TemperatureFormat.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/TemperatureFormat.java deleted file mode 100644 index fdff35def4..0000000000 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/TemperatureFormat.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Copyright (c) 2010-2021 Contributors to the openHAB project - * - * See the NOTICE file(s) distributed with this work for additional - * information. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0 - * - * SPDX-License-Identifier: EPL-2.0 - */ -package org.openhab.binding.omnilink.internal.handler; - -import org.eclipse.jdt.annotation.NonNullByDefault; - -import com.digitaldan.jomnilinkII.MessageUtils; - -/** - * The {@link TemperatureFormat} defines some methods that are used to - * convert OmniLink temperature values into Fahrenheit or Celsius. - * - * @author Craig Hamilton - Initial contribution - * @author Ethan Dye - openHAB3 rewrite - */ -@NonNullByDefault -public enum TemperatureFormat { - // Don't convert zero - it appears that is what omni returns when there is no value. - CELSIUS(2) { - @Override - public float omniToFormat(int omniNumber) { - return MessageUtils.omniToC(omniNumber); - } - - @Override - public int formatToOmni(float celsius) { - return MessageUtils.CToOmni(celsius); - } - }, - FAHRENHEIT(1) { - @Override - public float omniToFormat(int omniNumber) { - return MessageUtils.omniToF(omniNumber); - } - - @Override - public int formatToOmni(float fahrenheit) { - return MessageUtils.FtoOmni(fahrenheit); - } - }; - - private final int formatNumber; - - private TemperatureFormat(int formatNumber) { - this.formatNumber = formatNumber; - } - - /** - * Convert a number represented by the omni to the format. - * - * @param omniNumber Number to convert - * @return Number converted to appropriate format. - */ - public abstract float omniToFormat(int omniNumber); - - /** - * Convert a number from this format into an omni number. - * - * @param format Number in the current format. - * @return Omni formatted number. - */ - public abstract int formatToOmni(float format); - - /** - * Get the number which identifies this format as defined by the omniprotocol. - * - * @return Number which identifies this temperature format. - */ - public int getFormatNumber() { - return formatNumber; - } - - public static TemperatureFormat valueOf(int tempFormat) { - if (tempFormat == CELSIUS.formatNumber) { - return CELSIUS; - } else if (tempFormat == FAHRENHEIT.formatNumber) { - return FAHRENHEIT; - } else { - throw new IllegalArgumentException("Invalid temperature format!"); - } - } -} diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/ThermostatHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/ThermostatHandler.java index a66259caf6..df84bc9e0e 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/ThermostatHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/ThermostatHandler.java @@ -24,8 +24,10 @@ import javax.measure.quantity.Temperature; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; +import org.openhab.binding.omnilink.internal.TemperatureFormat; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.OpenClosedType; import org.openhab.core.library.types.QuantityType; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/UnitHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/UnitHandler.java index 992905118c..379fc3c109 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/UnitHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/UnitHandler.java @@ -22,6 +22,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.PercentType; diff --git a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/ZoneHandler.java b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/ZoneHandler.java index 1637049b31..8d07e92287 100644 --- a/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/ZoneHandler.java +++ b/bundles/org.openhab.binding.omnilink/src/main/java/org/openhab/binding/omnilink/internal/handler/ZoneHandler.java @@ -23,6 +23,7 @@ import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequest; import org.openhab.binding.omnilink.internal.discovery.ObjectPropertyRequests; +import org.openhab.binding.omnilink.internal.exceptions.BridgeOfflineException; import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.OpenClosedType; import org.openhab.core.library.types.StringType;