diff --git a/bundles/org.openhab.binding.wemo/README.md b/bundles/org.openhab.binding.wemo/README.md index 08142904bd55e..0bb98e837c295 100644 --- a/bundles/org.openhab.binding.wemo/README.md +++ b/bundles/org.openhab.binding.wemo/README.md @@ -40,59 +40,59 @@ MZ100 94103EA2B278xxxx [ deviceID="94103EA2B278xxxx" ] Devices support some of the following channels: -| Channel Type | Item Type | Description | Available on Thing | -|---------------------|-----------|---------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| motionDetection | Switch | On if motion is detected, off otherwise. (Motion Sensor only) | Motion | -| lastMotionDetected | DateTime | Date and Time when the last motion was detected. (Motion Sensor only) | Motion | -| state | Switch | This channel controls the actual binary State of a Device or represents Motion Detection. | All but Dimmer, Crockpot, Airpurifier and Humidifier | -| lastChangedAt | DateTime | Date and Time the device was last turned on or of. | Insight | -| lastOnFor | Number | Time in seconds an Insight device was last turned on for. | Insight | -| onToday | Number | Time in seconds an Insight device has been switched on today. | Insight | -| onTotal | Number | Time in seconds an Insight device has been switched on totally. | Insight | -| timespan | Number | Time in seconds over which onTotal applies. Typically 2 weeks except first used. | Insight | -| averagePower | Number | Average power consumption in Watts. | Insight | -| currentPower | Number | Current power consumption of an Insight device. 0 if switched off. | Insight | -| energyToday | Number | Energy in Wh used today. | Insight | -| energyTotal | Number | Energy in Wh used in total. | Insight | -| standbyLimit | Number | Minimum energy draw in W to register device as switched on (default 8W, configurable via WeMo App). | Insight | -| onStandBy | Switch | Read-only indication of whether or not the device plugged in to the insight switch is drawing more than the standby limit. | Insight | -| relay | Switch | Switches the integrated relay contact close/open | Maker | -| sensor | Switch | Shows the state of the integrated sensor | Maker | -| coffeeMode | String | Operation mode of a WeMo Coffee Maker | CoffeeMaker | -| modeTime | Number | Current amount of time, in minutes, that the Coffee Maker has been in the current mode | CoffeeMaker | -| timeRemaining | Number | Remaining brewing time of a WeMo Coffee Maker | CoffeeMaker | -| waterLevelReached | Switch | Indicates if the WeMo Coffee Maker needs to be refilled | CoffeeMaker | -| cleanAdvise | Switch | Indicates if a WeMo Coffee Maker needs to be cleaned | CoffeeMaker | -| filterAdvise | Switch | Indicates if a WeMo Coffee Maker needs to have the filter changed | CoffeeMaker | -| brewed | DateTime | Date/time the coffee maker last completed brewing coffee | CoffeeMaker | -| lastCleaned | DateTime | Date/time the coffee maker last completed cleaning | CoffeeMaker | -| brightness | Number | Brightness of a WeMo LED od Dimmwer. | LED, DimmerSwitch | -| faderCountDownTime | Number | Dimmer fading duration time in minutes | DimmerSwitch | -| faderEnabled | Switch | Switch the fader ON/OFF | DimmerSwitch | -| timerStart | Switch | Switch the fading timer ON/OFF | DimmerSwitch | -| nightMode | Switch | Switch the nightMode ON/OFF | DimmerSwitch | -| startTime | DateTime | Time when the nightMode starts | DimmerSwitch | -| endTime | DateTime | Time when the nightMode ends | DimmerSwitch | -| nightModeBrightness | Number | Brightness used in nightMode | DimmerSwitch | -| cookMode | String | Shows the operation mode of a WeMo Crockpot (OFF, WARM, LOW, HIGH | Crockpot | -| warmCookTime | Number | Shows the timer settings for warm cooking mode | Crockpot | -| lowCookTime | Number | Shows the timer settings for low cooking mode | Crockpot | -| highCookTime | Number | Shows the timer settings for high cooking mode | Crockpot | -| cookedTime | Number | Shows the elapsed cooking time | Crockpot | -| purifierMode | String | Runmode of Air Purifier (OFF, LOW, MED, HIGH, AUTO) | Air Purifier | -| airQuality | String | Air quality (POOR, MODERATE, GOOD) | Air Purifier | -| ionizer | Switch | Indicates whether the ionizer is switched ON or OFF | Air Purifier | -| filterLife | Number | Indicates the remaining filter lifetime in Percent | Air Purifier, Humidifier | -| expiredFilterTime | Number | Indicates whether the filter lifetime has expired or not | Air Purifier, Humidifier | -| filterPresent | Switch | Indicates the presence of an air filter | Air Purifier | -| humidifierMode | String | Runmode of Humidifier (OFF, MIN, LOW, MED, HIGH, MAX) | Humidifier | -| desiredHumidity | Number | Shows desired humidity in Percent | Humidifier | -| currentHumidity | Number | Shows current humidity in Percent | Humidifier | -| heaterMode | String | Runmode of Heater (OFF, FROSTPROTECT, HIGH, LOW, ECO) | Heater | -| currentTemp | Number | Shows current temperature | Heater | -| targetTemp | Number | Shows target temperature | Heater | -| autoOffTime | DateTime | Time when the heater switches off | Heater | -| heatingRemaining | Number | Shows the remaining heating time | Heater | +| Channel Type | Item Type | Description | Available on Thing | +|---------------------|---------------|----------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------| +| motionDetection | Switch | On if motion is detected, off otherwise. (Motion Sensor only) | Motion | +| lastMotionDetected | DateTime | Date and Time when the last motion was detected. (Motion Sensor only) | Motion | +| state | Switch | This channel controls the actual binary State of a Device or represents Motion Detection. | All but Dimmer, Crockpot, Airpurifier and Humidifier | +| lastChangedAt | DateTime | Date and Time the device was last turned on or of. | Insight | +| lastOnFor | Number | Time in seconds an Insight device was last turned on for. | Insight | +| onToday | Number | Time in seconds an Insight device has been switched on today. | Insight | +| onTotal | Number | Time in seconds an Insight device has been switched on totally. | Insight | +| timespan | Number | Time in seconds over which onTotal applies. Typically 2 weeks except first used. | Insight | +| averagePower | Number:Power | Average power consumption in Watts. | Insight | +| currentPower | Number:Power | Current power consumption of an Insight device. 0 if switched off. | Insight | +| energyToday | Number:Energy | Energy in Wh used today. | Insight | +| energyTotal | Number:Energy | Energy in Wh used in total. | Insight | +| standbyLimit | Number:Power | Minimum energy draw in W to register device as switched on (default 8W, configurable via WeMo App). | Insight | +| onStandBy | Switch | Read-only indication of whether or not the device plugged in to the insight switch is drawing more than the standby limit. | Insight | +| relay | Switch | Switches the integrated relay contact close/open | Maker | +| sensor | Switch | Shows the state of the integrated sensor | Maker | +| coffeeMode | String | Operation mode of a WeMo Coffee Maker | CoffeeMaker | +| modeTime | Number | Current amount of time, in minutes, that the Coffee Maker has been in the current mode | CoffeeMaker | +| timeRemaining | Number | Remaining brewing time of a WeMo Coffee Maker | CoffeeMaker | +| waterLevelReached | Switch | Indicates if the WeMo Coffee Maker needs to be refilled | CoffeeMaker | +| cleanAdvise | Switch | Indicates if a WeMo Coffee Maker needs to be cleaned | CoffeeMaker | +| filterAdvise | Switch | Indicates if a WeMo Coffee Maker needs to have the filter changed | CoffeeMaker | +| brewed | DateTime | Date/time the coffee maker last completed brewing coffee | CoffeeMaker | +| lastCleaned | DateTime | Date/time the coffee maker last completed cleaning | CoffeeMaker | +| brightness | Number | Brightness of a WeMo LED od Dimmwer. | LED, DimmerSwitch | +| faderCountDownTime | Number | Dimmer fading duration time in minutes | DimmerSwitch | +| faderEnabled | Switch | Switch the fader ON/OFF | DimmerSwitch | +| timerStart | Switch | Switch the fading timer ON/OFF | DimmerSwitch | +| nightMode | Switch | Switch the nightMode ON/OFF | DimmerSwitch | +| startTime | DateTime | Time when the nightMode starts | DimmerSwitch | +| endTime | DateTime | Time when the nightMode ends | DimmerSwitch | +| nightModeBrightness | Number | Brightness used in nightMode | DimmerSwitch | +| cookMode | String | Shows the operation mode of a WeMo Crockpot (OFF, WARM, LOW, HIGH | Crockpot | +| warmCookTime | Number | Shows the timer settings for warm cooking mode | Crockpot | +| lowCookTime | Number | Shows the timer settings for low cooking mode | Crockpot | +| highCookTime | Number | Shows the timer settings for high cooking mode | Crockpot | +| cookedTime | Number | Shows the elapsed cooking time | Crockpot | +| purifierMode | String | Runmode of Air Purifier (OFF, LOW, MED, HIGH, AUTO) | Air Purifier | +| airQuality | String | Air quality (POOR, MODERATE, GOOD) | Air Purifier | +| ionizer | Switch | Indicates whether the ionizer is switched ON or OFF | Air Purifier | +| filterLife | Number | Indicates the remaining filter lifetime in Percent | Air Purifier, Humidifier | +| expiredFilterTime | Number | Indicates whether the filter lifetime has expired or not | Air Purifier, Humidifier | +| filterPresent | Switch | Indicates the presence of an air filter | Air Purifier | +| humidifierMode | String | Runmode of Humidifier (OFF, MIN, LOW, MED, HIGH, MAX) | Humidifier | +| desiredHumidity | Number | Shows desired humidity in Percent | Humidifier | +| currentHumidity | Number | Shows current humidity in Percent | Humidifier | +| heaterMode | String | Runmode of Heater (OFF, FROSTPROTECT, HIGH, LOW, ECO) | Heater | +| currentTemp | Number | Shows current temperature | Heater | +| targetTemp | Number | Shows target temperature | Heater | +| autoOffTime | DateTime | Time when the heater switches off | Heater | +| heatingRemaining | Number | Shows the remaining heating time | Heater | ## Full Example @@ -124,7 +124,7 @@ DateTime MotionDetected { channel="wemo:Motion:Sensor1:lastMotionDetected" // Insight Switch InsightSwitch { channel="wemo:insight:Insight-1_0-xxxxxxxxxxxxxx:state" } -Number InsightPower { channel="wemo:insight:Insight-1_0-xxxxxxxxxxxxxx:currentPower" } +Number:Power InsightPower { channel="wemo:insight:Insight-1_0-xxxxxxxxxxxxxx:currentPower" } Number InsightLastOn { channel="wemo:insight:Insight-1_0-xxxxxxxxxxxxxx:lastOnFor" } Number InsightToday { channel="wemo:insight:Insight-1_0-xxxxxxxxxxxxxx:onToday" } Number InsightTotal { channel="wemo:insight:Insight-1_0-xxxxxxxxxxxxxx:onTotal" } diff --git a/bundles/org.openhab.binding.wemo/src/main/java/org/openhab/binding/wemo/internal/handler/WemoHandler.java b/bundles/org.openhab.binding.wemo/src/main/java/org/openhab/binding/wemo/internal/handler/WemoHandler.java index 41a53c4deb5fb..50191917aab67 100644 --- a/bundles/org.openhab.binding.wemo/src/main/java/org/openhab/binding/wemo/internal/handler/WemoHandler.java +++ b/bundles/org.openhab.binding.wemo/src/main/java/org/openhab/binding/wemo/internal/handler/WemoHandler.java @@ -39,6 +39,8 @@ import org.openhab.core.library.types.DateTimeType; import org.openhab.core.library.types.DecimalType; 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.ChannelUID; import org.openhab.core.thing.Thing; import org.openhab.core.thing.ThingStatus; @@ -245,13 +247,16 @@ public void onValueReceived(@Nullable String variable, @Nullable String value, @ logger.trace("New InsightParam timespan '{}' for device '{}' received", timespan, getThing().getUID()); updateState(CHANNEL_TIMESPAN, timespan); - State averagePower = DecimalType.valueOf(splitInsightParams[6]); // natively given in W + State averagePower = new QuantityType<>(DecimalType.valueOf(splitInsightParams[6]), Units.WATT); // natively + // given + // in W logger.trace("New InsightParam averagePower '{}' for device '{}' received", averagePower, getThing().getUID()); updateState(CHANNEL_AVERAGEPOWER, averagePower); BigDecimal currentMW = new BigDecimal(splitInsightParams[7]); - State currentPower = new DecimalType(currentMW.divide(new BigDecimal(1000), RoundingMode.HALF_UP)); // recalculate + State currentPower = new QuantityType<>(currentMW.divide(new BigDecimal(1000), 0, RoundingMode.HALF_UP), + Units.WATT); // recalculate // mW to W logger.trace("New InsightParam currentPower '{}' for device '{}' received", currentPower, getThing().getUID()); @@ -259,29 +264,30 @@ public void onValueReceived(@Nullable String variable, @Nullable String value, @ BigDecimal energyTodayMWMin = new BigDecimal(splitInsightParams[8]); // recalculate mW-mins to Wh - State energyToday = new DecimalType( - energyTodayMWMin.divide(new BigDecimal(60000), RoundingMode.HALF_UP)); + State energyToday = new QuantityType<>( + energyTodayMWMin.divide(new BigDecimal(60000), 0, RoundingMode.HALF_UP), Units.WATT_HOUR); logger.trace("New InsightParam energyToday '{}' for device '{}' received", energyToday, getThing().getUID()); updateState(CHANNEL_ENERGYTODAY, energyToday); BigDecimal energyTotalMWMin = new BigDecimal(splitInsightParams[9]); // recalculate mW-mins to Wh - State energyTotal = new DecimalType( - energyTotalMWMin.divide(new BigDecimal(60000), RoundingMode.HALF_UP)); + State energyTotal = new QuantityType<>( + energyTotalMWMin.divide(new BigDecimal(60000), 0, RoundingMode.HALF_UP), Units.WATT_HOUR); logger.trace("New InsightParam energyTotal '{}' for device '{}' received", energyTotal, getThing().getUID()); updateState(CHANNEL_ENERGYTOTAL, energyTotal); BigDecimal standByLimitMW = new BigDecimal(splitInsightParams[10]); - State standByLimit = new DecimalType(standByLimitMW.divide(new BigDecimal(1000), RoundingMode.HALF_UP)); // recalculate + State standByLimit = new QuantityType<>( + standByLimitMW.divide(new BigDecimal(1000), 0, RoundingMode.HALF_UP), Units.WATT); // recalculate // mW to W logger.trace("New InsightParam standByLimit '{}' for device '{}' received", standByLimit, getThing().getUID()); updateState(CHANNEL_STANDBYLIMIT, standByLimit); - if (currentMW.divide(new BigDecimal(1000), RoundingMode.HALF_UP).intValue() > standByLimitMW - .divide(new BigDecimal(1000), RoundingMode.HALF_UP).intValue()) { + if (currentMW.divide(new BigDecimal(1000), 0, RoundingMode.HALF_UP).intValue() > standByLimitMW + .divide(new BigDecimal(1000), 0, RoundingMode.HALF_UP).intValue()) { updateState(CHANNEL_ONSTANDBY, OnOffType.OFF); } else { updateState(CHANNEL_ONSTANDBY, OnOffType.ON); diff --git a/bundles/org.openhab.binding.wemo/src/main/resources/OH-INF/thing/thing-types.xml b/bundles/org.openhab.binding.wemo/src/main/resources/OH-INF/thing/thing-types.xml index abeed8e6bcfc2..f60e7a507a174 100644 --- a/bundles/org.openhab.binding.wemo/src/main/resources/OH-INF/thing/thing-types.xml +++ b/bundles/org.openhab.binding.wemo/src/main/resources/OH-INF/thing/thing-types.xml @@ -236,43 +236,43 @@ - Number + Number:Power The average power consumption Energy - + - Number + Number:Power The current power consumption Energy - + - Number + Number:Energy Todays power consumption Energy - + - Number + Number:Energy Total power consumption Energy - + - Number + Number:Power - Total power consumption + Minimum energy draw to register device as switched on Energy - + @@ -392,7 +392,6 @@ Allows to switch the timer ON/OFF - Switch diff --git a/itests/org.openhab.binding.wemo.tests/src/main/java/org/openhab/binding/wemo/internal/handler/test/WemoHandlerTest.java b/itests/org.openhab.binding.wemo.tests/src/main/java/org/openhab/binding/wemo/internal/handler/test/WemoHandlerTest.java index 144fa25e62329..c317b9dc5e4bd 100644 --- a/itests/org.openhab.binding.wemo.tests/src/main/java/org/openhab/binding/wemo/internal/handler/test/WemoHandlerTest.java +++ b/itests/org.openhab.binding.wemo.tests/src/main/java/org/openhab/binding/wemo/internal/handler/test/WemoHandlerTest.java @@ -25,6 +25,8 @@ import org.openhab.binding.wemo.internal.http.WemoHttpCall; import org.openhab.core.library.types.DecimalType; 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.Thing; import org.openhab.core.thing.ThingStatus; import org.openhab.core.thing.ThingStatusDetail; @@ -122,7 +124,7 @@ public void assertThatChannelTIMESPANIsUpdatedOnReceivedValue() { @Test public void assertThatChannelAVERAGEPOWERIsUpdatedOnReceivedValue() { insightParams.avgPower = POWER_PARAM; - State expectedStateType = new DecimalType(POWER_PARAM); + State expectedStateType = new QuantityType<>(POWER_PARAM, Units.WATT); String expectedChannel = CHANNEL_AVERAGEPOWER; testOnValueReceived(expectedChannel, expectedStateType, insightParams.toString());