A Home Assistant custom integration for controlling smart adjustable beds via Bluetooth.
- Install via HACS: Search for "Adjustable Bed" and install
- Discover your bed automatically, or add manually via Settings โ Integrations
- Control your bed from Home Assistant dashboards, automations, and voice assistants!
- Native Dashboard Card - Auto-loading Lovelace card that adapts to your bed (details)
- Motor Control - Raise/lower head, back, legs, and feet
- Direct Position Control - Native 0-100 target controls on supported beds
- Memory Presets - Jump to saved positions with one tap
- Under-bed Lights - RGB color control on supported beds, toggle on/off on others
- Climate Controls - Cooling, heating, and footwarming on supported beds
- Massage Control - Adjust massage intensity and patterns
- Position Feedback - See current angles on supported beds
- Presence Sensors - Occupancy sensors on supported beds
- Automations - "Flat when leaving", "TV mode at 8pm", etc.
| Guide | What's Inside |
|---|---|
| Troubleshooting | Connection issues, commands not working |
| Getting Help | Bug reports, support requests, diagnostics |
| Connection Guide | ESPHome proxy setup, finding your bed's address |
| Supported Actuators | Protocol details, bed brand lookup |
| ๐ฌ Ask a Question | Get help from the community |
| ๐ก Suggest an Idea | Feature requests and improvements |
| โค๏ธ Praise and Feedback | Share your experience or say thanks |
Quick troubleshooting
- Check range - Bluetooth adapter or proxy within ~10m of bed
- Disconnect other apps - Most beds allow only one BLE connection
- Reload integration - Settings โ Devices & Services โ Adjustable Bed โ Reload
- Enable debug logs - Settings โ Devices & Services โ Adjustable Bed โ โฎ menu โ Enable debug logging. Reproduce issue, then disable to download logs.
If you love this integration, please consider sending a thanks my way.
The names below refer to motor/actuator manufacturers. Your bed might use one of these internally - check the Supported Actuators guide to find your bed brand.
| Actuator | Example Brands |
|---|---|
| โ Linak | Tempur-Pedic, Bedre Nรฆtter, Jensen |
| โ Keeson | Ergomotion, Tempur, Beautyrest, King Koil, Member's Mark, Purple, GhostBed, ErgoSportive |
| โ Richmat | Casper, MLILY, Sven & Son, Avocado, Luuna, Jerome's |
| โ MotoSleep | HHC, Power Bob, binary MOTO models |
| โ Octo | Octo |
| โ Solace | Solace, Sealy, Woosa Sleep, QMS |
| โ Leggett & Platt | Leggett & Platt, Prodigy Comfort Elite / Prodigy CE |
| โ Reverie | Reverie |
| โ Okimat/Okin | Lucid (including some Smartbed/L600 bases), CVB, Smartbed |
| โ Okin 64-Bit | NORA_CON / NORACON Mattress Firm controllers |
| โ Jiecang | Glideaway, Dream Motion, LOGICDATA |
| โ Kaidi | Rize Remedy III / newer Mouselet-based Rize beds, Floyd Home, ISleep |
| โ Limoss | Limoss, Stawett |
| โ Jensen | Jensen (JMC400, LinON Entry) |
| โ Svane | Svane |
| โ DewertOkin | Many older Rize models, Simmons, Nectar, Resident, Symphony |
| โ Serta | Serta Motion Perfect |
| โ Mattress Firm 900 | iFlex / older Nordic UART bases |
| โ Nectar | Nectar |
| โ Malouf/Lucid | Malouf, Lucid (including some L600 bases), Structures |
| โ BedTech | BedTech |
| โ Sleep Number | Climate 360, FlexFit, FlexFit Smart, i8 / 360 FlexFit 2 |
| โ Sleepy's Elite | Sleepy's |
SleepSpa S9000AI (SLEEPSTAR) |
|
| โ Vibradorm | Vibradorm |
| โ SUTA Smart Home | SUTA |
| โ TiMOTION AHF | TiMOTION |
| โ Rondure | 1500 Tilt Base |
| โ Remacro | CheersSleep, Jeromes, Slumberland, The Brick |
| โ Cool Base | Cool Base (Keeson with fan) |
| โ Scott Living | Scott Living |
| โ SBI/Q-Plus | Q-Plus (Costco) |
| โ Logicdata | SILVERmotion, SimplicityFrame |
| โ Okin CB35 | Sealy Posturematic |
| ELEVATE two-actuator lift accessory | |
| โ Okin CST | Mattress Firm 900-O / MFirm 900-O, Rize MF900, Nectar Motion |
| โ OKIN Smart Remote / RF ECO BT | Elda BTH / MEGAMAT staircase actuator |
| DewertOkin RF1058/RF34/RF6707 handset beds |
Retail model names do not identify a BLE protocol. In particular, Lucid
L600 is not one protocol: confirmed L600 units include both 7-byte OKIN CB24
(Smartbed237...) and 9-byte legacy Malouf/OKIN (OKIN-BLE... with BTCB)
controllers. Auto-detection uses advertising data and connected GATT services,
not the L600 label.
Have one of these? Let us know how well it works!
Some brands span multiple controller families. For example, many older Rize beds are DewertOkin, while newer Mouselet-advertising Rize beds use Kaidi.
Just try it! The integration auto-detects most beds. Install it and see if your bed shows up.
Didn't auto-detect? Check the Supported Actuators guide to find your bed's actuator brand, then add it manually.
Still stuck? Open an issue with your bed brand/model and we'll help!
Other beds: Eight Sleep has its own integration.
WiFi and cloud-based beds won't be supported โ this is a Bluetooth-only integration for the reasons stated in the link.
- Open HACS in Home Assistant
- Search for "Adjustable Bed"
- Click Install
- Restart Home Assistant
Copy custom_components/adjustable_bed to your config/custom_components/ directory and restart.
Your bed should auto-discover via Bluetooth. If not:
- Go to Settings โ Devices & Services โ Add Integration
- Search for "Adjustable Bed"
- Enter your bed's Bluetooth address or select from discovered devices
To adjust settings after setup, click the gear icon on your device in Settings โ Devices & Services.
Quick reference
| Setting | Description |
|---|---|
| Motor Count | 2 (back/legs), 3 (adds head), or 4 (adds feet); Standard Octo RTV TV lifts use 1 |
| Has Massage | Enable if your bed has massage |
| Protocol Variant | Usually auto-detected, override if needed |
| Motor Pulse Settings | Fine-tune movement timing |
| Disable Angle Sensing | Keep on to allow physical remote to work |
| Jensen PIN | 4-digit PIN for Jensen beds (default: 3060) |
| Octo PIN | 4-digit PIN for Octo beds that require authentication |
| Richmat Remote | Remote model code for Richmat beds |
See the Configuration Guide for all options.
The integration ships a native Lovelace card, Adjustable Bed Card, that gives you a complete control panel for your bed โ position controls, presets, memory, lighting, massage, climate, and connection โ all in the Home Assistant theme. It registers and loads automatically; you do not need to add a HACS/Lovelace resource manually. If Home Assistant was open in your browser during an integration update, reload that page once after restarting Home Assistant so the browser picks up the updated card module.
To add it: edit a dashboard โ Add Card โ search for Adjustable Bed, then pick your bed device. Or in YAML:
type: custom:adjustable-bed-card
device_id: <your bed device>The card adapts to your bed โ it only shows the sections your bed actually exposes (e.g. massage and climate appear only on beds that support them), so the same card works for every supported bed.
Everything is configurable from the card's visual editor (no YAML needed):
- Show/hide sections โ toggle Position, Firmness, Presets, Memory, Lighting, Massage, Climate, Connection, and the bed-angle graphic on or off. Only the sections your bed has are listed.
- Reorder sections โ use the up/down arrows next to each section to change the order they appear on the card.
- Choose which memory positions to show โ pick exactly the memory slots you use instead of showing all of them.
Recalling and saving positions. In the Memory section, tap a position to move the bed to it. To store the bed's current position, tap Saveโฆ in the Memory header, then tap the position you want to overwrite (tap Cancel to back out). The Save button only appears for beds that support saving.
Names and icons follow your entities. The card displays each control using its entity's own name and icon, so to relabel something you just rename the entity (Settings โ Devices & Services โ your bed โ the entity โ โ). For example, rename Memory 1 to "Flat" and give it a bed icon, and the card's first memory tile becomes a bed icon labelled "Flat". This is purely cosmetic and local to you โ the card finds entities by the integration's internal keys, so renaming or re-icon-ing never breaks it, and other users keep the tidy defaults (Memory 1โ6 with numbered icons).
YAML options
type: custom:adjustable-bed-card
device_id: <your bed device> # the bed to control (the card prompts you to pick one if omitted)
name: Bedroom Bed # optional, overrides the card title
section_order: [motors, memory, lighting] # optional, render order (default order otherwise)
memory_save: true # optional, show the "Saveโฆ" button (default: true)
memory_slots: [1, 2, 3] # optional, which memory positions to show (default: all)
# Each section defaults to shown; set to false to hide:
show_graphic: true
show_motors: true
show_presets: true
show_memory: true
show_lighting: true
show_massage: true
show_climate: true
show_connection: trueWorks with Home Assistant's native Bluetooth:
- Local adapter on your HA host
- ESPHome Bluetooth Proxy for extended range
See the Connection Guide for setup help.
We'd love your help! This integration is actively developed and we're especially looking for:
- Testers - Own a bed we haven't fully tested? Your feedback is invaluable
- Bug reports - Found something wrong? Open an issue
- Code contributions - PRs welcome!
Massive thanks to the smartbed-mqtt developers for their pioneering work reverse-engineering bed protocols!
Migrating from smartbed-mqtt?
This integration replaces smartbed-mqtt with several advantages:
- Uses Home Assistant's native Bluetooth (no ESPHome API issues)
- Works seamlessly with ESPHome Bluetooth proxies
- No MQTT broker required
- Native HA entities
To migrate: Install this integration, configure your bed, verify it works, then remove smartbed-mqtt.
MIT License - see LICENSE for details.
