Z-Wave Multi Channel (PE653)

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

image

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.

https://smartthings.developer.samsung.com/develop/api-ref/capabilities.html#Thermostat

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.

We're nudging along... now I have a number in the field.

Setting quicksetpool to 90 creates this error log

This refers back to the code above:

def List quickSetSpa(degrees) {delayBetweenLog(setSpaSetpointInternal(degrees), 3000)}

and

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
}

Just to clarify, do you have a preference set for F somewhere? Because the code all defaults to C as far as I can tell, and then just converts on the fly IF you have F set in a setting. 90C is … madness, obviously. Try a temperature in the 15-35 range and see if that works.

Maybe this is another integer problem. Try changing to degrees.toInteger()

1 Like

New log:

No signature of method: java.lang.String.Isinteger() is applicable for argument types: () values: [] Possible solutions: isInteger(), toInteger(), isBigInteger(), intern(), toBigInteger(), isNumber() on line 1456

None of the “possible solutions worked”

That’s because the value is null…

:man_shrugging:. What I do know is that I entered a number into the value under quicksetpool.

No matter what number I put in… the result is the error.