Skip to content

Home Assistant + ESPHome solution to read and control variable speed pumps (like iSAVER+) over RS485 using ESP32.

Notifications You must be signed in to change notification settings

htilly/ha-esp32-variable-speed-drive-esphome

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚠️ This project builds on work originally shared by milwhite in this Home Assistant community post.

ha-esp32-variable-speed-drive-esphome

Made for Home Assistant

Control a variable speed drive (such as the iSAVER+ 1100) using an ESP32 and ESPHome, fully integrated with Home Assistant. This setup lets you read actual RPM, set speed, and control power via Modbus over RS485.

⚠️ Disclaimer

This configuration has only been tested on the following device:

🔗 InverSilence iSAVER+ 1100 – Folkpool

I take no responsibility for how this setup might impact your device. Use it at your own risk. Your specific model may not be compatible, and incorrect usage might damage your equipment.

If you do manage to get it working with a different variable speed drive, I’d love to hear about it — your feedback could help others in the community!

🛠️ Hardware

🧾 Bill of Materials (BOM)

Item Description Example / Link
ESP32 Dev Board Main controller running ESPHome HiLetgo ESP32 Dev Board
RS485 to UART Module For Modbus communication over UART MAX485 RS485 Module
Variable Speed Drive The pump controller we're interfacing with iSAVER+ 1100 (or similar)
Dupont cables / breadboard wires For connecting components Any female-to-female and male-to-male jumper wires
Power supply 5V USB power for ESP32 e.g. phone charger, USB power brick

📡 ESPHome Configuration

The ESPHome YAML file is in esphome/isaver.yaml.

To use it:

  1. Replace WiFi credentials in your secrets.yaml
  2. Flash your ESP32
  3. Add the device to Home Assistant
  4. Optionally adjust the Modbus logic to fit your specific drive

💡 Dashboard Preview

Here’s what the finished control panel looks like in Home Assistant:

Dashboard Preview

🏡 Home Assistant Integration

You can use the exposed number, sensor, switch, and button entities directly in dashboards or automations.

Lovelace Files

File Description
gauge.yaml RPM gauge
preset_buttons.yaml ECO / NORMAL / MAX speed buttons
status_panel.yaml On/off switch, actual RPM, Modbus info
max_rpm_button.yaml Triggers 2-hour Max RPM script

Lovelace files are in examples/lovelace/

🧪 Bonus: Temporary Max Speed Script

To enable the “Max RPM for 2h!” button, create this in your scripts.yaml or load it from examples/scripts/:

alias: Pump Max Then Restore
mode: single
sequence:
  - variables:
      previous: "{{ states('number.pump_rpm_regulator_pool_pump_rpm') | int }}"
  - service: number.set_value
    target:
      entity_id: number.pump_rpm_regulator_pool_pump_rpm
    data:
      value: 2900
  - delay: "02:00:00"
  - service: number.set_value
    target:
      entity_id: number.pump_rpm_regulator_pool_pump_rpm
    data:
      value: "{{ previous }}"

📁 Folder Structure

ha-esp32-variable-speed-drive-esphome/
├── README.md
├── LICENSE
├── .gitignore
├── esphome/
│   └── isaver.yaml
├── docs/
│   └── 
├── examples/
│   ├── lovelace/
│   │   ├── gauge.yaml
│   │   ├── preset_buttons.yaml
│   │   ├── status_panel.yaml
│   │   └── max_rpm_button.yaml
│   └── scripts/
│       └── pump_max_then_restore.yaml
└── images/
    └── pump.png

🔌 Wiring Diagram (ASCII)

⚠️ Important Wiring Note

GPIO5 (IO5) on the ESP32 must be connected to both the RE and DE pins on the RS485 module.
This ensures proper direction control for Modbus communication.

                          RS485
   ESP32                  Module B              Variable Speed Drive
+---------+           +-----------+           +----------------------+
|         |           |          A|   ---->   | A                    |
|      17 +---------->+ DI        |           |                      |
|         |           |          B|   ---->   | B                    |
|      16 +<----------+ RO        |           +----------------------+
|         |           |           |
|       5 +---------->+  RE/DE    |
|         |           |   GND     |
+---------+           +-----------+
                           |
                           |
                          GND

🧠 How It Works

This ESPHome config sends and receives Modbus messages over UART using a custom lambda. It sets the desired RPM via a Modbus write and reads the current RPM in a loop.

A GPIO pin is used to toggle the RS485 write-enable line before/after communication to avoid collisions.

💧 Smarter Pool Pump Scheduling

GoNow when you have variable speed pump you might want to save energy and keep things quiet? We've put together a simple example that helps you figure out a daily schedule based on your pool size and pump settings.

Check it out here:
👉 docs/example_schedule.md

It shows:

  • How to calculate how much water your pump needs to move
  • What different RPMs mean for flow and power use
  • A sample schedule that keeps things clean without wasting energy

Photo

Photo

About

Home Assistant + ESPHome solution to read and control variable speed pumps (like iSAVER+) over RS485 using ESP32.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published