Rule Machine doesn't have a built-in way to only trigger if something is changed from something to something else. I don't see anything in either suggestion above that handles this specific requirement, unless I'm missing something. However, as is often the case, conditionals in the "Actions" section can come to your rescue:
-
Create two local variables of type "string," say lastState
and currentState
. The former will track, as my suggested name implies, the previous value for use in the next execution of the rule. The latter is necessary because there are limited ways to directly use the current value of an attribute, and this helps with that.
-
Use a "changed" trigger for this attribute on your rule (that way, the last state is always captured).
-
Create an actions section that looks something like:
Set currentState to MyDevice cleanStatus
IF (lastState is "cleaning" AND currentState is "docking") THEN
Do things
ELSE-IF (lastState is "docking" AND currentState is "charging") THEN
Do things
END-IF
Set lastState to currentState
(The first action isn't clear from the above, but it sets a variable to a "Device attribute," an option you'll get from the menus when you go that far.)