Intelliflow pump RS485 protocol

Hi Doug,
There are very few boards that can connect directly to the Pentair pump. That is because the electrical interface on the Inteliflo's serial port is RS485, ant the electrical interface on the RPi's serial port is TTL.
 
I'm using a BeagleBoneBlack, who's electrical interface is also TTL, but I have an RS485 transceiver chip attached to the BBB to make it speak RS485. Others have used a USB-to-RS485 dongle, which might be the simplest approach for the RPi.
 
Hi Folks,
 
Not sure if I originally posted here, but I have had some success with talking to my Pentair Ultratemp pool controller.   I can't remember who initially gave me some help as I have had life get in the way for a few months.
I am currently getting usable information (temp, set temp, ON/OFF status and timer settings via the RS485 connection between the control panel and heater/cooler pump.
 
I have also seen config codes but I need to go back with the soldering iron to enable my hardware to send the codes onto the bus.
 
Happy to give some specifics if it's relevant and hasn't been covered yet.
 
Cheers
Nick
 
My programming colleague and I found enough Pentair pump code hints on line to make a functioning NXP system to run a pump via RS-485. Not sure if/when he plans to write it up, but will ask.
 
Thanks all.

Is this communication with the pump, or the Pentair controller? My hope is to get rid of the Pentair controller altogether and just have my RPi or Arduino communicate directly with the Intelliflo pump...

Cheers
 
4/2/2022 Update to change program link
 
I would like to control an Intelliflo VSF pump using a DoMore PLC.  I have a USB to RS485 converter but cannot seem to get communication happy.  Keep getting timeout faults.  I have pieced together a simply python program on a Raspberry PI 3+ to attempt to send the remote control instruction to the pump.  The pump is not responding.  The pump is set to address 6.
 
I used the information from this page to format the message.  If someone could point me to some simple python code to place the pump in remote control mode would be a great help.
 
My python codes is located here.
Data I am attempting to send to RS485 converter
 
06 00 05 01 255 02 25
 
Any help would be greatly appreciated.
 
Hi heatmizerman,
 
I'm not a python guy, but your code looks simple enough. I use a BeagleBone, which allows direct RS485 without USB, so I don't have the quirks that USB can cause. But here are two things to look at:
 
1) The simple one is polarity of the wiring. Just make sure that '+' is connected to '+' and '-' to '-', and you also need the grounds connected together to be sure that you don't exceed the common-mode voltage of the transceivers.
 
2) The more complicated one is the bus turn-around time. RS485 is a half-duplex bus, so the transmitter in the USB dongle needs to be enabled in order to send, and disabled in order to receive. Most USB RS485 dongles automatically enable the driver as soon as you send it data, but the driver needs to be disabled quickly in order to receive the response. On the BeagleBone, I enable and disable explicitly, but a USB dongle needs to wait until it is sure that you are done sending data, or it has some 'command' that.allows you to disable the driver. Any delay might in disabling the driver could cause you to miss the pump's reply. Is there a way to set that delay in the dongle? Is that what your "ComPort.timeout=1" line does?
 
mark
 
heatmizerman said:
I would like to control an Intelliflo VSF pump using a DoMore PLC.  I have a USB to RS485 converter but cannot seem to get communication happy.  Keep getting timeout faults.  I have pieced together a simply python program on a Raspberry PI 3+ to attempt to send the remote control instruction to the pump.  The pump is not responding.  The pump is set to address 6.
 
I used the information from this page to format the message.  If someone could point me to some simple python code to place the pump in remote control mode would be a great help.
 
My python codes is located here.
Data I am attempting to send to RS485 converter
 
06 00 05 01 255 02 25
 
Any help would be greatly appreciated.
 
Could you use this or part of it on your Pi to get what you need?
 
https://github.com/tagyoureit/nodejs-poolController
 
4/2/2022 Updated to put links back in.
4/4/2020 Updated 
 
I apologize for the delay, can still on post one message in a 24 hour period.  I was finally able to get the Python code to work.
 
Documented Message to place the Pump in Remote Control mode
96,16,4,1,255,2,25
 
  • The first issue I had to overcome was understanding that address 1 in the Pump is really address 96 on the RS485 network.
     
  • The second issue was getting the python program to calculate the correct checksum.  This was accomplished by adding the 165,0 prefix to the message.  With the prefix now part of the message the proper checksum (537) can be calculated that matches the documented message.
    165,0,96,16,4,1,255,2,25  (2*256)+25 = 537
     
  • The Third issues was getting the pump to respond to the message.  This was accomplished by added the header (255,0,255) in front of the prefix (165,0).  Once we added the header to the message the pump responded and went into remote mode.
    255,0,255,165,0,96,16,4,1,255,2,25
 
So I was able to get the following messages to work:
  • Request Status Message: 96,33,7,0,1,28 (must read 26 integers to get the response)  (My source address is 33)
    Send: 255, 0, 255, 165, 0, 96, 33, 7, 0, 1, 45   --> Checksum 301 = (1*256)+45
    Recv: 255, 0, 255, 165, 0, 33, 96, 7, 15, 10, 2, 2, 0, 53, 4, 76, 0, 3, 0, 0, 0, 0, 5, 48, 2, 7
     
  • Remote Control Message: 96,33,4,1,255,2,42
    Send: 255, 0, 255, 165, 0, 96, 33, 4, 1, 255, 2, 42   --> Checksum 554 = (2*256)+42
    Recv: 255, 0, 255, 165, 0, 33, 96, 4, 1, 255, 2, 42
     
  • Local Control Message: 96,33,4,1,0,1,43
    Send: 255, 0, 255, 165, 0, 96, 33, 4, 1, 0, 1, 43   --> Checksum 229 = (1*256)+43
    Recv: 255, 0, 255, 165, 0, 33, 96, 4, 1, 0, 1, 43
     
  • Start Pump Message: 96,33,6,1,10,1,55
    Send: 255, 0, 255, 165, 0, 96, 33, 6, 1, 10, 1, 55   --> Checksum 311 = (1*256)+55
    Recv: 255, 0, 255, 165, 0, 33, 96, 6, 1, 10, 1, 55
     
  • Stop Pump Message: 96,33,6,1,4,1,49
    Send: 255, 0, 255, 165, 0, 96, 33, 6, 1, 4, 1, 49   --> Checksum 305 = (1*256)+49
    Recv: 255, 0, 255, 165, 0, 33, 96, 6, 1, 4, 1, 49
     
  • Set Pump Speed #: 96,33,5,1,3,1,47 (p1 = 2, p2 = 3, p3 = 4, p4 = 5)
    Send: 255, 0, 255, 165, 0, 96, 33, 5, 1, 3, 1, 47   --> Checksum 303 = (1*256)+47
    Recv: 255, 0, 255, 165, 0, 33, 96, 5, 1, 3, 1, 47
I would like to be able to tell the pump to run a specified RPM or GPM.  I attempted to use the "set pump to rpm speed" (Action 1, Mode 4,196) command it took the message and returned and error.
 
My Set Pump to RPM Speed Message:  96,33,1,4,4,196,7,108,2,102  --> 1900rpm = (7*256)+108
Send: 255, 0, 255, 165, 0, 96, 33, 1, 4, 4, 196, 7, 108, 2, 102   --> Checksum 614 = (2*256)+102
Recv: 255, 0, 255, 165, 0, 33, 96, 255, 1, 8, 2, 46  (This is an error response but not sure what it [1,8] means)
 
Can anyone share the proper way to tell the pump to run a specified speed?
 
Thanks in advance
 
Can anyone share any information on following pump commands?
 
Set Pump Timer to minutes (or hour(1) minutes(5)
Send: 255,0,255,165,0,96,33,1,3,43,1,5,1,95
Recv: 255,0,255,165,0,33,96,1,2,1,5,1,47
What timer does the above command set?
 
 
Set pump to rpm(196) or gpm(228) speed
Send: 255,0,255,165,0,96,33,1,2,4,196,1,241
Recv: 255,0,255,165,0,33,96,255,1,8,2,46
If I send either of the 2 values 196 or 228, it returns the same data.  I assume the 255 means an error occurred. What is this command supposed to do?
 
 
Thanks in advance
 
Back
Top