emulated_hue component provides a virtual Philips Hue bridge, written entirely in software, that allows services that work with the Hue API to interact with Home Assistant
entities. The driving use case behind this functionality is to allow Home Assistant to work with an Amazon Echo or Google Home with no set up cost outside of configuration changes.
The virtual bridge has the ability to turn entities on or off, or change the brightness of dimmable lights. The volume level of media players can be controlled as brightness.
It is recommended to assign a static IP address to the computer running Home Assistant. This is because the Amazon Echo discovers devices by IP addresses, and if the IP changes, the Echo won’t be able to control it. This is easiest done from your router, see your router’s manual for details.
To enable the emulated Hue bridge, add one of the following configs to your
# Google Home example configuration.yaml entry emulated_hue: type: google_home listen_port: 80 # Google Home does not work on different ports.
# Amazon Echo example configuration.yaml entry emulated_hue: type: alexa listen_port: 80
- type (Optional): The type of assistant who we are emulated for. Either
google_home, defaults to
- host_ip (Optional): The IP address that your Home Assistant installation is running on. If you do not specify this option, the component will attempt to determine the IP address on its own.
listen_port (Optional): The port the Hue bridge API web server will run on. If not specified, this defaults to 8300. This can be any free port on your system.
- advertise_ip (Optional): If you need to override the IP address used for UPNP discovery. (For example, using network isolation in Docker)
advertise_port (Optional): If you need to specifically override the advertised UPNP port.
upnp_bind_multicast (Optional): Whether or not to bind the UPNP (SSDP) listener to the multicast address (188.8.131.52) or instead to the (unicast) host_ip address specified above (or automatically determined). The default is true, which will work for most situations. In special circumstances, like running in a FreeBSD or FreeNAS jail, you may need to disable this.
off_maps_to_on_domains (Optional): The domains that maps an “off” command to an “on” command.
For example, if
scriptis included in the list, and you ask Alexa to “turn off the water plants script,” the command will be handled as if you asked her to turn on the script.
If not specified, this defaults to the following list:
expose_by_default (Optional): Whether or not entities should be exposed via the bridge by default instead of explicitly (see the ‘emulated_hue’ customization below). If not specified, this defaults to true. Warning: If you have a lot of devices (more than 49 total across all exposed domains), you should be careful with this option. Exposing more devices than Alexa supports can result in it not seeing any of them. If you are having trouble getting any devices to show up, try disabling this, and explicitly exposing just a few devices at a time to see if that fixes it.
- exposed_domains (Optional): The domains that are exposed by default if
expose_by_defaultis set to true. If not specified, this defaults to the following list:
A full configuration sample looks like the one below.
# Example configuration.yaml entry emulated_hue: host_ip: 192.168.1.186 listen_port: 8300 advertise_ip: 10.0.0.10 advertise_port: 8080 off_maps_to_on_domains: - script - scene expose_by_default: true exposed_domains: - light
With additional customization you will be able to specify the behaviour of the existing entities.
# Example customization homeassistant: customize: light.bedroom_light: # Don't allow light.bedroom_light to be controlled by the emulated Hue bridge emulated_hue: false light.office_light: # Address light.office_light as "back office light" emulated_hue_name: "back office light"
The following are attributes that can be applied in the
- emulated_hue (Optional): Whether or not the entity should be exposed by the emulated Hue bridge. The default value for this attribute is controlled by the
- emulated_hue_name (Optional): The name that the emulated Hue will use. The default for this is the entity’s friendly name.
You can verify that the
emulated_hue component has been loaded and is responding by pointing a local browser to the following URL:
http://<HA IP Address>:8300/description.xml- This URL should return a descriptor file in the form of an XML file.
http://<HA IP Address>:8300/api/pi/lights- This will return a list of devices, lights, scenes, groups, etc.. that
emulated_hueis exposing to Alexa.
For Google Home, verify that the URLs above are using port 80, rather than port 8300 (i.e. http://
An additional step is required to run Home Assistant as non-root user and use port 80 when using the AiO script. Execute the following command to allow
emulated_hue to use port 80 as non-root user.
sudo setcap 'cap_net_bind_service=+ep' /srv/homeassistant/homeassistant_venv/bin/python3