I’m using the LastVoiceCommand to allow shortcuts for e.g. turning on the main light in a room with a simple “light on” - because there are multiple lights in that room. For that I use a DSL rule that listens for the item change of the LastVoiceCommand.
In the past that worked good. Starting with OH 3.2 or going to the latest SNAPSHOT of the Echo Control binding that changed somehow. Now, If I say “light on”, it turns on. If I switch off the light manually and say again “light on” nothing happens. This is most likely due to the fact, that the item value does not change - since it still has the former “light on” value saved. Hence it does not trigger the rule.
Maybe I simply didn’t spot it - but I think that was not the case before. So only if I speak to Alexa in between about something else and say again “light on” it works as expected. Now I’m wondering what would be the best approach here. Setting the value to e.g. “” manually in the rule once the command was processed? Or is there some kind of option that can be set on the binding to achieve the same?
Which version of the binding is installed on your system.
Is it the latest version from the third party marketplace ( SmartHome/J Amazon Echo Control Binding ) ?
From my understanding, the core of OH has an issue with flipping Things offline/online with the OH Echo version of the binding.
I have 3 other bindings doing that exact thing which is Hue, HP Printer and Onkyo. Its milliseconds between offline and online status. With my 2 Hue bridges, its taking over 30 items offline at once, very frustrating.
Jan, the developer, tried to get this fixed at the core level but it didnt go anywhere. This is one reason why there is a bunch of bindings Jan has taken on outside.
The Echo binding he’s updating is rock solid. I have 15 Echo’s on it and 9 Tiles. It is very heavily used by the household.
I actually re-read this and discovered I am addressing this situation in my code.
// Global variable in .rules
var nullValue = new DateTimeItem("should be empty").state
// In the actual rule
Echo_Basement_LastVoiceCommand.postUpdate(nullValue)
Huh so even if I upgrade from .10 to .11 it won’t fix it as it sounds. Since .10 is already the custom version provided by Jan to address the previous issue with LastVoiceCommand stopped working completely.
Maybe then it could work to create a generic rule that listens for all memebers of “Echos” for value change. If it is triggered, add a timer (or sleep) for 1-2 seconds (give actual rules the chance to process), then set the command to null or so. Then one does not have to take care for every rule. Could that work out?
rule "Reset Last Voice Command"
when
Member of EchoCmds changed
then
if (triggeringItem.state == "clear") {
return;
}
var Timer clearTimer = createTimer(now.plusSeconds(1), [ |
triggeringItem.postUpdate("clear");
]);
end
jwiseman
(Mr. Wiseman (OH 4.2 Snapshot on Pi4))
10
That will work, but what if two people use 2 different echos around the same time? Most likely only one would work. If that will never happen, then your solution will be fine.
Btw, the .10 to .11 version difference has some bug fixes in it also. It also includes the Tile integration piece.
Background: The old implementation did the following:
check if the last lastVoiceCommand is equal to this lastVoiceCommand
if so, send an empty state update
if not, send the update
Effectively this missed every second update if the same command was issued again. This is clearly not what was intended (and is very counter-intuitive in my opinion, because it depends on the command before if a state update is send or discarded). Therefore we decided to change this to just send the update each time we receive it from Amazon, the drawback is what you encountered: the same command does not trigger changed.