[OBSOLETE]Intermatic PE653 Pool Control System

@JDogg016 welcome back! Thanks for all the feedback. I am working on an update based on feedback from the others that the slider is not an ideal way to control the VSP. Instead I am replacing it with four buttons for each of the speeds. They will function “radio button” style meaning that selecting any one speed will turn off the other three, or pressing the on speed will turn them all off. I plan the same for the “things” list, replacing the dimmer with four separate on/off buttons. This should address your point about “off”.

That said, off really just means none of the four #3 schedules will be enabled. If you have used the #1 or #2 schedules then “off” really will mean “revert to those schedules”. Let me know your thoughts on this approach.

Please let me know your firmware version.

Did you happen to give the “power” slider a good workout? Be sure to try 0,1,2,3,4,5,10,20,50,75,99. If this does nothing then I will remove this slider entirely.

I really appreciate the feedback from you, @Barrett_Richardson, @CAL7 and @nanatorres. Is there anyone else out there that has tried this new code? If so, don’t be bashful, please post your feedback. Thanks!

In answering your question, the power slider 0-99 has no effect to me.

My ultimate goal was to automate the pool function as much as possible so here is what I did

  1. Created a virtual switch.
  2. Used a core piston that when the switch turned on, the pool temperature was set to 90 and the VSP was set to 3… when switched off, the pool temperature was set to 60 and the VSP set to 0.

THIS WORKS flawlessly. I can now hit a switch and turn on the pool heater.

  1. I then connected the device with Alexa… now I say “Alexa turn on the pool heater” and voila!
  2. Created a new piston that scheduled the times that the VSP and the chlorinator would activate with night and speed.
  3. Created a Piston that would send me an alert every Sunday at 8pm if the pool heater is on (in case I forget to turn it off)
  4. The last part is to create a piston or an alert to (more or less) remind me based upon the weather tomorrow to turn on the pool heater (ie. Weather is nice, don’t forget to turn on the pool heater).

ALL OF THIS WORKS THANKS TO YOUR EFFORTS.

I think I will take the plunge and upgrade my firmware, probably next week. If this gets me the scheduling page for pool/spa, and thus allow control from @KeithR device handler, it will be worth it. I am concerned, of course, that there is a chance I will brick the controller. My plan is to reset everything to unpair from ST altogether, then upgrade the firmware, then try to get everything talking to ST again. Wish me luck, and see you on the other side.

I think that’s the right move. We seem to be beyond any of the v3.4 issues, and it’s the only path to pool/spa control. Good luck!

One thing I have noticed about the device is the reading of the pool temperature.

I presume the temperature reading is meant to read the current temperature of the pool (much like @bigpunk6 code).

However, my temperature has not changed since I installed the app. Should I poll this function? Is anyone else seeing this?

Try the refresh button. I will add add this to the poll function.

Please do… The refresh button has no effect. in fact, I cannot see in the IDE the last time temperature was measured.

Justin, that is concerning. The first command the refresh issues is sensorMultilevelGet, which should cause the PE653 to return a sensorMultilevelReport containing the temperature. The handler for this message then issues an event to update the UI display. If you would please, set the debug level in the preferences to Low, start up the log view in the IDE and capture the logs when you press refresh. I do see the issue that my temperature “rarely” changes, which I can easily fix, but if refresh doesn’t work for you then we have another issue. Thanks!

Of course! It’s the car lot theory. Car makes a sound all day long… get it to the car lot and it behaves. When I hit refresh (about the 100th time since I installed). The logs showed a lot and the temperature changed. I did make one change, I set debug level from high to low so maybe that did it. Anyway, the logs as you requested.

1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:13 AM: debug <<<<< dly:1000/1000
<<<<< Event: [value:0, displayed:true, name:powerlevel, isStateChange:false, linkText:Pool, descriptionText:Pool powerlevel is 0]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:13 AM: debug >>>>> PowerlevelReport(powerLevel: 0, timeout: 0) - description:zw device: 27, command: 7303, payload: 00 00
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:12 AM: debug <<<<< dly:1000/1000
<<<<< Event: [name:epEvent, value:5:250300, isStateChange:true, displayed:true, descriptionText:(fwd to ep 5), linkText:Pool]
<<<<< Event: [name:switch5, value:off, isStateChange:true, displayed:true, descriptionText:(switch5 set to off), linkText:Pool]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:12 AM: debug >>>>> MultiInstanceCmdEncap(command: 3, commandClass: 37, instance: 5, parameter: [0]) - description:zw device: 27, command: 6006, payload: 05 25 03 00
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:11 AM: debug <<<<< dly:1000/1000
<<<<< Event: [name:epEvent, value:4:250300, isStateChange:true, displayed:true, descriptionText:(fwd to ep 4), linkText:Pool]
<<<<< Event: [name:switch4, value:off, isStateChange:true, displayed:true, descriptionText:(switch4 set to off), linkText:Pool]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:11 AM: debug >>>>> MultiInstanceCmdEncap(command: 3, commandClass: 37, instance: 4, parameter: [0]) - description:zw device: 27, command: 6006, payload: 04 25 03 00
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:10 AM: debug <<<<< dly:1000/1000
<<<<< Event: [name:epEvent, value:3:250300, isStateChange:true, displayed:true, descriptionText:(fwd to ep 3), linkText:Pool]
<<<<< Event: [name:switch3, value:off, isStateChange:true, displayed:true, descriptionText:(switch3 set to off), linkText:Pool]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:10 AM: debug >>>>> MultiInstanceCmdEncap(command: 3, commandClass: 37, instance: 3, parameter: [0]) - description:zw device: 27, command: 6006, payload: 03 25 03 00
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:09 AM: debug <<<<< dly:1000/1000
<<<<< Event: [name:epEvent, value:2:250300, isStateChange:true, displayed:true, descriptionText:(fwd to ep 2), linkText:Pool]
<<<<< Event: [name:switch2, value:off, isStateChange:true, displayed:true, descriptionText:(switch2 set to off), linkText:Pool]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:09 AM: debug >>>>> MultiInstanceCmdEncap(command: 3, commandClass: 37, instance: 2, parameter: [0]) - description:zw device: 27, command: 6006, payload: 02 25 03 00
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:09 AM: debug <<<<< dly:1000/1000
<<<<< Event: [name:epEvent, value:1:250300, isStateChange:true, displayed:true, descriptionText:(fwd to ep 1), linkText:Pool]
<<<<< Event: [name:switch1, value:off, isStateChange:true, displayed:true, descriptionText:(switch1 set to off), linkText:Pool]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:09 AM: debug >>>>> MultiInstanceCmdEncap(command: 3, commandClass: 37, instance: 1, parameter: [0]) - description:zw device: 27, command: 6006, payload: 01 25 03 00
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:06 AM: debug <<<<< dly:1000/1000
<<<<< Event: [name:epInfo, value:["10012527","100025","100025","100025","100025","100025","110025"], displayed:true, descriptionText:, isStateChange:false, linkText:Pool]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:06 AM: trace createEndpointInfo(5) endpointCnt=7
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:06 AM: debug >>>>> MultiInstanceReport(commandClass: 37, instances: 5, res11: false) - description:zw device: 27, command: 6005, payload: 25 05
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:05 AM: debug <<<<< dly:1000/1000 No Commands or Events
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:05 AM: debug >>>>> AssociationGroupingsReport(supportedGroupings: 1) - description:zw device: 27, command: 8506, payload: 01
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:04 AM: error java.lang.NullPointerException: Cannot invoke method format() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:04 AM: debug -->Version: VersionReport(applicationSubVersion: 1, applicationVersion: 3, zWaveLibraryType: 6, zWaveProtocolSubVersion: 78, zWaveProtocolVersion: 2)
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:04 AM: debug >>>>> VersionReport(applicationSubVersion: 1, applicationVersion: 3, zWaveLibraryType: 6, zWaveProtocolSubVersion: 78, zWaveProtocolVersion: 2) - description:zw device: 27, command: 8612, payload: 06 02 4E 03 01
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:03 AM: debug <<<<< dly:1000/1000
<<<<< Event: [descriptionText:Pool: ManufacturerSpecificReport(manufacturerId: 5, manufacturerName: Intermatic, productId: 1619, productTypeId: 20549), isStateChange:true, displayed:true, linkText:Pool]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:03 AM: warn Captured zwave command ManufacturerSpecificReport(manufacturerId: 5, manufacturerName: Intermatic, productId: 1619, productTypeId: 20549)
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:03 AM: debug >>>>> ManufacturerSpecificReport(manufacturerId: 5, manufacturerName: Intermatic, productId: 1619, productTypeId: 20549) - description:zw device: 27, command: 7205, payload: 00 05 50 45 06 53
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:03 AM: error java.lang.NullPointerException: Cannot invoke method putAt() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:03 AM: debug >>>>> ConfigurationReport(configurationValue: [255, 255, 255, 255], parameterNumber: 47, reserved11: 0, size: 4) - description:zw device: 27, command: 7006, payload: 2F 04 FF FF FF FF
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:03 AM: error java.lang.NullPointerException: Cannot invoke method putAt() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:03 AM: debug >>>>> ConfigurationReport(configurationValue: [255, 255, 255, 255], parameterNumber: 47, reserved11: 0, size: 4) - description:zw device: 27, command: 7006, payload: 2F 04 FF FF FF FF
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:02 AM: error java.lang.NullPointerException: Cannot invoke method putAt() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:02 AM: debug >>>>> ConfigurationReport(configurationValue: [255, 255, 255, 255], parameterNumber: 47, reserved11: 0, size: 4) - description:zw device: 27, command: 7006, payload: 2F 04 FF FF FF FF
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:01 AM: error java.lang.NullPointerException: Cannot invoke method putAt() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:01 AM: debug >>>>> ConfigurationReport(configurationValue: [255, 255, 255, 255], parameterNumber: 44, reserved11: 0, size: 4) - description:zw device: 27, command: 7006, payload: 2C 04 FF FF FF FF
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:00 AM: error java.lang.NullPointerException: Cannot invoke method putAt() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:37:00 AM: debug >>>>> ConfigurationReport(configurationValue: [255, 255, 255, 255], parameterNumber: 41, reserved11: 0, size: 4) - description:zw device: 27, command: 7006, payload: 29 04 FF FF FF FF
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:59 AM: error java.lang.NullPointerException: Cannot invoke method putAt() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:59 AM: debug >>>>> ConfigurationReport(configurationValue: [255, 255, 255, 255], parameterNumber: 38, reserved11: 0, size: 4) - description:zw device: 27, command: 7006, payload: 26 04 FF FF FF FF
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:57 AM: error java.lang.NullPointerException: Cannot invoke method putAt() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:57 AM: debug >>>>> ConfigurationReport(configurationValue: [0, 0, 0, 0], parameterNumber: 3, reserved11: 0, size: 4) - description:zw device: 27, command: 7006, payload: 03 04 00 00 00 00
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:56 AM: error java.lang.NullPointerException: Cannot invoke method putAt() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:56 AM: debug >>>>> ConfigurationReport(configurationValue: [1], parameterNumber: 2, reserved11: 0, size: 1) - description:zw device: 27, command: 7006, payload: 02 01 01
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:55 AM: error java.lang.NullPointerException: Cannot invoke method putAt() on null object
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:55 AM: debug >>>>> ConfigurationReport(configurationValue: [6, 2], parameterNumber: 1, reserved11: 0, size: 2) - description:zw device: 27, command: 7006, payload: 01 02 06 02
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:54 AM: debug <<<<< dly:1000/1000
<<<<< Event: [descriptionText:Pool: ThermostatSetpointSupportedReport(autoChangeover: null, cooling: null, dryAir: null, furnace: null, heating: null, moistAir: null, none: null), isStateChange:true, displayed:true, linkText:Pool]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:54 AM: warn Captured zwave command ThermostatSetpointSupportedReport(autoChangeover: null, cooling: null, dryAir: null, furnace: null, heating: null, moistAir: null, none: null)
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:54 AM: debug >>>>> ThermostatSetpointSupportedReport(autoChangeover: null, cooling: null, dryAir: null, furnace: null, heating: null, moistAir: null, none: null) - description:zw device: 27, command: 4305, payload: 41
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:53 AM: debug <<<<< dly:1000/1000
<<<<< Event: [value:87, unit:F, displayed:true, name:spaSetpoint, isStateChange:false, linkText:Pool, descriptionText:Pool spa setpoint is 87°F]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:53 AM: debug >>>>> ThermostatSetpointReport(precision: 0, reserved01: 0, scale: 1, scaledValue: 87, setpointType: 7, size: 1, value: [87]) - description:zw device: 27, command: 4303, payload: 07 09 57
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:52 AM: debug <<<<< dly:1000/1000
<<<<< Event: [value:59, unit:F, displayed:true, name:poolSetpoint, isStateChange:false, linkText:Pool, descriptionText:Pool pool setpoint is 59°F]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:52 AM: debug >>>>> ThermostatSetpointReport(precision: 0, reserved01: 0, scale: 1, scaledValue: 59, setpointType: 1, size: 1, value: [59]) - description:zw device: 27, command: 4303, payload: 01 09 3B
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:51 AM: debug <<<<< dly:1000/1000
<<<<< Event: [value:88, unit:F, name:temperature, isStateChange:true, displayed:true, linkText:Pool, descriptionText:Pool temperature is 88°F]
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:51 AM: debug >>>>> SensorMultilevelReport(precision: 0, scale: 1, scaledSensorValue: 88, sensorType: 1, sensorValue: [88], size: 1) - description:zw device: 27, command: 3105, payload: 01 09 58
1dc6cc40-6fce-40b0-aff2-f25f556b81fa  9:36:51 AM: debug <<<<< dly:1000/1000

I see some NullPointer errors further in the log. I have an idea that this may indeed have caused an even bigger issue with debugLevel set High. I recommend leaving log either at low or off. I’ll fix that in the new version coming soon.

BTW, thanks for the CoRE info. I’ve started reading up on that. Looks like just what I’ve been looking for. Let me know if you need any additional attributes or commands to make the CoRE integration even better.

2 Likes

The CoRE part works flawlessly, I personally need nothing else.

Would you mind walking through these steps in closer detail? I thought I had it figured out but turning on and off my virtual switch is not making any changes to my heater temp.

So here is the Core Piston. Before trying it, I would verify that you can actually use a variable speed pump and temp control with the device. Hopefully this helps. The VSP is set to 4 and the SetPool is set to 90 (which is 90 degrees F).

2 Likes

Well, boo. I still am stuck with the temp not changing when setting the slider. I get nothing at all when I use the up/down buttons.

When using the slider it registers in the logs but the set point defaults back to what I have it set at via the remote.

529066db-62f6-4784-877a-5be76bdb960f 10:19:04 AM: debug <<<<< dly:1000/1000
<<<<< Event: [value:86, unit:F, displayed:true, name:poolSetpoint, isStateChange:false, linkText:Pool Controller, descriptionText:Pool Controller pool setpoint is 86°F] 
529066db-62f6-4784-877a-5be76bdb960f 10:19:04 AM: debug >>>>> ThermostatSetpointReport(precision: 0, reserved01: 0, scale: 1, scaledValue: 86, setpointType: 1, size: 1, value: [86]) - description:zw device: 23, command: 4303, payload: 01 09 56 
529066db-62f6-4784-877a-5be76bdb960f 10:19:03 AM: debug <<<<< dly:1000/1000
<<<<< Dev cmd: ThermostatSetpointSet(precision: 0, reserved01: 0, scale: 1, scaledValue: 87, setpointType: 1, size: 1, value: [87]) --> 4301010957, delay 1000
<<<<< Dev cmd: ThermostatSetpointGet(reserved01: 0, setpointType: 1) --> 430201 

I just published a new version of the DTH with a major UI facelift and improved VSP features. Please see the README file here:

Here is a look at the new UI:

Please try it out and post your feedback…KeithR

@nanatorres, sorry to say that you and I share this vexing issue. Others have no such problem with setting the pool and spa setpoints. I have researched this extensively and debugged for hours with no luck (so far). My biggest hope lies in finding a way to run a Z-Wave Sniffer so I can listen in on the conversation between the remote and the controller to see what undocumented magic is going on there. I purchased a Z-wave UZB stick and am trying out some software to that end. If anyone has ever had any success in this area, or has even heard of anyone doing this, please share.

Until then, we are stuck with using the PE953 remote to set these values. Boo is right.

Do I need to install the Multi Switch App like bigpunk’s code?

Also, what info do you need to run the command like endpoint # etc.?

Yes, you still need to install the the Multichannel Control SmartApp (Martketplace --> SmartApps --> More). In fact, I’m glad you mentioned this as the new ver 2.01 code above requires that you remove then reinstall that SmartApp in order for it to recognize the new endpoints. The 10 endpoints are implemented as follows:

Switch Endpoint 1 --> Pool Circuit #1
Switch Endpoint 2 --> Pool Circuit #2
Switch Endpoint 3 --> Pool Circuit #3
Switch Endpoint 4 --> Pool Circuit #4
Switch Endpoint 5 --> Pool Circuit #5
Switch Endpoint 6 --> Pool / Spa mode toggle
Switch Endpoint 7 --> VSP Speed 1
Switch Endpoint 8 --> VSP Speed 2
Switch Endpoint 9 --> VSP Speed 3
Switch Endpoint 10 --> VSP Speed 4

After you reinstall the ST Multichannel SA you are free to rename the endpoints or even remove unwanted endpoints. Finally, you are not required to install the Multichannel SA if you only instend to use the DTH UI and don’t want the “things”.

First world problems, huh? :slight_smile: Thanks so much for all your work!

Let me know if you need me to test anything going forward.

Very nice looking UI! I am still working up to my firmware upgrade…