Philio Door/Temp/Luinance Device Type

There is nothing here which cannot be found in the documentation.

Both in security as well as in home automation mode, the sensor will send a sensor binary report (type = 0x0C, value = 0xFF) to association group 1 (lifeline). When the sensor is in home automation mode, it will send a basic set (value = 0xff and 0x00) to association group 2.

The major difference between test mode and the other modes is that delay redetect time is fixed to six seconds and it will turn the led for 1 second. Reporting to association group 1 is identical to the other modes.

Well, it turns out that there must be multiple versions of the device. I just bought another one and this one is NOT returning a no motion report like the first one I got.

Is there some way to poll the device for all of its configuration settings, firmware versions, etc?

I believe the problem is solved. Turns out we were both right and both wrong. Out of the box the PSM02 does not give a no motion report. However, it can be configured to.

Basically, I bought a second one and was not getting the no motion report. So I unpaired it and paired it with the Vera I still have. The mobile UI for vera sucks, but the web ui is pretty useful. In the Advanced section I noticed that, when paired with the Vera, the folks at micasaverde explicitly set the zwave parameter 7 to 22. Parameter 7 is not documented.

I then unpaired the sensor from Vera, the same PSM02 that was not returning a no motion report, and paired it again with smartthings. I was getting the no motion report.

To get a baseline test, I unpaired it from the smartthings, reset the sensor to factory default by hitting the tamper switch 4 times, holding it down on the fourth, waiting for the LED to light up, and then stay on for a second as the documentation stated.

Repaired the the device after the reset to the smartthings and I was not getting the no motion report, as was the case when I first paired it.

Added the following line to the ‘configure’ function to the delayBetween:
zwave.configurationV1.configurationSet(parameterNumber: 7, size: 1, scaledConfigurationValue: 22).format(),

Saved it, published it, hit the configure button, woke up the sensor by hitting the tamper button, and a few minutes later I began to receive the no motion report.

So I suggest setting the undocumented parameter 7 to 22 and seeing what happens. I believe that should take care of the issue.

A.J.

:

1 Like

I can confirm that this works for me too. Very well done !

Thank you. I am very curious as to what that parameter 7 actually does and what the significance of setting it to 22 is… So much for completeness of documentation…

Have you updated your device type, by any chance? I would prefer to use the one written by you guys.

Now, to make the device type really nice, it would be nice to be able to set the PIR redetect interval via the UI. :smile:

I am looking into that and some other modifications.

Sorry for the late response… I can confirm that it is working on my “Zipato Z-Wave Multi-Sensor Quad” which is just another name form PSM02.
I could not get it working by just adding the parameter “zwave.configurationV1.configurationSet(parameterNumber: 7, size: 1, scaledConfigurationValue: 22).format(),”, I had to reset the sensor and remove it form my ST hub and then re add it. after that the no motion report starts coming. :smiley:

Thanks eyeonall

The device is normally asleep and needs to wake up to receive the configuration commands. When the device is added to the network, it is awake and will be able to receive the configuration commands.

Next time you can wake up the device by pressing the temper switch and then press the Configure button for the device in the SmartThings mobile app.

Hi,

I’m new to SmartThings but was previously using Vera. I have the Philio PSM02 4 in 1 multi-sensor and have been trying to get it to work properly with SmartThings. It worked fine in the Vera. I’ve created a device handler using the code previously posted above and have added the following line to the configuration section of the device handler:

zwave.configurationV1.configurationSet(parameterNumber: 7, size: 1, scaledConfigurationValue: 22).format(),

I may be doing something wrong, but on my SmartThings mobile app, I can get open/close to work fine, I see temperature, luminosity, and battery level, but the motion detection never works, even if I open close the door. I’ve taken the cover off my PSM02 and reset the device to factory defaults using the four button press method, but that didn’t help. Also, my two dip switches are both in the off position. Is this correct for this device?

Any help would be appreciated and thank you all for your time and assistance.

-Nick

Are you sure you have the sensor with Motion detector? There is a 3-in-one device also available that does not have motion sensor. Its called Philio PSM01 Z-Wave Multi-sensor. Detects door/window opening, ambient light, ambient temperature.

NAVDEEP - Yes, the writing on the circuit board says “PSM02L1V3RoHS”. Not sure if it’s relevant or not, but other writing on the board says “C12020008” and “20131001”.

With my Vera I was getting motion alerts from it.

Thank you,
-Nick

try adding debug logs to the device handler to see what commands are being parsed. I have added these to debug a while back

// Parse incoming device messages to generate events
def parse(String description)
{
    log.debug "PSM02 Parse called with ${description}"
	    def result = []
	    def cmd = zwave.parse(description, [0x20: 1, 0x30: 2, 0x31: 5, 0x70: 1, 0x72: 2, 0x80: 1, 0x84: 2, 0x85: 2, 0x86: 1])
	    log.debug "PSM02 Parsed CMD: ${cmd.toString()}"
    if (cmd) { 
		if( cmd.CMD == "8407" ) { result << new physicalgraph.device.HubAction(zwave.wakeUpV2.wakeUpNoMoreInformation().format()) }
		def evt = zwaveEvent(cmd)
        result << createEvent(evt)
	}

and

case 12: // motion sensor
    map.name = "motion"
    // log.debug "PSM02 cmd.sensorValue: ${cmd.sensorValue}"
    if (cmd.sensorValue.toInteger() > 0 ) {
    	log.debug "** $device.displayName Motion Detected"
        map.value = "active"
        map.descriptionText = "$device.displayName Motion Detected"
    } else {
    	log.debug "## $device.displayName No Motion"
        map.value = "inactive"
        map.descriptionText = "$device.displayName no motion"
    }
    map.isStateChange = true
    break;

and here is what I get in the logs

1:33:25 PM: debug ** Entry Door Motion Detected
1:33:25 PM: debug PSM02 Parsed CMD: SensorBinaryReport(sensorType: 12, sensorValue: 255)
1:33:25 PM: debug PSM02 Parse called with zw device: 09, command: 3003, payload: FF 0C
1:32:54 PM: debug ## Entry Door No Motion
1:32:54 PM: debug PSM02 Parsed CMD: SensorBinaryReport(sensorType: 12, sensorValue: 0)
1:32:54 PM: debug PSM02 Parse called with zw device: 09, command: 3003, payload: 00 0C

First of all, I want to thank everyone who has shared their code for this device, I certainly couldn’t do it myself.

I am trying to get a Zipato PH-PSM02.US quad sensor to work. I am getting a different problem. I started with the code in this discussion, inserted the no motion report configuration line, uncommented all of the log.debug statements, assigned the code as its device handler, left the device with the tamper switch out so it’s in test mode, and clicked Configure in the IOS app. I get this series of errors whenever an event occurs:

d8c01599-29a2-4ebc-9a6b-5dfa7f5aa2c3 2:51:08 AM: error java.lang.NullPointerException: Cannot get property 'value' on null object @ line 118
d8c01599-29a2-4ebc-9a6b-5dfa7f5aa2c3 2:51:08 AM: debug PSM02: Catchall reached for cmd: SecurityMessageEncapsulation(commandByte: [4, 3, 128, 3, 100, 9, 113, 5, 0, 0, 0, 255, 7, 8, 0, 5, 49, 5, 3, 1, 13, 6, 49, 5], commandClassIdentifier: 143, commandIdentifier: 1, reserved13: 0, secondFrame: false, sequenceCounter: 1, sequenced: true)}
d8c01599-29a2-4ebc-9a6b-5dfa7f5aa2c3 2:51:08 AM: debug PSM02 Parsed CMD: SecurityMessageEncapsulation(commandByte: [4, 3, 128, 3, 100, 9, 113, 5, 0, 0, 0, 255, 7, 8, 0, 5, 49, 5, 3, 1, 13, 6, 49, 5], commandClassIdentifier: 143, commandIdentifier: 1, reserved13: 0, secondFrame: false, sequenceCounter: 1, sequenced: true)
d8c01599-29a2-4ebc-9a6b-5dfa7f5aa2c3 2:51:08 AM: debug PSM02 Parse called with zw device: 13, command: 98C1, payload: 11 8F 01 04 03 80 03 64 09 71 05 00 00 00 FF 07 08 00 05 31 05 03 01 0D 06 31 05

The line 118 reference is to this line:

statusTextmsg = "Door is ${device.currentState('contact').value}, temp is ${device.currentState('temperature').value}°, and illuminance is ${device.currentState('illuminance').value} LUX."

It seems to insist on encrypting the communications (SecurityMessageEncapsulation), which isn’t handled in this code. I couldn’t find any parameter related to enabling or disabling secure communications, so I dug into that command. The Zipato docs say:

This device supports the security function. When the device is
included with a security controller, the device will auto switch to
the security mode. In the security mode, the following commands
need to be wrapped in Security Command Classes to communicate,
otherwise there will be no response.

COMMAND_CLASS_BATTERY
COMMAND_CLASS_NOTIFICATION_V4
COMMAND_CLASS_ASSOCIATION_V2
COMMAND_CLASS_CONFIGURATION
COMMAND_CLASS_SENSOR_BINARY_V2
COMMAND_CLASS_SENSOR_MULTILEVEL_V5
COMMAND_CLASS_WAKE_UP_V2

so I tried to accommodate that. I found a routine that’s at least related to decoding secure z-wave commands, and I looked up the secure commands listed above to get the appropriate hex codes. I added this code to the handler:

// Devices that support the Security command class can send messages in an
// encrypted form; they arrive wrapped in a SecurityMessageEncapsulation
// command and must be unencapsulated
def zwaveEvent(physicalgraph.zwave.commands.securityv1.SecurityMessageEncapsulation cmd) {
        def encapsulatedCommand = cmd.encapsulatedCommand([0x80: 1, 0x71: 3, 0x85: 2, 0x70: 1, 0x30: 2, 0x31: 5, 0x84: 2])

        // can specify command class versions here like in zwave.parse
        if (encapsulatedCommand) {
                return zwaveEvent(encapsulatedCommand)
        }
}

I think that got me a step closer, but I hit a wall again. Now I get this error:

d8c01599-29a2-4ebc-9a6b-5dfa7f5aa2c3 11:41:14 AM: error java.lang.NullPointerException: Cannot get property 'value' on null object @ line 118
d8c01599-29a2-4ebc-9a6b-5dfa7f5aa2c3 11:41:14 AM: debug PSM02: Catchall reached for cmd: MultiCmdEncap(numberOfCommands: 4)}
d8c01599-29a2-4ebc-9a6b-5dfa7f5aa2c3 11:41:14 AM: debug PSM02 Parsed CMD: SecurityMessageEncapsulation(commandByte: [4, 3, 128, 3, 100, 9, 113, 5, 0, 0, 0, 255, 7, 8, 0, 5, 49, 5, 3, 1, 24, 6, 49, 5], commandClassIdentifier: 143, commandIdentifier: 1, reserved13: 0, secondFrame: false, sequenceCounter: 1, sequenced: true)
d8c01599-29a2-4ebc-9a6b-5dfa7f5aa2c3 11:41:14 AM: debug PSM02 Parse called with zw device: 13, command: 98C1, payload: 11 8F 01 04 03 80 03 64 09 71 05 00 00 00 FF 07 08 00 05 31 05 03 01 18 06 31 05

So now it’s MultiCmdEncap that is failing? There was a question about this command in the forum, but it wasn’t answered:

https://community.smartthings.com/t/how-to-parse-multicmdencap/31269

Can anyone give me some direction? Is the security mode new or do I need to change some configuration? Thanks.

Tom,

I never ran into the need to use security encapsulation with this device. I seem to remember that the code for the Aeon Multisensor 6 uses security encapsulation and that it was painfully complex. See whether any other device drivers provide a hit on how to implement it. It you can avoid it, I wouldn’t go there.

Did you delete this? Can’t find it anymore… :frowning:

Hi @danielccm, I moved this a couple years ago. It can be found here now: https://github.com/constjs/jcdevhandlers/tree/master/devicetypes/jscgs350/my-philio-psm01-sensor.src

1 Like

Yes! Thanks! The stoopid device was only missing your dh… lol! Yay!

1 Like

Hi, i’m from Vera, so new to smarthings. I try to have acces for the code of the PSM02 of Eyeball…but the link doesn’t work anymore. Somebody have the github? Thank you guys and sorry for my bad english.

Anyone else have issues with how this device updates the luminance values? The temperature seems to be taken every fews minutes when there’s a change, but the lumiance only updates about every 4 hours!

Thanks guys, especially to @johnconstantelo, for this DTH. I successfully used it for my Zipato Multisensor Quad - and it works just fine. To be honest I do not get the Tamper readings/alerts (just the crossed-off cloud symbol in Tamper section), and I do not see a Motion sensing capability either, but frankly, I am not sure I need them. I use these mostly for the temperature to control heating, and I am trying to migrate from Zipato to Smartthings, this was another device not supported out-of-the-box by Smartthings and this DTH removed another headache for me.

So - big thanks to you!

1 Like