I want to assign an Area to a Script, but i can’t.
Why would I want to do that? Because for Google Assistant integration, scenes (in Google Assistant, scripts are published as scenes) need to be assigned to a room so that other household members can call them. For example, with voice match enabled, my wife can’t set the “entertaining” scene unless I set the scene’s room. Doesn’t even matter which room. No idea why this is, but whatever - it works.
Problem is I can’t assign a room to a script - it says “This entity does not have a unique ID” when I try. It doesn’t look like you can assign areas via yaml, unless i’m wrong. Not sure why Automations and Scenes have unique IDs but Scripts don’t.
Anyone?
I’m trying to avoid scripts in favor of scenes where possible for this reason, but some “scenes” need to call services (start roomba, play sleep sounds etc).
IIRC areas (rooms) cannot be accessed via automations or scripting in any meaningful way. I’ve read a few posts that talk about this. I could be wrong, of course.
I came across this HACS extension that opens some things up regarding room assignments and being able to automate based on room, but I haven’t used it so I can’t speak to if it will do what you want or not.
From what I’ve see, it’s one of the only extensions that does anything with rooms.
I’ve worked around this for now in a super hacky way: I create a blank scene, assign it to a room, publish that to Google Assistant, and then create an automation that triggers on the scene:
alias: Call services when the bedtime scene activates
trigger:
- platform: event
event_type: call_service
event_data:
domain: scene
service: turn_on
service_data:
entity_id: scene.bedtime
This works great from Google Assistant but its cluttered and feels unnecessary. It would be really great if we could assign script to rooms directly, or at least through the Cloud Google Assistant UI
I have a strong dislike of this solution as it requires me to explicitly declare each individual script in entity_config then restart every time it changes. I would prefer to be able to use exposed_domains for “script” and then assign rooms to the scripts in Home Assistant. Or, at least be able to configure the google_assistant integration to use a default “room” for all entities that cannot have areas assigned. At it’s core this looks like a Google bug, non-roomed entities should be shared with all household users. Why they would treat these differently I cannot fathom. But it’s a bug I think Home Assistant could give us a more reasonable work around for.
In the meantime, using entity_config: room: seems to be a viable solution, as long as things aren’t changing regularly, and personally I like this better than the one proposed above.
Wow, this also fixed the issue for me. My wife hasn’t been able to run the Night Night script for 2+ years when going to bed. I can’t believe it just needed a room/area assigned! My Google config is in the frontend so not in yaml. In case anyone has this issue I was able to assign a room fine in the GUI:
After syncing entities to Google I could then see the Script when trying to Edit a scene within an Action/Routine.
I’ve tried this, in google home i have a room named “House”, on the scene i assign it to “House” in area, just like you did in the screen shot. I’ve rebooted HA and still I am not seeing the scene on my wife phone. Does this still work for you?
The only difference for the Night Night script is that it has an area assigned which shows in the screenshot. How does this show on your phone? Do you see the House prefix before the script name?