Zipato PH-PAT02 3-in-1 Z-Wave Multi-Sensor Device Handler help or request? (DTH in post 10)

I’m trying to create device handler for this. So far, with the help of others managed to get the “Z Wave Plus Motion Temp Sensor” to report temp and battery but nothing else. Anyone else had any luck?

Pretty sure this is a rebranded Philio (their models start PH-) , and if so the problem is that these models use the notification class 4 to send the motion notifications, and smartthings doesn’t support that (it’s still on v three). I know some people have been able to reconfigure the Philio to not use that command set and got it working, so I would take a look at those and ask follow ups in those threads.

You might also take a look at this one and see if it has anything you can use, which I found by using the quick browse list in the community – created wiki and looking under sensors:

Quick browse lists:

http://thingsthataresmart.wiki/index.php?title=How_to_Quick_Browse_the_Community-Created_SmartApps_Forum_Section

Most devices I’ve worked on lately use Notification v4, but using v3 instead has always worked fine so I doubt that’s the problem.

If you’re using the device handler I pointed out on the other topic, put the following code above line 140. Then open live logging, trip the water sensor, and post the live logging data.

log.debug "$encapsulatedCommand"

1 Like

OK, here is the logging when the sensor is triggered, and the back to dry again.

616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug After zwaveEvent(cmd) >> Parsed 'zw device: 0B, command: 3105, payload: 05 42 15 D5 ' to ['isStateChange':false, 'displayed':false, 'linkText':'Kitchen Flood Sensor']
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug PST02: SensorMultilevel SensorMultilevelReport(precision: 2, scale: 0, scaledSensorValue: 55.89, sensorType: 5, sensorValue: [21, 213], size: 2)
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug parse() >> zwave.parse(description)
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug parse() >> description: zw device: 0B, command: 3105, payload: 05 42 15 D5
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug After zwaveEvent(cmd) >> Parsed 'zw device: 0B, command: 9881, payload: 00 31 05 01 4A 1A E4 ' to ['value':'20.47', 'unit':'C', 'name':'temperature', 'isStateChange':false, 'displayed':false, 'linkText':'Kitchen Flood Sensor', 'descriptionText':Kitchen Flood Sensor temperature is 20.47°C]
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug Adjusted temp value 20.47
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug PST02: SensorMultilevel SensorMultilevelReport(precision: 2, scale: 1, scaledSensorValue: 68.84, sensorType: 1, sensorValue: [26, 228], size: 2)
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug encapsulated: SensorMultilevelReport(precision: 2, scale: 1, scaledSensorValue: 68.84, sensorType: 1, sensorValue: [26, 228], size: 2)
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug parse() >> zwave.parse(description)
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug parse() >> description: zw device: 0B, command: 9881, payload: 00 31 05 01 4A 1A E4
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug After zwaveEvent(cmd) >> Parsed 'zw device: 0B, command: 9881, payload: 00 30 03 00 06 ' to ['isStateChange':false, 'displayed':false, 'linkText':'Kitchen Flood Sensor']
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug PST02: SensorBinaryReport SensorBinaryReport(sensorType: 6, sensorValue: 0)}
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug encapsulated: SensorBinaryReport(sensorType: 6, sensorValue: 0)
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug parse() >> zwave.parse(description)
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug parse() >> description: zw device: 0B, command: 9881, payload: 00 30 03 00 06
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug After zwaveEvent(cmd) >> Parsed 'zw device: 0B, command: 9881, payload: 00 80 03 64 ' to ['name':'battery', 'value':'100', 'unit':'%', 'displayed':false, 'isStateChange':false, 'linkText':'Kitchen Flood Sensor', 'descriptionText':Kitchen Flood Sensor battery is 100%]
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug PST02: BatteryReport BatteryReport(batteryLevel: 100)}
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug encapsulated: BatteryReport(batteryLevel: 100)
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug parse() >> zwave.parse(description)
616ee74b-c510-4a12-a590-df1d06325574  09:43:25: debug parse() >> description: zw device: 0B, command: 9881, payload: 00 80 03 64
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug After zwaveEvent(cmd) >> Parsed 'zw device: 0B, command: 3105, payload: 05 42 15 D5 ' to ['isStateChange':false, 'displayed':false, 'linkText':'Kitchen Flood Sensor']
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug PST02: SensorMultilevel SensorMultilevelReport(precision: 2, scale: 0, scaledSensorValue: 55.89, sensorType: 5, sensorValue: [21, 213], size: 2)
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug parse() >> zwave.parse(description)
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug parse() >> description: zw device: 0B, command: 3105, payload: 05 42 15 D5
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug After zwaveEvent(cmd) >> Parsed 'zw device: 0B, command: 9881, payload: 00 31 05 01 4A 1A E4 ' to ['value':'20.47', 'unit':'C', 'name':'temperature', 'isStateChange':true, 'displayed':true, 'linkText':'Kitchen Flood Sensor', 'descriptionText':Kitchen Flood Sensor temperature is 20.47°C]
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug Adjusted temp value 20.47
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug PST02: SensorMultilevel SensorMultilevelReport(precision: 2, scale: 1, scaledSensorValue: 68.84, sensorType: 1, sensorValue: [26, 228], size: 2)
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug encapsulated: SensorMultilevelReport(precision: 2, scale: 1, scaledSensorValue: 68.84, sensorType: 1, sensorValue: [26, 228], size: 2)
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug parse() >> zwave.parse(description)
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug parse() >> description: zw device: 0B, command: 9881, payload: 00 31 05 01 4A 1A E4
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug After zwaveEvent(cmd) >> Parsed 'zw device: 0B, command: 9881, payload: 00 30 03 FF 06 ' to ['isStateChange':false, 'displayed':false, 'linkText':'Kitchen Flood Sensor']
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug PST02: SensorBinaryReport SensorBinaryReport(sensorType: 6, sensorValue: 255)}
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug encapsulated: SensorBinaryReport(sensorType: 6, sensorValue: 255)
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug parse() >> zwave.parse(description)
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug parse() >> description: zw device: 0B, command: 9881, payload: 00 30 03 FF 06
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug After zwaveEvent(cmd) >> Parsed 'zw device: 0B, command: 9881, payload: 00 80 03 64 ' to ['name':'battery', 'value':'100', 'unit':'%', 'displayed':false, 'isStateChange':false, 'linkText':'Kitchen Flood Sensor', 'descriptionText':Kitchen Flood Sensor battery is 100%]
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug PST02: BatteryReport BatteryReport(batteryLevel: 100)}
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug encapsulated: BatteryReport(batteryLevel: 100)
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug parse() >> zwave.parse(description)
616ee74b-c510-4a12-a590-df1d06325574  09:43:24: debug parse() >> description: zw device: 0B, command: 9881, payload: 00 80 03 64

I’m assuming this is what you meant?

Something weird has happened the morning, the zwave plus motion sensor has started reporting wet or dry in this case.
This was definitely not working yesterday so I’m not sure what has changed. I will try an edited wet/dry DH version as suggested and update.

OK, so using a modified version of the zwave plus motion sensor DH I am at the point where the sensor reports battery, temp and now dry or wet (no motion or motion);

Current states which showed “None” yesterday now shows;

It’s also reporting humidity as below;

I just need to capture it into the DH now.

If you replace Capability Motion Sensor with Capability Water Sensor and “motion” with “water”, and device.motion with device.water you should be all set.

You can also create a tile for humidity and add “Capability Humidity Sensor” to the capability list".

(Darn it, as a new community user I had to wait four hours before I could post again but it did give me time to make changes, do some testing and write this post as I went along.)

Found a reference to humidity in the DH so created a basic tile to reference it;

I have converted it from motion to a water sensor device so it now works with SHM too. I have monitored it for a while and all sensors respond to changes.

I agree, it is a rebranded Phillio, it is also looks the same as the Hauppauge 01563.

I’m really pleased with how far it has progressed since yesterday. Thanks for the help and suggestions all.

1 Like

Hi,

Could you share the code for this? I’d love to buy one of these.

Thanks!

Hi,

Yeah sure.

I will just say that the code is as is. I modified it to get it working so use at your own risk etc. I haven’t had it checked by an experienced coder but it seems to work OK.

/**
*	Copyright 2016 SmartThings
*	Copyright 2015 AstraLink
*
*	Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
*	in compliance with the License. You may obtain a copy of the License at:
*
*		http://www.apache.org/licenses/LICENSE-2.0
*
*	Unless required by applicable law or agreed to in writing, software distributed under the License is distributed
*	on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
*	for the specific language governing permissions and limitations under the License.
*
*	Zipato PH-PAT02 3-in-1 Z-Wave Multi-Sensor
*	Based on Z-Wave Plus Motion Sensor with Temperature Measurement, ZP3102*-5
*
*/

metadata {
	definition (name: "Zipato 3-in-1 Z-Wave Multi-Sensor", namespace: "smartthings", author: "SmartThings") {
		capability "Water Sensor"
		capability "Temperature Measurement"
		capability "Relative Humidity Measurement"
		capability "Configuration"
		capability "Battery"
		capability "Sensor"

		// for Astralink
		attribute "ManufacturerCode", "string"
		attribute "ProduceTypeCode", "string"
		attribute "ProductCode", "string"
		attribute "WakeUp", "string"
		attribute "WirelessConfig", "string"
				
		fingerprint deviceId: "0x0701", inClusters: "0x5E, 0x98, 0x86, 0x72, 0x5A, 0x85, 0x59, 0x73, 0x80, 0x71, 0x31, 0x70, 0x84, 0x7A"
		fingerprint type:"8C07", inClusters: "5E,98,86,72,5A,31,71"
		fingerprint mfr:"013C", prod:"0002", model:"001F"  // not using deviceJoinName because it's sold under different brand names
	}

	tiles {
		standardTile("water", "device.water", width: 3, height: 2) {
        	state "dry", label:'dry', icon:"st.alarm.water.dry", backgroundColor:"#ffffff"
			state "wet", label:'wet', icon:"st.alarm.water.wet", backgroundColor:"#53a7c0"
		}

		valueTile("temperature", "device.temperature", inactiveLabel: false) {
			state "temperature", label:'${currentValue}°',
				backgroundColors:[
					[value: 31, color: "#153591"],
					[value: 44, color: "#1e9cbb"],
					[value: 59, color: "#90d2a7"],
					[value: 74, color: "#44b621"],
					[value: 84, color: "#f1d801"],
					[value: 95, color: "#d04e00"],
					[value: 96, color: "#bc2323"]
				]
		}
		valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") {
			state "battery", label:'${currentValue}% Battery', unit:"%"
            
		}
		valueTile("humidity", "device.humidity", inactiveLabel: false, decoration: "flat") {
			state "humidity", label:'${currentValue}% Humidity', unit:"%"

		}
		main(["water", "temperature"])
		details(["water", "humidity", "temperature", "battery"])
	}
}

def updated() {
	if (!device.currentState("ManufacturerCode")) {
		response(secure(zwave.manufacturerSpecificV2.manufacturerSpecificGet()))
	}
}

def configure() {
	log.debug "configure()"
	def cmds = []

	if (state.sec != 1) {
		// secure inclusion may not be complete yet
		cmds << "delay 1000"
	}

	cmds += secureSequence([
		zwave.manufacturerSpecificV2.manufacturerSpecificGet(),
		zwave.batteryV1.batteryGet(),
		zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType:1, scale:1)
	], 500)

	cmds << "delay 8000"
	cmds << secure(zwave.wakeUpV1.wakeUpNoMoreInformation())
	return cmds
}

private getCommandClassVersions() {
	[
		0x71: 3,  // Notification
		0x5E: 2,  // ZwaveplusInfo
		0x59: 1,  // AssociationGrpInfo
		0x85: 2,  // Association
		0x20: 1,  // Basic
		0x80: 1,  // Battery
		0x70: 1,  // Configuration
		0x5A: 1,  // DeviceResetLocally
		0x7A: 2,  // FirmwareUpdateMd
		0x72: 2,  // ManufacturerSpecific
		0x73: 1,  // Powerlevel
		0x98: 1,  // Security
		0x31: 5,  // SensorMultilevel
		0x84: 2	  // WakeUp
	]
}

// Parse incoming device messages to generate events
def parse(String description) {
	def result = []
	def cmd
	if (description.startsWith("Err 106")) {
		state.sec = 0
		result = createEvent( name: "secureInclusion", value: "failed", eventType: "ALERT",
				descriptionText: "This sensor failed to complete the network security key exchange. If you are unable to control it via SmartThings, you must remove it from your network and add it again.")
	} else if (description.startsWith("Err")) {
		result = createEvent(descriptionText: "$device.displayName $description", isStateChange: true)
	} else {
		cmd = zwave.parse(description, commandClassVersions)
		if (cmd) {
			result = zwaveEvent(cmd)
		}
	}

	if (result instanceof List) {
		result = result.flatten()
	}

	log.debug "Parsed '$description' to $result"
	return result
}

def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulation cmd) {
	def encapsulatedCommand = cmd.encapsulatedCommand(commandClassVersions)
	log.debug "encapsulated: $encapsulatedCommand"
	if (encapsulatedCommand) {
		state.sec = 1
		return zwaveEvent(encapsulatedCommand)
	} else {
		log.warn "Unable to extract encapsulated cmd from $cmd"
		return [createEvent(descriptionText: cmd.toString())]
	}
}

def sensorValueEvent(value) {
	def result = []
	if (value) {
		log.debug "sensorValueEvent($value) : active"
		result << createEvent(name: "water", value: "wet", descriptionText: "$device.displayName is wet")
	} else {
		log.debug "sensorValueEvent($value) : inactive"
		result << createEvent(name: "water", value: "dry", descriptionText: "$device.displayName is dry")
	}
	return result
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicReport cmd) {
	return sensorValueEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.basicv1.BasicSet cmd) {
	return sensorValueEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.switchbinaryv1.SwitchBinaryReport cmd) {
	return sensorValueEvent(cmd.value)
}

def zwaveEvent(physicalgraph.zwave.commands.sensorbinaryv2.SensorBinaryReport cmd) {
	return sensorValueEvent(cmd.sensorValue)
}

def zwaveEvent(physicalgraph.zwave.commands.sensoralarmv1.SensorAlarmReport cmd) {
	return sensorValueEvent(cmd.sensorState)
}

def zwaveEvent(physicalgraph.zwave.commands.notificationv3.NotificationReport cmd) {
	def result = []
	if (cmd.notificationType == 0x07) {
		if (cmd.event == 0x01 || cmd.event == 0x02) {
			result << sensorValueEvent(1)
		} else if (cmd.event == 0x03) {
			result << createEvent(descriptionText: "$device.displayName covering was removed", isStateChange: true)
			result << response(secure(zwave.manufacturerSpecificV2.manufacturerSpecificGet()))
		} else if (cmd.event == 0x05 || cmd.event == 0x06) {
			result << createEvent(descriptionText: "$device.displayName detected glass breakage", isStateChange: true)
		} else if (cmd.event == 0x07) {
			result << sensorValueEvent(1)
		} else if (cmd.event == 0x08) {
			result << sensorValueEvent(1)
		} else if (cmd.event == 0x00) {
			if (cmd.eventParametersLength && cmd.eventParameter[0] == 3) {
				result << createEvent(descriptionText: "$device.displayName covering replaced", isStateChange: true, displayed: false)
			} else {
				result << sensorValueEvent(0)
			}
		} else if (cmd.event == 0xFF) {
			result << sensorValueEvent(1)
		} else {
			result << createEvent(descriptionText: "$device.displayName sent event $cmd.event")
		}
	} else if (cmd.notificationType) {
		def text = "Notification $cmd.notificationType: event ${([cmd.event] + cmd.eventParameter).join(", ")}"
		result << createEvent(name: "notification$cmd.notificationType", value: "$cmd.event", descriptionText: text, displayed: false)
	} else {
		def value = cmd.v1AlarmLevel == 255 ? "wet" : cmd.v1AlarmLevel ?: "dry"
		result << createEvent(name: "alarm $cmd.v1AlarmType", value: value, displayed: false)
	}
	return result
}

def zwaveEvent(physicalgraph.zwave.commands.wakeupv2.WakeUpNotification cmd) {
	def event = createEvent(name: "WakeUp", value: "wakeup", descriptionText: "${device.displayName} woke up", isStateChange: true, displayed: false)  // for Astralink
	def cmds = []

	if (!device.currentState("ManufacturerCode")) {
		cmds << secure(zwave.manufacturerSpecificV2.manufacturerSpecificGet())
		cmds << "delay 2000"
	}
	if (!state.lastbat || now() - state.lastbat > 10*60*60*1000) {
		event.descriptionText += ", requesting battery"
		cmds << secure(zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType:1, scale:1))
		cmds << "delay 800"
		cmds << secure(zwave.batteryV1.batteryGet())
		cmds << "delay 2000"
	} else {
		log.debug "not checking battery, was updated ${(now() - state.lastbat)/60000 as int} min ago"
	}
	cmds << secure(zwave.wakeUpV1.wakeUpNoMoreInformation())

	return [event, response(cmds)]
}

def zwaveEvent(physicalgraph.zwave.commands.batteryv1.BatteryReport cmd) {
	def result = []
	def map = [ name: "battery", unit: "%" ]
	if (cmd.batteryLevel == 0xFF) {
		map.value = 1
		map.descriptionText = "${device.displayName} has a low battery"
		map.isStateChange = true
	} else {
		map.value = cmd.batteryLevel
	}
	def event = createEvent(map)

	// Save at least one battery report in events list every few days
	if (!event.isStateChange && (now() - 3*24*60*60*1000) > device.latestState("battery")?.date?.time) {
		map.isStateChange = true
	}
	state.lastbat = now()
	return [event]
}

def zwaveEvent(physicalgraph.zwave.commands.sensormultilevelv5.SensorMultilevelReport cmd) {
	def result = []
	def map = [:]
	switch (cmd.sensorType) {
		case 1:
			def cmdScale = cmd.scale == 1 ? "F" : "C"
			map.name = "temperature"
			map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision)
			map.unit = getTemperatureScale()
			break;
		case 3:
			map.name = "illuminance"
			map.value = cmd.scaledSensorValue.toInteger().toString()
			map.unit = "lux"
			break;
		case 5:
			map.name = "humidity"
			map.value = cmd.scaledSensorValue.toInteger().toString()
			map.unit = cmd.scale == 0 ? "%" : ""
			break;
		case 0x1E:
			map.name = "loudness"
			map.unit = cmd.scale == 1 ? "dBA" : "dB"
			map.value = cmd.scaledSensorValue.toString()
			break;
		default:
			map.descriptionText = cmd.toString()
	}
	result << createEvent(map)
	return result
}

def zwaveEvent(physicalgraph.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) {
	def result = []
	def manufacturerCode = String.format("%04X", cmd.manufacturerId)
	def productTypeCode = String.format("%04X", cmd.productTypeId)
	def productCode = String.format("%04X", cmd.productId)
	def wirelessConfig = "ZWP"
	log.debug "MSR ${manufacturerCode} ${productTypeCode} ${productCode}"
	
	result << createEvent(name: "ManufacturerCode", value: manufacturerCode)
	result << createEvent(name: "ProduceTypeCode", value: productTypeCode)
	result << createEvent(name: "ProductCode", value: productCode)
	result << createEvent(name: "WirelessConfig", value: wirelessConfig)

	if (manufacturerCode == "0109" && productTypeCode == "2002") {
		result << response(secureSequence([
			// Change re-trigger duration to 1 minute
			zwave.configurationV1.configurationSet(parameterNumber: 1, configurationValue: [1], size: 1),
			zwave.batteryV1.batteryGet(),
			zwave.sensorMultilevelV5.sensorMultilevelGet(sensorType:1, scale:1)
		], 400))
	}

	return result
}

def zwaveEvent(physicalgraph.zwave.Command cmd) {
	return [createEvent(descriptionText: "$device.displayName: $cmd", displayed: false)]
}

private secure(physicalgraph.zwave.Command cmd) {
	if (state.sec == 0) {  // default to secure
		cmd.format()
	} else {
		zwave.securityV1.securityMessageEncapsulation().encapsulate(cmd).format()
	}
}

private secureSequence(commands, delay=200) {
	delayBetween(commands.collect{ secure(it) }, delay)
}
2 Likes

Awesome thanks! I just got one delivered today. Battery reads fine, but the rest doesn’t. It is showing as “Dry”, even when I have when it’s wet and the Zipato alarm is going off… Have you had any of these issues and any ideas how to get past them?

Thanks!

Mine did go a bit unstable whilst I was testing the DTH, so I removed the battery, waited a while and put it back in and it was fine after that. Other than that you could try a reset and then re add it.

Tried battery and also a reset. I get temperature but that’s it. Moisture and humidity don’t work. :confused:

Could the fact mine is en EU version affect it possibly?

Mine is the EU version too. Sounds like it may be faulty, can you exchange it? Not sure what else to suggest. Sorry.

Actually did you try it with the Z-Wave Plus Motion Sensor with Temperature Measurement DTH? That is what the DTH above is based on, you should at least get temperature with that and the water sensor is seen as motion. If it doesn’t work with that then it is probably faulty.

Just tried it with Z-Wave Plus Motion Sensor/Temp Measurement. It shows movement (whereas the custom DTH show Dry). I’m assuming movement represents wet? Temperature works.

The current states are also different on mine vs. the ones you posted, with no mention of WakeUp in state or Reporting History.

Looking more closely (I have reset it several times) it seems WakeUp doesn’t work at all. Each time I revisit the data is only ever the same as the time it paired, it doesn’t update or refresh (even when I manually refresh on SmartThings app).

Thanks for posting!

Mostly working here with a PAT02-A

Looks like I’ve got working Humidity, Temp and Battery. But the sensor always indicates Dry.

I did remove the battery on the sensor. But for the moment I’m still not sensing floods.

I’ve tried a mine and it seems to work for a while, displaying wet and dry, but after some time it stops reporting wet/dry. Temp, humidity and battery appear to be OK. The sensor itself bleeps when wet so I know it’s working. There must be something in the DTH that my limited coding knowledge can’t find.

1 Like

Left it overnight, didn’t change anything and it’s working again this morning. Sensor sent 255 wet event seen on monitoring and ST reacted accordingly. I’ll leave it for a few hours and try it again.

1 Like