Voice controls

I have been experimenting with voice controls of my openHAB setup and I have a strange problem.
I am on openHAB 4.3.0 and I’m using the openHAB app for the microphone and Ollama and Cuevox. The problem is that Cuevox seems to have a problem with the word “Garage”.

I have an office light and I started by setting that up so I can say “Turn on Office Light” or “Turn off Office Light” and it works fine. /opt/openhab/conf/automation/js/node_modules/voice-control-openhab/lib/openHAB/voiceCommandRules.js is already set up to handle “Turn on” and “Turn off”.

I also have an Insteon IOLink which consists of a pushbutton and a sensor to control my garage door. I want to be able to say “Open Garage Door” and “Close Garage Door” so I modified voiceCommandRules.js and added:

let openClose = alt(cmd(“open”, ON), cmd(“close”, ON));
rbi.addRule(seq(openClose, opt(the), itemLabel(), opt(openClose)));

The Garage door control item is called Garage_door_Switch and it has a label “Garage door”. When I say “Open garage door”, I see this in the logs:

2025-10-23 10:52:24.930 [INFO ] [b.automation.openhab-js.debug-cuevox] - Testing item lookup…
2025-10-23 10:52:24.937 [INFO ] [b.automation.openhab-js.debug-cuevox] - Office Light Dimmer item exists: true
2025-10-23 10:52:24.940 [INFO ] [b.automation.openhab-js.debug-cuevox] - Office Light Dimmer state: 100
2025-10-23 10:52:24.948 [INFO ] [b.automation.openhab-js.debug-cuevox] - Garage door Switch item exisrs: true
2025-10-23 10:52:24.958 [INFO ] [b.automation.openhab-js.debug-cuevox] - Garage door Switch state: OFF
2025-10-23 10:52:25.742 [INFO ] [b.automation.openhab-js.debug-cuevox] - Command: close garage
2025-10-23 10:52:25.752 [INFO ] [b.automation.openhab-js.debug-cuevox] - Full response: {“success”:false,“input”:“close garage”,“remainingTokens”:[“close”,“garage”],“executeFunction”:“”,“executeParameter”:null}

This comes from a script which is triggered by a change in the VoiceCommand item. (I know it says “Garage” and not “Garage door” here because I was testing with different labels). You can see that it got the command but it did not parse it - success:false and remainingTokens is not empty.

Now here is the strange part. When I changed the “Garage_door_Switch” label to “Carport”, then it worked and the door opened. I have tried “Garage door”, “Garage Door”, just “Garage” and none of these worked. “Garage door switch” does work.

Does anyone have any suggestions on how to debug this?

I figured it out.
My garage door opener consists of a momentary switch and a contact so I had created an Equipment group called “Garage door opener” which consisted of a “Garage door switch” and a “Garage door state”. Cuevox was getting confused.

I added a rule:
rbi.addRule(seq(openClose, itemLabel()));
where
let openClose = alt(cmd(“open”, ON), cmd(“close”, ON), cmd(“clothes”, ON));
so I can say “Open garage door” or “Close garage door” but it was finding the “Garage Door Opener” Equipment first and not matching the rule.

I deleted the Equipment and now its working.
This seems like a bug to me so I’m going to see if I can improve it.