Intermatic PE653RC Pool Controller and HA

It likely is the difference between the two firmware versions. It also sounds like your system is using the PE653 to control the heater operation based upon the water temperature measured by the PE653 sensor. That is an operating mode for the Rheem heater as well, I believe called Remote Pool Operation. From what I understand, this mode relies on the PE653 to enable the heat pump.

As I posted earlier in the thread, the 5 controls came in as 5 separate switches that are independently controlled. When I pulled the PE653 into HA I did remove the PE953 connection to the PE653 first. This may have set the PE653 into a default operating mode but that is only a guess. The online ZWave documentation for the PE653 is sparse: Z-Wave JS Config DB Browser , with even less info on the PE953.

When I was in the Smartthings world there were a lot of discussions on the various firmware versions, and the issues associated. That is one reason I was very hesitant about trying to pull this into HA.

I know this thread is old, but was wondering if anyone can help with getting my device working. I have paired the PE953 into HA with Firmware 3.4 and the 5 contacts are displayed. I only need to control the motor, which is contact #1 and done on a schedule through Node Red. The issue I have is the Freeze Protection Probe is only displaying 0.0 deg F and not the actual air temp. Thought it was because the original one I tried was > 4 y old and the salt had corroded it. So I bought a new one and installed it into the PE953 but it is still showing as zero deg F.
I have no idea how to get this working. Kind of shocked to see @Blueman2 is using firmware 3.7 when I can only find 3.4 and the 953 and 653 are brand new units.
Anybody know how to get the temperature reported correctly through the unit?
Many thanks.

Catching up on this thread as I migrated (migrating) from Hubitat over to HA. I am running FW 3.4 and experience the issues mentioned by @jeffbrown.

In Hubitat I used the driver found here which was great because the driver exposed a thermostat, temperature sensor and controls for a variable speed pump.

I saw a thread on github regarding some requested changes to be made possibly to the z-wave driver (if that is the correct terminology) to bring more functionality to the PE653. I just did not know whether anyone moved this along further.

Okay. Some follow up questions:

Went into the configure screen and ‘messed’ with some settings although if anyone can tell me what the decimel settings translate into I would be appreciative:

Upon messing with the settings, 5 new entities appeared… all of which are ‘Basic’ and all of which number.pool_control_basic:

Questions:

  1. Can I change this entity type into something else (ie. switch because I beleive it may hold a clue to enabling my VSP;
  2. If not, is there a service call I can make to change the number? It does not appear so ← Updated

Further Update

It appears after ‘messing’ with the settings I can no longer control the device. If I change a switch, nothing happens and then the switch reverts back (to off). Additionally, any settings I change get reverted. Any ideas?

You could always do what I had to do several times was do the factory reset of the Z-wave module that sits atop the controller and remote control. Then re-pair with HA.
My temp sensors still don’t work and they have been replaced twice. I just gave up and settled for timed on and off if the pump and freeze protection using Node Red with the helpful folks on this forum.

I am not sure how much is due to firmware or to various customizations I have done, but I have full control over all possible controls and settings for the PE653. I think the key is that I am on Firmware 3.9 which Intermatic created for property management companies to have better remote control of their pool systems. It was not a file you could load yourself, however. I had to send my unit in to Intermatic, and they installed the firmware on my PE653 and 953 hand units, then sent them back. I agreed to beta test it. I think they then decided not to go forward with that firmware for some reason. It was right at the time that “Frank” left the company, who was the main technical person driving the PE653. If there was a simple way for me to write out my firmware to a file so that others could download it, I would do that. But I am not a hardware geek.

But even with older firmwares, I think more aspects can be controlled if you experiment with custom CC commands, like I had to do with my firmware to get it to show me the Spa heater control. I am not an expert in that area either, but was able to read through the forums and Github discussions just enough to find the right commands.

Here is my pe653.json for anyone with firmware 3.9 for better access to settings. Note that I should have written this so that it only works with V3.9 firmware, but I have never written these config files before and was unsure of the formatting. So only use this if you have a PE653 with firmware 3.9.

{
	"manufacturer": "Intermatic",
	"manufacturerId": "0x0005",
	"label": "PE653",
	"description": "Pool Control",
	"devices": [
		{
			"productType": "0x5045",
			"productId": "0x0653"
		}
	],
	"firmwareVersion": {
		"min": "0.0",
		"max": "255.255"
	},
	"paramInformation": [
		{
			"#": "1[0xff00]",
			"label": "Pump Spd when Booster On",
			"description": "1=no booster, 2=Relay1, 3=VarSpd1, 4=VarSpd2, 5=VarSpd3, 6=VarSpd4",
			"valueSize": 2,
			"unit": "Decimal",
			"minValue": 1,
			"maxValue": 6,
			"defaultValue": 1
		},
		{
			"#": "1[0xff]",
			"label": "Pump Type",
			"description": "0=1SpdPump NoBooster, 1=1SpdPump w/Booster, 2=2SpdPump NoBooster, 3=2SpdPump w/Booster",
			"valueSize": 2,
			"unit": "Decimal",
			"minValue": 0,
			"maxValue": 7,
			"defaultValue": 0
		},
		{
			"#": "2[0xff00]",
			"label": "Fireman Timeout",
			"description": "Minutes (0-15) pump runs after heater off. 255= no heater",
			"valueSize": 2,
			"unit": "minutes",
			"minValue": 0,
			"maxValue": 255,
			"defaultValue": 1,
			"unsigned": true
		},
		{
			"#": "2[0xff]",
			"label": "Heater Safety",
			"description": "1=enabled, disable only if you have a separate pump not controlled by PE653",
			"valueSize": 2,
			"unit": "Decimal",
			"minValue": 0,
			"maxValue": 1,
			"defaultValue": 1,
			"unsigned": true
		},
		{
			"#": "4[0xffff]",
			"label": "Chlor Timer off",
			"description": "Chlor Timer off",
			"valueSize": 4,
			"unit": "Decimal",
			"minValue": 0,
			"maxValue": 4300000000,
			"defaultValue": 65535,
			"unsigned": true
		},
		{
			"#": "4[0xffff0000]",
			"label": "Chlor Timer on",
			"description": "Chlor Timer on",
			"valueSize": 4,
			"unit": "Decimal",
			"minValue": 0,
			"maxValue": 4300000000,
			"defaultValue": 65535,
			"unsigned": true
		},
		{
			"#": "39[0xffff]",
			"label": "Speed 2 Timer off",
			"description": "Speed 2 Timer off",
			"valueSize": 4,
			"unit": "Decimal",
			"minValue": 0,
			"maxValue": 4300000000,
			"defaultValue": 65535,
			"unsigned": true
		},
		{
			"#": "39[0xffff0000]",
			"label": "Speed 2 Timer on",
			"description": "Speed 2 Timer on",
			"valueSize": 4,
			"unit": "Decimal",
			"minValue": 0,
			"maxValue": 4300000000,
			"defaultValue": 65535,
			"unsigned": true
		},
		{
			"#": "22",
			"label": "Pool/Spa Mode",
			"description": "0=pool, 1=spa, 2=both",
			"valueSize": 1,
			"unit": "Decimal",
			"minValue": 0,
			"maxValue": 2,
			"defaultValue": 0
		},
		{
			"#": "32",
			"label": "Speed 1",
			"description": "Speed 1",
			"valueSize": 2,
			"unit": "Decimal",
			"minValue": 1000,
			"maxValue": 1500,
			"defaultValue": 1200
		},
		{
			"#": "33",
			"label": "Speed 2",
			"description": "Speed 2",
			"valueSize": 2,
			"unit": "Decimal",
			"minValue": 1000,
			"maxValue": 2000,
			"defaultValue": 1800
		},
		{
			"#": "34",
			"label": "Speed 3",
			"description": "Speed 3",
			"valueSize": 2,
			"unit": "Decimal",
			"minValue": 1000,
			"maxValue": 3000,
			"defaultValue": 2750
		},
		{
			"#": "35",
			"label": "Speed 4",
			"description": "Speed4",
			"valueSize": 2,
			"unit": "Decimal",
			"minValue": 1000,
			"maxValue": 3400,
			"defaultValue": 3200
		},
		{
			"#": "49",
			"label": "Speed Max",
			"description": "Speed-Max",
			"valueSize": 2,
			"unit": "Decimal",
			"minValue": 1000,
			"maxValue": 3450,
			"defaultValue": 3450
		}
	],
	"associations": {
		"1": {
			"label": "Lifeline",
			"maxNodes": 5,
			"isLifeline": true
		}
	},
	"compat": [
		{
			// Fixes #4588: Firmware v3.4 has numerous bugs related to multi-endpoint support.
			// Firmware v3.3 and v3.1 do not appear to have the same issues.
			"$if": "firmwareVersion === 3.4",
			"commandClasses": {
				// Force use of MultiChannelCC v1.
				"add": {
					"0x60": {
						"isSupported": true,
						"version": 1
					}
				},
				// The firmware handles requests on some endpoints incorrectly, often reporting garbage
				// that confuses discovery or inhibits operation. Remove all of these broken CCs.
				"remove": {
					// BasicCC: All endpoints control the state of Switch 1 so only keep the root endpoint
					// to reduce clutter and to handle received BASIC_SET events.
					"0x20": {
						"endpoints": [1, 2, 3, 4, 5]
					},
					// ManufacturerSpecificCC: Endpoint 1 erroneously reports an incorrect manufacturer
					// and product ID, unlike on the root endpoint.
					"0x72": {
						"endpoints": [1]
					},
					// ClockCC: Endpoint 1 erroneously reports a time with an invalid minute field,
					// unlike on the root endpoint.
					"0x81": {
						"endpoints": [1]
					},
					// AssociationCC: Endpoint 1 erroneously reports that it supports 133 associated nodes
					// but association commands don't work at all, unlike on the root endpoint.
					"0x85": {
						"endpoints": [1]
					},
					// VersionCC: Endpoint 1 reports an unknown version, unlike on the root endpoint.
					"0x86": {
						"endpoints": [1]
					}
				}
			},
			// The device sometimes sends BASIC_SET to the lifeline association when the state of Switch 1
			// changes but the value is always 0 so treat it as an event.
			"treatBasicSetAsEvent": true
		}
	]
}

I’ve been working to get my PE653 (FW3.4, no expansion module, Pentair VSP) set up in HA. Still a little rough but I’ve got full control at this point. Below is my pool dashboard (spa thermostat working but not shown while in pool mode, and ignore the three top right items which are coming from a different device).

I’m using Z-Wave JS UI with the MQTT gateway enabled, and then have the PE653 pulled into HA as an MQTT device with a bunch of helper automations to handle the quirks. The thermostats in particular require special handling, and I’m polling state every 10 minutes using the same proprietary command the PE953 uses. I have a pull request in to update the zwavejs config to include all of the configuration parameters (or at least the ones that I’ve found). Changing VSP speeds is the biggest headache to get set up. I couldn’t figure out a way to get the zwavejs config file set up to discover those. I ended up having to edit the .jsonl files in zwavejs to get those working, which is probably a bit dangerous.

Can this be used to control pool valve actuators?

@philh30 , since you showed yours, I will show mine. My dashboard for the PE653. Also uses some code that talks directly to the Pentair VSP, but mostly just using z-wave via HA. I am running firmware 3.9, so might be a bit different that others.

Did your pull requests result in the thermostats working? I have a spa/PE653 set up similar to yours. Want to know if I move to HA I can see and adjust the thermostat without special handling. thanks.

The thermostat setting for SPA use for some reason never quite got resolved. I thought it did but it later stopped working. But don’t let that deter you. I can provide a copy of exactly what I did to enable full control of SPA heat temperatures. Are you using ISY or similar now to control the pool?

Thanks. I just have a spa set up like philh30; PE653 receiver (FW3.4, no expansion module) currently controlled by only the PE953 handheld controller. My minimum goal is to get into HA the 2 motor speeds, heat on/off, set heater temp, & read current water temp. A bonus would be to also keep the PE953 connected to the receiver for spa-side convenience. If there’s a chance to get my minimum working, I’ll dive in. But I’d rather not spend a day with this if getting temp read/set into HA is definitely not going to happen.