@omarshahine/homebridge-eight-sleep
v1.0.0
Published
Eight Sleep Pod for Homebridge: a Heater/Cooler per bed side plus an away-mode switch.
Maintainers
Readme
homebridge-eight-sleep
Eight Sleep Pod for Homebridge. Each bed side shows up in the Home app as a Heater/Cooler, plus an optional away-mode switch per person.
I wanted "Hey Siri, set the bed to cool" and a Leave Home automation that puts the Pod in away mode. Eight Sleep has no HomeKit support and no public API, so this plugin talks to the same cloud endpoints the Eight Sleep app uses. The API layer is a port of steipete/eightctl.
What you get
| Accessory | HomeKit type | What it does | |---|---|---| | One per bed side ("Omar's Side", "Left Side", …) | Heater/Cooler | Power, Heat/Cool, and an intensity slider | | One per person ("Omar Away", "Lora Away", …) | Switch | That person's Eight Sleep away mode |
Sides and names come from your account. A solo Pod gets one tile called "Bed".
How the slider maps to Eight Sleep levels
Eight Sleep uses a level from -100 (coldest) to +100 (warmest). In HomeKit:
- Heat / Cool picks the sign.
- The intensity slider (0–100 %) is the magnitude. "Cool at 40 %" is level -40.
- The temperature dial on the tile is that same level shown on Eight Sleep's 55–110 °F scale, so "Cooling to 77°" is level -20. Drag the dial or the slider; they move together.
- Turning the tile off turns the side off. Turning it on resumes Autopilot ("smart" mode).
- Moving the slider on an off side turns it on, same as the Eight Sleep app.
The Heater/Cooler tile also has to show a "current temperature". Eight Sleep doesn't report degrees, so the plugin maps the side's current level onto Eight Sleep's published 55–110 °F range. Treat it as a rough indicator, not a thermometer.
Install
Search for eight-sleep in the Homebridge UI, or:
npm install -g @omarshahine/homebridge-eight-sleepConfigure
Use the Homebridge UI, or add a platform block:
{
"platform": "EightSleep",
"name": "Eight Sleep",
"email": "[email protected]",
"password": "your-eight-sleep-password",
"pollInterval": 60,
"awaySwitch": true
}| Key | Default | Notes |
|---|---|---|
| email, password | required | Your Eight Sleep login. Both people on a shared Pod are controlled through the one account. |
| pollInterval | 60 | Seconds between state reads. Minimum 30. |
| awaySwitch | true | Expose the per-person away-mode switches. |
| leftName, rightName | auto | Override the tile names. |
| debug | false | Log every poll. |
Good to know
- Rate limits. Eight Sleep throttles this API. The plugin caches its login token on disk (
<homebridge storage>/homebridge-eight-sleep/token.json, mode 0600) so restarts don't re-authenticate, and it backs off automatically when told to. If you see "rate limiting us" in the log, it will recover on its own. - No Response. If the Pod is offline or the cloud hasn't answered for 5 minutes, the tiles show "No Response" rather than stale state.
- Latency. Changes made in the Eight Sleep app show up in HomeKit within one poll interval. Changes from HomeKit are confirmed a few seconds later.
- Unofficial. Eight Sleep can change or remove these endpoints at any time. This plugin is not affiliated with Eight Sleep.
- Away mode. Setting a level or turning a side on from HomeKit works even while the household is in away mode, and does not clear away mode. Use that person's Away switch to leave away mode.
Credits
- steipete/eightctl for the reverse-engineered API surface this plugin ports.
- Earlier plugins by nfarina and tjmehta for the Heater/Cooler idea.
License
MIT
