OpenDisplay
The OpenDisplay integrationIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] lets you use OpenDisplay e-paper displays with Home Assistant over Bluetooth Low Energy.
Supported devices
Any device running the OpenDisplay firmware. For a full list of supported boards and displays, see the OpenDisplay hardware compatibility page.
Unsupported devices
- Displays with 40-pin or 60-pin connectors (for example, 10.3” monochrome panels) are not supported due to connector incompatibility.
- Shelly Bluetooth proxies do not support active BLE connections and cannot be used to upload images.
Prerequisites
- A working Bluetooth setup that supports active connections:
- Built-in adapter: Supported
- ESPHome Bluetooth proxy: Supported (firmware 2022.9.3 or later)
- Shelly Bluetooth proxy: Not supported
- An OpenDisplay device powered on and within Bluetooth range.
Configuration
To add the OpenDisplay device to your Home Assistant instance, use this My button:
Manual configuration steps
If the above My button doesn’t work, you can also perform the following steps manually:
-
Browse to your Home Assistant instance.
-
In the bottom right corner, select the
Add Integration button. -
From the list, select OpenDisplay.
-
Follow the instructions on screen to complete the setup.
Once the Bluetooth integration is active, OpenDisplay devices are discovered automatically.
Encryption
OpenDisplay devices can be configured to require AES-128 encryption for all Bluetooth Low Energy communication.
If your device has encryption enabled, the setup flow will ask for a 32-character hexadecimal encryption key after the initial connection attempt. The key is shown on the display when the device boots.
To avoid typing the key manually, scan the QR code on your device’s display. The encryption key is shown on the page that opens, tap it to copy it to your clipboard, then paste it into Home Assistant.
If the encryption key changes after the device has been set up, Home Assistant will prompt you to re-enter the key.
Supported functionality
The OpenDisplay integration provides the following entities.
Button events
OpenDisplay Flex devices with configured physical inputs show up as eventEvery time something happens in Home Assistant, an event is fired. There are different types of events, such as state change events, when an action was triggered, or the time changed. All entities produce state change events. Every time a state changes, a state change event is produced. Events can be used to trigger automations or scripts. For example, you can trigger an automation when a light is turned on, then a speaker turns on in that room. Events can also be used to trigger actions in the frontend. For example, you can trigger an action when a button is pressed. [Learn more] entitiesAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more] in Home Assistant. One eventEvery time something happens in Home Assistant, an event is fired. There are different types of events, such as state change events, when an action was triggered, or the time changed. All entities produce state change events. Every time a state changes, a state change event is produced. Events can be used to trigger automations or scripts. For example, you can trigger an automation when a light is turned on, then a speaker turns on in that room. Events can also be used to trigger actions in the frontend. For example, you can trigger an action when a button is pressed. [Learn more] entityAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more] is created for each physical button.
-
button_down: Fires when the button is pressed. -
button_up: Fires when the button is released.
Events are detected by comparing consecutive BLE advertisements, so no active Bluetooth connection is needed. A very fast press-and-release between two advertisements may not be observed.
Turn on a light when a button is pressed
triggers:
- trigger: state
entity_id: event.opendisplay_1234_button_1
attribute: event_type
to: button_down
actions:
- action: light.turn_on
target:
entity_id: light.my_light
Actions
Action: Upload image
The opendisplay.upload_image action allows you to upload an image to a display. The image is resized and dithered to match the display’s resolution and color palette.
| Data attribute | Description | Required | Default |
|---|---|---|---|
device_id |
The OpenDisplay device to upload the image to. | Yes | - |
image |
The image to upload, selected from a media source. | Yes | - |
rotation |
Clockwise rotation in degrees: 0, 90, 180, or 270. | No | 0 |
dither_mode |
Dithering algorithm for converting to the display’s color palette. | No | Burkes |
refresh_mode |
Refresh mode to use. Full clears ghosting but is slower; fast is not supported on all displays. | No | Full |
fit_mode |
How the image is fitted to the display. | No | Contain |
tone_compression |
Dynamic range compression strength as a percentage (0–100). Omit to use automatic adjustment. | No | Automatic |
Refresh modes:
- Full: Clears ghosting but takes longer
- Fast: Faster refresh, not supported on all displays
Dither modes: None, Burkes, Ordered, Floyd-Steinberg, Atkinson, Stucki, Sierra, Sierra Lite, Jarvis, Judice, and Ninke
Fit modes:
- Contain: Scale to fit within the display, pad remaining space with white
- Cover: Scale to fill the display, crop edges that overflow
- Stretch: Distort to fill the exact display dimensions
- Crop: Center-crop at native resolution without scaling
Examples
Uploading an image
Upload an image from local media
action: opendisplay.upload_image
data:
device_id: "your_device_id"
image:
media_content_id: "media-source://media_source/local/photo.png"
media_content_type: "image/png"
Updating the display on a schedule
You can use an automationAutomations in Home Assistant allow you to automatically respond to things that happen in and around your home. [Learn more] to refresh the display at a set time each day.
Update display daily at 8:00 AM
triggers:
- trigger: time
at: "08:00:00"
actions:
- action: opendisplay.upload_image
data:
device_id: "your_device_id"
image:
media_content_id: "media-source://media_source/local/daily.png"
media_content_type: "image/png"
Known limitations
- BLE range is limited. Displays far from a Bluetooth adapter may experience unreliable transfers.
- Starting a new upload while one is already in progress cancels the ongoing transfer.
Troubleshooting
Device is not discovered
Check that the Bluetooth integration is set up and working, then confirm your OpenDisplay device is powered on and in range of your Home Assistant host or a Bluetooth proxy.
Authentication failed
This means the encryption key stored in Home Assistant no longer matches the key configured on the device. Go to Settings > Devices & services > OpenDisplay and select Re-authenticate to enter the correct key.
Upload fails with a connection error
BLE connections can drop at longer ranges. Try moving the display closer to your Bluetooth adapter. If you are using an ESPHome proxy, check that it has a stable Wi-Fi connection.
Image appears rotated or upside down
The integration applies EXIF orientation automatically. If the result is still rotated, use the rotation parameter in the Upload image action to correct it manually.
Removing the integration
To remove an integration instance from Home Assistant
- Go to Settings > Devices & services and select the integration card.
- From the list of devices, select the integration instance you want to remove.
- Next to the entry, select the three dots
menu. Then, select Delete.