diff --git a/bundles/org.openhab.binding.miele/README.md b/bundles/org.openhab.binding.miele/README.md index 2aa12ed7a581..3439eaace5a8 100644 --- a/bundles/org.openhab.binding.miele/README.md +++ b/bundles/org.openhab.binding.miele/README.md @@ -126,9 +126,9 @@ Channels available for each appliance type are listed below. | rawPhase | Number | Read | Current phase of the program running on the appliance as raw number | | start | DateTime | Read | Programmed start time of the program | | end | DateTime | Read | End time of the program (programmed or running) | -| duration | DateTime | Read | Duration of the program running on the appliance | -| elapsed | DateTime | Read | Time elapsed in the program running on the appliance | -| finish | DateTime | Read | Time to finish the program running on the appliance | +| duration | Number:Time | Read | Duration of the program running on the appliance | +| elapsed | Number:Time | Read | Time elapsed in the program running on the appliance | +| finish | Number:Time | Read | Time to finish the program running on the appliance | | door | Contact | Read | Current state of the door of the appliance | | switch | Switch | Write | Switch the appliance on or off | | powerConsumption | Number:Power | Read | Power consumption by the currently running program on the appliance | @@ -239,9 +239,9 @@ Channels available for each appliance type are listed below. | rawPhase | Number | Read | Current phase of the program running on the appliance as raw number | | start | DateTime | Read | Programmed start time of the program | | end | DateTime | Read | End time of the program (programmed or running) | -| duration | DateTime | Read | Duration of the program running on the appliance | -| elapsed | DateTime | Read | Time elapsed in the program running on the appliance | -| finish | DateTime | Read | Time to finish the program running on the appliance | +| duration | Number:Time | Read | Duration of the program running on the appliance | +| elapsed | Number:Time | Read | Time elapsed in the program running on the appliance | +| finish | Number:Time | Read | Time to finish the program running on the appliance | | target | Number:Temperature | Read | Target temperature to be reached by the oven | | measured | Number:Temperature | Read | Actual measured temperature in the oven | | temp1 | Number:Temperature | Read | Program temperature in the oven 1 | @@ -282,9 +282,9 @@ See oven. | rawPhase | Number | Read | Current phase of the program running on the appliance as raw number | | start | DateTime | Read | Programmed start time of the program | | end | DateTime | Read | End time of the program (programmed or running) | -| duration | DateTime | Read | Duration of the program running on the appliance | -| elapsed | DateTime | Read | Time elapsed in the program running on the appliance | -| finish | DateTime | Read | Time to finish the program running on the appliance | +| duration | Number:Time | Read | Duration of the program running on the appliance | +| elapsed | Number:Time | Read | Time elapsed in the program running on the appliance | +| finish | Number:Time | Read | Time to finish the program running on the appliance | | door | Contact | Read | Current state of the door of the appliance | | switch | Switch | Write | Switch the appliance on or off | | step | Number | Read | Current step in the program running on the appliance | @@ -347,9 +347,9 @@ See oven. | rawPhase | Number | Read | Current phase of the program running on the appliance as raw number | | start | DateTime | Read | Programmed start time of the program | | end | DateTime | Read | End time of the program (programmed or running) | -| duration | DateTime | Read | Duration of the program running on the appliance | -| elapsed | DateTime | Read | Time elapsed in the program running on the appliance | -| finish | DateTime | Read | Time to finish the program running on the appliance | +| duration | Number:Time | Read | Duration of the program running on the appliance | +| elapsed | Number:Time | Read | Time elapsed in the program running on the appliance | +| finish | Number:Time | Read | Time to finish the program running on the appliance | | door | Contact | Read | Current state of the door of the appliance | | switch | Switch | Write | Switch the appliance on or off | | target | Number:Temperature | Read | Temperature of the selected program (10 °C = cold) | diff --git a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/DishwasherChannelSelector.java b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/DishwasherChannelSelector.java index 78e132ecbb8e..20c19a578260 100644 --- a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/DishwasherChannelSelector.java +++ b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/DishwasherChannelSelector.java @@ -16,10 +16,7 @@ import static org.openhab.binding.miele.internal.MieleBindingConstants.*; import java.lang.reflect.Method; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Map; -import java.util.TimeZone; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; @@ -32,6 +29,7 @@ import org.openhab.core.library.types.OpenClosedType; import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.StringType; +import org.openhab.core.library.unit.Units; import org.openhab.core.types.State; import org.openhab.core.types.Type; import org.openhab.core.types.UnDefType; @@ -75,35 +73,27 @@ public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationPr PROGRAM_PHASE(RAW_PHASE_PROPERTY_NAME, PHASE_CHANNEL_ID, DecimalType.class, false, false), START_TIME("", START_CHANNEL_ID, DateTimeType.class, false, false), END_TIME("", END_CHANNEL_ID, DateTimeType.class, false, false), - DURATION("duration", "duration", DateTimeType.class, false, false) { + DURATION("duration", "duration", QuantityType.class, false, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { - Date date = new Date(); - SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT+0")); try { - date.setTime(Long.valueOf(s) * 60000); - } catch (Exception e) { - date.setTime(0); + return new QuantityType<>(Long.valueOf(s), Units.MINUTE); + } catch (NumberFormatException e) { + return UnDefType.UNDEF; } - return getState(dateFormatter.format(date)); } }, - ELAPSED_TIME("elapsedTime", "elapsed", DateTimeType.class, false, false) { + ELAPSED_TIME("elapsedTime", "elapsed", QuantityType.class, false, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { - Date date = new Date(); - SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT+0")); try { - date.setTime(Long.valueOf(s) * 60000); - } catch (Exception e) { - date.setTime(0); + return new QuantityType<>(Long.valueOf(s), Units.MINUTE); + } catch (NumberFormatException e) { + return UnDefType.UNDEF; } - return getState(dateFormatter.format(date)); } }, - FINISH_TIME("", FINISH_CHANNEL_ID, DateTimeType.class, false, false), + FINISH_TIME("", FINISH_CHANNEL_ID, QuantityType.class, false, false), DOOR("signalDoor", "door", OpenClosedType.class, false, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { 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 daaba7146744..9979231b746d 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 @@ -15,7 +15,6 @@ import static org.openhab.binding.miele.internal.MieleBindingConstants.*; import java.time.Instant; -import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.temporal.ChronoUnit; import java.util.HashMap; @@ -38,6 +37,8 @@ import org.openhab.core.i18n.TranslationProvider; import org.openhab.core.library.types.DateTimeType; import org.openhab.core.library.types.OnOffType; +import org.openhab.core.library.types.QuantityType; +import org.openhab.core.library.unit.Units; import org.openhab.core.thing.Bridge; import org.openhab.core.thing.ChannelUID; import org.openhab.core.thing.Thing; @@ -335,9 +336,7 @@ private void updateDurationState(ChannelUID channelUid, String value) { try { long minutesFromNow = Long.valueOf(value); if (minutesFromNow > 0) { - ZonedDateTime remaining = ZonedDateTime.ofInstant(Instant.ofEpochSecond(minutesFromNow * 60), - ZoneId.of("UTC")); - updateState(channelUid, new DateTimeType(remaining.withZoneSameLocal(timeZoneProvider.getTimeZone()))); + updateState(channelUid, new QuantityType<>(minutesFromNow, Units.MINUTE)); return; } } catch (NumberFormatException e) { diff --git a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/OvenChannelSelector.java b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/OvenChannelSelector.java index 998df2e9a8f3..ca4506e63067 100644 --- a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/OvenChannelSelector.java +++ b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/OvenChannelSelector.java @@ -16,10 +16,7 @@ import static org.openhab.binding.miele.internal.MieleBindingConstants.*; import java.lang.reflect.Method; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Map; -import java.util.TimeZone; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; @@ -32,6 +29,7 @@ import org.openhab.core.library.types.OpenClosedType; import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.StringType; +import org.openhab.core.library.unit.Units; import org.openhab.core.types.State; import org.openhab.core.types.Type; import org.openhab.core.types.UnDefType; @@ -70,35 +68,27 @@ public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationPr PROGRAM_PHASE(RAW_PHASE_PROPERTY_NAME, PHASE_CHANNEL_ID, DecimalType.class, false), START_TIME("", START_CHANNEL_ID, DateTimeType.class, false), END_TIME("", END_CHANNEL_ID, DateTimeType.class, false), - DURATION("duration", "duration", DateTimeType.class, false) { + DURATION("duration", "duration", QuantityType.class, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { - Date date = new Date(); - SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT+0")); try { - date.setTime(Long.valueOf(s) * 60000); - } catch (Exception e) { - date.setTime(0); + return new QuantityType<>(Long.valueOf(s), Units.MINUTE); + } catch (NumberFormatException e) { + return UnDefType.UNDEF; } - return getState(dateFormatter.format(date)); } }, - ELAPSED_TIME("elapsedTime", "elapsed", DateTimeType.class, false) { + ELAPSED_TIME("elapsedTime", "elapsed", QuantityType.class, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { - Date date = new Date(); - SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT+0")); try { - date.setTime(Long.valueOf(s) * 60000); - } catch (Exception e) { - date.setTime(0); + return new QuantityType<>(Long.valueOf(s), Units.MINUTE); + } catch (NumberFormatException e) { + return UnDefType.UNDEF; } - return getState(dateFormatter.format(date)); } }, - FINISH_TIME("", FINISH_CHANNEL_ID, DateTimeType.class, false), + FINISH_TIME("", FINISH_CHANNEL_ID, QuantityType.class, false), TARGET_TEMP("targetTemperature", "target", QuantityType.class, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { diff --git a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/TumbleDryerChannelSelector.java b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/TumbleDryerChannelSelector.java index e762fd181eb1..7e924c4df5ad 100644 --- a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/TumbleDryerChannelSelector.java +++ b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/TumbleDryerChannelSelector.java @@ -16,10 +16,7 @@ import static org.openhab.binding.miele.internal.MieleBindingConstants.*; import java.lang.reflect.Method; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Map; -import java.util.TimeZone; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; @@ -30,7 +27,9 @@ import org.openhab.core.library.types.DecimalType; import org.openhab.core.library.types.OnOffType; import org.openhab.core.library.types.OpenClosedType; +import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.StringType; +import org.openhab.core.library.unit.Units; import org.openhab.core.types.State; import org.openhab.core.types.Type; import org.openhab.core.types.UnDefType; @@ -75,35 +74,27 @@ public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationPr PROGRAM_PHASE(RAW_PHASE_PROPERTY_NAME, PHASE_CHANNEL_ID, DecimalType.class, false), START_TIME("", START_CHANNEL_ID, DateTimeType.class, false), END_TIME("", END_CHANNEL_ID, DateTimeType.class, false), - DURATION("duration", "duration", DateTimeType.class, false) { + DURATION("duration", "duration", QuantityType.class, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { - Date date = new Date(); - SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT+0")); try { - date.setTime(Long.valueOf(s) * 60000); - } catch (Exception e) { - date.setTime(0); + return new QuantityType<>(Long.valueOf(s), Units.MINUTE); + } catch (NumberFormatException e) { + return UnDefType.UNDEF; } - return getState(dateFormatter.format(date)); } }, - ELAPSED_TIME("elapsedTime", "elapsed", DateTimeType.class, false) { + ELAPSED_TIME("elapsedTime", "elapsed", QuantityType.class, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { - Date date = new Date(); - SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT+0")); try { - date.setTime(Long.valueOf(s) * 60000); - } catch (Exception e) { - date.setTime(0); + return new QuantityType<>(Long.valueOf(s), Units.MINUTE); + } catch (NumberFormatException e) { + return UnDefType.UNDEF; } - return getState(dateFormatter.format(date)); } }, - FINISH_TIME("", FINISH_CHANNEL_ID, DateTimeType.class, false), + FINISH_TIME("", FINISH_CHANNEL_ID, QuantityType.class, false), DRYING_STEP("dryingStep", "step", DecimalType.class, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { diff --git a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/WashingMachineChannelSelector.java b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/WashingMachineChannelSelector.java index 44eecd47a8dc..38c679eb96df 100644 --- a/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/WashingMachineChannelSelector.java +++ b/bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/WashingMachineChannelSelector.java @@ -16,10 +16,7 @@ import static org.openhab.binding.miele.internal.MieleBindingConstants.*; import java.lang.reflect.Method; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Map; -import java.util.TimeZone; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; @@ -32,6 +29,7 @@ import org.openhab.core.library.types.OpenClosedType; import org.openhab.core.library.types.QuantityType; import org.openhab.core.library.types.StringType; +import org.openhab.core.library.unit.Units; import org.openhab.core.types.State; import org.openhab.core.types.Type; import org.openhab.core.types.UnDefType; @@ -76,35 +74,27 @@ public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationPr PROGRAM_PHASE(RAW_PHASE_PROPERTY_NAME, PHASE_CHANNEL_ID, DecimalType.class, false, false), START_TIME("", START_CHANNEL_ID, DateTimeType.class, false, false), END_TIME("", END_CHANNEL_ID, DateTimeType.class, false, false), - DURATION("duration", "duration", DateTimeType.class, false, false) { + DURATION("duration", "duration", QuantityType.class, false, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { - Date date = new Date(); - SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT+0")); try { - date.setTime(Long.valueOf(s.trim()) * 60000); - } catch (Exception e) { - date.setTime(0); + return new QuantityType<>(Long.valueOf(s), Units.MINUTE); + } catch (NumberFormatException e) { + return UnDefType.UNDEF; } - return getState(dateFormatter.format(date)); } }, - ELAPSED_TIME("elapsedTime", "elapsed", DateTimeType.class, false, false) { + ELAPSED_TIME("elapsedTime", "elapsed", QuantityType.class, false, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { - Date date = new Date(); - SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); - dateFormatter.setTimeZone(TimeZone.getTimeZone("GMT+0")); try { - date.setTime(Long.valueOf(s) * 60000); - } catch (Exception e) { - date.setTime(0); + return new QuantityType<>(Long.valueOf(s), Units.MINUTE); + } catch (NumberFormatException e) { + return UnDefType.UNDEF; } - return getState(dateFormatter.format(date)); } }, - FINISH_TIME("", FINISH_CHANNEL_ID, DateTimeType.class, false, false), + FINISH_TIME("", FINISH_CHANNEL_ID, QuantityType.class, false, false), TARGET_TEMP("targetTemperature", "target", QuantityType.class, false, false) { @Override public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) { diff --git a/bundles/org.openhab.binding.miele/src/main/resources/OH-INF/thing/channeltypes.xml b/bundles/org.openhab.binding.miele/src/main/resources/OH-INF/thing/channeltypes.xml index 5f7c683ae58c..4d13057abdff 100644 --- a/bundles/org.openhab.binding.miele/src/main/resources/OH-INF/thing/channeltypes.xml +++ b/bundles/org.openhab.binding.miele/src/main/resources/OH-INF/thing/channeltypes.xml @@ -70,27 +70,27 @@ - DateTime + Number:Time Duration of the program running on the appliance Time - + - DateTime + Number:Time Time elapsed in the program running on the appliance Time - + - DateTime + Number:Time Time to finish the program running on the appliance Time - +