A bit of an odd challenge, this one:
I recently took the plunge and have kitted my house out with a few Alexa-enabled Sonos Ones. I installed the wonderful openHAB Alexa skill and, after the initial thrill of watching my many openHAB-connected devices appear in the Alexa app, I became disappointed by Alexa’s approach to grouping, which seems extremely limited. For example, I wanted to be able to turn the lights on in the room I’m currently in by saying ‘Alexa, lights on’ (rather than specifying the room first). This doesn’t work if you have multiple lights, because Alexa asks you which one you’re talking about, even if they are in different groups. Equally, I didn’t want to lose the functionality of controlling a device remotely from any location by specifying the room and item, i.e. ‘Alexa, turn on the lounge lamps’.
I wanted to have my cake and eat it. Enter openHAB rules!
Long story short, I overcame the problem by exposing an extremely limited set of generic items to Alexa. For example, I have a single, generic “light” item, one “lamp” item, one “speaker” item etc. with no rooms/groups specified in the Alexa app. I then have a rule which uses the triggering item to deduce which Sonos device received a voice command, and detects whether other rooms were mentioned in that command (using LastVoiceCommand in the Echo Binding). Finally, it switches the target device to the value of the generic switch. It works flawlessly!
However, I also want to be able to control everything manually via Homekit on our iPhones. The problem here is that the metadata labels required to expose items to Homekit also get picked up by Alexa, which re-introduces a whole mess of devices which defeats this approach.
So, my question is: Is there a way to expose items to Homekit, but NOT to Alexa?