Pool pump speed control - easy way?

Update to the comms issue: Turns out, this doesn’t work with the ESP8266 too well, as in not giving me Demand RPM feedback or the slider not reflecting current RPM I suspect something to do with only having 1 UART that this can really use.

Replaced it with an ESP32 and everything works as it should. Just trying to read Motor input power page 0, address 17, or Inverter input power, page 0, address 4.

Are you guys able to build code after updating ESPHome to version 2023.4.0 ?

It is failing for me with:

In file included from src/esphome/components/centuryvspump/sensor/CenturyVSPumpSensor.cpp:1:
src/esphome/components/centuryvspump/sensor/CenturyVSPumpSensor.h: In constructor 'esphome::century_vs_pump::CenturyVSPumpSensor::CenturyVSPumpSensor(esphome::century_vs_pump::CenturyVSPump*, uint8_t, uint8_t, uint16_t, const string&, const string&)':
src/esphome/components/centuryvspump/sensor/CenturyVSPumpSensor.h:22:30: error: no matching function for call to 'esphome::century_vs_pump::CenturyVSPumpSensor::set_name(const string&)'
                 set_name(name);
                              ^
In file included from src/esphome/components/sensor/sensor.h:5,
                 from src/esphome/components/centuryvspump/CenturyVSPump.h:7,
                 from src/esphome/components/centuryvspump/sensor/CenturyVSPumpSensor.h:3,
                 from src/esphome/components/centuryvspump/sensor/CenturyVSPumpSensor.cpp:1:
src/esphome/core/entity_base.h:20:8: note: candidate: 'void esphome::EntityBase::set_name(const char*)'
   void set_name(const char *name);
        ^~~~~~~~
src/esphome/core/entity_base.h:20:8: note:   no known conversion for argument 1 from 'const string' {aka 'const std::__cxx11::basic_string<char>'} to 'const char*'
Compiling /data/test-esp-32/.pioenvs/test-esp-32/src/esphome/components/esp32/preferences.cpp.o
Compiling /data/test-esp-32/.pioenvs/test-esp-32/src/esphome/components/homeassistant/time/homeassistant_time.cpp.o
*** [/data/test-esp-32/.pioenvs/test-esp-32/src/esphome/components/centuryvspump/sensor/CenturyVSPumpSensor.cpp.o] Error 1

@ gazoodle thanks for fixing code!

I also found issue why RS485 was not working for me at all.
It was hardware UART failure in ESP32 which is weird.

I tried to read Current and Voltage this way.
Current is working fine. Voltage returning “Unknown”.

Did you get it working?

No I wasn’t able to. What is your code for it to read current?

I’d like to try to get power out of it to keep me from making a CT based power meter.

I think it’s the data format but not familiar enough with the code to make it work.

I am using code from this page:

  - platform: centuryvspump
    name: ${friendly_name} Filter Pump Current
    address: 1
    page: 0
    scale: 1000         ## 1000 per Gen 3 EPC modbus Comm Protocol
    type: custom
    unit_of_measurement: Amps

  - platform: centuryvspump
    name: ${friendly_name} Filter Pump Voltage
    address: 31         ## or 2 Mains Voltage RMS
    page: 1             ## or 3 for Mains Voltage RMS
    scale: 230          ## NA per manual
    type: custom
    unit_of_measurement: Volts

I did more tests last couple days - looks like current sensor does not show correct amperage.
I have CT clamps also to measure current which are calibrated and more or less matching Klein Tools Tester.
When I run motor on low 1200-1800 RPM - current sensor is very close to what CT clamps detecting. But on full power it stuck on 7A and never going higher. CT Clamp is showing 9.5-10A at the same time.
Voltage is always show Unknown.

Just did an experiment and got the same results as you. At low RPM, it reads 0 but at 1200-1800, reads 1.00000 and at 3450, reads 6.000 amps. Nowhere near what my clamp meter reads.

I also noticed one more issue - basically pump never goes to 3450 rpm. Even if I set it to 3450 it is only reaching 3226-3227 rpm. It was working fine before latest fix. I also replaced esp32 but that should not be an issue. Could it be some bug? Can you try to check on your side?

It’s working good here. Here’s some screenshots. The gauge is running off the response from the pump, as it was bigger and easier to see from a distance.


Hey guys,

I have 2x Pentair Intelliflo VS and 1x Pentair Intellichlor Salt Chlorine Generator Model IC20 in operation.

Attached some pictures of the inside wiring of the pump, and something of the manual for the rather expensive Intellisyn Manual (not using this product).

It appears that RS485 is definitely used.

Questions I have:

  1. Do you think/know if the CenturyVSPump code will work?

  2. I don’t see any option between Regal Modbus v4.17 protocol and OEM version. Does anyone know which protocol works and if not how the Modbus can be activated?

  3. Has anyone tried ESP stack with RS485 to Wifi or Ethernet? It would make things easier for me.

  4. Has anyone integrated with Chlorinator?

I am aware of the nodejs controller with HA integration but prefer to keep it simple/less devices/systems.

Thanks for your help.
Rgds
Martin