Z-Wave Multi Channel (PE653)

I see what you did. I copied/pasted (prior to fixing modes 2 - 4 by adding brackets but I do not see preferences.

Do I need to do modes 2-4 to see preferences?

They are at the bottom. If you comment out modes 2-4 they should show up. Add a /** before mode 2 and a */ after mode 4, but before the end ] for the preferences.

Got it!

I now have full control over the variable speed pump!!! All four modes. However, now I can’t change the temperature.

If enter a number into either ‘Set Cooling Setpoint’ or ‘Set Heating Setpoint’ I get this log

[dev:257]( 19:25:39.605:errorNo signature of method: dev15213286449791333222929.setHeatingSetpoint() is applicable for argument types: (java.math.BigDecimal) values: [90] on line null

1 Like

Any ideas? I get temperature control working I’m home free and I can upload a github with directions and tell all the ST users to try hubitat.

I would have to assume the driver does not understand the setHeatingSetpoint() command. Gleaning from a thermostat driver, is there a different way to change the temperature?

I have a working thermostat driver here: Sinope smart thermostat maybe you could adapt some of that code?

heatingSetPoint is the command defined in the sinope driver. I think it’s just an undefined command needing some attention.

@justin.bennett Wish I could help but all I’ve got to offer is moral support. Hope someone better equipped will jump in.

Actually you can provide more than just moral support. Do you have a heater?

If so, can you post the ST logs of what happens when you move the thermostat slider on the heater to 90?

This is the equivalent of me typing 90 into the hubitat driver and hitting setheatingSetPoint

Also, if I can get crazier and perfectly exemplify how "ill-suited" I am to examine this. I looked over the device code and ran a search for "Cooling" or "Heating" and they do not even appear in the app.

Point being (I guess this is why it says line [null]. I do not necessarily understand why the


buttons exist because I can't see why/where they are created within the app?

They exist because Hubitat creates buttons for any Capabilities that are defined in the Driver, even if those commands are not implemented. My guess is that they aren’t used by this driver at all. But, as long as the Thermostat Capability is defined, Hubitat will create the UI to implement all of the commands.

That is (somewhat) understood and there is a capability for Thermostat. So… why not a slider/button/tile that permits me to change the thermostat? Instead I see setHeatingPoint and setCoolingPoint?

Not exactly sure what you mean… Hubitat’s UI is not really for end-user use. But they do expose an interface to exercise each of the commands supported by each capability defined in a driver. The Thermostat Capability is huge. See full definition at the link below.


Ok, now I see your point. The driver has the capability for a thermostat so all of those commands (ie. setCoolingSetPoint) follow suit.

I guess where I am lost is that somehow, I was able to adjust the temperature in ST without modifying the ST driver to accommodate for setHeatingSetPoint.

This seems to have changed when I ported the driver into hubitat and I don’t understand why and don’t want to simply copy/paste code into this driver and pray it works.

Pretty sure this is useless, and maybe moot after the last few posts, but this is what I’ve got:

7c7d52be-86ac-4e2f-8e53-59210d4566c5  11:12:19 AM: debug getWaterTemp()
7c7d52be-86ac-4e2f-8e53-59210d4566c5  11:11:41 AM: trace POOL_SPA_COMBO:1
7c7d52be-86ac-4e2f-8e53-59210d4566c5  11:11:41 AM: trace VSP_ENABLED:0
7c7d52be-86ac-4e2f-8e53-59210d4566c5  11:11:41 AM: debug +++++ configure() DTH:Ver 2.06 state.Versioninfo=Versions: Firmware v3.4 DTH: Ver 2.06 zWaveLibraryType: 6 zWaveProtocol: v2.78
7c7d52be-86ac-4e2f-8e53-59210d4566c5  11:11:19 AM: debug setPoolSetpointInternal degrees=90.0
7c7d52be-86ac-4e2f-8e53-59210d4566c5  11:11:01 AM: debug setSpaSetpointInternal degrees=90.0
7c7d52be-86ac-4e2f-8e53-59210d4566c5  11:10:33 AM: debug setSpaSetpointInternal degrees=90.0

The last three lines (5-7) are from three separate temp changes. Line 1 is just from querying the water temp;Lines 2-4 are hitting the config button.

It appears that in ST, the sliders for Pool and Spa temperature setpoints are configured to call the

quickSetPool() and quickSetSpa() commands.

Since you have those exposed as custom commands, you should see those on the device page. You should be able to enter a value and press the button to send the command to the pool controller, I think.

Actually not entirely useless. But you could do me one more favor. If you go into the preferences of the PE653 you can set the debug level to ‘high’. If not already set to ‘high’ would you mind doing so and re-posting the log?

Would anyone know whether the lines regarding setSpaSetpointInternal cannot be interpreted by the hubitat driver?
strong text

Perhaps the hubitat code needs to remove all references to poolsetpoint and spasetpoint and just focus on thermostatsetpoint.

The downside of that is you lose independent control of the Spa and Pool controls in the case you have both. A single thermostat control would set both to the same.

Tried and failed to set the debug level. I get the dreaded ST red banner Please fill out all required fields, and then unable to save the changes. Is there a fix or an alternate method to set debug level?

Every bit brings progress… you are correct there are commands for quickSetPool() and quickSetSpa() but no ability to input a number. Here is the driver code referencing:

def List quickSetSpa(degrees) {delayBetweenLog(setSpaSetpointInternal(degrees), 3000)}
def List quickSetPool(degrees) {delayBetweenLog(setPoolSetpointInternal(degrees), 3000)}
def List quickGetWaterTemp()  {delayBetweenLog(getWaterTemp()) }

So for instance, quickSetSpa seems to call to setSpaSetpointInternal which that code looks like this.

private List setSpaSetpointInternal(Double degrees) {
    log.debug "setSpaSetpointInternal degrees=${degrees}"
    def cmds = []
	def deviceScale = state.scale ?: 1
	def deviceScaleString = deviceScale == 2 ? "C" : "F"
    def locationScale = getTemperatureScale()
	def p = (state.precision == null) ? 1 : state.precision

    def convertedDegrees
    if (locationScale == "C" && deviceScaleString == "F") {
    	convertedDegrees = celsiusToFahrenheit(degrees)
    } else if (locationScale == "F" && deviceScaleString == "C") {
    	convertedDegrees = fahrenheitToCelsius(degrees)
    } else {
    	convertedDegrees = degrees
    deviceScale = 0			// Cannot send scale = 1 to PE653 ver 3.4 or it will ignore the request
//    log.trace "setSpaSetpoint: setpointType: 7  scale: $deviceScale  precision: $p  scaledValue: $convertedDegrees"
	cmds << zwave.thermostatSetpointV1.thermostatSetpointSet(setpointType: 7, scale: deviceScale, precision: p,  scaledValue: convertedDegrees)
	cmds << zwave.thermostatSetpointV1.thermostatSetpointGet(setpointType: 7)
//    cmds

Now the question becomes how do I enable the ability to use quicksetpool to input a temperature to change the temperature

BTW your post actually recalled how the log behaved in ST so @CAL.hub I likely need no log help.

You should be able to add a custom command (just below your capability list)
command "quicksetpool", ["number"]

This would then be displayed as a button with an input field.

Download the Hubitat app