]> git.basschouten.com Git - openhab-addons.git/commitdiff
[miele] Fix auto-update for stop channel and synchronize switch channel with applianc...
authorJacob Laursen <jacob-github@vindvejr.dk>
Tue, 5 Jul 2022 06:05:21 +0000 (08:05 +0200)
committerGitHub <noreply@github.com>
Tue, 5 Jul 2022 06:05:21 +0000 (08:05 +0200)
* Fix auto-update policy for stateless channel
* Reflect appliance state in switch channel state

Signed-off-by: Jacob Laursen <jacob-github@vindvejr.dk>
bundles/org.openhab.binding.miele/README.md
bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/MieleBindingConstants.java
bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/CoffeeMachineHandler.java
bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/DishWasherHandler.java
bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/MieleApplianceHandler.java
bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/OvenChannelSelector.java
bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/OvenHandler.java
bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/TumbleDryerHandler.java
bundles/org.openhab.binding.miele/src/main/java/org/openhab/binding/miele/internal/handler/WashingMachineHandler.java
bundles/org.openhab.binding.miele/src/main/resources/OH-INF/thing/channeltypes.xml

index 2fd46ae67db9945545e94e9f0e4b0b331d563472..31a69d669952e998b754b973b4a5e46bfe2512e1 100644 (file)
@@ -448,7 +448,7 @@ DateTime Oven_ElapsedTime "Elapsed time" <time>             {channel="miele:oven
 DateTime Oven_FinishTime "Remaining time" <time>            {channel="miele:oven:home:oven:finish"}
 Number:Temperature Oven_CurrentTemperature <temperature>    {channel="miele:oven:home:oven:measured"}
 Number:Temperature Oven_TargetTemperature <temperature>     {channel="miele:oven:home:oven:target"}
-Switch Oven_Stop                                            {channel="miele:oven:home:oven:stop", autoupdate="false"}
+Switch Oven_Stop                                            {channel="miele:oven:home:oven:stop"}
 
 String WashingMachine_State                                 {channel="miele:washingmachine:home:washingmachine:state"}
 Number WashingMachine_RawState                              {channel="miele:washingmachine:home:washingmachine:rawState"}
index 487cb9a8b36658ce89541f80a7200bdfe6d4667e..594a7fe1869322348569e7c6ab93ccf66ae511c9 100644 (file)
@@ -52,6 +52,7 @@ public class MieleBindingConstants {
     public static final String PHASE_CHANNEL_ID = "rawPhase";
     public static final String SUPERCOOL_CHANNEL_ID = "supercool";
     public static final String SUPERFREEZE_CHANNEL_ID = "superfreeze";
+    public static final String SWITCH_CHANNEL_ID = "switch";
     public static final String POWER_CONSUMPTION_CHANNEL_ID = "powerConsumption";
     public static final String WATER_CONSUMPTION_CHANNEL_ID = "waterConsumption";
 
index 77d14fac347a780d3e8bddaad45ea4cb403273ac..20d00bd17ba8e2826013d7928d1de9f16564fc56 100644 (file)
@@ -15,6 +15,7 @@ package org.openhab.binding.miele.internal.handler;
 import static org.openhab.binding.miele.internal.MieleBindingConstants.MIELE_DEVICE_CLASS_COFFEE_SYSTEM;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.openhab.binding.miele.internal.api.dto.DeviceProperty;
 import org.openhab.binding.miele.internal.exceptions.MieleRpcException;
 import org.openhab.core.i18n.LocaleProvider;
 import org.openhab.core.i18n.TranslationProvider;
@@ -100,4 +101,10 @@ public class CoffeeMachineHandler extends MieleApplianceHandler<CoffeeMachineCha
             }
         }
     }
+
+    @Override
+    public void onAppliancePropertyChanged(DeviceProperty dp) {
+        super.onAppliancePropertyChanged(dp);
+        updateSwitchOnOffFromState(dp);
+    }
 }
index 694f9be3203ea1d57acb5147f3ef74a31adea6f8..4ad87b93d897654d9b83b22c26240b8b49a72139 100644 (file)
@@ -19,6 +19,7 @@ import static org.openhab.binding.miele.internal.MieleBindingConstants.WATER_CON
 import java.math.BigDecimal;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.openhab.binding.miele.internal.api.dto.DeviceProperty;
 import org.openhab.binding.miele.internal.exceptions.MieleRpcException;
 import org.openhab.core.i18n.LocaleProvider;
 import org.openhab.core.i18n.TranslationProvider;
@@ -112,6 +113,12 @@ public class DishWasherHandler extends MieleApplianceHandler<DishwasherChannelSe
         }
     }
 
+    @Override
+    public void onAppliancePropertyChanged(DeviceProperty dp) {
+        super.onAppliancePropertyChanged(dp);
+        updateSwitchStartStopFromState(dp);
+    }
+
     public void onApplianceExtendedStateChanged(byte[] extendedDeviceState) {
         if (extendedDeviceState.length < EXTENDED_STATE_MIN_SIZE_BYTES) {
             logger.debug("Insufficient extended state data to extract consumption values: {}", extendedDeviceState);
index 8a655105269a88e275ba292131d30cf3c9e21c19..99edb672d519fe4d040105e11982ae9784c3ddbc 100644 (file)
@@ -30,6 +30,7 @@ import org.openhab.binding.miele.internal.api.dto.DeviceProperty;
 import org.openhab.binding.miele.internal.api.dto.HomeDevice;
 import org.openhab.core.i18n.LocaleProvider;
 import org.openhab.core.i18n.TranslationProvider;
+import org.openhab.core.library.types.OnOffType;
 import org.openhab.core.thing.Bridge;
 import org.openhab.core.thing.ChannelUID;
 import org.openhab.core.thing.Thing;
@@ -288,6 +289,30 @@ public abstract class MieleApplianceHandler<E extends Enum<E> & ApplianceChannel
         updateState(channelUid, state);
     }
 
+    protected void updateSwitchOnOffFromState(DeviceProperty dp) {
+        if (!STATE_PROPERTY_NAME.equals(dp.Name)) {
+            return;
+        }
+
+        // Switch is trigger channel, but current state can be deduced from state.
+        ChannelUID channelUid = new ChannelUID(getThing().getUID(), SWITCH_CHANNEL_ID);
+        State state = OnOffType.from(!dp.Value.equals(String.valueOf(STATE_OFF)));
+        logger.trace("Update state of {} to {} through '{}'", channelUid, state, dp.Name);
+        updateState(channelUid, state);
+    }
+
+    protected void updateSwitchStartStopFromState(DeviceProperty dp) {
+        if (!STATE_PROPERTY_NAME.equals(dp.Name)) {
+            return;
+        }
+
+        // Switch is trigger channel, but current state can be deduced from state.
+        ChannelUID channelUid = new ChannelUID(getThing().getUID(), SWITCH_CHANNEL_ID);
+        State state = OnOffType.from(dp.Value.equals(String.valueOf(STATE_RUNNING)));
+        logger.trace("Update state of {} to {} through '{}'", channelUid, state, dp.Name);
+        updateState(channelUid, state);
+    }
+
     /**
      * Update raw value channels for properties already mapped to text channels.
      * Currently ApplianceChannelSelector only supports 1:1 mapping from property
index 01a068b2b5ded3fb39afaaef4d717938c183877b..9824301274129cf3d58613d80960ee2f2121e484 100644 (file)
@@ -150,7 +150,6 @@ public enum OvenChannelSelector implements ApplianceChannelSelector {
     },
     DOOR("signalDoor", "door", OpenClosedType.class, false) {
         @Override
-
         public State getState(String s, @Nullable DeviceMetaData dmd, MieleTranslationProvider translationProvider) {
             if ("true".equals(s)) {
                 return getState("OPEN");
index 4dcb7dcbd7cd83ec0f3d47d293727b461751af96..6573b60efbe5b7fa90eedb87750f5daa71a94e7a 100644 (file)
@@ -15,6 +15,7 @@ package org.openhab.binding.miele.internal.handler;
 import static org.openhab.binding.miele.internal.MieleBindingConstants.MIELE_DEVICE_CLASS_OVEN;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.openhab.binding.miele.internal.api.dto.DeviceProperty;
 import org.openhab.binding.miele.internal.exceptions.MieleRpcException;
 import org.openhab.core.i18n.LocaleProvider;
 import org.openhab.core.i18n.TranslationProvider;
@@ -106,4 +107,10 @@ public class OvenHandler extends MieleApplianceHandler<OvenChannelSelector> {
             }
         }
     }
+
+    @Override
+    public void onAppliancePropertyChanged(DeviceProperty dp) {
+        super.onAppliancePropertyChanged(dp);
+        updateSwitchOnOffFromState(dp);
+    }
 }
index 6115c66b4a72360d5e888b3a0048ffdfed1055b6..cfe8373d4759dfc1e25bad4504df9e553a88a556 100644 (file)
@@ -15,6 +15,7 @@ package org.openhab.binding.miele.internal.handler;
 import static org.openhab.binding.miele.internal.MieleBindingConstants.MIELE_DEVICE_CLASS_TUMBLE_DRYER;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.openhab.binding.miele.internal.api.dto.DeviceProperty;
 import org.openhab.binding.miele.internal.exceptions.MieleRpcException;
 import org.openhab.core.i18n.LocaleProvider;
 import org.openhab.core.i18n.TranslationProvider;
@@ -100,4 +101,10 @@ public class TumbleDryerHandler extends MieleApplianceHandler<TumbleDryerChannel
             }
         }
     }
+
+    @Override
+    public void onAppliancePropertyChanged(DeviceProperty dp) {
+        super.onAppliancePropertyChanged(dp);
+        updateSwitchStartStopFromState(dp);
+    }
 }
index e8ba2ff482bd6ff079cf1a28b6757afb03e18dd0..649f3c56b699f01e744749a36966cde41ded61ae 100644 (file)
@@ -19,6 +19,7 @@ import static org.openhab.binding.miele.internal.MieleBindingConstants.WATER_CON
 import java.math.BigDecimal;
 
 import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.openhab.binding.miele.internal.api.dto.DeviceProperty;
 import org.openhab.binding.miele.internal.exceptions.MieleRpcException;
 import org.openhab.core.i18n.LocaleProvider;
 import org.openhab.core.i18n.TranslationProvider;
@@ -114,6 +115,12 @@ public class WashingMachineHandler extends MieleApplianceHandler<WashingMachineC
         }
     }
 
+    @Override
+    public void onAppliancePropertyChanged(DeviceProperty dp) {
+        super.onAppliancePropertyChanged(dp);
+        updateSwitchStartStopFromState(dp);
+    }
+
     public void onApplianceExtendedStateChanged(byte[] extendedDeviceState) {
         if (extendedDeviceState.length < EXTENDED_STATE_MIN_SIZE_BYTES) {
             logger.debug("Insufficient extended state data to extract consumption values: {}", extendedDeviceState);
index c9feb712ecddd7cb4b1d52f17e7a1f465bc4489d..6d95eff040609974d4636a8286370b92305fc4cc 100644 (file)
                <item-type>Switch</item-type>
                <label>Stop</label>
                <description>Stop the appliance</description>
+               <autoUpdatePolicy>veto</autoUpdatePolicy>
        </channel-type>
 
        <channel-type id="step" advanced="true">