A Home Assistant custom integration for iPIXEL Color LED matrix displays via Bluetooth. These displays have been recently available as B.K. Light LED Pixel Board from Action and thus get increasing popularity.
- Multiple Display Modes: Text Image (PIL rendering), Native Text, and Clock modes
- RGB Color Support: Separate text and background colors via RGB light entities
- Clock Display: 9 different clock styles with automatic time synchronization
- Rich Text Display: Custom fonts, sizes, multiline text with
\n, antialiasing - Template Support: Use Home Assistant variables like
{{ states('sensor.temperature') }}°C - Font Management: Load TTF/OTF fonts from
fonts/folder - Brightness Control: Adjustable display brightness (1-100)
- Auto/Manual Updates: Choose automatic updates or manual refresh
- State Persistence: Settings preserved across HA restarts
- Bluetooth Proxy Support: Compatible with Bluetooth proxy devices
- Auto-discovery: Finds iPIXEL devices automatically via Bluetooth
- Open HACS in Home Assistant
- Click on the three dots in the top right corner
- Select Custom repositories
- Add the repository URL:
https://github.com/cagcoach/ha-ipixel-color - Select Integration as the category
- Click Add
- Search for "iPIXEL Color" in HACS and install it
- Restart Home Assistant
- Add the integration via Settings → Devices & Services → Add Integration
- Copy
custom_components/ipixel_colorto your HAcustom_componentsdirectory - Restart Home Assistant
- Add integration via Settings → Devices & Services → Add Integration
Place .ttf/.otf font files in the fonts/ folder within the integration directory for additional font options.
Once configured, you'll get these entities:
Display Control:
select.{device}_mode- Display mode (textimage, text, clock)text.{device}_display- Enter text with templates and\nfor newlinesswitch.{device}_power- Turn display on/offnumber.{device}_brightness- Display brightness level (1-100)
Text Appearance:
select.{device}_font- Choose from available fontsnumber.{device}_font_size- Font size (0=auto, supports decimals like 12.5)number.{device}_line_spacing- Spacing between lines (0-20px)switch.{device}_antialiasing- Smooth vs sharp textlight.{device}_text_color- RGB text colorlight.{device}_background_color- RGB background color
Clock Mode:
select.{device}_clock_style- Clock style (0-8)switch.{device}_clock_24h_format- 24-hour time formatswitch.{device}_clock_show_date- Show date below time
Update Control:
switch.{device}_auto_update- Auto-update on changesbutton.{device}_update_display- Manual refresh
Device Info:
sensor.{device}_width- Display width in pixelssensor.{device}_height- Display height in pixelssensor.{device}_device_type- Device model information
Time: {{ now().strftime('%H:%M') }}
Temp: {{ states('sensor.temperature') | round(1) }}°C
{% if is_state('sun.sun', 'above_horizon') %}Day{% else %}Night{% endif %}Text Mode:
- Select mode:
textimage(for RGB colors) ortext(native) - Set text:
"Hello\nWorld" - Choose text and background colors using light entities
- Select font and size (or use auto-sizing)
- Toggle auto-update ON or use manual update button
Clock Mode:
- Select mode:
clock - Choose clock style (0-8)
- Set 24-hour format and date display preferences
- Time syncs automatically
Templates:
- Templates update automatically with sensor changes when auto-update is ON
- Place
.ttf/.otffiles infonts/folder - Restart HA to see new fonts in dropdown
- Recommended: pixel fonts like 5x5.ttf, 7x7.ttf
- Enable debug logging:
custom_components.ipixel_color: debug - Check auto-update is ON or use manual update button
- Verify templates in Developer Tools → Template
- Ensure device is in Bluetooth range
| Feature | Status |
|---|---|
| ✅ Text Display (3 modes) | Complete |
| ✅ RGB Colors | Complete |
| ✅ Clock Mode (9 styles) | Complete |
| ✅ Custom Fonts | Complete |
| ✅ Templates | Complete |
| ✅ State Persistence | Complete |
| ✅ Brightness Control | Complete |
| 🔄 GIF Animations | Planned |
| 🔄 Animated Variable-Width Fonts | Planned |
- Requires: Home Assistant 2024.1+ and HACS
Special thanks to the authors of pypixelcolor for their excellent library that powers the core functionality of this integration. Their work in reverse-engineering the iPIXEL protocol has been invaluable.
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.