Smart Indoor Cycling with Home Assistant and Wahoo Integration (Power-Based Automations)

Indoor cycling setups have come a long way—from simple trainers to fully connected ecosystems with detailed performance metrics. If you’re already using a Wahoo trainer, you likely have access to real-time data like power, cadence, and speed.

Advertisements

But instead of just viewing that data in an app, what if your entire home reacted to your effort?

In this guide, we’ll explore how to integrate your Wahoo trainer with Home Assistant and build powerful automations based on power output—arguably the most responsive and useful metric for real-time control.


Why Use Power for Automations?

While many cyclists rely on heart rate for training, power has some clear advantages in a smart home context:

  • Instant response (no lag like heart rate)
  • Direct measure of effort
  • Consistent across sessions
  • Perfect for triggering automations

Since the Wahoo integration provides power, cadence, and speed, power becomes the ideal signal to build around.


Components Needed

To get started, you’ll need the following:

1. Wahoo Trainer

Such as a Kickr or similar device that provides:

  • Power (W)
  • Cadence (RPM)
  • Speed

2. Home Assistant

A running Home Assistant instance with access to HACS.

3. Wahoo Integration (HACS)

Install the integration from:
https://github.com/kilianyp/hacs-wahoo-wftnp

This will typically expose:

  • sensor.wahoo_power
  • sensor.wahoo_cadence
  • sensor.wahoo_speed

4. Smart Devices (Optional but Recommended)

To make your setup shine:

  • Smart lights (RGB capable)
  • Smart plugs (for fans or heaters)
  • Climate systems
  • Media players

Use Case: Power-Based Training Environment

Let’s build a practical automation:

👉 Your training room adapts dynamically based on power output

What This Automation Does

  • Adjusts lighting color based on intensity
  • Turns on a fan when effort increases
  • Resets everything when the workout ends

Defining Power Zones

Instead of heart rate zones, we define power zones. These depend on your FTP (Functional Threshold Power), but here’s a simple generic model:

  • Zone 1: < 100 W (Recovery)
  • Zone 2: 100–180 W (Endurance)
  • Zone 3: 180–250 W (Tempo)
  • Zone 4+: > 250 W (Hard effort)

You can easily tweak these later.


YAML Automation Example

Below is a complete Home Assistant automation using only the sensors provided by the integration.

alias: Wahoo Power-Based Training Environment
description: Adjust lights and fan based on power output
mode: single

trigger:
  - platform: state
    entity_id: sensor.wahoo_power

condition:
  - condition: numeric_state
    entity_id: sensor.wahoo_power
    above: 0

action:
  - choose:

      # Zone 1 - Recovery
      - conditions:
          - condition: numeric_state
            entity_id: sensor.wahoo_power
            below: 100
        sequence:
          - service: light.turn_on
            target:
              entity_id: light.training_room
            data:
              color_name: blue
              brightness: 100
          - service: switch.turn_off
            target:
              entity_id: switch.fan

      # Zone 2 - Endurance
      - conditions:
          - condition: numeric_state
            entity_id: sensor.wahoo_power
            above: 100
            below: 180
        sequence:
          - service: light.turn_on
            target:
              entity_id: light.training_room
            data:
              color_name: green
              brightness: 150
          - service: switch.turn_on
            target:
              entity_id: switch.fan

      # Zone 3 - Tempo
      - conditions:
          - condition: numeric_state
            entity_id: sensor.wahoo_power
            above: 180
            below: 250
        sequence:
          - service: light.turn_on
            target:
              entity_id: light.training_room
            data:
              color_name: yellow
              brightness: 200

      # Zone 4+ - Hard Effort
      - conditions:
          - condition: numeric_state
            entity_id: sensor.wahoo_power
            above: 250
        sequence:
          - service: light.turn_on
            target:
              entity_id: light.training_room
            data:
              color_name: red
              brightness: 255
          - service: switch.turn_on
            target:
              entity_id: switch.fan

  # Reset when workout ends
  - delay: "00:03:00"
  - condition: numeric_state
    entity_id: sensor.wahoo_power
    below: 20
  - service: light.turn_off
    target:
      entity_id: light.training_room
  - service: switch.turn_off
    target:
      entity_id: switch.fan

How This Automation Works

Trigger

The automation fires every time your power value changes.

Conditions

Ensures that:

  • The sensor is active
  • You are actually pedaling (> 0 W)

Choose Block

Each power zone has:

  • Its own condition
  • Its own set of actions

This makes the automation easy to extend and maintain.

Reset Logic

After 3 minutes of low power (< 20 W), the system:

  • Turns off lights
  • Stops the fan

This prevents everything from staying on after your session.


Why This Works So Well

Using power instead of heart rate gives:

  • Faster response (instant changes when you sprint)
  • More precise automation triggers
  • Better alignment with actual effort

For example:

  • Sprint → immediate red lights and max fan
  • Recovery → instant calm environment

Expanding the Setup

Once this is working, you can take it much further.


🌬️ Smart Climate Control

If you have a thermostat or HVAC system:

  • Increase airflow when power exceeds 200 W
  • Reduce room temperature gradually during long sessions

This helps maintain comfort over time.


🎵 Music Based on Effort

Connect a media player:

  • Low power → calm music
  • High power → high-energy playlist

This creates a fully immersive training experience.


💡 “Pain Cave” Lighting Effects

Enhance the visual experience:

  • Pulsing red lights during sprints
  • Smooth transitions between zones
  • Sync with cadence for extra effect

🚿 Post-Workout Routine

When your session ends:

  • Turn on bathroom heating
  • Start ventilation
  • Turn on lights in adjacent rooms

You can even automate a “cooldown mode” in your home.


Energy Awareness (kWh)

Since you’re already in Home Assistant, you can combine this setup with energy monitoring.

Ideas:

  • Track total energy usage (kWh) of your training room
  • Measure how much your fan, lights, and trainer consume
  • Schedule workouts during lower electricity price periods

This is especially useful if you’re already using dynamic electricity pricing.


Dashboard Ideas

Create a dedicated cycling dashboard with:

  • Live power (W)
  • Cadence (RPM)
  • Speed
  • Zone indicator (based on power)
  • Fan and light status

This gives you a complete overview without switching apps.


Final Thoughts

Using your Wahoo trainer with Home Assistant unlocks a new level of training experience. By focusing on power-based automations, you get:

  • Immediate responsiveness
  • Reliable triggers
  • A more immersive environment

And the best part? This is just the beginning.

You can continue to refine, experiment, and build a setup that perfectly matches your training style—whether that’s structured intervals, endurance rides, or all-out efforts.

Once you start automating your training space, it’s hard to go back.


Some of the links in this article are "affiliate links", a link with a special tracking code. This means if you click on an affiliate link and purchase the item, we will receive an affiliate commission. The price of the item is the same whether it is an affiliate link or not. Regardless, we only recommend products or services we believe will add value to our readers. By using the affiliate links, you are helping support our Website, and we genuinely appreciate your support.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.