[APP][Pro] Eight Sleep — Pod temperature, presence, sleep data and smart bed automation

Hi all,

I’ve been working on a new Homey app for Eight Sleep.

The aim is to bring the Eight Sleep Pod properly into Homey, so each side of the bed can be used as its own device for temperature control, presence, sleep data and automations.

Homey App Store:

What does it do?

The app brings each side of an Eight Sleep Pod into Homey as a separate device.

It currently supports:

  • Side on/off

  • Target temperature

  • Bed temperature

  • Room temperature

  • Bed presence

  • Live heart rate

  • Resting heart rate

  • HRV

  • Breath rate

  • Sleep stage

  • Sleep fitness score

  • Sleep quality score

  • Sleep routine score

  • Time slept

  • Next alarm

  • Away mode

  • Water low status

  • Priming status

  • Pod power

  • Snooze / stop alarm buttons

  • Prime Pod button

It also includes support for an adjustable base, including base presets and head/feet angle controls where supported.

Flow support

This is where it gets useful inside Homey.

There are Flow cards for things like:

  • Someone got into bed

  • The bed became empty

  • A sleep session ended

  • Sleep stage changed

  • The alarm started ringing

  • The alarm stopped

  • Snore mitigation started/stopped

  • Water became low

  • Water was refilled

  • Priming started/finished

  • Daily sleep summary is ready

There are also conditions for:

  • Someone is in bed

  • Side is on

  • Away mode is on

  • All sides are away

And actions for:

  • Set target temperature

  • Turn a side on or off

  • Set temperature after a delay

  • Set temperature in Celsius or Fahrenheit

  • Start or stop away mode

  • Snooze or stop the alarm

  • Prime the Pod

  • Set adjustable base preset

  • Set head/feet angle

  • Set a one-off alarm

Example automations

A few examples of what I’m looking to do with it:

  • When someone gets into bed, dim the bedroom lights and set the room into night mode

  • When both sides are empty in the morning, turn off sleep mode and start morning routines

  • If the bed becomes empty overnight, trigger low-level lighting

  • Use sleep session data in Homey Insights

  • Use bed presence as a more reliable “in bed” signal than motion sensors

  • Trigger routines from alarms, sleep stage changes or daily sleep summaries

  • Automate Pod temperature changes during the evening or overnight

A note on the API

This is an independent community integration and is not affiliated with, authorised by, or endorsed by Eight Sleep.

It talks to Eight Sleep’s cloud service and requires an Eight Sleep account. The API is unofficial, so behaviour may change over time, but the goal is to make the integration as useful and stable as possible.

Data notes

Bed presence is based mainly on recent heart-rate samples, so it can sometimes lag slightly depending on when Eight Sleep publishes fresh data.

Live heart rate is treated as current-state data. Resting heart rate, HRV and breath rate are based on Eight Sleep’s processed sleep data and are more suitable for longer-term Insights.

Feedback welcome

I’d really welcome feedback from other Eight Sleep / Homey users.

I’m particularly interested in:

  • Which Pod versions people are using

  • Whether left/right side detection works as expected

  • How reliable presence feels in real use

  • Which Flow cards are useful

  • What other automations people would like to build

  • Any issues with alarms, away mode, priming or adjustable base controls

Thanks,
JZ

Very good ! . I have a pod 4 (not adjustable base)
I have set up presence to status in homey for both sides, it works, but ill try to measure the delay more accurate and report :slight_smile:
The temp in status seems very wrong, i’ve always just used ± in the eightsleep app because this.
We have an aircon set to 19 degrees, and the eightsleep app reports this accurate, but the side of the bed is usually in the high 20’s, so the status on my side now states 27-31 with room temp of 19.1.
So adjustable status fields to something else, and maybe ± instead of degrees in the adjustment would be nice.
Setting alarm or being able to trigger the alarm on the bed (then we can automate something else and dont have to rely on the eighsleep app anymore)

@plugg3n Thanks so much for the detailed feedback — really helpful! :folded_hands:

On the temperature display
The Bed temperature tile is showing the actual measured water/surface temperature of the pod mattress, which is correct — once someone is in bed it naturally sits in the high 20s (body heat + the pod’s own circulation). It’s not the same as the room temperature or the set-point. The Eight Sleep app doesn’t show you this value at all, which is why it looks unexpectedly high.

What you’re used to seeing in the Eight Sleep app is the adjustment level (that ±10 scale). Good news — v1.0.8 (just pushed today) adds a new Heating/cooling level tile that shows exactly that: a number from −10 to +10, the same scale as the official app. It shows up alongside the temperature tiles on the device card.

On customising the device card
You can show/hide/reorder any tile by long-pressing a tile on the device card and tapping the pencil icon (Edit capabilities). So if the raw bed temperature isn’t useful to you, just hide it and keep the new level tile instead — no app update needed for that part.

On alarms
There were already Flow actions for Set a one-off alarm (schedule for a specific time) and Snooze/Stop alarm since v1.0.5, but v1.0.8 also adds Trigger the alarm now — a single action that fires the pod’s vibration + thermal alarm ~1 minute from now, perfect for automations where you want Homey to wake someone up immediately.

All three changes are submitted to the store in v1.0.8 — it should roll out to your Homey soon (i hope). Let me know how the presence delay tracking goes! :blush:

Nice :partying_face:

This mornings tracking was not good :roll_eyes:

Ive set each side to update sleep/awake status.

We both laid a bit after the alarm going off, see screenshot for the detail

@plugg3n thanks for flagging this and sharing the timeline screenshot — really helpful for diagnosing it! :folded_hands:

I could see exactly what was happening: after your alarm fired, the pod transitions out of its smart sleep state, and if your heart rate sample went slightly stale while you were lying awake, a single poll was enough to trigger “got out of bed” — even though you were still in bed. Then when you moved and a fresh HR sample came in, it’d flip back to “in bed” again. Classic lay-in false positive. :sweat_smile:

I’ve just pushed a fix in v1.0.9 — the “got out of bed” trigger now requires 2 consecutive polls without a presence signal before it fires (roughly 10 minutes with default polling). Getting into bed is still detected immediately. This should stop the oscillation for lay-ins after alarms.

The build is uploaded — just needs to clear the review queue to go live. I’ll update this thread when it’s available. Would love to hear back after a couple of mornings whether it feels better!

Hello @Zarbie question for you. Is there issues with the alarm trigger then card. I tried to create a flow triggering off the alarm and it hasn’t worked for me. Any suggestions?

@Jgalpine80 Thanks for flagging this — you’ve found a genuine bug! :bug:

After digging into the code I found two issues working against each other:

  1. The alarm was being silently dropped — when an alarm is actively ringing, the Eight Sleep API often doesn’t include an endTimestamp field. The app was treating that as “alarm already finished” and ignoring it entirely.
  2. The ringing check was too strict — even if the alarm made it through, the trigger logic required both startTimestamp and endTimestamp to be present. Both are optional fields in the API, so the condition would never be met.

Both have been fixed in v1.0.10, which is now live on the App Store. Updating the app should get your alarm_ringing and alarm_dismissed Flow triggers working correctly.

Sorry for the frustration — and thanks again for the report, it was a good one! Let me know if you’re still seeing any issues after updating. :folded_hands:

Thanks for your quick response. I am still experiencing this error message.

Sorry @Jgalpine80 i actually thought i replied to this after i addressed the code! Appologies

Thanks again for reporting this. The HTTP 400 was caused by the alarm time format sent to Eight Sleep. This has now been corrected in the current v1.0.13 release. Please update the app and try “Trigger the alarm now” again. If it still fails, please let me know your app version and send a Homey diagnostic report so I can inspect the new response.

Sorry for not following up, but
Line woke up and went out of bed about 06 as the timeline says, i remained in bed and got a false up/down.
It detected somehow that she was present about the time i woke up again as you can see, (the side was then empty)

will have a dig into this and see what i can find! Sorry for the delay, have been working on a couple of other apps and trying to bring them to a good level.

@plugg3n Thanks again for the timeline screenshots — that was exactly what I needed to pin this down. :folded_hands:

Both problems traced back to the same root cause: presence was based almost entirely on heart-rate recency. So two things could go wrong:

• False “up/down” while you were still in bed — when you lie still after the alarm, the Pod’s heart-rate samples can thin out for a few minutes. That gap was enough to flip the side to “empty”, then flip back when the next sample arrived.
• Phantom “in bed” on an empty side — a finished sleep session that Eight Sleep re-published could momentarily look “active” again, showing a side as occupied even though nobody was there.

I’ve reworked presence in v1.0.16 (just published, rolling out to the store now - heres a link to test Eight Sleep | Homey ) to fuse multiple signals instead of heart rate alone:

• Heart rate and breathing rate are both treated as live “someone’s here” signals.
• A warm-mattress check (bed surface well above room temperature) helps hold presence steady while you’re lying still.
• A time-based confirmation before a side is marked empty — so a brief gap no longer triggers a false “got out of bed”. You can tune this under the device’s Advanced settings → “Empty-bed confirmation (minutes)” (default 12).
• A “back in bed” reading is now only trusted when there’s a real live signal behind it, which removes the phantom-present case on the empty side.
• I also sample faster while a side is occupied, so transitions are crisper.

Once it lands on your Homey, would you mind giving it a few mornings — especially the lie-in-after-alarm situation — and letting me know how it feels? If anything still looks off, a Homey diagnostic report + the rough time it happened would help me a lot.

New one here, sorry for the delay. So I was away and didnt sleep at the bed at all, so a false positive. Did not turn it on away mode

another example, its highly unreliable :confused:
I woke up at 7 and left the bed which did not register, Line (the other side) woke up and left the bed around 10:12.

@plugg3n Thanks again — this second timeline was useful, and I agree the behaviour shown there was not reliable enough. I traced both screenshots against the app. This presence detection may yet be the death of me, which feels rather off-brand for a sleep app. :sweat_smile:

There are two separate effects. The false “lay down” events are delayed or re-published session markers coming back from Eight Sleep’s cloud API. Those markers are processed sleep data, not a real-time bed sensor. The previous app trusted them too much, so that path is now blocked: a processed marker or a warm/preheated mattress can no longer create a new “in bed” event.

The late “got up” events were not only Eight Sleep. The app was also stacking its own safeguards: it could retain a recent biometric or warm-bed signal for up to 30–45 minutes and only then begin the separate empty-bed confirmation. That matches the 31–47 minute delays in your timeline.

I’ve removed that stacked hold. There is now one bounded exit countdown, and only genuinely fresh heart-rate or breathing data can cancel it. Delayed markers, smart mode and retained mattress warmth cannot restart it.

I’ve released v1.0.18 to Test with these changes:

  • Processed markers, smart mode and mattress warmth can no longer create a new “in bed” event.
  • Only fresh, plausible heart-rate or breathing data can confirm entry.
  • Weak or delayed evidence can no longer restart the exit countdown.
  • There is one bounded exit confirmation instead of stacked grace periods.
  • Diagnostics now expose the raw marker and live-sample timing.

Test build: Eight Sleep | Homey

Eight Sleep still does not expose a documented real-time per-side occupancy API, so I cannot honestly promise sensor-level instant transitions when its cloud data itself is late. What v1.0.18 does is prevent that upstream data churn from creating phantom arrivals or unnecessarily extending exits inside Homey.

If you can try v1.0.18 for a few mornings, I’d really appreciate a diagnostic report and the approximate real time you left the bed if anything is still off. That should let me separate any remaining Eight Sleep latency from Homey’s polling precisely.