Z-Wave Multi Channel (PE653)

@aarony I've used this feature successfully in the past. When you update these temperature offsets in the Preferences it should trigger a general update, but it wouldn't hurt to also click the Updated() button in the Commands section. Ideally, set the Debug Level to Low, open the Hub log page and capture the messages logged when you either save the Preferences or click Updated(), then post those logs here. Also be sure you are clear that there are 2 different offsets, one for water temperature and another for air temperature.

@ethelredkent, I guess we can take some level of encouragement from your limited success but obviously we want to do better. Based on your comments I agree that the ZWave communications seems marginal and is almost surely contributing to the issues, which will also make it very difficult to troubleshoot any issues.

I too had issues in the past due to distance and what solved those issues was three-fold. I relocated the antenna of the PE653, which is quite easy since all you need is an Ethernet cable. The other thing that is super easy that helped was to add a powered ZWave device (like a dimmer switch or outlet) somewhere between the PE653 and the Hub (battery powered devices do not relay commands). Also it is helpful to occasionally use the Hubitat Settings menu/ZWave Details, then select Repair Z-Wave. This causes the entire Z-Wave network to reconstruct its map of which devices are closest to their neighbors. This is important for relaying messages across longer distances.

Hi, Keith. I gave that a try. You'll have to tell me if I did what you suggested.

I changed just the setSchedule line of code at line 1486, thusly:


and set debug to "low" with this error:

Please tell me if I should be doing it differently.

@CAL.hub From the log it appears you entered just 2 (ie: 3, 1) of the required 6 parameters. See post 381 for several examples but here is one:
setSchedule(1,1,0,0,23,59) // Set Switch 1 sched 1 to turn on at midnight, off at 11:59PM
1st parm is the endpoint (1-5 switchs, 6 pool/spa, 7-10 VSP)
2nd parm is the schedule number. Each has 3 (1-3)
3rd & 4th are the start hour and minute
5th & 6th are the end hour and minute (military hour 0-23, minute 0-59)

Try that again and check the logs. Hoping for success this time!

I'm sure I had all 6 parameters entered, but I tried again using 3,1,0,0,23,59

Log:

Maybe I'm missing a step along the way. I turn on logging, save preferences (which wipes out the setSchedule parameters). Then I enter the six integer parameters for the endpoint (3), schedule number (1), start hour, start minute, end hour, end minute. Then hit "Set Schedule". Is there some different process I should try?

EDIT: Note that I use endpoint 3 because that is an unused switch that has no schedule for me to corrupt.

Hi Keith,

I believe that I solved my zwave issue by adding an intermediate zwave switch. The pump is now instantly responsive. However, HE is still not reporting the status.

The status string is returning the correct pump number ie 0,1 or 2. Is it possible that the driver is parsing the string incorrectly for this version of the controller? I posted the string ealier. I am out of town for a week so I cannot test anything.

Regards Bruce

Hey @mike.maxwell. You still around?

well here's the thing, the class is proprietary, so there aren't any commands defined per spec, and hence no command class parsers or builders can be created...

@ethelredkent, Bruce, after you return home, what I'd like to ask is a log sample. Set the Debug Level to Low, then click the "Updated" button in the commands section of the poll device page. Post all the log produced starting from "+++++ updated() DTH:Ver 4.0.0" up until it pauses and starts the poll() cycle. I will compare this with my own and see what I can find. What I really need to understand is how different the ManufacturerProprietary command responses are between 3.1 and 3.4. This is where the temperature comes from. The State variables you posted are only showing manProp1 and not manProp2, which is concerning. The logs will help a lot.

Hi Mike, glad to hear from you. Yes, we discussed this a year or two back. I suggested a single method that is passed a byte array. This is mostly about having a consistent device handler that can use leverage the same zwave.parse() path to route the message as opposed to hardcoded garbage (below) for this one command. You may recall that my brittle hard code broke a year or so ago when the Multicast attribute was added to the payload. It would also be helpful to construct these messages without resorting to the HubAction constructor and hardcoding the command class: new hubitat.device.HubAction("910005400102870301")

Please and thank-you!

Parse
if (command.contains("9100")) {
// new sample: [zw device: 04, command: 9100, payload: 05 40 02 02 84 00 10 02 03 00 02 01 4F 00 50 08 38 15 00 00 01 03 04 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 , isMulticast: false]
try {
payloadStr = payloadStr.split(',')[0] // Remove any unexpected attributes following payload:
payload = payloadStr.replace(" ","").decodeHex()
} catch (e) {
log("ERROR", "..... Exception in Parse() - decodeHex() ${cmd} - description:${description} exception ${e}")
}
log("DEBUG", 0, ">>>>> unParsed cmd - description:$description ")
result = zwaveEventManufacturerProprietary(payload, payloadStr)
} else {
try {
cmd = zwave.parse(description, [0x20: 1, 0x25:1, 0x27:1, 0x31:1, 0x43:1, 0x60:1, 0x70:2, 0x72:1, 0x81:1, 0x85:2, 0x86: 1, 0x73:1, 0x91:1])

i get it now...

depending on the context of where the call is made from, you don't have to use HubAction...

String myCustomOnCommand() {
    return "910005400102870301"
}

Any chance this could go into the queue for some future release?

Not urgent, just improves readability, complexity, reliability.

@mike.maxwell and @keithriley, you guys hurt my brain, and I love it.
Thank you for making this community so great.

I'll remind you that this pool controller is literally THE REASON I got into home automation. I JUST wanted a way to turn my pool pumps on and off with my voice. To see it still being developed after all these years is amazing and reaffirming for what has become one of my longest and most involved hobbies.

Hey @JDogg016, I was reading one of your old posts (#108) and it's starting to make more sense to me now. I've come to a better understanding of the differences between various expansion modules to the PE653. I have a P5043ME and had taken all my learnings from that, but I now see that many people have a P4243ME expansion module, which reacts differently for pool/spa mode and for controlling the heater. I'm examining logs posted here and on ST by many different users and am going to try to enhance the DTH to detect the expansion module and act accordingly. Based on your experience and your logs I'm betting you have some variety of P4xxx expansion module. Could you please check and let me know?

Also, give me an update of what's working and what's not for you.

Thanks!

Hey HE Pool Fans, I've gotten a bit more active on the DTH lately and am trying to sort out the differences in behavior we've seen particularly in controlling pool/spa mode and heaters. I've come to appreciate better that the specific type of expansion model has a big impact on how the switches are addressed and am working to allow the DTH to detect this automatically. Some of you have had to apply local patches to overcome this issue. I've combed the past posts here and on ST to compare the differences in responses we get. I now need to correlate this with the expansion model number. For those of you listed below please replay with your specific expansion model number (or None). Thanks for your help.

@keithriley I have a P5043ME
@CAL.hub. I believe you also have a P5043ME, right?
@JDogg016 Some type of P4xxx I believe?
@joshua Do you have an expansion mod? Please post a log (see below)

For anyone else, I could use as many as samples as possible. If you can help please post a log that results from clicking the updated button on the HE Device page for the Pool Control, and note what expansion module you have, if any.

Thanks everyone!

Yes, P5043ME.

Sorry, but I need more guidance on what to click.

EDIT: Ahh, see it. Log:

I have to be honest, this last driver release completely knocked it out the park. I have no issues and the driver, and responses to commands, work much better and quicker than prior versions.

Now in full confession, I never setup your M1-M4 automations as I relied upon RM for automations.

There are really few specifics I can give, but I can tell you that for the first time in about 8 months I was able to correctly adjust my actuator valves using your driver to tur on/off the spa.

Fantastic to hear that @JDogg016. When you get a chance please post the model of your expansion module, probably P4xxx or similar.

Thanks for the great feedback!

WANTED - Used PE653 pool controller…(with or without 953/enclosure/expansion)

Yes, I already have one, but I’d like to have a second for running tests and diagnostics without impacting my real pool. If you have decommissioned your PE653 or know of one out of use somewhere please let me know. I’ll pay a reasonable used price. As many of you know, I am trying to support two different platforms with this DTH, this would help.

Sorry for the delay. I have changed it from -1 to -2 and never saw a difference. I also clicked updated and get watertemp. Below is the screenshot and logs you asked for.

dev:2962020-06-10 04:49:31.301 pm errorjava.lang.NullPointerException: Cannot invoke method toInteger() on null object on line 1248 (updated)

dev:2962020-06-10 04:49:31.240 pm debugstate key: spaSetpointTemp, value: 0.0

dev:2962020-06-10 04:49:31.236 pm debugstate key: poolSetpointTemp, value: 0.0

dev:2962020-06-10 04:49:31.228 pm debugstate key: scale, value: 1

dev:2962020-06-10 04:49:31.205 pm debugstate key: lightCircuitsList, value: []

dev:2962020-06-10 04:49:31.202 pm debugstate key: precision, value: 1

dev:2962020-06-10 04:49:31.193 pm debugstate key: ManufacturerInfo, value: ManufacturerInfo: manufacturerId: 5, manufacturerName: Intermatic, productId: 1619, productTypeId: 20549

dev:2962020-06-10 04:49:31.178 pm debugstate key: VersionInfo, value: Versions: Firmware v3.4 DTH: Ver 4.0.0 zWaveLibraryType: 6 zWaveProtocol: v2.78

dev:2962020-06-10 04:49:31.146 pm debug+++++ updated() DTH:Ver 4.0.0 state.Versioninfo=Versions: Firmware v3.4 DTH: Ver 4.0.0 zWaveLibraryType: 6 zWaveProtocol: v2.78 state.ManufacturerInfo=ManufacturerInfo: manufacturerId: 5, manufacturerName: Intermatic, productId: 1619, productTypeId: 20549

dev:2962020-06-10 04:49:28.035 pm debug<<<<< rspFlg=true dly:1000/1000 <<<<< Event: [name:swVSP2, value:on, isStateChange:true, displayed:true, descriptionText:swVSP2 set to on] <<<<< Event: [name:clock, value:16:46, displayed:false, descriptionText:PE653 Clock: 16:46]

dev:2962020-06-10 04:49:27.889 pm debug+++++ delayBetweenLog parm[13] dly=1000 responseFlg=true

dev:2962020-06-10 04:49:27.873 pm warnChild Device handler not found: 39-ep12: thermostatMode

dev:2962020-06-10 04:49:27.862 pm warnChild Device handler not found: 39-ep11: thermostatMode

dev:2962020-06-10 04:49:27.853 pm warnChild Device handler not found: 39-ep12: temperature

dev:2962020-06-10 04:49:27.842 pm warnChild Device handler not found: 39-ep11: temperature

dev:2962020-06-10 04:49:27.591 pm debugManufacturerProprietary event, [1]:40 [4]:84 payload: 05 40 02 02 84 00 00 00 01 00 00 01 56 57 00 10 2E 01 00 00 02 03 04 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

dev:2962020-06-10 04:49:26.730 pm debug+++++ delayBetweenLog parm[1] dly=1000 responseFlg=true

dev:2962020-06-10 04:49:26.709 pm warnChild Device handler not found: 39-ep12: thermostatOperatingState

dev:2962020-06-10 04:49:26.683 pm warnChild Device handler not found: 39-ep11: thermostatOperatingState

dev:2962020-06-10 04:49:26.678 pm debug+++++ delayBetweenLog parm[1] dly=1000 responseFlg=true

dev:2962020-06-10 04:49:26.657 pm warnChild Device handler not found: 39-ep12: thermostatOperatingState

dev:2962020-06-10 04:49:26.653 pm warnChild Device handler not found: 39-ep11: thermostatOperatingState

dev:2962020-06-10 04:49:26.643 pm debugManufacturerProprietary event, [1]:40 [4]:87 payload: 05 40 02 02 87 00 00 00 00 00 00 07 00 00 00 00 00 00 04 00 00 00 00 00 10 2E 01 01 00 00 20 00 00 00 00 00 00 00 00 00

dev:2962020-06-10 04:49:26.595 pm debugManufacturerProprietary event, [1]:40 [4]:87 payload: 05 40 02 02 87 00 00 00 00 00 00 07 00 00 00 00 00 00 04 00 00 00 00 00 10 2E 01 01 00 00 20 00 00 00 00 00 00 00 00 00

dev:2962020-06-10 04:49:25.376 pm debug<<<<< rspFlg=false dly:1000/1000 <<<<< Cmd to Device: MultiInstanceCmdEncap(command:1, commandClass:37, instance:5, parameter:[0]) --> 600605250100, delay 1000 <<<<< HubAction: 910005400102870301, delay 1000 <<<<< HubAction: 910005400101830101

dev:2962020-06-10 04:49:25.342 pm debug+++++ delayBetweenLog parm[3] dly=1000 responseFlg=false

dev:2962020-06-10 04:49:23.842 pm errorjava.lang.NullPointerException: Cannot invoke method toInteger() on null object on line 1248 (updated)

dev:2962020-06-10 04:49:23.818 pm debugstate key: spaSetpointTemp, value: 0.0

dev:2962020-06-10 04:49:23.815 pm debugstate key: poolSetpointTemp, value: 0.0

dev:2962020-06-10 04:49:23.810 pm debugstate key: scale, value: 1

dev:2962020-06-10 04:49:23.808 pm debugstate key: lightCircuitsList, value: []

dev:2962020-06-10 04:49:23.805 pm debugstate key: precision, value: 1

dev:2962020-06-10 04:49:23.802 pm debugstate key: ManufacturerInfo, value: ManufacturerInfo: manufacturerId: 5, manufacturerName: Intermatic, productId: 1619, productTypeId: 20549

dev:2962020-06-10 04:49:23.799 pm debugstate key: VersionInfo, value: Versions: Firmware v3.4 DTH: Ver 4.0.0 zWaveLibraryType: 6 zWaveProtocol: v2.78

dev:2962020-06-10 04:49:23.699 pm debug+++++ updated() DTH:Ver 4.0.0 state.Versioninfo=Versions: Firmware v3.4 DTH: Ver 4.0.0 zWaveLibraryType: 6 zWaveProtocol: v2.78 state.ManufacturerInfo=ManufacturerInfo: manufacturerId: 5, manufacturerName: Intermatic, productId: 1619, productTypeId: 20549