[Help needed] Fibaro FGK-10x z-wave Door window sensor temperature reporting

After further reading, I realized a few things. One of them is that to configure the device, it needs to be awake (doh). If you look at the debug log above, you woke-up the device by triggering the contact but waited 26 seconds before doing the configure(). From what I read, the device goes back to sleep after two to four seconds. You can also wake up the device by tapping the TMP button once.

The original driver from Jean-Jacques GUILLEMAUD avoids this by storing the commands and sending them when the device sends notification that it is awake. This functionality is not present in the driver you use.

I also realized that the device uses multichannels. From the documentation: "The Door/Window Sensor is a multichannel device. ". Ideally, the driver could create two child devices, one for the contact and one for the temperature. However, it will also work without it...

1 Like

After a lot of messing with these in Smarthings, yes, I do realize they need to be awake for the configuration. I just hit the bottom TMP button once and then click configure.

On the last few, it was literally a few seconds, but will try again :slight_smile:

Nothing is logged (using the ST ported driver we're playing with) with a TMP press...only thing that logs is a magnet that trips the open/close reed sensor on the device. Battery level also logs.

Well, God love a duck...I remember having to configure these repeatedly in ST so I just tried hitting the TMP button and config a second later. You can see I also brought a magnet close right after clicking config to wake it up. Did this a few times. There be temps! If we can sort this out I suspect a lot of folks trying to use these 2.5 firmware devices as temp sensors (there are a lot) will be quite happy :slight_smile:

So far, it's not reporting temp changes after dipping in hot water. It did report back temp when I hit the TMP button and clicked configure in the driver. Tried a few times again with hot and cold and it does report temp back but only if hit TMP on the sensor and then config button in the driver.

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:51:18.744 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@21ecfb]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:50:17.044 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@6ced08]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:49:21.160 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 600D, payload: 02 02 31 05 01 44 00 00 0D AC , isMulticast: false' to [['value':'95.00', 'unit':'F', 'name':'temperature']]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:49:21.157 pm [debug](http://192.168.0.50/device/edit/229)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 13, 172], size:4, scaledSensorValue:35.00)

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:49:18.592 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:49:18.591 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:49:15.674 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:49:15.529 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:33.354 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:33.341 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:29.794 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:29.650 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:19.814 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:19.800 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:16.603 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:16.591 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:08.550 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:08.535 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:07.747 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:07.733 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:06.996 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:06.982 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:06.927 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:06.913 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:05.564 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:05.550 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:04.699 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:04.684 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:03.945 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:03.931 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:03.896 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:03.882 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:01.580 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:01.566 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:01.252 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:46:01.238 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:41.057 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:41.043 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:39.951 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:39.936 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:39.870 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:39.806 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:39.711 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:39.697 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:31.524 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:31.510 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:31.356 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:31.345 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:29.369 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:29.354 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:29.120 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:29.105 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:28.935 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:28.918 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:28.604 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:28.589 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:27.938 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:27.924 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:27.350 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:27.336 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:26.813 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:26.798 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:26.453 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:26.438 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:26.322 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:26.308 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:26.243 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:26.229 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:08.817 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@b30603]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:05.271 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:05.258 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:03.550 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:03.535 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:02.299 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:02.283 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:01.625 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:45:01.605 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:41:42.615 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:41:42.289 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:37:00.486 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 600D, payload: 02 02 31 05 01 44 00 00 06 7E , isMulticast: false' to [['value':'61.92', 'unit':'F', 'name':'temperature']]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:37:00.478 pm [debug](http://192.168.0.50/device/edit/229)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 6, 126], size:4, scaledSensorValue:16.62)

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:36:49.777 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:36:49.776 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:36:30.774 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:36:30.709 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:36:28.602 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 600D, payload: 02 02 31 05 01 44 00 00 06 7E , isMulticast: false' to [['value':'61.92', 'unit':'F', 'name':'temperature']]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:36:28.595 pm [debug](http://192.168.0.50/device/edit/229)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 6, 126], size:4, scaledSensorValue:16.62)

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:36:27.960 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:36:21.849 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:36:21.848 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:34:38.221 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:34:38.220 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:33:45.547 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:33:40.786 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:33:02.328 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@10399f7]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:32:28.153 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8406, payload: 00 A8 C0 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:32:28.152 pm [debug](http://192.168.0.50/device/edit/229)Catchall reached for cmd: WakeUpIntervalReport(nodeid:1, seconds:43200)}

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:32:28.102 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@fd2ea0]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:29:15.878 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 12:29:15.877 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

Great :partying_face:, I made a few changes to the configure:

/**
 *  Device Type Definition File
 *
 *  Device Type:		Fibaro Door/Window Sensor
 *  File Name:			fibaro-door-window-sensor.groovy
 *	Initial Release:	2014-12-10
 *	@author:			Todd Wackford
 *  Email:				todd@wackford.net
 *  @version:			1.0
 *
 *  Copyright 2014 SmartThings
 *
 *  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.
 *
 */
  
 /**
 * Sets up metadata, simulator info and tile definition. The tamper tile is setup, but 
 * not displayed to the user. We do this so we can receive events and display on device 
 * activity. If the user wants to display the tamper tile, adjust the tile display lines
 * with the following:
 *		main(["contact", "temperature", "tamper"])
 *		details(["contact", "temperature", "battery", "tamper"])
 *
 * @param none
 *
 * @return none
 */
 metadata {
	definition (name: "Fibaro Door/Window Sensor", namespace: "smartthings", author: "SmartThings", runLocally: true, minHubCoreVersion: '000.021.00001', executeCommandsLocally: true) {
		capability 	"Temperature Measurement"     
		capability 	"Contact Sensor"
		capability 	"Sensor"
		capability 	"Battery"
		capability 	"Configuration"
		capability  "Health Check"
        
        command		"resetParams2StDefaults"
        command		"listCurrentParams"
        command		"updateZwaveParam"
        command		"test"

		fingerprint deviceId: "0x2001", inClusters: "0x30,0x9C,0x85,0x72,0x70,0x86,0x80,0x56,0x84,0x7A,0xEF,0x2B", deviceJoinName: "Fibaro Open/Closed Sensor"
	}

	simulator {
		// messages the device returns in response to commands it receives
		status "open"  :  	"command: 2001, payload: FF"
		status "closed":	"command: 2001, payload: 00"

		for (int i = 0; i <= 100; i += 20) {
			status "temperature ${i}F": new hubitat.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
				scaledSensorValue: i, precision: 1, sensorType: 1, scale: 1).incomingMessage()
		}

		for (int i = 0; i <= 100; i += 20) {
			status "battery ${i}%": new hubitat.zwave.Zwave().batteryV1.batteryReport(
				batteryLevel: i).incomingMessage()
		}
	}

	tiles {
		standardTile("contact", "device.contact", width: 2, height: 2) {
			state "open",   label: '${name}', icon: "st.contact.contact.open",   backgroundColor: "#e86d13"
			state "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#00A0DC"
		}
		valueTile("temperature", "device.temperature", inactiveLabel: false) {
			state "temperature", label:'${currentValue}°',
			backgroundColors:[
				[value: "", color: "#ffffff"],
                [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"]
			]
		}
        standardTile("tamper", "device.alarm") {
			state("secure", label:'secure',    icon:"st.locks.lock.locked",   backgroundColor:"#ffffff")
			state("tampered", label:'tampered', icon:"st.locks.lock.unlocked", backgroundColor:"#00a0dc")
		}
		valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") {
			state "battery", label:'${currentValue}% battery', unit:""
		}
		standardTile("configure", "device.configure", inactiveLabel: false, decoration: "flat") {
			state "configure", label:'', action:"configuration.configure", icon:"st.secondary.configure"
		}

		//this will display a temperature tile for the DS18B20 sensor
		main(["contact", "temperature"])    //COMMENT ME OUT IF NO TEMP INSTALLED
		details(["contact", "temperature", "battery"])	//COMMENT ME OUT IF NO TEMP INSTALLED
        
        //this will hide the temperature tile if the DS18B20 sensor is not installed
		//main(["contact"])										//UNCOMMENT ME IF NO TEMP INSTALLED
		//details(["contact", "battery"])						//UNCOMMENT ME IF NO TEMP INSTALLED
	}
}

/**
 * Mapping of command classes and associated versions used for this DTH
 */
private getCommandClassVersions() {
	[
		0x30: 1,  // Sensor Binary
		0x31: 2,  // Sensor MultiLevel
		0x56: 1,  // Crc16Encap
		0x60: 3,  // Multi-Channel
		0x70: 2,  // Configuration
		0x72: 2,  // Manufacturer Specific
		0x80: 1,  // Battery
		0x84: 1,  // WakeUp
		0x9C: 1   // Sensor Alarm
	]
}

// Parse incoming device messages to generate events 
def parse(String description)
{
	def result = []
	def cmd = zwave.parse(description, commandClassVersions)
	if (cmd) {
		result += zwaveEvent(cmd)
	}
	log.debug "parsed '$description' to ${result.inspect()}"
	result
}

def zwaveEvent(hubitat.zwave.commands.crc16encapv1.Crc16Encap cmd)
{
	def versions = commandClassVersions
	// def encapsulatedCommand = cmd.encapsulatedCommand(versions)
	def version = versions[cmd.commandClass as Integer]
	def ccObj = version ? zwave.commandClass(cmd.commandClass, version) : zwave.commandClass(cmd.commandClass)
	def encapsulatedCommand = ccObj?.command(cmd.command)?.parse(cmd.data)
	if (!encapsulatedCommand) {
		log.debug "Could not extract command from $cmd"
	} else {
		return zwaveEvent(encapsulatedCommand)
	}
}

def zwaveEvent(hubitat.zwave.commands.multichannelv3.MultiChannelCmdEncap cmd) {
	if (cmd.commandClass == 0x6C && cmd.parameter.size >= 4) { // Supervision encapsulated Message
		// Supervision header is 4 bytes long, two bytes dropped here are the latter two bytes of the supervision header
		cmd.parameter = cmd.parameter.drop(2)
		// Updated Command Class/Command now with the remaining bytes
		cmd.commandClass = cmd.parameter[0]
		cmd.command = cmd.parameter[1]
		cmd.parameter = cmd.parameter.drop(2)
	}
	def encapsulatedCommand = cmd.encapsulatedCommand([0x30: 2, 0x31: 2]) // can specify command class versions here like in zwave.parse
	log.debug ("Command from endpoint ${cmd.sourceEndPoint}: ${encapsulatedCommand}")
	if (encapsulatedCommand) {
		return zwaveEvent(encapsulatedCommand)
	}
}

def zwaveEvent(hubitat.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
	def event = createEvent(descriptionText: "${device.displayName} woke up", isStateChange: false)
	def cmds = []
	if (!state.lastbat || now() - state.lastbat > 24*60*60*1000) {
		cmds << zwave.batteryV1.batteryGet().format()
	} else {
		cmds << zwave.wakeUpV1.wakeUpNoMoreInformation().format()
	}
	[event, response(cmds)]
}


def zwaveEvent(hubitat.zwave.commands.sensormultilevelv2.SensorMultilevelReport cmd)
{
	def map = [:]
	switch (cmd.sensorType) {
		case 1:
			// temperature
			def cmdScale = cmd.scale == 1 ? "F" : "C"
			map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision)
			map.unit = getTemperatureScale()
			map.name = "temperature"
			break;
	}
	createEvent(map)
}


def zwaveEvent(hubitat.zwave.commands.batteryv1.BatteryReport cmd) {
	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
	}
	state.lastbat = now()
	[createEvent(map), response(zwave.wakeUpV1.wakeUpNoMoreInformation())]
}

def zwaveEvent(hubitat.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd) {
	def map = [:]
	map.value = cmd.sensorValue ? "open" : "closed"
	map.name = "contact"
	if (map.value == "closed") {
		map.descriptionText = "$device.displayName is closed"
	}
	else {
		map.descriptionText = "$device.displayName is open"
	}
	createEvent(map)
}

// added so UK (non-multichannel) and US device supported by same device file.
def sensorValueEvent(value) {
	if (value) {
		createEvent(name: "contact", value: "open", descriptionText: "$device.displayName is open")
	} else {
		createEvent(name: "contact", value: "closed", descriptionText: "$device.displayName is closed")
	}
}

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

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

def zwaveEvent(hubitat.zwave.commands.sensoralarmv1.SensorAlarmReport cmd)
{
	def map = [:]
	map.value = cmd.sensorState ? "tampered" : "secure"
	map.name = "tamper"
	if (map.value == "tampered") {
		map.descriptionText = "$device.displayName has been tampered with"
	}
	else {
		map.descriptionText = "$device.displayName is secure"
	}
	createEvent(map)
}

def zwaveEvent(hubitat.zwave.Command cmd) {
	log.debug "Catchall reached for cmd: ${cmd.toString()}}"
	[]
}

def zwaveEvent(hubitat.zwave.commands.configurationv2.ConfigurationReport cmd) {
	def result = []
	log.debug "${device.displayName} parameter '${cmd.parameterNumber}' with a byte size of '${cmd.size}' is set to '${cmd.configurationValue}'"

	if (cmd.parameterNumber == 15) {
		if (cmd.configurationValue[0] == 1) { //error in temp probe
			result << createEvent(name:"temperature", value:"-99")
		} else if (cmd.configurationValue[0] == 255) { //no temp probe
			result << createEvent(name:"temperature", value:"")
		}
		result += response(zwave.batteryV1.batteryGet().format())  // send this after configure() runs
	}
	result
}

def zwaveEvent(hubitat.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) {
	def result = []

	def msr = String.format("%04X-%04X-%04X", cmd.manufacturerId, cmd.productTypeId, cmd.productId)
	log.debug "msr: $msr"
	device.updateDataValue(["MSR", msr])

	result << createEvent(descriptionText: "$device.displayName MSR: $msr", isStateChange: false)
	result
}

 /**
 * Configures the device to settings needed by SmarthThings at device discovery time.
 *
 * @param none
 *
 * @return none
 */
def configure() {
	log.debug "Configuring Device..."

	def cmds = []
	resetParams2StDefaults()
	
	cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 12, size: 1).format() 
	cmds << zwave.wakeUpV2.wakeUpIntervalSet(seconds: 5*60, nodeid:zwaveHubNodeId).format()

	// Set/read associations
	cmds << zwave.associationV2.associationSet(groupingIdentifier:1, nodeId:[zwaveHubNodeId]).format()
	cmds << zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format()
	cmds << zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format()
	cmds << zwave.associationV2.associationGet( groupingIdentifier: 1)
	cmds << zwave.associationV2.associationGet( groupingIdentifier: 2)
	cmds << zwave.associationV2.associationGet( groupingIdentifier: 3)
	
	cmds << zwave.multiChannelV3.multiChannelCmdEncap(sourceEndPoint: 2, destinationEndPoint: 2, commandClass:0x31, command:4).format()  //sensorMultiLevel.get()

	delayBetween(cmds, 500)
	listCurrentParams()
}

//used to add "test" button for simulation of user changes to parameters
def test() {
	def params = [paramNumber:10,value:1,size:1]
	updateZwaveParam(params)
	//zwave.wakeUpV1.wakeUpIntervalSet(seconds: 30, nodeid:zwaveHubNodeId).format()
}

 /**
 * This method will allow the user to update device parameters (behavior) from an app.
 * A "Zwave Tweaker" app will be developed as an interface to do this. Or the user can
 * write his/her own app to envoke this method. No type or value checking is done to
 * compare to what device capability or reaction. It is up to user to read OEM
 * documentation prio to envoking this method.
 *
 * <p>THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!
 *
 * @param List[paramNumber:80,value:10,size:1]
 *
 *
 * @return none
 */
def updateZwaveParam(params) {
	if ( params ) {
        def pNumber = params.paramNumber
        def pSize	= params.size
        def pValue	= [params.value]
        log.debug "Make sure device is awake and in recieve mode"
        log.debug "Updating ${device.displayName} parameter number '${pNumber}' with value '${pValue}' with size of '${pSize}'"

		def cmds = []
        cmds << zwave.configurationV1.configurationSet(configurationValue: pValue, parameterNumber: pNumber, size: pSize).format()
        cmds << zwave.configurationV1.configurationGet(parameterNumber: pNumber).format()
        delayBetween(cmds, 1000)        
    }
}

 /**
 * Sets all of available Fibaro parameters back to the device defaults except for what
 * SmartThings needs to support the stock functionality as released. This will be
 * called from the "Fibaro Tweaker" or user's app.
 *
 * <p>THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!
 *
 * @param none
 *
 * @return none
 */
def resetParams2StDefaults() {
	log.debug "Resetting ${device.displayName} parameters to SmartThings compatible defaults"
	def cmds = []
	cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 1, size: 2).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 2, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 3, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 7, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 9, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 10, size: 1).format() //ST Custom
    cmds << zwave.configurationV1.configurationSet(configurationValue: [4], parameterNumber: 12, size: 1).format() //St Custom
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 13, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 14, size: 1).format()
    
    delayBetween(cmds, 500)
}

 /**
 * Lists all of available Fibaro parameters and thier current settings out to the 
 * logging window in the IDE. This will be called from the "Fibaro Tweaker" or 
 * user's own app.
 *
 * <p>THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!
 *
 * @param none
 *
 * @return none
 */
def listCurrentParams() {
	log.debug "Listing of current parameter settings of ${device.displayName}"
    def cmds = []
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 1).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 2).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 3).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 5).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 7).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 9).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 13).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 14).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 15).format()
    
	delayBetween(cmds, 500)
}

It now reads back the values from the sensor to at least know what is going on. I also set parameter 12 to 0 and wake-up to 5 minutes. According to the documentation, this should result in a temperature report to be sent every 4 minutes.

Using the code you had provided above, it is providing parameters, but for whatever reason, it's not updating temps anymore. Did the hot water thing, wakeup/config etc.


[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:12.610 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8003, payload: FF , isMulticast: false' to [['name':'battery', 'unit':'%', 'value':1, 'descriptionText':fgk-01x has a low battery, 'isStateChange':true], 8408]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:12.569 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false' to [8002]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:12.567 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '15' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:12.068 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0E 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:12.067 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '14' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:11.566 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0D 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:11.565 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '13' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:11.064 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0C 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:11.063 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '12' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:10.581 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0A 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:10.580 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '10' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:10.113 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 09 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:10.113 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '9' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:09.645 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 07 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:09.644 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '7' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:09.058 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 05 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:09.057 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '5' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:08.567 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 03 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:08.566 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '3' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:08.059 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 02 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:08.057 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '2' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:07.556 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 01 02 00 00 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:07.555 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '1' with a byte size of '2' is set to '[0, 0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:07.512 pm [debug](http://192.168.0.50/device/edit/229)Listing of current parameter settings of fgk-01x

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:07.504 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:07.503 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:07.301 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:07.194 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:06.661 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:06.626 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:06:04.259 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@1d122ed]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:05:02.474 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@11bb00a]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:04:00.707 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@c919d2]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:02:59.093 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@15af9f0]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:01:57.396 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@6ff36f]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 03:00:57.178 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@13d4f83]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:59:53.070 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:59:53.057 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:59:51.293 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:59:51.278 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:59:16.620 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@3604a7]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:22.378 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8003, payload: FF , isMulticast: false' to [['name':'battery', 'unit':'%', 'value':1, 'descriptionText':fgk-01x has a low battery, 'isStateChange':true], 8408]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:22.337 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false' to [8002]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:22.336 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '15' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:21.835 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0E 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:21.834 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '14' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:21.334 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0D 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:21.333 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '13' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:20.834 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0C 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:20.833 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '12' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:20.333 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0A 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:20.332 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '10' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:19.830 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 09 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:19.829 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '9' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:19.330 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 07 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:19.329 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '7' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:18.828 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 05 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:18.827 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '5' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:18.327 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 03 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:18.326 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '3' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.826 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 02 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.825 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '2' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.719 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8003, payload: FF , isMulticast: false' to [['name':'battery', 'unit':'%', 'value':1, 'descriptionText':fgk-01x has a low battery, 'isStateChange':true], 8408]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.688 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 01 02 00 00 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.687 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '1' with a byte size of '2' is set to '[0, 0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.660 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false' to [8002]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.658 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '15' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.629 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0E 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.628 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '14' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.600 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0D 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.599 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '13' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.571 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0C 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.570 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '12' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.541 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0A 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.540 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '10' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.512 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 09 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.511 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '9' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.482 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false' to [8002]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.480 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '15' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.467 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 07 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.450 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '7' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.421 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0E 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.420 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '14' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.391 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 05 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.390 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '5' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.362 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0D 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.361 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '13' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.333 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 03 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.332 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '3' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.302 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0C 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.301 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '12' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.281 pm [debug](http://192.168.0.50/device/edit/229)Listing of current parameter settings of fgk-01x

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.272 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 02 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.271 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '2' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.271 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.270 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.242 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0A 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.241 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '10' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.212 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 01 02 00 00 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.211 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '1' with a byte size of '2' is set to '[0, 0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.181 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 09 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:17.180 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '9' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:16.844 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 07 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:16.843 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '7' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:15.855 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 05 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:15.854 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '5' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:15.186 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:15.153 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 02 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:15.151 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '2' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:15.093 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:11.804 pm [debug](http://192.168.0.50/device/edit/229)Listing of current parameter settings of fgk-01x

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:11.795 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:11.794 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:08.818 pm [debug](http://192.168.0.50/device/edit/229)Listing of current parameter settings of fgk-01x

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:08.800 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:58:08.799 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:57:40.681 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@1068805]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:56:39.033 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@5dff03]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:37.467 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:37.453 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:37.378 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:37.364 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:36.995 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:36.892 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:34.250 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:34.235 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:33.628 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:33.614 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:30.998 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:30.984 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:30.883 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:30.868 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:30.184 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:30.169 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:16.382 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8003, payload: FF , isMulticast: false' to [['name':'battery', 'unit':'%', 'value':1, 'descriptionText':fgk-01x has a low battery, 'isStateChange':true], 8408]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:16.336 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false' to [8002]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:16.333 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '15' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:15.878 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0E 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:15.877 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '14' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:15.327 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0D 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:15.326 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '13' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:14.827 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0C 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:14.826 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '12' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:14.326 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0A 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:14.325 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '10' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:14.080 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8003, payload: FF , isMulticast: false' to [['name':'battery', 'unit':'%', 'value':1, 'descriptionText':fgk-01x has a low battery, 'isStateChange':true], 8408]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:14.050 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 09 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:14.049 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '9' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:14.020 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 07 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:14.019 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '7' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.991 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 05 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.990 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '5' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.962 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 03 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.961 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '3' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.931 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 02 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.930 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '2' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.902 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 01 02 00 00 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.901 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '1' with a byte size of '2' is set to '[0, 0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.873 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false' to [8002]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.871 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '15' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.844 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0E 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.843 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '14' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.814 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0D 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.813 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '13' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.786 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0C 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:13.785 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '12' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:11.275 pm [debug](http://192.168.0.50/device/edit/229)Listing of current parameter settings of fgk-01x

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:11.265 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:11.265 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:11.020 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:55:10.914 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:57.986 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 05 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:57.985 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '5' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:57.800 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8003, payload: FF , isMulticast: false' to [['name':'battery', 'unit':'%', 'value':1, 'descriptionText':fgk-01x has a low battery, 'isStateChange':true], 8408]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:57.612 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 03 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:57.611 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '3' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:57.426 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 02 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:57.425 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '2' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:57.245 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false' to [8002]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:57.241 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '15' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:56.831 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 01 02 00 00 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:56.830 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '1' with a byte size of '2' is set to '[0, 0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:56.443 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0E 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:56.442 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '14' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:56.234 pm [debug](http://192.168.0.50/device/edit/229)Listing of current parameter settings of fgk-01x

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:56.225 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:56.224 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:55.752 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:55.599 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:55.492 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:55.446 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0D 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:55.445 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '13' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:55.269 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:55.182 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:54.944 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0C 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:54.943 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '12' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:54.492 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0A 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:54.492 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '10' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:53.942 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 09 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:53.941 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '9' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:53.440 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 07 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:53.439 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '7' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:52.939 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 05 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:52.938 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '5' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:52.453 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 03 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:52.452 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '3' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:51.937 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 02 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:51.936 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '2' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:51.440 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 01 02 00 00 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:51.438 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '1' with a byte size of '2' is set to '[0, 0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:51.392 pm [debug](http://192.168.0.50/device/edit/229)Listing of current parameter settings of fgk-01x

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:51.382 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:51.381 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:51.106 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:50.962 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:54:34.364 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@77b30f]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:53:32.674 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:53:32.660 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:53:32.030 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:53:32.015 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:53:29.445 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:53:29.431 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk-01x is open]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:53:29.023 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:53:28.879 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk-01x is closed]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:52:40.889 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8407, payload: , isMulticast: false' to [['descriptionText':fgk-01x woke up, 'isStateChange':false], hubitat.device.HubMultiAction@8a7b8c]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:45.270 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8003, payload: FF , isMulticast: false' to [['name':'battery', 'unit':'%', 'value':1, 'descriptionText':fgk-01x has a low battery, 'isStateChange':true], 8408]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:45.219 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false' to [8002]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:45.217 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '15' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:44.716 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0E 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:44.715 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '14' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:44.216 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0D 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:44.215 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '13' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:43.713 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0C 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:43.712 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '12' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:43.212 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0A 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:43.211 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '10' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:42.710 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 09 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:42.709 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '9' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:42.211 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 07 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:42.210 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '7' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:41.717 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 05 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:41.716 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '5' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:41.206 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 03 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:41.205 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '3' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:40.708 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 02 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:40.707 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '2' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:40.349 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 01 02 00 00 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:40.348 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '1' with a byte size of '2' is set to '[0, 0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:40.153 pm [debug](http://192.168.0.50/device/edit/229)Listing of current parameter settings of fgk-01x

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:40.131 pm [debug](http://192.168.0.50/device/edit/229)Resetting fgk-01x parameters to SmartThings compatible defaults

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:40.130 pm [debug](http://192.168.0.50/device/edit/229)Configuring Device...

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:39.581 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false' to [['value':'tampered', 'name':'tamper', 'descriptionText':fgk-01x has been tampered with]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:39.409 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false' to [['value':'secure', 'name':'tamper', 'descriptionText':fgk-01x is secure]]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:34.265 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 8003, payload: FF , isMulticast: false' to [['name':'battery', 'unit':'%', 'value':1, 'descriptionText':fgk-01x has a low battery, 'isStateChange':true], 8408]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:34.219 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false' to [8002]

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:34.213 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '15' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:33.712 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0E 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:33.712 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '14' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:33.212 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0D 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:33.211 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '13' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:32.714 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0C 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:32.713 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '12' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:32.209 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 0A 01 01 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:32.207 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '10' with a byte size of '1' is set to '[1]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:31.705 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 09 01 00 , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:31.705 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '9' with a byte size of '1' is set to '[0]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:31.205 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 07 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:31.204 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '7' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:30.840 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 05 01 FF , isMulticast: false' to []

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:30.839 pm [debug](http://192.168.0.50/device/edit/229)fgk-01x parameter '5' with a byte size of '1' is set to '[255]'

[dev:229](http://192.168.0.50/logs?device=229#pastdev229)2022-09-20 02:51:30.810 pm [debug](http://192.168.0.50/device/edit/229)parsed 'zw device: 14, command: 7006, payload: 03 01 00 , isMulticast: false' to []

According to what I read, this can cause reports to become erratic.

The three sensors have always reported low battery (for about 3-4 years now) as I've got them running on 3 x AA with the 5V solar. They have faithfully reported the solar input/output temps and air temps regardless. My fluke is reporting 4.2 volts....which again is how they've been running for a few years on ST. The "stock" battery is a ER14250 at 3.6 volts. A lot of folks have had issues with those as you can't include the sensor with a new battery at lower voltage...but I'm not seeing any of that.

I did a factory reset, then put this code back in. I did the TMP button driver "Configure" command again and the temps are back.

/**
 *  Device Type Definition File
 *
 *  Device Type:		Fibaro Door/Window Sensor
 *  File Name:			fibaro-door-window-sensor.groovy
 *	Initial Release:	2014-12-10
 *	@author:			Todd Wackford
 *  Email:				todd@wackford.net
 *  @version:			1.0
 *
 *  Copyright 2014 SmartThings
 *
 *  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.
 *
 */
  
 /**
 * Sets up metadata, simulator info and tile definition. The tamper tile is setup, but 
 * not displayed to the user. We do this so we can receive events and display on device 
 * activity. If the user wants to display the tamper tile, adjust the tile display lines
 * with the following:
 *		main(["contact", "temperature", "tamper"])
 *		details(["contact", "temperature", "battery", "tamper"])
 *
 * @param none
 *
 * @return none
 */
 metadata {
	definition (name: "Fibaro Door/Window Sensor", namespace: "smartthings", author: "SmartThings", runLocally: true, minHubCoreVersion: '000.021.00001', executeCommandsLocally: true) {
		capability 	"Temperature Measurement"     
		capability 	"Contact Sensor"
		capability 	"Sensor"
		capability 	"Battery"
		capability 	"Configuration"
		capability  "Health Check"
        
        command		"resetParams2StDefaults"
        command		"listCurrentParams"
        command		"updateZwaveParam"
        command		"test"

		fingerprint deviceId: "0x2001", inClusters: "0x30,0x9C,0x85,0x72,0x70,0x86,0x80,0x56,0x84,0x7A,0xEF,0x2B", deviceJoinName: "Fibaro Open/Closed Sensor"
	}

	simulator {
		// messages the device returns in response to commands it receives
		status "open"  :  	"command: 2001, payload: FF"
		status "closed":	"command: 2001, payload: 00"

		for (int i = 0; i <= 100; i += 20) {
			status "temperature ${i}F": new hubitat.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
				scaledSensorValue: i, precision: 1, sensorType: 1, scale: 1).incomingMessage()
		}

		for (int i = 0; i <= 100; i += 20) {
			status "battery ${i}%": new hubitat.zwave.Zwave().batteryV1.batteryReport(
				batteryLevel: i).incomingMessage()
		}
	}

	tiles {
		standardTile("contact", "device.contact", width: 2, height: 2) {
			state "open",   label: '${name}', icon: "st.contact.contact.open",   backgroundColor: "#e86d13"
			state "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#00A0DC"
		}
		valueTile("temperature", "device.temperature", inactiveLabel: false) {
			state "temperature", label:'${currentValue}°',
			backgroundColors:[
				[value: "", color: "#ffffff"],
                [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"]
			]
		}
        standardTile("tamper", "device.alarm") {
			state("secure", label:'secure',    icon:"st.locks.lock.locked",   backgroundColor:"#ffffff")
			state("tampered", label:'tampered', icon:"st.locks.lock.unlocked", backgroundColor:"#00a0dc")
		}
		valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") {
			state "battery", label:'${currentValue}% battery', unit:""
		}
		standardTile("configure", "device.configure", inactiveLabel: false, decoration: "flat") {
			state "configure", label:'', action:"configuration.configure", icon:"st.secondary.configure"
		}

		//this will display a temperature tile for the DS18B20 sensor
		main(["contact", "temperature"])    //COMMENT ME OUT IF NO TEMP INSTALLED
		details(["contact", "temperature", "battery"])	//COMMENT ME OUT IF NO TEMP INSTALLED
        
        //this will hide the temperature tile if the DS18B20 sensor is not installed
		//main(["contact"])										//UNCOMMENT ME IF NO TEMP INSTALLED
		//details(["contact", "battery"])						//UNCOMMENT ME IF NO TEMP INSTALLED
	}
}

/**
 * Mapping of command classes and associated versions used for this DTH
 */
private getCommandClassVersions() {
	[
		0x30: 1,  // Sensor Binary
		0x31: 2,  // Sensor MultiLevel
		0x56: 1,  // Crc16Encap
		0x60: 3,  // Multi-Channel
		0x70: 2,  // Configuration
		0x72: 2,  // Manufacturer Specific
		0x80: 1,  // Battery
		0x84: 1,  // WakeUp
		0x9C: 1   // Sensor Alarm
	]
}

// Parse incoming device messages to generate events 
def parse(String description)
{
	def result = []
	def cmd = zwave.parse(description, commandClassVersions)
	if (cmd) {
		result += zwaveEvent(cmd)
	}
	log.debug "parsed '$description' to ${result.inspect()}"
	result
}

def zwaveEvent(hubitat.zwave.commands.crc16encapv1.Crc16Encap cmd)
{
	def versions = commandClassVersions
	// def encapsulatedCommand = cmd.encapsulatedCommand(versions)
	def version = versions[cmd.commandClass as Integer]
	def ccObj = version ? zwave.commandClass(cmd.commandClass, version) : zwave.commandClass(cmd.commandClass)
	def encapsulatedCommand = ccObj?.command(cmd.command)?.parse(cmd.data)
	if (!encapsulatedCommand) {
		log.debug "Could not extract command from $cmd"
	} else {
		return zwaveEvent(encapsulatedCommand)
	}
}

def zwaveEvent(hubitat.zwave.commands.multichannelv3.MultiChannelCmdEncap cmd) {
	if (cmd.commandClass == 0x6C && cmd.parameter.size >= 4) { // Supervision encapsulated Message
		// Supervision header is 4 bytes long, two bytes dropped here are the latter two bytes of the supervision header
		cmd.parameter = cmd.parameter.drop(2)
		// Updated Command Class/Command now with the remaining bytes
		cmd.commandClass = cmd.parameter[0]
		cmd.command = cmd.parameter[1]
		cmd.parameter = cmd.parameter.drop(2)
	}
	def encapsulatedCommand = cmd.encapsulatedCommand([0x30: 2, 0x31: 2]) // can specify command class versions here like in zwave.parse
	log.debug ("Command from endpoint ${cmd.sourceEndPoint}: ${encapsulatedCommand}")
	if (encapsulatedCommand) {
		return zwaveEvent(encapsulatedCommand)
	}
}

def zwaveEvent(hubitat.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
	def event = createEvent(descriptionText: "${device.displayName} woke up", isStateChange: false)
	def cmds = []
	if (!state.lastbat || now() - state.lastbat > 24*60*60*1000) {
		cmds << zwave.batteryV1.batteryGet().format()
	} else {
		cmds << zwave.wakeUpV1.wakeUpNoMoreInformation().format()
	}
	[event, response(cmds)]
}


def zwaveEvent(hubitat.zwave.commands.sensormultilevelv2.SensorMultilevelReport cmd)
{
	def map = [:]
	switch (cmd.sensorType) {
		case 1:
			// temperature
			def cmdScale = cmd.scale == 1 ? "F" : "C"
			map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision)
			map.unit = getTemperatureScale()
			map.name = "temperature"
			break;
	}
	createEvent(map)
}


def zwaveEvent(hubitat.zwave.commands.batteryv1.BatteryReport cmd) {
	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
	}
	state.lastbat = now()
	[createEvent(map), response(zwave.wakeUpV1.wakeUpNoMoreInformation())]
}

def zwaveEvent(hubitat.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd) {
	def map = [:]
	map.value = cmd.sensorValue ? "open" : "closed"
	map.name = "contact"
	if (map.value == "closed") {
		map.descriptionText = "$device.displayName is closed"
	}
	else {
		map.descriptionText = "$device.displayName is open"
	}
	createEvent(map)
}

// added so UK (non-multichannel) and US device supported by same device file.
def sensorValueEvent(value) {
	if (value) {
		createEvent(name: "contact", value: "open", descriptionText: "$device.displayName is open")
	} else {
		createEvent(name: "contact", value: "closed", descriptionText: "$device.displayName is closed")
	}
}

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

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

def zwaveEvent(hubitat.zwave.commands.sensoralarmv1.SensorAlarmReport cmd)
{
	def map = [:]
	map.value = cmd.sensorState ? "tampered" : "secure"
	map.name = "tamper"
	if (map.value == "tampered") {
		map.descriptionText = "$device.displayName has been tampered with"
	}
	else {
		map.descriptionText = "$device.displayName is secure"
	}
	createEvent(map)
}

def zwaveEvent(hubitat.zwave.Command cmd) {
	log.debug "Catchall reached for cmd: ${cmd.toString()}}"
	[]
}

def zwaveEvent(hubitat.zwave.commands.configurationv2.ConfigurationReport cmd) {
	def result = []
	log.debug "${device.displayName} parameter '${cmd.parameterNumber}' with a byte size of '${cmd.size}' is set to '${cmd.configurationValue}'"

	if (cmd.parameterNumber == 15) {
		if (cmd.configurationValue[0] == 1) { //error in temp probe
			result << createEvent(name:"temperature", value:"-99")
		} else if (cmd.configurationValue[0] == 255) { //no temp probe
			result << createEvent(name:"temperature", value:"")
		}
		result += response(zwave.batteryV1.batteryGet().format())  // send this after configure() runs
	}
	result
}

def zwaveEvent(hubitat.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) {
	def result = []

	def msr = String.format("%04X-%04X-%04X", cmd.manufacturerId, cmd.productTypeId, cmd.productId)
	log.debug "msr: $msr"
	device.updateDataValue(["MSR", msr])

	result << createEvent(descriptionText: "$device.displayName MSR: $msr", isStateChange: false)
	result
}

 /**
 * Configures the device to settings needed by SmarthThings at device discovery time.
 *
 * @param none
 *
 * @return none
 */
def configure() {
	log.debug "Configuring Device..."

	def cmds = []
	resetParams2StDefaults()
	
	cmds << zwave.wakeUpV2.wakeUpIntervalSet(seconds: 1*60, nodeid:zwaveHubNodeId).format()

	// Set associations
	cmds << zwave.associationV2.associationSet(groupingIdentifier:1, nodeId:[zwaveHubNodeId]).format()
	cmds << zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format()
	cmds << zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format()

	cmds << zwave.multiChannelV3.multiChannelCmdEncap(sourceEndPoint: 2, destinationEndPoint: 2, commandClass:0x31, command:4).format()  //sensorMultiLevel.get()

	delayBetween(cmds, 500)
}

//used to add "test" button for simulation of user changes to parameters
def test() {
	def params = [paramNumber:10,value:1,size:1]
	updateZwaveParam(params)
	//zwave.wakeUpV1.wakeUpIntervalSet(seconds: 30, nodeid:zwaveHubNodeId).format()
}

 /**
 * This method will allow the user to update device parameters (behavior) from an app.
 * A "Zwave Tweaker" app will be developed as an interface to do this. Or the user can
 * write his/her own app to envoke this method. No type or value checking is done to
 * compare to what device capability or reaction. It is up to user to read OEM
 * documentation prio to envoking this method.
 *
 * <p>THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!
 *
 * @param List[paramNumber:80,value:10,size:1]
 *
 *
 * @return none
 */
def updateZwaveParam(params) {
	if ( params ) {
        def pNumber = params.paramNumber
        def pSize	= params.size
        def pValue	= [params.value]
        log.debug "Make sure device is awake and in recieve mode"
        log.debug "Updating ${device.displayName} parameter number '${pNumber}' with value '${pValue}' with size of '${pSize}'"

		def cmds = []
        cmds << zwave.configurationV1.configurationSet(configurationValue: pValue, parameterNumber: pNumber, size: pSize).format()
        cmds << zwave.configurationV1.configurationGet(parameterNumber: pNumber).format()
        delayBetween(cmds, 1000)        
    }
}

 /**
 * Sets all of available Fibaro parameters back to the device defaults except for what
 * SmartThings needs to support the stock functionality as released. This will be
 * called from the "Fibaro Tweaker" or user's app.
 *
 * <p>THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!
 *
 * @param none
 *
 * @return none
 */
def resetParams2StDefaults() {
	log.debug "Resetting ${device.displayName} parameters to SmartThings compatible defaults"
	def cmds = []
	cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 1, size: 2).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 2, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 3, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 7, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 9, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 10, size: 1).format() //ST Custom
    cmds << zwave.configurationV1.configurationSet(configurationValue: [4], parameterNumber: 12, size: 1).format() //St Custom
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 13, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 14, size: 1).format()
    
    delayBetween(cmds, 500)
}

 /**
 * Lists all of available Fibaro parameters and thier current settings out to the 
 * logging window in the IDE. This will be called from the "Fibaro Tweaker" or 
 * user's own app.
 *
 * <p>THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!
 *
 * @param none
 *
 * @return none
 */
def listCurrentParams() {
	log.debug "Listing of current parameter settings of ${device.displayName}"
    def cmds = []
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 1).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 2).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 3).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 5).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 7).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 9).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 13).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 14).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 15).format()
    
	delayBetween(cmds, 500)
}

The hot water/cool water test:

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:43.641 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:43.628 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:41.524 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 0B 79 , isMulticast: false' to [['value':'84.87', 'unit':'F', 'name':'temperature']]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:41.521 pm [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 11, 121], size:4, scaledSensorValue:29.37)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:41.349 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:41.325 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:38.106 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:38.093 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:37.595 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:37.568 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:35.099 pm [debug](http://192.168.0.50/device/edit/292)Resetting fgk10x parameters to SmartThings compatible defaults

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:35.099 pm [debug](http://192.168.0.50/device/edit/292)Configuring Device...

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:32.880 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:32.866 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:32.451 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:32.438 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:31.719 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:31.706 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:31.009 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:30.996 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:26.993 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:26.978 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:26.039 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:26:26.022 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:35.302 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:35.293 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:34.245 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:34.231 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:33.286 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:33.273 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: FF , isMulticast: false' to [['value':'open', 'name':'contact', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:32.184 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:32.173 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 3003, payload: 00 , isMulticast: false' to [['value':'closed', 'name':'contact', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:21.358 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 0E F1 , isMulticast: false' to [['value':'100.85', 'unit':'F', 'name':'temperature']]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:21.351 pm [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 14, 241], size:4, scaledSensorValue:38.25)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:19.000 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: FF , isMulticast: false' to [['name':'contact', 'value':'open', 'descriptionText':fgk10x is open]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:18.400 pm [debug](http://192.168.0.50/device/edit/292)parsed 'zw device: 16, command: 2001, payload: 00 , isMulticast: false' to [['name':'contact', 'value':'closed', 'descriptionText':fgk10x is closed]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:16.588 pm [debug](http://192.168.0.50/device/edit/292)Resetting fgk10x parameters to SmartThings compatible defaults

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-20 04:21:16.587 pm [debug](http://192.168.0.50/device/edit/292)Configuring Device...

From Jean-Jacques GUILLEMAUD's driver:

		// IMPORTANT NOTE : when the batteryLevel becomes too low, Device reports become erratic, all periodic wakeUpNotifications stop
        // and consequently BATTERYLEVEL IS NOT UPDATED ANYMORE every 24 hours, continuing to display the last (and obsolete) reported value.
        // Curiously, asynchronous sensorMultilevelReports continue to arrive, for some time, making the Device look (partially) "alive"

So some reports (the periodic wake-ups) become erratic but not all temperature... It could still cause problems with testing...

In any case, I saw that the parameters are set correctly in the device, which makes me more confident... It never answered the "associationGet" maybe because of the way I structured the requests, nothing to worry about for now.

As far as not getting temperature updates, correct me if I am wrong but even if you set the sensor to report changes of 0.25deg, it still has to take a measurement and compare it to the previous one, and that happens only every time the device wakes up, set to every 1 minute here. I am wondering what is the minimum wake-up interval of the device, maybe try 5 minutes...

I believe the previous behavior (set in the ST code anyway) was to only send temperature reports when they changed more than .5 F or so. So I would see nothing for a few hours if temps were exactly the same. I added one of the sensors back to ST and of course it's humming along reporting temps as they change.

With the code I am using back 2 posts, I have temp but only if I press TMP.

With your mod'd code, I don't see temps at all ?

What is the wake-up interval on ST?

No idea as the driver manages it (JJG, exact code I had posted).

RIght now with your mod'd driver, I do see this though in the device:

Data * deviceType: **1792**
* inClusters: **0x30,0x9C,0x60,0x85,0x72,0x70,0x86,0x80,0x56,0x84,0x7A**
* outClusters: **0x2B**
* zwNNUR: **5**
* zwWakeupInterval: **43200**
* deviceId: **8192**
* manufacturer: **271**

The ST code has a wake-up interval of 60 minutes and parameter 12 is set to 5. I changed the code, see below.

[EDIT: also added 2 more associationSet]

/**
 *  Device Type Definition File
 *
 *  Device Type:		Fibaro Door/Window Sensor
 *  File Name:			fibaro-door-window-sensor.groovy
 *	Initial Release:	2014-12-10
 *	@author:			Todd Wackford
 *  Email:				todd@wackford.net
 *  @version:			1.0
 *
 *  Copyright 2014 SmartThings
 *
 *  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.
 *
 */
  
 /**
 * Sets up metadata, simulator info and tile definition. The tamper tile is setup, but 
 * not displayed to the user. We do this so we can receive events and display on device 
 * activity. If the user wants to display the tamper tile, adjust the tile display lines
 * with the following:
 *		main(["contact", "temperature", "tamper"])
 *		details(["contact", "temperature", "battery", "tamper"])
 *
 * @param none
 *
 * @return none
 */
 metadata {
	definition (name: "Fibaro Door/Window Sensor", namespace: "smartthings", author: "SmartThings", runLocally: true, minHubCoreVersion: '000.021.00001', executeCommandsLocally: true) {
		capability 	"Temperature Measurement"     
		capability 	"Contact Sensor"
		capability 	"Sensor"
		capability 	"Battery"
		capability 	"Configuration"
		capability  "Health Check"
        
        command		"resetParams2StDefaults"
        command		"listCurrentParams"
        command		"updateZwaveParam"
        command		"test"

		fingerprint deviceId: "0x2001", inClusters: "0x30,0x9C,0x85,0x72,0x70,0x86,0x80,0x56,0x84,0x7A,0xEF,0x2B", deviceJoinName: "Fibaro Open/Closed Sensor"
	}

	simulator {
		// messages the device returns in response to commands it receives
		status "open"  :  	"command: 2001, payload: FF"
		status "closed":	"command: 2001, payload: 00"

		for (int i = 0; i <= 100; i += 20) {
			status "temperature ${i}F": new hubitat.zwave.Zwave().sensorMultilevelV2.sensorMultilevelReport(
				scaledSensorValue: i, precision: 1, sensorType: 1, scale: 1).incomingMessage()
		}

		for (int i = 0; i <= 100; i += 20) {
			status "battery ${i}%": new hubitat.zwave.Zwave().batteryV1.batteryReport(
				batteryLevel: i).incomingMessage()
		}
	}

	tiles {
		standardTile("contact", "device.contact", width: 2, height: 2) {
			state "open",   label: '${name}', icon: "st.contact.contact.open",   backgroundColor: "#e86d13"
			state "closed", label: '${name}', icon: "st.contact.contact.closed", backgroundColor: "#00A0DC"
		}
		valueTile("temperature", "device.temperature", inactiveLabel: false) {
			state "temperature", label:'${currentValue}°',
			backgroundColors:[
				[value: "", color: "#ffffff"],
                [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"]
			]
		}
        standardTile("tamper", "device.alarm") {
			state("secure", label:'secure',    icon:"st.locks.lock.locked",   backgroundColor:"#ffffff")
			state("tampered", label:'tampered', icon:"st.locks.lock.unlocked", backgroundColor:"#00a0dc")
		}
		valueTile("battery", "device.battery", inactiveLabel: false, decoration: "flat") {
			state "battery", label:'${currentValue}% battery', unit:""
		}
		standardTile("configure", "device.configure", inactiveLabel: false, decoration: "flat") {
			state "configure", label:'', action:"configuration.configure", icon:"st.secondary.configure"
		}

		//this will display a temperature tile for the DS18B20 sensor
		main(["contact", "temperature"])    //COMMENT ME OUT IF NO TEMP INSTALLED
		details(["contact", "temperature", "battery"])	//COMMENT ME OUT IF NO TEMP INSTALLED
        
        //this will hide the temperature tile if the DS18B20 sensor is not installed
		//main(["contact"])										//UNCOMMENT ME IF NO TEMP INSTALLED
		//details(["contact", "battery"])						//UNCOMMENT ME IF NO TEMP INSTALLED
	}
}

/**
 * Mapping of command classes and associated versions used for this DTH
 */
private getCommandClassVersions() {
	[
		0x30: 1,  // Sensor Binary
		0x31: 2,  // Sensor MultiLevel
		0x56: 1,  // Crc16Encap
		0x60: 3,  // Multi-Channel
		0x70: 2,  // Configuration
		0x72: 2,  // Manufacturer Specific
		0x80: 1,  // Battery
		0x84: 1,  // WakeUp
		0x9C: 1   // Sensor Alarm
	]
}

// Parse incoming device messages to generate events 
def parse(String description)
{
	def result = []
	def cmd = zwave.parse(description, commandClassVersions)
	if (cmd) {
		result += zwaveEvent(cmd)
	}
	log.debug "parsed '$description' to ${result.inspect()}"
	result
}

def zwaveEvent(hubitat.zwave.commands.crc16encapv1.Crc16Encap cmd)
{
	def versions = commandClassVersions
	// def encapsulatedCommand = cmd.encapsulatedCommand(versions)
	def version = versions[cmd.commandClass as Integer]
	def ccObj = version ? zwave.commandClass(cmd.commandClass, version) : zwave.commandClass(cmd.commandClass)
	def encapsulatedCommand = ccObj?.command(cmd.command)?.parse(cmd.data)
	if (!encapsulatedCommand) {
		log.debug "Could not extract command from $cmd"
	} else {
		return zwaveEvent(encapsulatedCommand)
	}
}

def zwaveEvent(hubitat.zwave.commands.multichannelv3.MultiChannelCmdEncap cmd) {
	if (cmd.commandClass == 0x6C && cmd.parameter.size >= 4) { // Supervision encapsulated Message
		// Supervision header is 4 bytes long, two bytes dropped here are the latter two bytes of the supervision header
		cmd.parameter = cmd.parameter.drop(2)
		// Updated Command Class/Command now with the remaining bytes
		cmd.commandClass = cmd.parameter[0]
		cmd.command = cmd.parameter[1]
		cmd.parameter = cmd.parameter.drop(2)
	}
	def encapsulatedCommand = cmd.encapsulatedCommand([0x30: 2, 0x31: 2]) // can specify command class versions here like in zwave.parse
	log.debug ("Command from endpoint ${cmd.sourceEndPoint}: ${encapsulatedCommand}")
	if (encapsulatedCommand) {
		return zwaveEvent(encapsulatedCommand)
	}
}

def zwaveEvent(hubitat.zwave.commands.wakeupv1.WakeUpNotification cmd)
{
	def event = createEvent(descriptionText: "${device.displayName} woke up", isStateChange: false)
	def cmds = []
	if (!state.lastbat || now() - state.lastbat > 24*60*60*1000) {
		cmds << zwave.batteryV1.batteryGet().format()
	} else {
		cmds << zwave.wakeUpV1.wakeUpNoMoreInformation().format()
	}
	[event, response(cmds)]
}


def zwaveEvent(hubitat.zwave.commands.sensormultilevelv2.SensorMultilevelReport cmd)
{
	def map = [:]
	switch (cmd.sensorType) {
		case 1:
			// temperature
			def cmdScale = cmd.scale == 1 ? "F" : "C"
			map.value = convertTemperatureIfNeeded(cmd.scaledSensorValue, cmdScale, cmd.precision)
			map.unit = getTemperatureScale()
			map.name = "temperature"
			break;
	}
	createEvent(map)
}


def zwaveEvent(hubitat.zwave.commands.batteryv1.BatteryReport cmd) {
	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
	}
	state.lastbat = now()
	[createEvent(map), response(zwave.wakeUpV1.wakeUpNoMoreInformation())]
}

def zwaveEvent(hubitat.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd) {
	def map = [:]
	map.value = cmd.sensorValue ? "open" : "closed"
	map.name = "contact"
	if (map.value == "closed") {
		map.descriptionText = "$device.displayName is closed"
	}
	else {
		map.descriptionText = "$device.displayName is open"
	}
	createEvent(map)
}

// added so UK (non-multichannel) and US device supported by same device file.
def sensorValueEvent(value) {
	if (value) {
		createEvent(name: "contact", value: "open", descriptionText: "$device.displayName is open")
	} else {
		createEvent(name: "contact", value: "closed", descriptionText: "$device.displayName is closed")
	}
}

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

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

def zwaveEvent(hubitat.zwave.commands.sensoralarmv1.SensorAlarmReport cmd)
{
	def map = [:]
	map.value = cmd.sensorState ? "tampered" : "secure"
	map.name = "tamper"
	if (map.value == "tampered") {
		map.descriptionText = "$device.displayName has been tampered with"
	}
	else {
		map.descriptionText = "$device.displayName is secure"
	}
	createEvent(map)
}

def zwaveEvent(hubitat.zwave.Command cmd) {
	log.debug "Catchall reached for cmd: ${cmd.toString()}}"
	[]
}

def zwaveEvent(hubitat.zwave.commands.configurationv2.ConfigurationReport cmd) {
	def result = []
	log.debug "${device.displayName} parameter '${cmd.parameterNumber}' with a byte size of '${cmd.size}' is set to '${cmd.configurationValue}'"

	if (cmd.parameterNumber == 15) {
		if (cmd.configurationValue[0] == 1) { //error in temp probe
			result << createEvent(name:"temperature", value:"-99")
		} else if (cmd.configurationValue[0] == 255) { //no temp probe
			result << createEvent(name:"temperature", value:"")
		}
		result += response(zwave.batteryV1.batteryGet().format())  // send this after configure() runs
	}
	result
}

def zwaveEvent(hubitat.zwave.commands.manufacturerspecificv2.ManufacturerSpecificReport cmd) {
	def result = []

	def msr = String.format("%04X-%04X-%04X", cmd.manufacturerId, cmd.productTypeId, cmd.productId)
	log.debug "msr: $msr"
	device.updateDataValue(["MSR", msr])

	result << createEvent(descriptionText: "$device.displayName MSR: $msr", isStateChange: false)
	result
}

 /**
 * Configures the device to settings needed by SmarthThings at device discovery time.
 *
 * @param none
 *
 * @return none
 */
def configure() {
	log.debug "Configuring Device..."

	def cmds = []
	
	cmds << zwave.configurationV1.configurationSet(configurationValue: [5], parameterNumber: 12, size: 1).format() 
	cmds << zwave.wakeUpV2.wakeUpIntervalSet(seconds: 60*60, nodeid:zwaveHubNodeId).format()

	// Set/read associations
	cmds << zwave.associationV2.associationSet(groupingIdentifier:1, nodeId:[zwaveHubNodeId]).format()
	cmds << zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format()
	cmds << zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format()
	cmds << zwave.associationV2.associationSet(groupingIdentifier:4, nodeId:[zwaveHubNodeId]).format()
	cmds << zwave.associationV2.associationSet(groupingIdentifier:5, nodeId:[zwaveHubNodeId]).format()
	
	cmds << zwave.multiChannelV3.multiChannelCmdEncap(sourceEndPoint: 2, destinationEndPoint: 2, commandClass:0x31, command:4).format()  //sensorMultiLevel.get()

	delayBetween(cmds, 500)
}

//used to add "test" button for simulation of user changes to parameters
def test() {
	def params = [paramNumber:10,value:1,size:1]
	updateZwaveParam(params)
	//zwave.wakeUpV1.wakeUpIntervalSet(seconds: 30, nodeid:zwaveHubNodeId).format()
}

 /**
 * This method will allow the user to update device parameters (behavior) from an app.
 * A "Zwave Tweaker" app will be developed as an interface to do this. Or the user can
 * write his/her own app to envoke this method. No type or value checking is done to
 * compare to what device capability or reaction. It is up to user to read OEM
 * documentation prio to envoking this method.
 *
 * <p>THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!
 *
 * @param List[paramNumber:80,value:10,size:1]
 *
 *
 * @return none
 */
def updateZwaveParam(params) {
	if ( params ) {
        def pNumber = params.paramNumber
        def pSize	= params.size
        def pValue	= [params.value]
        log.debug "Make sure device is awake and in recieve mode"
        log.debug "Updating ${device.displayName} parameter number '${pNumber}' with value '${pValue}' with size of '${pSize}'"

		def cmds = []
        cmds << zwave.configurationV1.configurationSet(configurationValue: pValue, parameterNumber: pNumber, size: pSize).format()
        cmds << zwave.configurationV1.configurationGet(parameterNumber: pNumber).format()
        delayBetween(cmds, 1000)        
    }
}

 /**
 * Sets all of available Fibaro parameters back to the device defaults except for what
 * SmartThings needs to support the stock functionality as released. This will be
 * called from the "Fibaro Tweaker" or user's app.
 *
 * <p>THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!
 *
 * @param none
 *
 * @return none
 */
def resetParams2StDefaults() {
	log.debug "Resetting ${device.displayName} parameters to SmartThings compatible defaults"
	def cmds = []
	cmds << zwave.configurationV1.configurationSet(configurationValue: [0,0], parameterNumber: 1, size: 2).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 2, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 3, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 5, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [255], parameterNumber: 7, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 9, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [1], parameterNumber: 10, size: 1).format() //ST Custom
    cmds << zwave.configurationV1.configurationSet(configurationValue: [4], parameterNumber: 12, size: 1).format() //St Custom
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 13, size: 1).format()
    cmds << zwave.configurationV1.configurationSet(configurationValue: [0], parameterNumber: 14, size: 1).format()
    
    delayBetween(cmds, 500)
}

 /**
 * Lists all of available Fibaro parameters and thier current settings out to the 
 * logging window in the IDE. This will be called from the "Fibaro Tweaker" or 
 * user's own app.
 *
 * <p>THIS IS AN ADVANCED OPERATION. USE AT YOUR OWN RISK! READ OEM DOCUMENTATION!
 *
 * @param none
 *
 * @return none
 */
def listCurrentParams() {
	log.debug "Listing of current parameter settings of ${device.displayName}"
    def cmds = []
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 1).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 2).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 3).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 5).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 7).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 9).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 10).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 12).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 13).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 14).format()
    cmds << zwave.configurationV1.configurationGet(parameterNumber: 15).format()
    
	delayBetween(cmds, 500)
}

Instead of reinventing the wheel, it might be simpler to just re-port a recent driver version to hubitat (link or link)?

Here is a first draft of the GitHub ST driver for the old sensor, ported for Hubitat. It works fine on my unit but then I don't have a sensor...I only simulated a few things with the logs you provided. Once installed, you just need to save preferences. WakeUp is 60 minutes by default and parameter 12 set to 5.
[EDITED 2022-09-20 20:47 EST]

/**
 *  Fibaro Z-Wave FGK-101 Temperature & Door/Window Sensor Handler [v0.9.5.4, 3 December 2018]
 *		
 *  Copyright 2014 Jean-Jacques GUILLEMAUD
 *
 *  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.
 *
 */
 
/******************************************************************************************************************************
 *	Fibaro Z-Wave FGK-101 Marketing Description is at :
 *		http://www.fibaro.com/en/the-fibaro-system/door-window-sensor
 *
 *  Fibaro FGK-10x Operating Manual can be downloaded at :
 *		http://www.fibaro.com/files/instrukcje/eng/DoorWindowSensor%20FGK-101-107%20ENG_v21-v23.pdf
 *
 *	The current version of this Handler is parameterized to force Device's wakeup :
 *		- on any open<->closed state change
 *		- in case of Tampering Alarm triggering
 *		- every 60mn (wakeUpIntervalSet(seconds:60*60), hard coded)
 *		- whenever Temperature delta change since last report is greater than 0.31°C (Parameter#12, hard coded)
 *		also :
 *		- Temperature is natively reported by sensor in Celsius (SensorMultilevelReport[scale:0]);
 *		  convertion is needed for Fahrenheit display 
 *
 *  A few specificities of this device that are relevant to better understand some parts of this Handler :
 *		- it is a battery operated device, so Commands can only be sent to it whenever it wakes up
 *		- it is a multi-channel Device, and the multi-level temperature sensor reports only from EndPoint#2
 *		- specific configurable parameters are documented in the above Operating Manual
 *		- some of those parameters must be modified to activate the anti-Tampering Alarm
 *		- some of the "scaffolding" has been left in place as comments, since it may help other people to understand/modify this Handler
 *		- BEWARE : the optional DS18B20 sensor must be connected BEFORE the Device is activated (otherwise, reset the Device)
 *		- IMPORTANT : for debugging purpose, it is much better to change the wake-up period from the default 60mn to 1mn or so;
 *					but unless you force the early wake up of the sensor (forcing open/closed for instance), you will have to
 *					wait up to 60mn for the new value to become effective.
 *
 * Z-Wave Device Class: GENERIC_TYPE_SENSOR_BINARY / SPECIFIC_TYPE_ROUTING_SENSOR_BINARY
 * FGK-101 Raw Description [EndPoint:0] : "0 0 0x2001 0 0 0 c 0x30 0x9C 0x60 0x85 0x72 0x70 0x86 0x80 0x84 0x7A 0xEF 0x2B"
 * Command Classes supported according to Z-Wave Certificate ZC08-14070004 for FGK-101\US :
 * 	Used in Handler :
 *		- 0x20 - 32  : BASIC					V1
 *		  0x30 - 48  : SENSOR_BINARY			!V1! V2
 *		- 0x31 - 49  : SENSOR_MULTILEVEL		V1 !V2! V3 V4 V5
 *		- 0x56 - 86  : CRC_16_ENCAP				V1
 *		  0x60 - 96  : MULTI_CHANNEL			V3
 *		  0x70 - 112 : CONFIGURATION			V1 !V2!
 *		  0x72 - 114 : MANUFACTURER_SPECIFIC 	V1 !V2!
 *		  0x80 - 128 : BATTERY					V1
 *		  0x84 - 132 : WAKE_UP					V1 !V2!
 *		  0x85 - 133 : ASSOCIATION				V1 !V2!
 *		  0x86 - 134 : VERSION					V1
 *		  0x98 - 152 : SECURITY					V1 [only latest versions of FGK-101]
 *		  0x9C - 156 : SENSOR_ALARM				V1
 *	NOT used in Handler :
 *		  0x2B - 43  : SCENE_ACTIVATION			V1	
 *
 *	 also found in FGK-101 Raw Description, in addition to Z-Wave Certificate for FGK-101\US [?!!] :
 *		+ 0x7A - 122 : FIRMWARE_UPDATE_MD		V1 V2
 *		+ 0xEF - 239 : MARK  					V1
 ******************************************************************************************************************************/

/******************************************************************************************************************************
 *	List of Known Bugs / Oddities / Missing Features :
 *		- valueTitle does not show displayNames on mobile Dashboard/Things page;
 *		  attempted workaround using : valueTile(){unit:'${displayName}') failed
 *		- valueTile behaves differently on mobile Dashboard (interpolated colors) from Simulator (step-wise colors)
 *		- using Preferences values instead of hard-coded values for some parameters would be nicer
 *****************************************************************************************************************************/

metadata {
	definition (name: "JJ's Fibaro FGK-101 Handler", namespace: "JJG2014", author: "Jean-Jacques GUILLEMAUD") {
		capability "Contact Sensor"
		capability "Battery"
		capability "Configuration"
		capability "Temperature Measurement"
		capability "Sensor"
		capability "Alarm"
        
        command "reportNext", ["string"]
        command "test"

        
        attribute "reportASAP", "number"
        attribute "deviceTime", "number"

        // FGK-101 Raw Description [EndPoint:0] : "0 0 0x2001 0 0 0 c 0x30 0x9C 0x60 0x85 0x72 0x70 0x86 0x80 0x84 0x7A 0xEF 0x2B"
		fingerprint deviceId: "0x2001", inClusters: "0x30, 0x60, 0x70, 0x72, 0x80, 0x84, 0x85, 0x9C"  // should include "0x20, 0x31" too ?!!
	}
	preferences {
		input "debugLevel", "enum", title: "<b>Debug Level?</b>", options: ["1","2"], defaultValue: "2", required: true
   		input name:"wakeUpInterval", type:"number", title: "<b>Wakeup Interval?</b>", description:"minutes", defaultValue:60, range: "0..255", required: true
    }
}

def test() {
    parse("zw device: 14, command: 8407, payload: , isMulticast: false")
    parse("zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 0B 79 , isMulticast: false")
    parse("zw device: 16, command: 2001, payload: 00 , isMulticast: false")
    parse("zw device: 16, command: 3003, payload: 00 , isMulticast: false")
    parse("zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false")
    parse("zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false")
    parse("zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false")
    parse("zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 05 79 , isMulticast: false")    
}

////////////////////////////////
// parse events into attributes
////////////////////////////////
def parse(String description) {
		state.parseCount=state.parseCount+1
		if (debugLevel>=1) {log.debug "--------------------------Parsing... ; state.parseCount: ${state.parseCount}--------------------------"}
		if (debugLevel>=2) {log.debug "Parsing... '${description}'"}
        def result = null
        def cmd = zwave.parse(description, [0x20:1, 0x30:1, 0x31:2, 0x56:1, 0x60:3, 0x70:2, 0x72:2, 0x80:1, 0x84:2, 0x85:2, 0x9C:1])
        if (cmd) {
                result = zwaveEvent(cmd)
                if (debugLevel>=1) {log.debug "Parsed ${cmd} to ${result.inspect()}"}
        } else {
                log.debug "Non-parsed event: ${description}"
        }
        return result
}


def temperatureScaleFC(tempvalue) {
	//FGK-101 is natively °C; convert to °F if selected in settings
	def float tempFC = tempvalue
	if (location.temperatureScale == "F") {
		tempFC = tempvalue * 1.8 + 32
	}
	return tempFC
}

def wakeUpResponse(cmdBlock) {
	//Initialization... (executed only once, when the Handler has been updated)
    //All untouched parameters are supposed to be DEFAULT (as factory-set)
    if (state.isInitialized == false) {
    	if (debugLevel>=2) {log.debug "state.isInitialized : ${state.isInitialized}"}
        cmdBlock << zwave.wakeUpV2.wakeUpIntervalSet(seconds:wakeUpInterval*60, nodeid:zwaveHubNodeId).format() // NB : may have to wait 60mn for that value to be refreshed !
        cmdBlock << "delay 1200"
        // NOTE : any asynchronous temperature query thru SensorMultilevelGet() does NOT reset the delta-Temp base value (managed by DS18B20 hardware)
        // Adjust temperature report sensitivity for outside thermometers whose displayName starts with "*"
        def byte tempQuantumSixteenth
    	if (device.displayName.substring(0,1).equals("*")) {
        	tempQuantumSixteenth = 16	/* 16/16=1°C = 1.8°F */
        } else {
        	tempQuantumSixteenth = 5	/* 5/16=0.31°C = 0.56°F */
        }
        cmdBlock << zwave.configurationV2.configurationSet(parameterNumber: 12/*for FGK101*/, size: 1, configurationValue: [tempQuantumSixteenth]).format()
        cmdBlock << "delay 1200"     
        // inclusion of Device in Association#3 is needed to get delta-Temperature notification messages [cf Parameter#12 above]
        cmdBlock << zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format()
        cmdBlock << "delay 1200"
        // inclusion of Device in Association#2 is needed to enable SensorAlarmReport() Command [anti-Tampering protection]
        cmdBlock << zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format()
        cmdBlock << "delay 1200"
        // inclusion of Device in Association#4 is needed for backward compatibility with non Z-Wave+ controlers
        cmdBlock << zwave.associationV2.associationSet(groupingIdentifier:4, nodeId:[zwaveHubNodeId]).format()
        cmdBlock << "delay 1200"
        // inclusion of Device in Association#5 is needed for backward compatibility with non Z-Wave+ controlers
        cmdBlock << zwave.associationV2.associationSet(groupingIdentifier:5, nodeId:[zwaveHubNodeId]).format()
        cmdBlock << "delay 1200"
        state.isInitialized = true
        if (debugLevel>=2) {log.debug "state.isInitialized : ${state.isInitialized}"}
    }
    
	//Regular Commands...
    def long nowTime = new Date().getTime()
    // Next line needed because "update()" does not seem to work anymore
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 day
    if (nowTime-state.lastReportBattery > state.batteryInterval) {
		cmdBlock << zwave.batteryV1.batteryGet().format()
        cmdBlock << "delay 1200"
        //next 2 lines redondant since any open/closed status change is asynchronously notified... but useful in case of missing basicSet notification
    	cmdBlock << zwave.basicV1.basicGet().format()
    	cmdBlock << "delay 1200"
    }

    cmdBlock << zwave.wakeUpV2.wakeUpIntervalGet().format() // NB : may have to wait 60mn for that value to be refreshed !
    cmdBlock << "delay 1200"
    cmdBlock << zwave.multiChannelV3.multiChannelCmdEncap(sourceEndPoint: 2, destinationEndPoint: 2, commandClass:0x31/*Sensor Multilevel*/, command:4/*Get*/).format()
    cmdBlock << "delay 1200"
    cmdBlock << zwave.wakeUpV2.wakeUpNoMoreInformation().format()
    cmdBlock << "delay 2000"
    if (debugLevel>=2) {
        log.debug "wakeUpNoMoreInformation()"
        log.debug "cmdBlock : ${cmdBlock}"
    }
    return cmdBlock
}

def zwaveEvent(hubitat.zwave.commands.wakeupv2.WakeUpNotification cmd) {
		// IMPORTANT NOTE : when the batteryLevel becomes too low, Device reports become erratic, all periodic wakeUpNotifications stop
        // and consequently BATTERYLEVEL IS NOT UPDATED ANYMORE every 24 hours, continuing to display the last (and obsolete) reported value.
        // Curiously, asynchronous sensorMultilevelReports continue to arrive, for some time, making the Device look (partially) "alive"
    	if (debugLevel>=2) {log.debug "wakeupv2.WakeUpNotification $cmd"}
        def event = createEvent(descriptionText: "${device.displayName} woke up", isStateChange: true, displayed: false)
        def cmdBlock = []
        cmdBlock=wakeUpResponse(cmdBlock)
        return [event, response(cmdBlock)]
}

def zwaveEvent(hubitat.zwave.commands.sensormultilevelv2.SensorMultilevelReport cmd) {
	// IMPORTANT NOTE : when the batteryLevel becomes too low, Device reports become erratic, all periodic wakeUpNotifications stop
	// and consequently BATTERYLEVEL IS NOT UPDATED ANYMORE every 24 hours, continuing to display the last (and obsolete) reported value.
	// Curiously, asynchronous sensorMultilevelReports continue to arrive, for some time, making the Device look (partially) "alive"
	// This section resets the displayed battery level to 1% when the battery level is obsolete by more than 48h.
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 day
    def long nowTime = new Date().getTime()
    if (nowTime-state.lastReportBattery > 3*state.batteryInterval) {  // reset batteryLevel to 1% if no update for 48-72 hours
    	log.debug "obsolete (likely low) battery value : ${((nowTime-state.lastReportBattery)/3600000)} hours old"
        sendEvent(name: "battery", displayed: true, isStateChange:true, unit: "%", value: 1, descriptionText: "${device.displayName} has a low battery")
	    state.lastReportBattery = nowTime
	}
			//  Dirty temporary recovery fix for remote Devices which lost wakeUp capability but still get asynchromous SensorMultilevelReports
			//  Forcing with the magnet a close/open transition after replacing the battery should (in most cases...) restore wakeUps
                //def cmdBlock = []
        		//cmdBlock=wakeUpResponse(cmdBlock)
        		//return [response(cmdBlock)]
        		//configure()
        def float scaledSensorValue = cmd.scaledSensorValue
        // Adjust measured temperature based on previous manual calibration; FGK-101 is natively °C
        switch (device.name) {
            case 'T005' :										//JJG	
            	scaledSensorValue = scaledSensorValue + 0.0554
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T006' :										//MLE
            	scaledSensorValue = scaledSensorValue + 0.0297
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T003' :										//MPT
            	scaledSensorValue = scaledSensorValue - 0.0603
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T002' :										//NBN	
            	scaledSensorValue = scaledSensorValue - 0.0758
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T004' :										//SCU
            	scaledSensorValue = scaledSensorValue + 0.0011
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T007' :										//FSU
            	scaledSensorValue = scaledSensorValue + 0.0025
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T008' :										
            	scaledSensorValue = scaledSensorValue - 0.0146
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T009' :										
            	scaledSensorValue = scaledSensorValue + 0.0383
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T010' :										
            	scaledSensorValue = scaledSensorValue + 0.0383
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T011' :										
            	scaledSensorValue = scaledSensorValue - 0.0889
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T012' :										
            	scaledSensorValue = scaledSensorValue - 0.0532
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T013' :										
            	scaledSensorValue = scaledSensorValue + 0.0383
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T014' :										//*ext*//
            	scaledSensorValue = scaledSensorValue - 0.0160
    			log.debug "Temp Adjust for : ${device.name}"
                break;
        }
        //Round to nearest 1 decimal temperature value; convert to °F if needed
        def float ftempSign = temperatureScaleFC(scaledSensorValue) < 0 ? -1 : +1
		def float ftemp = ftempSign * ((((temperatureScaleFC(scaledSensorValue).abs()*100+5)/10).intValue()*1.0)/10)
        if (debugLevel>=2) {
        	log.debug "ftempSign : ${ftempSign}"
        	log.debug "ftemp : ${ftemp}"
        }
        // Next line needed because "update()" does not seem to work anymore
    	state.maxEventInterval = (long) (4*60-10)*60*1000  // at least 1 Temperature Report event every 4 hours
        nowTime = new Date().getTime()
        if (debugLevel>=2) {
        	log.debug "cmd.scaledSensorValue : ${cmd.scaledSensorValue}"
        	log.debug "correction : ${scaledSensorValue-cmd.scaledSensorValue}"
    		log.debug "device.displayName : ${device.displayName}"
    		log.debug "'Date().getTime()' : ${new Date().getTime()}"
            log.debug "state.forcedWakeUp : ${state.forcedWakeUp}"
            log.debug "state.maxEventInterval : ${state.maxEventInterval}"
    		log.debug "state.lastReportTime : ${state.lastReportTime}"
    		log.debug "nowTime : ${nowTime}"
    		log.debug "(nowTime-state.lastReportTime > state.maxEventInterval) : ${(nowTime-state.lastReportTime > state.maxEventInterval)}"
    		log.debug "ftemp : ${ftemp}"
            log.debug "state.lastReportedTemp: ${state.lastReportedTemp}"
        }
        // Adjust temperature report sensitivity for outside thermometers whose displayName starts with "*"
        def float tempQuantum
    	if (device.displayName.substring(0,1).equals("*")) {
        	tempQuantum = temperatureScaleFC(0.9999)-temperatureScaleFC(0)
        } else {
        	tempQuantum = temperatureScaleFC(0.2999)-temperatureScaleFC(0)
        }
        log.debug "((ftemp-state.lastReportedTemp).abs()>${tempQuantum}): ${(ftemp-state.lastReportedTemp).abs()>tempQuantum}"
        if (((ftemp-state.lastReportedTemp).abs()>tempQuantum) || ((nowTime-state.lastReportTime) > state.maxEventInterval) || state.forcedWakeUp) {
        	def map = [ displayed: true, value: ftemp.toString(), isStateChange:true, linkText:"${device.displayName}" ]
        	switch (cmd.sensorType) {
                case 1:
                        map.name = "temperature"
                        map.unit = cmd.scale == 1 ? "F" : "C"
                        //ignores Device's native temperature scale, ftemp already converted to °F if settings as such
                        map.unit = location.temperatureScale
                        log.debug "map.value : ${map.value}"
                        log.debug "map.unit : ${map.unit}"
                        break;
        	}
			if (debugLevel>=2) {
        		log.debug "temperature Command : ${map.inspect()}"
        	}
        	state.lastReportedTemp = ftemp
            state.lastReportTime = nowTime
            state.forcedWakeUp = false
            // For Test purpose; redondant with reportNext() => state.forcedWakeUp=1
            if (device.currentValue('reportASAP')==1) {sendEvent(name: "reportASAP", value: 0, isStateChange: true)}
        	return sendEvent(map)
        }
}

def sensorValueEvent(value) {
	if (value) {
		sendEvent(name: "contact", value: "open", descriptionText: "$device.displayName is open")
	} else {
		sendEvent(name: "contact", value: "closed", descriptionText: "$device.displayName is closed")
	}
}

// BasicReport should not be necessary since all status change notifications are asynchronous via BasicSet
// But useful as defensive programming, in case of missed notifications, to make sure latest change has been properly reported and registered
def zwaveEvent(hubitat.zwave.commands.basicv1.BasicReport cmd) {
	sensorValueEvent(cmd.value)
    if (debugLevel>=2) {log.debug "basicv1.BasicReport $cmd.value"}
    def cmdValue = cmd.value
	return openClosed(cmd, cmdValue)
}

// To check that WakeUpInterval does not revert to 1mn instead of 1h
def zwaveEvent(hubitat.zwave.commands.wakeupv2.WakeUpIntervalReport cmd) {
    if (debugLevel>=2) {log.debug "WakeUpIntervalReport $cmd"}
    if (cmd.seconds!=wakeUpInterval*60) {
    	def result = sendEvent(name:"WakeUpIntervalReport", descriptionText:"${device.displayName} had ${cmd.seconds} seconds wakeUp period", isStateChange:true, displayed:true, linkText:"${device.displayName}")
   		configure()
    }
    return result
}

def openClosed(cmd, cmdValue) {
    def theState = cmdValue == 0 ? "closed" : "open"
    if (debugLevel>=2) {log.debug "openClosed $cmd"}
    // Use closed/open sensor notification to trigger push of updated Temperature value and immediate setting of updated device parameters
    // Sometimes, Temperature forced refresh stops working : SensorMultilevelGet() Commands are stacked but not executed immediately;
    // will restart after some time, and stacked Commands will be executed !
    def event = sendEvent(name:"contact", value:"${theState}", descriptionText:"${device.displayName} is ${theState}", isStateChange:true, displayed:true, linkText:"${device.displayName}")
    state.forcedWakeUp = true
    def cmdBlock = []
    cmdBlock=wakeUpResponse(cmdBlock)
    return [event, response(cmdBlock)]
}
    
def zwaveEvent(hubitat.zwave.commands.basicv1.BasicSet cmd) {
    if (debugLevel>=2) {log.debug "basicv1.BasicSet $cmd"}
    def cmdValue = cmd.value
	return openClosed(cmd, cmdValue)
}

// SensorBinaryReport should never occur since all status change notifications are asynchronous via BasicSet
def zwaveEvent(hubitat.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd) {
    if (debugLevel>=2) {log.debug "sensorbinaryv1.SensorBinaryReport $cmd"}
    def cmdValue = cmd.sensorValue
	return openClosed(cmd, cmdValue)
}

def zwaveEvent(hubitat.zwave.commands.sensoralarmv1.SensorAlarmReport cmd) {
	//def event = sensorValueEvent(cmd.sensorState)
    if (debugLevel>=2) {log.debug "sensoralarmv1.SensorAlarmReport $cmd.sensorState"}
    def event = sendEvent(name:"alarm", descriptionText:"${device.displayName} is tampered with !", isStateChange:true, displayed:true, linkText:"${device.displayName}")
    def cmdBlock = []
    state.forcedWakeUp = true
    cmdBlock=wakeUpResponse(cmdBlock)
    return [event, response(cmdBlock)]
}


def zwaveEvent(hubitat.zwave.commands.batteryv1.BatteryReport cmd) {
    // Next line needed because "update()" does not seem to work anymore
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 day
    def long nowTime = new Date().getTime()
    if (debugLevel>=2) {
    	log.debug "batteryv1.BatteryReport ${cmd.batteryLevel}"
    	log.debug "nowTime : ${nowTime}"
    	log.debug "state.lastReportBattery : ${state.lastReportBattery}"
    	log.debug "state.batteryInterval : ${state.batteryInterval}"
        log.debug "state.forcedWakeUp : ${state.forcedWakeUp}"
    }
    if ((nowTime-state.lastReportBattery > state.batteryInterval) || state.forcedWakeUp) {
		def map = [ name: "battery", displayed: true, isStateChange:true, unit: "%" ]
		if (cmd.batteryLevel == 0xFF) {
			map.value = 1
			map.descriptionText = "${device.displayName} has a low battery"
			map.isStateChange = true
		} else {
			map.value = cmd.batteryLevel
		}
    	state.lastReportBattery = nowTime
        log.debug "battery map : ${map}"
    	return [createEvent(map)]
    }
}

def zwaveEvent(hubitat.zwave.commands.configurationv2.ConfigurationReport cmd) {
    if (debugLevel>=2) {log.debug "ConfigurationReport - Parameter#${cmd.parameterNumber}: ${cmd.configurationValue}"}
}

def zwaveEvent(hubitat.zwave.commands.multichannelv3.MultiChannelEndPointReport cmd) {
    if (debugLevel>=2) {log.debug "multichannelv3.MultiChannelCapabilityReport: ${cmd}"}
}

def zwaveEvent(hubitat.zwave.commands.multichannelv3.MultiChannelCapabilityReport cmd) {
    if (debugLevel>=2) {log.debug "multichannelv3.MultiChannelCapabilityReport: ${cmd}"}
}
 
def zwaveEvent(hubitat.zwave.commands.versionv1.VersionReport cmd) {
    if (debugLevel>=2) {log.debug "versionv1.VersionReport: ${cmd}"}
}
 
// MultiChannelCmdEncap and MultiInstanceCmdEncap are ways that devices can indicate that a message
// is coming from one of multiple subdevices or "endpoints" that would otherwise be indistinguishable
def zwaveEvent(hubitat.zwave.commands.multichannelv3.MultiChannelCmdEncap cmd) {
        def encapsulatedCommand = cmd.encapsulatedCommand([0x30: 1, 0x31: 2]) // can specify command class versions here like in zwave.parse
        if (debugLevel>=2) {log.debug ("Command from endpoint ${cmd.sourceEndPoint}: ${encapsulatedCommand}")}
        if (encapsulatedCommand) {
                return zwaveEvent(encapsulatedCommand)
        }
}

// Catch All command Handler in case of unexpected message
def zwaveEvent(hubitat.zwave.Command cmd) {
	sendEvent(descriptionText: "!!! $device.displayName: ${cmd}", displayed: false)
}

// When a Temperature Event got lost in transit, the Watchdog requests a forced report at next wake up
// The "reportNext()" alarm command is used to signal back from the Watchdog SmartApp to the sleepy Device Handler
def reportNext(commandMsg) {
	log.debug "reportNext !"
    log.debug "commandMsg : ${commandMsg}"
    state.forcedWakeUp = true
		// IMPORTANT NOTE : when the batteryLevel becomes too low, Device reports become erratic, all periodic wakeUpNotifications stop
        // and consequently BATTERYLEVEL IS NOT UPDATED ANYMORE every 24 hours, continuing to display the last (and obsolete) reported value.
        // Curiously, asynchronous sensorMultilevelReports continue to arrive, for some time, making the Device look (partially) "alive"
    	// This section resets the displayed battery level to 1% when the battery level is obsolete by more than 48h.
	// Next line may be needed because "update()" does not seem to work reliably anymore
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 day
    def long nowTime = new Date().getTime()
    if (nowTime-state.lastReportBattery > 3*state.batteryInterval) {  // reset batteryLevel to 1% if no update for 48-72 hours
    	log.debug "obsolete (likely low) battery value : ${((nowTime-state.lastReportBattery)/3600000)} hours old"
        sendEvent(name: "battery", displayed: true, isStateChange:true, unit: "%", value: 1, descriptionText: "${device.displayName} has a low battery")
	    state.lastReportBattery = nowTime
	}
	return []
}

///////////////////
// For Tests Purpose
///////////////////

// Executed each time the Handler is updated
def updated() {
	log.debug "Updated !"
    // All state.xxx attributes are Device-local, NOT Location-wide
    state.isInitialized = false
    state.lastReportedTemp = (float) -1000
    state.lastReportTime = (long) 0
    state.lastReportBattery = (long) 0
	// Real-time clock of sensors (ceramic resonator) is up to 3% inaccurate
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 Battery Report event every 24 hours, rounded up to the nearest hourly wakeup
    state.maxEventInterval = (long) (4*60-10)*60*1000  // at least 1 Temperature Report event every 3:50 hours
    state.parseCount=(int) 0
    state.forcedWakeUp = true
    if (!(state.deviceID)) {state.deviceID = device.name}
    log.debug "state.deviceID: ${state.deviceID}"
    log.debug "state.batteryInterval : ${state.batteryInterval}"
    log.debug "state.maxEventInterval : ${state.maxEventInterval}"
    // For Test purpose; redondant with reportNext() => state.forcedWakeUp=1
    sendEvent(name: "reportASAP", value: 1, isStateChange: true)
    log.debug "device.currentValue('reportASAP') : ${device.currentValue('reportASAP')}"

    infos()
}


// If you add the Configuration capability to your device type, this command will be called right
// after the device joins to set device-specific configuration commands.
def configure() {
	log.debug "Configuring..."
    // Adjust temperature report sensitivity for outside thermometers whose displayName starts with "*"
    def byte tempQuantumSixteenth
    log.debug "device.displayName.substring(0,1) : ${device.displayName.substring(0,1)}"
    if (device.displayName.substring(0,1).equals("*")) {
    	tempQuantumSixteenth = 16	/* 16/16=1°C = 1.8°F */
    } else {
    	tempQuantumSixteenth = 5	/* 5/16=0.31°C = 0.56°F */
    }
    log.debug "tempQuantumSixteenth : ${tempQuantumSixteenth}"
	delayBetween([
		// Make sure sleepy battery-powered sensors send their WakeUpNotifications to the hub
		zwave.wakeUpV2.wakeUpIntervalSet(seconds:wakeUpInterval*60, nodeid:zwaveHubNodeId).format(),
		// NOTE : any asynchronous temperature query thru SensorMultilevelGet() does NOT reset the delta-Temp base value (managed by DS18B20 hardware)
		zwave.configurationV2.configurationSet(parameterNumber: 12/*for FGK101*/, size: 1, configurationValue: [tempQuantumSixteenth]).format(),
        // inclusion of Device in Association#3 is needed to get delta-Temperature notification messages [cf Parameter#12 above]
        zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format(),
        // inclusion of Device in Association#2 is needed to enable SensorAlarmReport() Command [anti-Tampering protection]
        zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format(),
        // get zwave version information
        zwave.versionV1.versionGet().format()
	],1200)
}

def infos() {
	if (!state.devices) { state.devices = [:] }
    log.debug "zwaveHubNodeId: ${zwaveHubNodeId}"					// -> "1"
    log.debug "device.displayName: ${device.displayName}"			// -> "JJG"
    log.debug "device.id: ${device.id}"							// -> "75841488-ae76-4cac-b523-a2694e72c25a"
    log.debug "device.name: ${device.name}"						// -> "T001"
    log.debug "device.label: ${device.label}"						// -> "JJG"
    log.debug "device.data: ${device.data}"   					// -> "[endpointId:0, version: 2.1, MSR:010F-0700-2000]"
    //log.debug "'device.rawDescription': ${device.rawDescription}"	// -> "0 0 0x2001 0 0 0 c 0x30 0x9C 0x60 0x85 0x72 0x70 0x86 0x80 0x84 0x7A 0xEF 0x2B"
}

Ok, I'll try it out and let you know :slight_smile:

It did update temp after your new driver code was installed so we'll see now if it logs with temp changes. Again, very appreciative for your efforts!

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.694 am [debug](http://192.168.0.50/device/edit/292)Parsed MultiChannelCmdEncap(bitAddress:false, command:5, commandClass:49, destinationEndPoint:2, parameter:[1, 68, 0, 0, 7, 214], res01:false, sourceEndPoint:2) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.693 am [debug](http://192.168.0.50/device/edit/292)((ftemp-state.lastReportedTemp).abs()>0.5398216): false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.691 am [debug](http://192.168.0.50/device/edit/292)state.lastReportedTemp: 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.691 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.690 am [debug](http://192.168.0.50/device/edit/292)(nowTime-state.lastReportTime > state.maxEventInterval) : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.689 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764410684

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.689 am [debug](http://192.168.0.50/device/edit/292)state.lastReportTime : 1663764410090

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.688 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.687 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.687 am [debug](http://192.168.0.50/device/edit/292)'Date().getTime()' : 1663764410687

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.686 am [debug](http://192.168.0.50/device/edit/292)device.displayName : fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.685 am [debug](http://192.168.0.50/device/edit/292)correction : -5.340576159085231E-7

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.684 am [debug](http://192.168.0.50/device/edit/292)cmd.scaledSensorValue : 20.06

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.684 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.683 am [debug](http://192.168.0.50/device/edit/292)ftempSign : 1.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.680 am [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 7, 214], size:4, scaledSensorValue:20.06)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.676 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 07 D6 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.675 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 30--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.104 am [debug](http://192.168.0.50/device/edit/292)Parsed MultiChannelCmdEncap(bitAddress:false, command:5, commandClass:49, destinationEndPoint:2, parameter:[1, 68, 0, 0, 7, 214], res01:false, sourceEndPoint:2) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.102 am [debug](http://192.168.0.50/device/edit/292)temperature Command : ['displayed':true, 'value':'68.1', 'isStateChange':true, 'linkText':fgk10x, 'name':'temperature', 'unit':'F']

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.100 am [debug](http://192.168.0.50/device/edit/292)map.unit : F

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.099 am [debug](http://192.168.0.50/device/edit/292)map.value : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.098 am [debug](http://192.168.0.50/device/edit/292)((ftemp-state.lastReportedTemp).abs()>0.5398216): false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.096 am [debug](http://192.168.0.50/device/edit/292)state.lastReportedTemp: 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.096 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.095 am [debug](http://192.168.0.50/device/edit/292)(nowTime-state.lastReportTime > state.maxEventInterval) : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.095 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764410090

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.094 am [debug](http://192.168.0.50/device/edit/292)state.lastReportTime : 1663764406838

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.094 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.093 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : true

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.092 am [debug](http://192.168.0.50/device/edit/292)'Date().getTime()' : 1663764410092

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.092 am [debug](http://192.168.0.50/device/edit/292)device.displayName : fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.091 am [debug](http://192.168.0.50/device/edit/292)correction : -5.340576159085231E-7

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.090 am [debug](http://192.168.0.50/device/edit/292)cmd.scaledSensorValue : 20.06

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.089 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.089 am [debug](http://192.168.0.50/device/edit/292)ftempSign : 1.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.086 am [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 7, 214], size:4, scaledSensorValue:20.06)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.082 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 07 D6 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:50.080 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 29--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.657 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpIntervalReport(nodeid:1, seconds:240) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.655 am [debug](http://192.168.0.50/device/edit/292)WakeUpIntervalReport WakeUpIntervalReport(nodeid:1, seconds:240)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.651 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8406, payload: 00 00 F0 01 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.650 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 28--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.605 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:255, seconds:0) to [null, hubitat.device.HubMultiAction@1589168]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.603 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.602 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.599 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 255

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.597 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 FF 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.596 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 27--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.488 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpIntervalReport(nodeid:1, seconds:240) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.487 am [debug](http://192.168.0.50/device/edit/292)WakeUpIntervalReport WakeUpIntervalReport(nodeid:1, seconds:240)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.484 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8406, payload: 00 00 F0 01 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.483 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 26--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.429 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:0, seconds:0) to [null, hubitat.device.HubMultiAction@17a0602]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.427 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.427 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.424 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.422 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 00 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:49.421 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 25--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.911 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpIntervalReport(nodeid:1, seconds:240) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.909 am [debug](http://192.168.0.50/device/edit/292)WakeUpIntervalReport WakeUpIntervalReport(nodeid:1, seconds:240)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.907 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8406, payload: 00 00 F0 01 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.906 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 24--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.835 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:255, seconds:0) to [null, hubitat.device.HubMultiAction@d37021]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.833 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.832 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.830 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 255

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.827 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 FF 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:48.826 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 23--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.121 am [debug](http://192.168.0.50/device/edit/292)Parsed MultiChannelCmdEncap(bitAddress:false, command:5, commandClass:49, destinationEndPoint:2, parameter:[1, 68, 0, 0, 7, 214], res01:false, sourceEndPoint:2) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.119 am [debug](http://192.168.0.50/device/edit/292)((ftemp-state.lastReportedTemp).abs()>0.5398216): false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.117 am [debug](http://192.168.0.50/device/edit/292)state.lastReportedTemp: 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.117 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.116 am [debug](http://192.168.0.50/device/edit/292)(nowTime-state.lastReportTime > state.maxEventInterval) : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.115 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764407110

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.115 am [debug](http://192.168.0.50/device/edit/292)state.lastReportTime : 1663764406838

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.114 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.114 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.113 am [debug](http://192.168.0.50/device/edit/292)'Date().getTime()' : 1663764407113

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.112 am [debug](http://192.168.0.50/device/edit/292)device.displayName : fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.112 am [debug](http://192.168.0.50/device/edit/292)correction : -5.340576159085231E-7

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.111 am [debug](http://192.168.0.50/device/edit/292)cmd.scaledSensorValue : 20.06

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.110 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.109 am [debug](http://192.168.0.50/device/edit/292)ftempSign : 1.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.105 am [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 7, 214], size:4, scaledSensorValue:20.06)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.101 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 07 D6 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.100 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 22--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.074 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpIntervalReport(nodeid:1, seconds:240) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.073 am [debug](http://192.168.0.50/device/edit/292)WakeUpIntervalReport WakeUpIntervalReport(nodeid:1, seconds:240)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.070 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8406, payload: 00 00 F0 01 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.069 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 21--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.025 am [debug](http://192.168.0.50/device/edit/292)Parsed MultiChannelCmdEncap(bitAddress:false, command:5, commandClass:49, destinationEndPoint:2, parameter:[1, 68, 0, 0, 7, 214], res01:false, sourceEndPoint:2) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.024 am [debug](http://192.168.0.50/device/edit/292)((ftemp-state.lastReportedTemp).abs()>0.5398216): false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.022 am [debug](http://192.168.0.50/device/edit/292)state.lastReportedTemp: 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.021 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.021 am [debug](http://192.168.0.50/device/edit/292)(nowTime-state.lastReportTime > state.maxEventInterval) : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.020 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764407014

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.019 am [debug](http://192.168.0.50/device/edit/292)state.lastReportTime : 1663764406838

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.019 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.018 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.017 am [debug](http://192.168.0.50/device/edit/292)'Date().getTime()' : 1663764407017

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.016 am [debug](http://192.168.0.50/device/edit/292)device.displayName : fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.015 am [debug](http://192.168.0.50/device/edit/292)correction : -5.340576159085231E-7

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.014 am [debug](http://192.168.0.50/device/edit/292)cmd.scaledSensorValue : 20.06

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.013 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.013 am [debug](http://192.168.0.50/device/edit/292)ftempSign : 1.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.010 am [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 7, 214], size:4, scaledSensorValue:20.06)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.005 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 07 D6 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:47.004 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 20--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.891 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpIntervalReport(nodeid:1, seconds:240) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.889 am [debug](http://192.168.0.50/device/edit/292)WakeUpIntervalReport WakeUpIntervalReport(nodeid:1, seconds:240)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.886 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8406, payload: 00 00 F0 01 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.885 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 19--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.855 am [debug](http://192.168.0.50/device/edit/292)Parsed MultiChannelCmdEncap(bitAddress:false, command:5, commandClass:49, destinationEndPoint:2, parameter:[1, 68, 0, 0, 7, 214], res01:false, sourceEndPoint:2) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.852 am [debug](http://192.168.0.50/device/edit/292)temperature Command : ['displayed':true, 'value':'68.1', 'isStateChange':true, 'linkText':fgk10x, 'name':'temperature', 'unit':'F']

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.850 am [debug](http://192.168.0.50/device/edit/292)map.unit : F

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.849 am [debug](http://192.168.0.50/device/edit/292)map.value : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.848 am [debug](http://192.168.0.50/device/edit/292)((ftemp-state.lastReportedTemp).abs()>0.5398216): false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.846 am [debug](http://192.168.0.50/device/edit/292)state.lastReportedTemp: 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.845 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.845 am [debug](http://192.168.0.50/device/edit/292)(nowTime-state.lastReportTime > state.maxEventInterval) : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.844 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764406838

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.843 am [debug](http://192.168.0.50/device/edit/292)state.lastReportTime : 1663764392096

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.843 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.842 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : true

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.841 am [debug](http://192.168.0.50/device/edit/292)'Date().getTime()' : 1663764406841

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.840 am [debug](http://192.168.0.50/device/edit/292)device.displayName : fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.839 am [debug](http://192.168.0.50/device/edit/292)correction : -5.340576159085231E-7

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.838 am [debug](http://192.168.0.50/device/edit/292)cmd.scaledSensorValue : 20.06

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.837 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.837 am [debug](http://192.168.0.50/device/edit/292)ftempSign : 1.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.834 am [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 7, 214], size:4, scaledSensorValue:20.06)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.830 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 07 D6 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.829 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 18--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.670 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:0, seconds:0) to [null, hubitat.device.HubMultiAction@1a10e4c]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.668 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.667 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.665 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.663 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 00 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.662 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 17--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.108 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:255, seconds:0) to [null, hubitat.device.HubMultiAction@13acfcf]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.106 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.105 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.103 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 255

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.101 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 FF 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:46.100 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 16--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.589 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:0, seconds:0) to [null, hubitat.device.HubMultiAction@41b4c4]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.587 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.587 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.584 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.582 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 00 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.581 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 15--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.346 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:255, seconds:0) to [null, hubitat.device.HubMultiAction@1cb806e]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.344 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.343 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.341 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 255

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.339 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 FF 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.337 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 14--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.254 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:0, seconds:0) to [null, hubitat.device.HubMultiAction@1f1e7ca]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.252 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.251 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.248 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.245 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 00 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:45.244 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 13--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.953 am [debug](http://192.168.0.50/device/edit/292)Parsed MultiChannelCmdEncap(bitAddress:false, command:5, commandClass:49, destinationEndPoint:2, parameter:[1, 68, 0, 0, 7, 214], res01:false, sourceEndPoint:2) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.951 am [debug](http://192.168.0.50/device/edit/292)((ftemp-state.lastReportedTemp).abs()>0.5398216): false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.950 am [debug](http://192.168.0.50/device/edit/292)state.lastReportedTemp: 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.949 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.948 am [debug](http://192.168.0.50/device/edit/292)(nowTime-state.lastReportTime > state.maxEventInterval) : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.948 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764393942

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.947 am [debug](http://192.168.0.50/device/edit/292)state.lastReportTime : 1663764392096

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.946 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.946 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.945 am [debug](http://192.168.0.50/device/edit/292)'Date().getTime()' : 1663764393945

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.944 am [debug](http://192.168.0.50/device/edit/292)device.displayName : fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.944 am [debug](http://192.168.0.50/device/edit/292)correction : -5.340576159085231E-7

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.943 am [debug](http://192.168.0.50/device/edit/292)cmd.scaledSensorValue : 20.06

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.942 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.941 am [debug](http://192.168.0.50/device/edit/292)ftempSign : 1.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.938 am [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 7, 214], size:4, scaledSensorValue:20.06)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.934 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 07 D6 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.933 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 12--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.747 am [debug](http://192.168.0.50/device/edit/292)Parsed BatteryReport(batteryLevel:255) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.745 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.745 am [debug](http://192.168.0.50/device/edit/292)state.batteryInterval : 83700000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.744 am [debug](http://192.168.0.50/device/edit/292)state.lastReportBattery : 1663764390335

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.744 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764393743

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.743 am [debug](http://192.168.0.50/device/edit/292)batteryv1.BatteryReport 255

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.741 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8003, payload: FF , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:33.740 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 11--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.827 am [debug](http://192.168.0.50/device/edit/292)Parsed MultiChannelCmdEncap(bitAddress:false, command:5, commandClass:49, destinationEndPoint:2, parameter:[1, 68, 0, 0, 7, 214], res01:false, sourceEndPoint:2) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.825 am [debug](http://192.168.0.50/device/edit/292)((ftemp-state.lastReportedTemp).abs()>0.5398216): false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.824 am [debug](http://192.168.0.50/device/edit/292)state.lastReportedTemp: 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.823 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.822 am [debug](http://192.168.0.50/device/edit/292)(nowTime-state.lastReportTime > state.maxEventInterval) : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.822 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764392817

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.821 am [debug](http://192.168.0.50/device/edit/292)state.lastReportTime : 1663764392096

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.820 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.820 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.819 am [debug](http://192.168.0.50/device/edit/292)'Date().getTime()' : 1663764392819

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.819 am [debug](http://192.168.0.50/device/edit/292)device.displayName : fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.818 am [debug](http://192.168.0.50/device/edit/292)correction : -5.340576159085231E-7

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.817 am [debug](http://192.168.0.50/device/edit/292)cmd.scaledSensorValue : 20.06

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.816 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.815 am [debug](http://192.168.0.50/device/edit/292)ftempSign : 1.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.812 am [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 7, 214], size:4, scaledSensorValue:20.06)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.808 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 07 D6 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.807 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 10--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.736 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpIntervalReport(nodeid:1, seconds:240) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.735 am [debug](http://192.168.0.50/device/edit/292)WakeUpIntervalReport WakeUpIntervalReport(nodeid:1, seconds:240)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.732 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8406, payload: 00 00 F0 01 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.731 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 9--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.151 am [debug](http://192.168.0.50/device/edit/292)Parsed MultiChannelCmdEncap(bitAddress:false, command:5, commandClass:49, destinationEndPoint:2, parameter:[1, 68, 0, 0, 7, 214], res01:false, sourceEndPoint:2) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.123 am [debug](http://192.168.0.50/device/edit/292)temperature Command : ['displayed':true, 'value':'68.1', 'isStateChange':true, 'linkText':fgk10x, 'name':'temperature', 'unit':'F']

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.121 am [debug](http://192.168.0.50/device/edit/292)map.unit : F

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.120 am [debug](http://192.168.0.50/device/edit/292)map.value : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.114 am [debug](http://192.168.0.50/device/edit/292)((ftemp-state.lastReportedTemp).abs()>0.5398216): true

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.106 am [debug](http://192.168.0.50/device/edit/292)state.lastReportedTemp: -1000.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.105 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.104 am [debug](http://192.168.0.50/device/edit/292)(nowTime-state.lastReportTime > state.maxEventInterval) : true

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.103 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764392096

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.103 am [debug](http://192.168.0.50/device/edit/292)state.lastReportTime : 0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.102 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.101 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : true

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.100 am [debug](http://192.168.0.50/device/edit/292)'Date().getTime()' : 1663764392100

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.099 am [debug](http://192.168.0.50/device/edit/292)device.displayName : fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.098 am [debug](http://192.168.0.50/device/edit/292)correction : -5.340576159085231E-7

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.096 am [debug](http://192.168.0.50/device/edit/292)cmd.scaledSensorValue : 20.06

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.095 am [debug](http://192.168.0.50/device/edit/292)ftemp : 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.094 am [debug](http://192.168.0.50/device/edit/292)ftempSign : 1.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.058 am [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 7, 214], size:4, scaledSensorValue:20.06)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.008 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 07 D6 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:32.007 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 8--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.607 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpIntervalReport(nodeid:1, seconds:240) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.605 am [debug](http://192.168.0.50/device/edit/292)WakeUpIntervalReport WakeUpIntervalReport(nodeid:1, seconds:240)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.602 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8406, payload: 00 00 F0 01 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.601 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 7--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.557 am [debug](http://192.168.0.50/device/edit/292)Parsed BasicReport(value:0) to [null, hubitat.device.HubMultiAction@27e768]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.555 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.554 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.551 am [debug](http://192.168.0.50/device/edit/292)openClosed BasicReport(value:0)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.543 am [debug](http://192.168.0.50/device/edit/292)basicv1.BasicReport 0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.528 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 2003, payload: 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:31.527 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 6--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.852 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpIntervalReport(nodeid:1, seconds:240) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.850 am [debug](http://192.168.0.50/device/edit/292)WakeUpIntervalReport WakeUpIntervalReport(nodeid:1, seconds:240)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.821 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8406, payload: 00 00 F0 01 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.820 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 5--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.759 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:255, seconds:0) to [null, hubitat.device.HubMultiAction@7f0a09]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.756 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.755 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.751 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 255

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.747 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 FF 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.746 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 4--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.352 am [debug](http://192.168.0.50/device/edit/292)Parsed BatteryReport(batteryLevel:255) to [['name':'battery', 'displayed':true, 'isStateChange':true, 'unit':'%', 'value':1, 'descriptionText':fgk10x has a low battery]]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.344 am [debug](http://192.168.0.50/device/edit/292)battery map : [name:battery, displayed:true, isStateChange:true, unit:%, value:1, descriptionText:fgk10x has a low battery]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.341 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : true

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.339 am [debug](http://192.168.0.50/device/edit/292)state.batteryInterval : 83700000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.338 am [debug](http://192.168.0.50/device/edit/292)state.lastReportBattery : 0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.337 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663764390335

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.336 am [debug](http://192.168.0.50/device/edit/292)batteryv1.BatteryReport 255

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.329 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8003, payload: FF , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.327 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 3--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.283 am [debug](http://192.168.0.50/device/edit/292)Parsed SensorAlarmReport(sourceNodeId:22, sensorType:0, sensorState:0, seconds:0) to [null, hubitat.device.HubMultiAction@11236cc]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.262 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8002, delay 1200, 2002, delay 1200, 8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.261 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.225 am [debug](http://192.168.0.50/device/edit/292)sensoralarmv1.SensorAlarmReport 0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.219 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 9C02, payload: 16 00 00 00 00 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:30.217 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 2--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:29.575 am [debug](http://192.168.0.50/device/edit/292)tempQuantumSixteenth : 5

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:29.573 am [debug](http://192.168.0.50/device/edit/292)device.displayName.substring(0,1) : f

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:29.572 am [debug](http://192.168.0.50/device/edit/292)Configuring...

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:26.489 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpNotification() to [['descriptionText':fgk10x woke up, 'isStateChange':true, 'displayed':false], hubitat.device.HubMultiAction@52b55e]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:26.480 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [84040000F001, delay 1200, 70040C01, delay 1200, 85010301, delay 1200, 85010201, delay 1200, 85010401, delay 1200, 85010501, delay 1200, 8002, delay 1200, 2002, delay 1200, 8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:26.479 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:26.409 am [debug](http://192.168.0.50/device/edit/292)state.isInitialized : true

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:26.318 am [debug](http://192.168.0.50/device/edit/292)state.isInitialized : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:26.313 am [debug](http://192.168.0.50/device/edit/292)wakeupv2.WakeUpNotification WakeUpNotification()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:26.298 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8407, payload: , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:26.296 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 1--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.367 am [debug](http://192.168.0.50/device/edit/292)device.data: [deviceType:1792, inClusters:0x30,0x9C,0x60,0x85,0x72,0x70,0x86,0x80,0x56,0x84,0x7A, outClusters:0x2B, zwNNUR:3, zwWakeupInterval:43200, deviceId:8192, manufacturer:271]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.363 am [debug](http://192.168.0.50/device/edit/292)device.label: fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.362 am [debug](http://192.168.0.50/device/edit/292)device.name: Device

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.361 am [debug](http://192.168.0.50/device/edit/292)device.id: 292

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.360 am [debug](http://192.168.0.50/device/edit/292)device.displayName: fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.359 am [debug](http://192.168.0.50/device/edit/292)zwaveHubNodeId: 1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.354 am [debug](http://192.168.0.50/device/edit/292)device.currentValue('reportASAP') : null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.353 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.352 am [debug](http://192.168.0.50/device/edit/292)state.batteryInterval : 83700000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.351 am [debug](http://192.168.0.50/device/edit/292)state.deviceID: Device

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:46:08.346 am [debug](http://192.168.0.50/device/edit/292)Updated !

At 8:57, I put the probe in 100 F water.

It looks like it reported because the delta was over .5 F from the last temp measure? Is there any way to calibrate results in your driver? Pretty tickled that you got all this figured out. I really need to learn a lot more about how these drivers are coded.

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.804 am [debug](http://192.168.0.50/device/edit/292)Parsed MultiChannelCmdEncap(bitAddress:false, command:5, commandClass:49, destinationEndPoint:2, parameter:[1, 68, 0, 0, 12, 253], res01:false, sourceEndPoint:2) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.801 am [debug](http://192.168.0.50/device/edit/292)temperature Command : ['displayed':true, 'value':'91.8', 'isStateChange':true, 'linkText':fgk10x, 'name':'temperature', 'unit':'F']

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.799 am [debug](http://192.168.0.50/device/edit/292)map.unit : F

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.798 am [debug](http://192.168.0.50/device/edit/292)map.value : 91.8

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.793 am [debug](http://192.168.0.50/device/edit/292)((ftemp-state.lastReportedTemp).abs()>0.5398216): true

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.791 am [debug](http://192.168.0.50/device/edit/292)state.lastReportedTemp: 68.1

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.790 am [debug](http://192.168.0.50/device/edit/292)ftemp : 91.8

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.790 am [debug](http://192.168.0.50/device/edit/292)(nowTime-state.lastReportTime > state.maxEventInterval) : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.789 am [debug](http://192.168.0.50/device/edit/292)nowTime : 1663765134783

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.788 am [debug](http://192.168.0.50/device/edit/292)state.lastReportTime : 1663764410090

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.788 am [debug](http://192.168.0.50/device/edit/292)state.maxEventInterval : 13800000

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.787 am [debug](http://192.168.0.50/device/edit/292)state.forcedWakeUp : false

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.786 am [debug](http://192.168.0.50/device/edit/292)'Date().getTime()' : 1663765134786

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.785 am [debug](http://192.168.0.50/device/edit/292)device.displayName : fgk10x

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.785 am [debug](http://192.168.0.50/device/edit/292)correction : 0.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.784 am [debug](http://192.168.0.50/device/edit/292)cmd.scaledSensorValue : 33.25

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.783 am [debug](http://192.168.0.50/device/edit/292)ftemp : 91.8

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.782 am [debug](http://192.168.0.50/device/edit/292)ftempSign : 1.0

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.779 am [debug](http://192.168.0.50/device/edit/292)Command from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 12, 253], size:4, scaledSensorValue:33.25)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.775 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 0C FD , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:54.774 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 39--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.564 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpIntervalReport(nodeid:1, seconds:240) to null

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.562 am [debug](http://192.168.0.50/device/edit/292)WakeUpIntervalReport WakeUpIntervalReport(nodeid:1, seconds:240)

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.559 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8406, payload: 00 00 F0 01 , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.558 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 38--------------------------

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.512 am [debug](http://192.168.0.50/device/edit/292)Parsed WakeUpNotification() to [['descriptionText':fgk10x woke up, 'isStateChange':true, 'displayed':false], hubitat.device.HubMultiAction@1c89b29]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.510 am [debug](http://192.168.0.50/device/edit/292)cmdBlock : [8405, delay 1200, 600D02023104, delay 1200, 8408, delay 2000]

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.509 am [debug](http://192.168.0.50/device/edit/292)wakeUpNoMoreInformation()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.506 am [debug](http://192.168.0.50/device/edit/292)wakeupv2.WakeUpNotification WakeUpNotification()

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.504 am [debug](http://192.168.0.50/device/edit/292)Parsing... 'zw device: 16, command: 8407, payload: , isMulticast: false'

[dev:292](http://192.168.0.50/logs?device=292#pastdev292)2022-09-21 08:58:53.503 am [debug](http://192.168.0.50/device/edit/292)--------------------------Parsing... ; state.parseCount: 37--------------------------

Here is a version with sensor offset, I think there are a few more mods required to make this driver nicer...

[EDITED]

/**
 *  Fibaro Z-Wave FGK-101 Temperature & Door/Window Sensor Handler [v0.9.5.4, 3 December 2018]
 *		
 *  Copyright 2014 Jean-Jacques GUILLEMAUD
 *
 *  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.
 *
 */
 
/******************************************************************************************************************************
 *	Fibaro Z-Wave FGK-101 Marketing Description is at :
 *		http://www.fibaro.com/en/the-fibaro-system/door-window-sensor
 *
 *  Fibaro FGK-10x Operating Manual can be downloaded at :
 *		http://www.fibaro.com/files/instrukcje/eng/DoorWindowSensor%20FGK-101-107%20ENG_v21-v23.pdf
 *
 *	The current version of this Handler is parameterized to force Device's wakeup :
 *		- on any open<->closed state change
 *		- in case of Tampering Alarm triggering
 *		- every 60mn (wakeUpIntervalSet(seconds:60*60), hard coded)
 *		- whenever Temperature delta change since last report is greater than 0.31°C (Parameter#12, hard coded)
 *		also :
 *		- Temperature is natively reported by sensor in Celsius (SensorMultilevelReport[scale:0]);
 *		  convertion is needed for Fahrenheit display 
 *
 *  A few specificities of this device that are relevant to better understand some parts of this Handler :
 *		- it is a battery operated device, so Commands can only be sent to it whenever it wakes up
 *		- it is a multi-channel Device, and the multi-level temperature sensor reports only from EndPoint#2
 *		- specific configurable parameters are documented in the above Operating Manual
 *		- some of those parameters must be modified to activate the anti-Tampering Alarm
 *		- some of the "scaffolding" has been left in place as comments, since it may help other people to understand/modify this Handler
 *		- BEWARE : the optional DS18B20 sensor must be connected BEFORE the Device is activated (otherwise, reset the Device)
 *		- IMPORTANT : for debugging purpose, it is much better to change the wake-up period from the default 60mn to 1mn or so;
 *					but unless you force the early wake up of the sensor (forcing open/closed for instance), you will have to
 *					wait up to 60mn for the new value to become effective.
 *
 * Z-Wave Device Class: GENERIC_TYPE_SENSOR_BINARY / SPECIFIC_TYPE_ROUTING_SENSOR_BINARY
 * FGK-101 Raw Description [EndPoint:0] : "0 0 0x2001 0 0 0 c 0x30 0x9C 0x60 0x85 0x72 0x70 0x86 0x80 0x84 0x7A 0xEF 0x2B"
 * Command Classes supported according to Z-Wave Certificate ZC08-14070004 for FGK-101\US :
 * 	Used in Handler :
 *		- 0x20 - 32  : BASIC					V1
 *		  0x30 - 48  : SENSOR_BINARY			!V1! V2
 *		- 0x31 - 49  : SENSOR_MULTILEVEL		V1 !V2! V3 V4 V5
 *		- 0x56 - 86  : CRC_16_ENCAP				V1
 *		  0x60 - 96  : MULTI_CHANNEL			V3
 *		  0x70 - 112 : CONFIGURATION			V1 !V2!
 *		  0x72 - 114 : MANUFACTURER_SPECIFIC 	V1 !V2!
 *		  0x80 - 128 : BATTERY					V1
 *		  0x84 - 132 : WAKE_UP					V1 !V2!
 *		  0x85 - 133 : ASSOCIATION				V1 !V2!
 *		  0x86 - 134 : VERSION					V1
 *		  0x98 - 152 : SECURITY					V1 [only latest versions of FGK-101]
 *		  0x9C - 156 : SENSOR_ALARM				V1
 *	NOT used in Handler :
 *		  0x2B - 43  : SCENE_ACTIVATION			V1	
 *
 *	 also found in FGK-101 Raw Description, in addition to Z-Wave Certificate for FGK-101\US [?!!] :
 *		+ 0x7A - 122 : FIRMWARE_UPDATE_MD		V1 V2
 *		+ 0xEF - 239 : MARK  					V1
 ******************************************************************************************************************************/

/******************************************************************************************************************************
 *	List of Known Bugs / Oddities / Missing Features :
 *		- valueTitle does not show displayNames on mobile Dashboard/Things page;
 *		  attempted workaround using : valueTile(){unit:'${displayName}') failed
 *		- valueTile behaves differently on mobile Dashboard (interpolated colors) from Simulator (step-wise colors)
 *		- using Preferences values instead of hard-coded values for some parameters would be nicer
 *****************************************************************************************************************************/

metadata {
	definition (name: "JJ's Fibaro FGK-101 Handler", namespace: "JJG2014", author: "Jean-Jacques GUILLEMAUD") {
		capability "Contact Sensor"
		capability "Battery"
		capability "Configuration"
		capability "Temperature Measurement"
		capability "Sensor"
		capability "Alarm"
        
        command "reportNext", ["string"]
        command "test"

        
        attribute "reportASAP", "number"
        attribute "deviceTime", "number"

        // FGK-101 Raw Description [EndPoint:0] : "0 0 0x2001 0 0 0 c 0x30 0x9C 0x60 0x85 0x72 0x70 0x86 0x80 0x84 0x7A 0xEF 0x2B"
		fingerprint deviceId: "0x2001", inClusters: "0x30, 0x60, 0x70, 0x72, 0x80, 0x84, 0x85, 0x9C"  // should include "0x20, 0x31" too ?!!
	}
	preferences {
		input "debugLevel", "enum", title: "<b>Debug Level?</b>", options: ["1","2"], defaultValue: "2", required: true
   		input name:"wakeUpInterval", type:"number", title: "<b>Wakeup Interval?</b>", description:"minutes", defaultValue:60, range: "0..255", required: true
		input name:"sensorOffset", type:"decimal", title:"<b>Sensor Temperature Offset</b>", description:"degrees", defaultValue:0.0, range: "-20..20"
    }
}

def test() {
    parse("zw device: 14, command: 8407, payload: , isMulticast: false")
    parse("zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 0B 79 , isMulticast: false")
    parse("zw device: 16, command: 2001, payload: 00 , isMulticast: false")
    parse("zw device: 16, command: 3003, payload: 00 , isMulticast: false")
    parse("zw device: 14, command: 7006, payload: 0F 01 00 , isMulticast: false")
    parse("zw device: 14, command: 9C02, payload: 14 00 FF 00 00 , isMulticast: false")
    parse("zw device: 14, command: 9C02, payload: 14 00 00 00 00 , isMulticast: false")
    parse("zw device: 16, command: 600D, payload: 02 02 31 05 01 44 00 00 05 79 , isMulticast: false")    
}

////////////////////////////////
// parse events into attributes
////////////////////////////////
def parse(String description) {
		state.parseCount=state.parseCount+1
		if (debugLevel>=1) {log.debug "--------------------------Parsing... ; state.parseCount: ${state.parseCount}--------------------------"}
		if (debugLevel>=2) {log.debug "Parsing... '${description}'"}
        def result = null
        def cmd = zwave.parse(description, [0x20:1, 0x30:1, 0x31:2, 0x56:1, 0x60:3, 0x70:2, 0x72:2, 0x80:1, 0x84:2, 0x85:2, 0x9C:1])
        if (cmd) {
                result = zwaveEvent(cmd)
                if (debugLevel>=1) {log.debug "Parsed ${cmd} to ${result.inspect()}"}
        } else {
                log.debug "Non-parsed event: ${description}"
        }
        return result
}


def temperatureScaleFC(tempvalue) {
	//FGK-101 is natively °C; convert to °F if selected in settings
	def float tempFC = tempvalue
	if (location.temperatureScale == "F") {
		tempFC = tempvalue * 1.8 + 32
	}
	return tempFC
}

def wakeUpResponse(cmdBlock) {
	//Initialization... (executed only once, when the Handler has been updated)
    //All untouched parameters are supposed to be DEFAULT (as factory-set)
    if (state.isInitialized == false) {
    	if (debugLevel>=2) {log.debug "state.isInitialized : ${state.isInitialized}"}
        cmdBlock << zwave.wakeUpV2.wakeUpIntervalSet(seconds:wakeUpInterval*60, nodeid:zwaveHubNodeId).format() // NB : may have to wait 60mn for that value to be refreshed !
        cmdBlock << "delay 1200"
        // NOTE : any asynchronous temperature query thru SensorMultilevelGet() does NOT reset the delta-Temp base value (managed by DS18B20 hardware)
        // Adjust temperature report sensitivity for outside thermometers whose displayName starts with "*"
        def byte tempQuantumSixteenth
    	if (device.displayName.substring(0,1).equals("*")) {
        	tempQuantumSixteenth = 16	/* 16/16=1°C = 1.8°F */
        } else {
        	tempQuantumSixteenth = 5	/* 5/16=0.31°C = 0.56°F */
        }
        cmdBlock << zwave.configurationV2.configurationSet(parameterNumber: 12/*for FGK101*/, size: 1, configurationValue: [tempQuantumSixteenth]).format()
        cmdBlock << "delay 1200"     
        // inclusion of Device in Association#3 is needed to get delta-Temperature notification messages [cf Parameter#12 above]
        cmdBlock << zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format()
        cmdBlock << "delay 1200"
        // inclusion of Device in Association#2 is needed to enable SensorAlarmReport() Command [anti-Tampering protection]
        cmdBlock << zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format()
        cmdBlock << "delay 1200"
        // inclusion of Device in Association#4 is needed for backward compatibility with non Z-Wave+ controlers
        cmdBlock << zwave.associationV2.associationSet(groupingIdentifier:4, nodeId:[zwaveHubNodeId]).format()
        cmdBlock << "delay 1200"
        // inclusion of Device in Association#5 is needed for backward compatibility with non Z-Wave+ controlers
        cmdBlock << zwave.associationV2.associationSet(groupingIdentifier:5, nodeId:[zwaveHubNodeId]).format()
        cmdBlock << "delay 1200"
        state.isInitialized = true
        if (debugLevel>=2) {log.debug "state.isInitialized : ${state.isInitialized}"}
    }
    
	//Regular Commands...
    def long nowTime = new Date().getTime()
    // Next line needed because "update()" does not seem to work anymore
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 day
    if (nowTime-state.lastReportBattery > state.batteryInterval) {
		cmdBlock << zwave.batteryV1.batteryGet().format()
        cmdBlock << "delay 1200"
        //next 2 lines redondant since any open/closed status change is asynchronously notified... but useful in case of missing basicSet notification
    	cmdBlock << zwave.basicV1.basicGet().format()
    	cmdBlock << "delay 1200"
    }

    cmdBlock << zwave.wakeUpV2.wakeUpIntervalGet().format() // NB : may have to wait 60mn for that value to be refreshed !
    cmdBlock << "delay 1200"
    cmdBlock << zwave.multiChannelV3.multiChannelCmdEncap(sourceEndPoint: 2, destinationEndPoint: 2, commandClass:0x31/*Sensor Multilevel*/, command:4/*Get*/).format()
    cmdBlock << "delay 1200"
    cmdBlock << zwave.wakeUpV2.wakeUpNoMoreInformation().format()
    cmdBlock << "delay 2000"
    if (debugLevel>=2) {
        log.debug "wakeUpNoMoreInformation()"
        log.debug "cmdBlock : ${cmdBlock}"
    }
    return cmdBlock
}

def zwaveEvent(hubitat.zwave.commands.wakeupv2.WakeUpNotification cmd) {
		// IMPORTANT NOTE : when the batteryLevel becomes too low, Device reports become erratic, all periodic wakeUpNotifications stop
        // and consequently BATTERYLEVEL IS NOT UPDATED ANYMORE every 24 hours, continuing to display the last (and obsolete) reported value.
        // Curiously, asynchronous sensorMultilevelReports continue to arrive, for some time, making the Device look (partially) "alive"
    	if (debugLevel>=2) {log.debug "wakeupv2.WakeUpNotification $cmd"}
        def event = sendEvent(descriptionText: "${device.displayName} woke up", isStateChange: true, displayed: false)
        def cmdBlock = []
        cmdBlock=wakeUpResponse(cmdBlock)
        return [event, response(cmdBlock)]
}

def zwaveEvent(hubitat.zwave.commands.sensormultilevelv2.SensorMultilevelReport cmd) {
	// IMPORTANT NOTE : when the batteryLevel becomes too low, Device reports become erratic, all periodic wakeUpNotifications stop
	// and consequently BATTERYLEVEL IS NOT UPDATED ANYMORE every 24 hours, continuing to display the last (and obsolete) reported value.
	// Curiously, asynchronous sensorMultilevelReports continue to arrive, for some time, making the Device look (partially) "alive"
	// This section resets the displayed battery level to 1% when the battery level is obsolete by more than 48h.
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 day
    def long nowTime = new Date().getTime()
    if (nowTime-state.lastReportBattery > 3*state.batteryInterval) {  // reset batteryLevel to 1% if no update for 48-72 hours
    	log.debug "obsolete (likely low) battery value : ${((nowTime-state.lastReportBattery)/3600000)} hours old"
        sendEvent(name: "battery", displayed: true, isStateChange:true, unit: "%", value: 1, descriptionText: "${device.displayName} has a low battery")
	    state.lastReportBattery = nowTime
	}
			//  Dirty temporary recovery fix for remote Devices which lost wakeUp capability but still get asynchromous SensorMultilevelReports
			//  Forcing with the magnet a close/open transition after replacing the battery should (in most cases...) restore wakeUps
                //def cmdBlock = []
        		//cmdBlock=wakeUpResponse(cmdBlock)
        		//return [response(cmdBlock)]
        		//configure()
        def float scaledSensorValue = cmd.scaledSensorValue
        // Adjust measured temperature based on previous manual calibration; FGK-101 is natively °C
        switch (device.name) {
            case 'T005' :										//JJG	
            	scaledSensorValue = scaledSensorValue + 0.0554
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T006' :										//MLE
            	scaledSensorValue = scaledSensorValue + 0.0297
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T003' :										//MPT
            	scaledSensorValue = scaledSensorValue - 0.0603
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T002' :										//NBN	
            	scaledSensorValue = scaledSensorValue - 0.0758
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T004' :										//SCU
            	scaledSensorValue = scaledSensorValue + 0.0011
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T007' :										//FSU
            	scaledSensorValue = scaledSensorValue + 0.0025
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T008' :										
            	scaledSensorValue = scaledSensorValue - 0.0146
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T009' :										
            	scaledSensorValue = scaledSensorValue + 0.0383
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T010' :										
            	scaledSensorValue = scaledSensorValue + 0.0383
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T011' :										
            	scaledSensorValue = scaledSensorValue - 0.0889
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T012' :										
            	scaledSensorValue = scaledSensorValue - 0.0532
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T013' :										
            	scaledSensorValue = scaledSensorValue + 0.0383
    			log.debug "Temp Adjust for : ${device.name}"
                break;
            case 'T014' :										//*ext*//
            	scaledSensorValue = scaledSensorValue - 0.0160
    			log.debug "Temp Adjust for : ${device.name}"
                break;
        }
    
        scaledSensorValue = scaledSensorValue + 1.0*sensorOffset 
    
        //Round to nearest 1 decimal temperature value; convert to °F if needed
        def float ftempSign = temperatureScaleFC(scaledSensorValue) < 0 ? -1 : +1
		def float ftemp = ftempSign * ((((temperatureScaleFC(scaledSensorValue).abs()*100+5)/10).intValue()*1.0)/10)
        if (debugLevel>=2) {
        	log.debug "ftempSign : ${ftempSign}"
        	log.debug "ftemp : ${ftemp}"
        }
        // Next line needed because "update()" does not seem to work anymore
    	state.maxEventInterval = (long) (4*60-10)*60*1000  // at least 1 Temperature Report event every 4 hours
        nowTime = new Date().getTime()
        if (debugLevel>=2) {
        	log.debug "cmd.scaledSensorValue : ${cmd.scaledSensorValue}"
        	log.debug "correction : ${scaledSensorValue-cmd.scaledSensorValue}"
    		log.debug "device.displayName : ${device.displayName}"
    		log.debug "'Date().getTime()' : ${new Date().getTime()}"
            log.debug "state.forcedWakeUp : ${state.forcedWakeUp}"
            log.debug "state.maxEventInterval : ${state.maxEventInterval}"
    		log.debug "state.lastReportTime : ${state.lastReportTime}"
    		log.debug "nowTime : ${nowTime}"
    		log.debug "(nowTime-state.lastReportTime > state.maxEventInterval) : ${(nowTime-state.lastReportTime > state.maxEventInterval)}"
    		log.debug "ftemp : ${ftemp}"
            log.debug "state.lastReportedTemp: ${state.lastReportedTemp}"
        }
        // Adjust temperature report sensitivity for outside thermometers whose displayName starts with "*"
        def float tempQuantum
    	if (device.displayName.substring(0,1).equals("*")) {
        	tempQuantum = temperatureScaleFC(0.9999)-temperatureScaleFC(0)
        } else {
        	tempQuantum = temperatureScaleFC(0.2999)-temperatureScaleFC(0)
        }
        log.debug "((ftemp-state.lastReportedTemp).abs()>${tempQuantum}): ${(ftemp-state.lastReportedTemp).abs()>tempQuantum}"
        if (((ftemp-state.lastReportedTemp).abs()>tempQuantum) || ((nowTime-state.lastReportTime) > state.maxEventInterval) || state.forcedWakeUp) {
        	def map = [ displayed: true, value: ftemp.toString(), isStateChange:true, linkText:"${device.displayName}" ]
        	switch (cmd.sensorType) {
                case 1:
                        map.name = "temperature"
                        map.unit = cmd.scale == 1 ? "F" : "C"
                        //ignores Device's native temperature scale, ftemp already converted to °F if settings as such
                        map.unit = location.temperatureScale
                        log.debug "map.value : ${map.value}"
                        log.debug "map.unit : ${map.unit}"
                        break;
        	}
			if (debugLevel>=2) {
        		log.debug "temperature Command : ${map.inspect()}"
        	}
        	state.lastReportedTemp = ftemp
            state.lastReportTime = nowTime
            state.forcedWakeUp = false
            // For Test purpose; redondant with reportNext() => state.forcedWakeUp=1
            if (device.currentValue('reportASAP')==1) {sendEvent(name: "reportASAP", value: 0, isStateChange: true)}
        	return sendEvent(map)
        }
}

def sensorValueEvent(value) {
	if (value) {
		sendEvent(name: "contact", value: "open", descriptionText: "$device.displayName is open")
	} else {
		sendEvent(name: "contact", value: "closed", descriptionText: "$device.displayName is closed")
	}
}

// BasicReport should not be necessary since all status change notifications are asynchronous via BasicSet
// But useful as defensive programming, in case of missed notifications, to make sure latest change has been properly reported and registered
def zwaveEvent(hubitat.zwave.commands.basicv1.BasicReport cmd) {
	sensorValueEvent(cmd.value)
    if (debugLevel>=2) {log.debug "basicv1.BasicReport $cmd.value"}
    def cmdValue = cmd.value
	return openClosed(cmd, cmdValue)
}

// To check that WakeUpInterval does not revert to 1mn instead of 1h
def zwaveEvent(hubitat.zwave.commands.wakeupv2.WakeUpIntervalReport cmd) {
    if (debugLevel>=2) {log.debug "WakeUpIntervalReport $cmd"}
    if (cmd.seconds!=wakeUpInterval*60) {
    	def result = sendEvent(name:"WakeUpIntervalReport", descriptionText:"${device.displayName} had ${cmd.seconds} seconds wakeUp period", isStateChange:true, displayed:true, linkText:"${device.displayName}")
   		configure()
    }
    return result
}

def openClosed(cmd, cmdValue) {
    def theState = cmdValue == 0 ? "closed" : "open"
    if (debugLevel>=2) {log.debug "openClosed $cmd"}
    // Use closed/open sensor notification to trigger push of updated Temperature value and immediate setting of updated device parameters
    // Sometimes, Temperature forced refresh stops working : SensorMultilevelGet() Commands are stacked but not executed immediately;
    // will restart after some time, and stacked Commands will be executed !
    def event = sendEvent(name:"contact", value:"${theState}", descriptionText:"${device.displayName} is ${theState}", isStateChange:true, displayed:true, linkText:"${device.displayName}")
    state.forcedWakeUp = true
    def cmdBlock = []
    cmdBlock=wakeUpResponse(cmdBlock)
    return [event, response(cmdBlock)]
}
    
def zwaveEvent(hubitat.zwave.commands.basicv1.BasicSet cmd) {
    if (debugLevel>=2) {log.debug "basicv1.BasicSet $cmd"}
    def cmdValue = cmd.value
	return openClosed(cmd, cmdValue)
}

// SensorBinaryReport should never occur since all status change notifications are asynchronous via BasicSet
def zwaveEvent(hubitat.zwave.commands.sensorbinaryv1.SensorBinaryReport cmd) {
    if (debugLevel>=2) {log.debug "sensorbinaryv1.SensorBinaryReport $cmd"}
    def cmdValue = cmd.sensorValue
	return openClosed(cmd, cmdValue)
}

def zwaveEvent(hubitat.zwave.commands.sensoralarmv1.SensorAlarmReport cmd) {
	//def event = sensorValueEvent(cmd.sensorState)
    if (debugLevel>=2) {log.debug "sensoralarmv1.SensorAlarmReport $cmd.sensorState"}
    def event = sendEvent(name:"alarm", descriptionText:"${device.displayName} is tampered with !", isStateChange:true, displayed:true, linkText:"${device.displayName}")
    def cmdBlock = []
    state.forcedWakeUp = true
    cmdBlock=wakeUpResponse(cmdBlock)
    return [event, response(cmdBlock)]
}


def zwaveEvent(hubitat.zwave.commands.batteryv1.BatteryReport cmd) {
    // Next line needed because "update()" does not seem to work anymore
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 day
    def long nowTime = new Date().getTime()
    if (debugLevel>=2) {
    	log.debug "batteryv1.BatteryReport ${cmd.batteryLevel}"
    	log.debug "nowTime : ${nowTime}"
    	log.debug "state.lastReportBattery : ${state.lastReportBattery}"
    	log.debug "state.batteryInterval : ${state.batteryInterval}"
        log.debug "state.forcedWakeUp : ${state.forcedWakeUp}"
    }
    if ((nowTime-state.lastReportBattery > state.batteryInterval) || state.forcedWakeUp) {
		def map = [ name: "battery", displayed: true, isStateChange:true, unit: "%" ]
		if (cmd.batteryLevel == 0xFF) {
			map.value = 1
			map.descriptionText = "${device.displayName} has a low battery"
			map.isStateChange = true
		} else {
			map.value = cmd.batteryLevel
		}
    	state.lastReportBattery = nowTime
        log.debug "battery map : ${map}"
    	return [sendEvent(map)]
    }
}

def zwaveEvent(hubitat.zwave.commands.configurationv2.ConfigurationReport cmd) {
    if (debugLevel>=2) {log.debug "ConfigurationReport - Parameter#${cmd.parameterNumber}: ${cmd.configurationValue}"}
}

def zwaveEvent(hubitat.zwave.commands.multichannelv3.MultiChannelEndPointReport cmd) {
    if (debugLevel>=2) {log.debug "multichannelv3.MultiChannelCapabilityReport: ${cmd}"}
}

def zwaveEvent(hubitat.zwave.commands.multichannelv3.MultiChannelCapabilityReport cmd) {
    if (debugLevel>=2) {log.debug "multichannelv3.MultiChannelCapabilityReport: ${cmd}"}
}
 
def zwaveEvent(hubitat.zwave.commands.versionv1.VersionReport cmd) {
    if (debugLevel>=2) {log.debug "versionv1.VersionReport: ${cmd}"}
}
 
// MultiChannelCmdEncap and MultiInstanceCmdEncap are ways that devices can indicate that a message
// is coming from one of multiple subdevices or "endpoints" that would otherwise be indistinguishable
def zwaveEvent(hubitat.zwave.commands.multichannelv3.MultiChannelCmdEncap cmd) {
        def encapsulatedCommand = cmd.encapsulatedCommand([0x30: 1, 0x31: 2]) // can specify command class versions here like in zwave.parse
        if (debugLevel>=2) {log.debug ("Command from endpoint ${cmd.sourceEndPoint}: ${encapsulatedCommand}")}
        if (encapsulatedCommand) {
                return zwaveEvent(encapsulatedCommand)
        }
}

// Catch All command Handler in case of unexpected message
def zwaveEvent(hubitat.zwave.Command cmd) {
	sendEvent(descriptionText: "!!! $device.displayName: ${cmd}", displayed: false)
}

// When a Temperature Event got lost in transit, the Watchdog requests a forced report at next wake up
// The "reportNext()" alarm command is used to signal back from the Watchdog SmartApp to the sleepy Device Handler
def reportNext(commandMsg) {
	log.debug "reportNext !"
    log.debug "commandMsg : ${commandMsg}"
    state.forcedWakeUp = true
		// IMPORTANT NOTE : when the batteryLevel becomes too low, Device reports become erratic, all periodic wakeUpNotifications stop
        // and consequently BATTERYLEVEL IS NOT UPDATED ANYMORE every 24 hours, continuing to display the last (and obsolete) reported value.
        // Curiously, asynchronous sensorMultilevelReports continue to arrive, for some time, making the Device look (partially) "alive"
    	// This section resets the displayed battery level to 1% when the battery level is obsolete by more than 48h.
	// Next line may be needed because "update()" does not seem to work reliably anymore
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 day
    def long nowTime = new Date().getTime()
    if (nowTime-state.lastReportBattery > 3*state.batteryInterval) {  // reset batteryLevel to 1% if no update for 48-72 hours
    	log.debug "obsolete (likely low) battery value : ${((nowTime-state.lastReportBattery)/3600000)} hours old"
        sendEvent(name: "battery", displayed: true, isStateChange:true, unit: "%", value: 1, descriptionText: "${device.displayName} has a low battery")
	    state.lastReportBattery = nowTime
	}
	return []
}

///////////////////
// For Tests Purpose
///////////////////

// Executed each time the Handler is updated
def updated() {
	log.debug "Updated !"
    // All state.xxx attributes are Device-local, NOT Location-wide
    state.isInitialized = false
    state.lastReportedTemp = (float) -1000
    state.lastReportTime = (long) 0
    state.lastReportBattery = (long) 0
	// Real-time clock of sensors (ceramic resonator) is up to 3% inaccurate
    state.batteryInterval = (long) (24*60-45)*60*1000  // 1 Battery Report event every 24 hours, rounded up to the nearest hourly wakeup
    state.maxEventInterval = (long) (4*60-10)*60*1000  // at least 1 Temperature Report event every 3:50 hours
    state.parseCount=(int) 0
    state.forcedWakeUp = true
    if (!(state.deviceID)) {state.deviceID = device.name}
    log.debug "state.deviceID: ${state.deviceID}"
    log.debug "state.batteryInterval : ${state.batteryInterval}"
    log.debug "state.maxEventInterval : ${state.maxEventInterval}"
    // For Test purpose; redondant with reportNext() => state.forcedWakeUp=1
    sendEvent(name: "reportASAP", value: 1, isStateChange: true)
    log.debug "device.currentValue('reportASAP') : ${device.currentValue('reportASAP')}"

    infos()
}


// If you add the Configuration capability to your device type, this command will be called right
// after the device joins to set device-specific configuration commands.
def configure() {
	log.debug "Configuring..."
    // Adjust temperature report sensitivity for outside thermometers whose displayName starts with "*"
    def byte tempQuantumSixteenth
    log.debug "device.displayName.substring(0,1) : ${device.displayName.substring(0,1)}"
    if (device.displayName.substring(0,1).equals("*")) {
    	tempQuantumSixteenth = 16	/* 16/16=1°C = 1.8°F */
    } else {
    	tempQuantumSixteenth = 5	/* 5/16=0.31°C = 0.56°F */
    }
    log.debug "tempQuantumSixteenth : ${tempQuantumSixteenth}"
	delayBetween([
		// Make sure sleepy battery-powered sensors send their WakeUpNotifications to the hub
		zwave.wakeUpV2.wakeUpIntervalSet(seconds:wakeUpInterval*60, nodeid:zwaveHubNodeId).format(),
		// NOTE : any asynchronous temperature query thru SensorMultilevelGet() does NOT reset the delta-Temp base value (managed by DS18B20 hardware)
		zwave.configurationV2.configurationSet(parameterNumber: 12/*for FGK101*/, size: 1, configurationValue: [tempQuantumSixteenth]).format(),
        // inclusion of Device in Association#3 is needed to get delta-Temperature notification messages [cf Parameter#12 above]
        zwave.associationV2.associationSet(groupingIdentifier:3, nodeId:[zwaveHubNodeId]).format(),
        // inclusion of Device in Association#2 is needed to enable SensorAlarmReport() Command [anti-Tampering protection]
        zwave.associationV2.associationSet(groupingIdentifier:2, nodeId:[zwaveHubNodeId]).format(),
        // get zwave version information
        zwave.versionV1.versionGet().format()
	],1200)
}

def infos() {
	if (!state.devices) { state.devices = [:] }
    log.debug "zwaveHubNodeId: ${zwaveHubNodeId}"					// -> "1"
    log.debug "device.displayName: ${device.displayName}"			// -> "JJG"
    log.debug "device.id: ${device.id}"							// -> "75841488-ae76-4cac-b523-a2694e72c25a"
    log.debug "device.name: ${device.name}"						// -> "T001"
    log.debug "device.label: ${device.label}"						// -> "JJG"
    log.debug "device.data: ${device.data}"   					// -> "[endpointId:0, version: 2.1, MSR:010F-0700-2000]"
    //log.debug "'device.rawDescription': ${device.rawDescription}"	// -> "0 0 0x2001 0 0 0 c 0x30 0x9C 0x60 0x85 0x72 0x70 0x86 0x80 0x84 0x7A 0xEF 0x2B"
}

1 Like

Hi @christi999 and @denwood,

I'm following this thread with great attention as I have the same issue with the same device. Big thank you to @christi999 for putting in time and effort to fix our issue.
I installed the latest code from @christi999 and hurray, getting a temp reading for the first time!

Few things I noticed:

  • first time, the wakeUp interval was not defined in code (although the field contained "60"). This caused multiply by null errors. Solved after saved the preferences. This is an easy one and not blocking.
dev:5762022-09-21 15:18:11.607 errorjava.lang.NullPointerException: Cannot invoke method multiply() on null object on line 359 (method parse)
dev:5762022-09-21 15:17:35.778 errorjava.lang.NullPointerException: Cannot invoke method multiply() on null object on line 525 (method configure)
  • multiple open/close events per physical open/close
contact	closed		Zwembad temperatuur is closed	DEVICE		2022-09-21 15:33:43.167 CEST
contact	closed		Zwembad temperatuur is closed	DEVICE		2022-09-21 15:33:43.120 CEST
contact	open		Zwembad temperatuur is open	DEVICE		2022-09-21 15:33:39.505 CEST
contact	open		Zwembad temperatuur is open	DEVICE		2022-09-21 15:33:38.047 CEST
contact	open		Zwembad temperatuur is open	DEVICE		2022-09-21 15:33:33.045 CEST
contact	open		Zwembad temperatuur is open	DEVICE		2022-09-21 15:33:32.989 CEST
  • temp reporting is not updating from the initial read of 21.8 (scaledSensorValue: 21.75) which is about right. I keep getting the same reading for both interval and manual wakeup.
dev:5762022-09-21 15:21:17.847 debugCommand from endpoint 2: SensorMultilevelReport(precision:2, scale:0, sensorType:1, sensorValue:[0, 0, 8, 127], size:4, scaledSensorValue:21.75)
  • a LOT of log messages - this is good when debugging of course :wink:

Thanks so much for your support @christi999 ! :pray:

1 Like

I am seeing temp readings in the Event logs, but only reported after a temp change...which is great :slight_smile:

They are most likely sent by the device (basicSet+SensorBinaryReport maybe). Post the corresponding logs so we can see what triggers them. Maybe this can be controlled by the device settings, which I think should be exposed in the device preferences.

1 Like