Zooz ZSE40 Temperature Channel Always Celsius


As the subject states, my sensor will only display Celsius.

Here’s what I have:
openHAB 2.1.0 - release build
2 ZSE40 sensors, 1 uses the “ZSE40 4-in-1 Sensor” handler (problematic) and the other sensor uses the “ZSE40 Zooz 4-in-one motion/temperature/humidity/luminance sensor” (works as advertised).
Latest Z-Wave snapshot -

For troubleshooting I loaded a clean install of openHAB with no items or rules, only Z-Wave controller and the affected ZSE40 with the latest Z-Wave snapshot - The same results, only Celsius and errors when trying to toggle to Fahrenheit.

You can see the sensor reports in Fahrenheit but then converts to Celsius. If I change the channel to use Fahrenheit via PaperUI I will get “Error 500: Internal Server Error”. When using HABmin to change the temperature channel, no errors but the change will not stick and display Celsius on reload.

DEBUG log for the sensor stuck on Celsius:

14:14:33.403 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 11: Incoming command class SENSOR_MULTILEVEL
14:14:33.403 [DEBUG] [ss.ZWaveMultiLevelSensorCommandClass] - NODE 11: Received COMMAND_CLASS_SENSOR_MULTILEVEL command V7
14:14:33.403 [DEBUG] [ss.ZWaveMultiLevelSensorCommandClass] - NODE 11: Sensor Multi Level REPORT received
14:14:33.403 [DEBUG] [ss.ZWaveMultiLevelSensorCommandClass] - NODE 11: Sensor Type = Temperature(1), Scale = 1
14:14:33.404 [DEBUG] [ss.ZWaveMultiLevelSensorCommandClass] - NODE 11: Sensor Value = 74.77
14:14:33.404 [DEBUG] [ve.internal.protocol.ZWaveController] - Notifying event listeners: ZWaveMultiLevelSensorValueEvent
14:14:33.404 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 11: Got an event from Z-Wave network: ZWaveMultiLevelSensorValueEvent
14:14:33.404 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 11: Got a value event from Z-Wave network, endpoint = 0, command class = SENSOR_MULTILEVEL, value = 74.77
14:14:33.404 [DEBUG] [erter.ZWaveMultiLevelSensorConverter] - NODE 11: Sensor is reporting scale 1, requiring conversion to 0. Value is now 74.77.
14:14:33.405 [DEBUG] [converter.ZWaveCommandClassConverter] - Converted temperature from 74.77F to 23.8C
14:14:33.405 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 11: Updating channel state zwave:device:da88d044:node11:sensor_temperature to 23.8 [DecimalType]
14:14:33.405 [DEBUG] [.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: Sent Message: class=SendData[0x13], type=Request[0x00], priority=Immediate, dest=11, callback=75, payload=0B 02 84 08 
14:14:33.405 [DEBUG] [.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: Recv Message: class=ApplicationCommandHandler[0x04], type=Request[0x00], priority=High, dest=255, callback=0, payload=00 0B 06 31 05 01 4A 1D 35 
14:14:33.406 [DEBUG] [.serialmessage.ZWaveCommandProcessor] - Checking transaction complete: class=ApplicationCommandHandler, callback id=75, expected=SendData, cancelled=false      MISMATCH
14:14:33.464 [DEBUG] [WaveSerialHandler$ZWaveReceiveThread] - Receive Message = 01 0C 00 04 00 0B 06 31 05 05 42 12 E9 72 
14:14:33.464 [DEBUG] [ve.internal.protocol.ZWaveController] - Receive queue TAKE: Length=0
14:14:33.465 [DEBUG] [wave.internal.protocol.SerialMessage] - Assembled message buffer = 01 0C 00 04 00 0B 06 31 05 05 42 12 E9 72 
14:14:33.465 [DEBUG] [ve.internal.protocol.ZWaveController] - Process Message = 01 0C 00 04 00 0B 06 31 05 05 42 12 E9 72 
14:14:33.466 [DEBUG] [ve.internal.protocol.ZWaveController] - Message: class=ApplicationCommandHandler[0x04], type=Request[0x00], priority=High, dest=255, callback=0, payload=00 0B 06 31 05 05 42 12 E9 
14:14:33.466 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 11: Application Command Request (ALIVE:DONE)
14:14:33.466 [DEBUG] [alization.ZWaveNodeInitStageAdvancer] - NODE 11: Starting initialisation from DONE
14:14:33.466 [DEBUG] [ve.internal.protocol.ZWaveController] - Event Listener org.openhab.binding.zwave.internal.protocol.initialization.ZWaveNodeInitStageAdvancer@3d2c4628 already registered

Also the ALARM command class is throwing an error:
15:02:13.276 [DEBUG] [ssage.ApplicationCommandMessageClass] - NODE 11: Incoming command class ALARM
15:02:13.276 [DEBUG] [.commandclass.ZWaveAlarmCommandClass] - NODE 11: Received ALARM command V4
15:02:13.276 [DEBUG] [.commandclass.ZWaveAlarmCommandClass] - NODE 11: Process NOTIFICATION_REPORT V4
15:02:13.276 [DEBUG] [.commandclass.ZWaveAlarmCommandClass] - NODE 11: NOTIFICATION report - 7 = 255, event=8, status=255
15:02:13.276 [DEBUG] [.commandclass.ZWaveAlarmCommandClass] - NODE 11: Alarm Type = BURGLAR (7)
15:02:13.276 [DEBUG] [ve.internal.protocol.ZWaveController] - Notifying event listeners: ZWaveAlarmValueEvent
15:02:13.276 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 11: Got an event from Z-Wave network: ZWaveAlarmValueEvent
15:02:13.276 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 11: Got a value event from Z-Wave network, endpoint = 0, command class = ALARM, value = 255
15:02:13.276 [DEBUG] [ternal.converter.ZWaveAlarmConverter] - Alarm converter processing NOTIFICATION
15:02:13.277 [ERROR] [ve.internal.protocol.ZWaveController] - Exception during ZWave thread: Input 2. {}
java.lang.IllegalArgumentException: No enum constant org.openhab.binding.zwave.internal.protocol.commandclass.ZWaveAlarmCommandClass.AlarmType.MOTION
	at java.lang.Enum.valueOf(Enum.java:238)[:1.8.0_131]
	at org.openhab.binding.zwave.internal.protocol.commandclass.ZWaveAlarmCommandClass$AlarmType.valueOf(ZWaveAlarmCommandClass.java:1)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.converter.ZWaveAlarmConverter.handleNotificationReport(ZWaveAlarmConverter.java:144)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.converter.ZWaveAlarmConverter.handleEvent(ZWaveAlarmConverter.java:109)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.handler.ZWaveThingHandler.ZWaveIncomingEvent(ZWaveThingHandler.java:1099)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.protocol.ZWaveController.notifyEventListeners(ZWaveController.java:567)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.protocol.commandclass.ZWaveAlarmCommandClass.processNotificationReport(ZWaveAlarmCommandClass.java:194)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.protocol.commandclass.ZWaveAlarmCommandClass.handleApplicationCommandRequest(ZWaveAlarmCommandClass.java:124)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.protocol.serialmessage.ApplicationCommandMessageClass.handleRequest(ApplicationCommandMessageClass.java:119)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.protocol.ZWaveController.handleIncomingRequestMessage(ZWaveController.java:248)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.protocol.ZWaveController.handleIncomingMessage(ZWaveController.java:214)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.protocol.ZWaveController.access$7(ZWaveController.java:208)[185:org.openhab.binding.zwave:]
	at org.openhab.binding.zwave.internal.protocol.ZWaveController$ZWaveInputThread.run(ZWaveController.java:1324)[185:org.openhab.binding.zwave:]

Any help would be appreciated.

1 Like

Hi, have you made any progress on resolving this? I’m having the same issue with this device. One thing to note is this was working fine before my last openHAB2 update. I have also tried a fresh install with no joy.

Zero progress. I’ve updated to openHAB 2.2.0 Build #1073 and z-wave binding to with no luck.

I appreciate you chiming in as I was beginning to wonder if it was just my setup. Hopefully now we may get some more visibility into this issue.

I have the same problem. Bought ZSE40 this week from Amazon and device fully loaded. Tried changing the sensor item preferences and the channel preferences. Got the Service 500 error both times. Nothing in Karaf log though. Finally just did this:

((itemValue(‘Sen01_Temp’) * 9/5) + 32)

{{'%.1f °F' | sprintf: ((itemValue('Sen01_Temp') * 9/5) + 32)}}
<tr><td>Temperature</td><td><div style='text-align:right; color: #52E5E7'>{{'%.1f °F' | sprintf: ((itemValue('Sen01_Temp') * 9/5) + 32)}}</div></td></tr>

Thank you for sharing jsglazer.

also seeing this. the weird part is that it was working with fahrenheit for a long time, then ran out of battery. i think i had to futz with it a bit to get it back online after replacing the batteries, and since then it’s always been in celsius…:frowning:

I never found a way to configure the sensor to report temperature in Fahrenheit. Since I’ve recently started delving into rules, I created a rule that converts Celsius to Fahrenheit. I created a dummy item (Sen02_TempA) to accept the converted value, but you may not need to.


Number  Sen02_TempA "Shop TempA [%.1f °F]"  <temperature>


// Celcius to Fahrenheit for Sen02_Temp => Sen02_TempA
rule "Sen02_Temp_C-F"
    Item Sen02_Temp received update
    val numTemp = Sen02_Temp.state as Number
    numTemp = ((numTemp * 9/5) + 32)

I long for a more elegant solution…but until then this works. Josh

The latest development binding, which should be merged to master in a few weeks, supports UoM for temperatures, so you can have whatever scale you like :slight_smile: .

Any traction on this, I’m still seeing the values reporting in Celsius for my zse40?

Tried changing the setting from (C to F) in PaperUI and HABmin with no luck? I get an error 500 in PaperUI and HABmin shows no error but as soon as I go back and look at the variable its set back to Celsius?


This is quite an old thread, and a lot has changed since the previous posts. I’m not sure if that’s what you mean by “traction”?

I was just wondering if there is a solution to the following.

Tried changing the setting from (C to F) in PaperUI and HABmin with no luck? I get an error 500 in PaperUI and HABmin shows no error but as soon as I go back and look at the variable its set back to Celsius?

I’m not sure what you are changing? If it is the internal configuration parameter, then this has been removed and will not work on 2.4 or above. Maybe you refer to something else?

I was just looking for some help, and I was trying to change the tempature reporting from Celsius to Fahrenheit?
With either HABmin or Paper UI ???

Thanks for any help.

In the new binding, this selection has been removed as the system now uses the UoM features to automatically convert data into the units your system requires. I guess you’re using an older version - it might be worth changing to the latest snapshot or milestone release?

If you use the latest version, then the system uses the configuration you make in the locale section of the configuration.

Thanks for the update, I will look for the latest snapshot and try that…


Thanks for the help that did work!


1 Like


One other question, I do have two different ZSe40’s, one from (Vision Security and one from (zooz), I was trying to set up some rules over the weekend and I was not having much luck, I was wondering if you could confirm that my items file format looks right:

//node 4 is zooz and is the small one located in the Bedroom by (Vision Security)
Contact zwave_device_512_node4_sensor_binary “motion sensor node4 [MAP(zwave.map):%s]”
Contact zwave_device_512_node4_alarm_burglar
Number zwave_device_512_node4_sensor_luminance “motion sensor node 4 light level [%.1f]”
Number zwave_device_512_node4_sensor_relhumidity “motion sensor node 4 humidity [%.1f]”
Number zwave_device_512_node4_sensor_temperature “motion sensor node 4 temp [%.1f]”
Number zwave_device_512_node4_battery_level “motion sensor node 4 battery level [%.1f]”

//node 5 is zooz and has a bracket and is the one located in the Laundry room by (zooz)
Contact zwave_device_512_node5_alarm_motion “motion sensor node5 [MAP(zwave.map):%s]”
Contact zwave_device_512_node5_alarm_tamper
Number zwave_device_512_node5_sensor_relhumidity “motion sensor node 5 humidity [%.1f]”
Number zwave_device_512_node5_sensor_luminance “motion sensor node 5 light level [%.1f]”
Number zwave_device_512_node5_sensor_temperature “motion sensor node 5 temp [%.1f]”
Number zwave_device_512_node5_battery_level “motion sensor node 5 battery level [%.1f]”

Thanks again for any help…


If you link the items on the paperUI AND define the items in an *.items file, it won’t work. You need to do one or the other.

Remove the link in paperUI, delete the item zwave_device_512_node4_sensor_binary in the paperUI
and then in the items file do:

Contact zwave_device_512_node4_sensor_binary “motion sensor node4 [MAP(zwave.map):%s]” { channel="xxxxxxxxxxx" }

Copy and paste the channel from the paperUI to replace the xxxxxxxxxx

Where do I find the channel info in PaperUI?
Here’s what I see under Properties?

Status: ONLINE


dbReference 491
defaultAssociations 1
manufacturerId 027A
manufacturerRef 2021:2101
modelId ZSE40
vendor Zooz
zwave_beaming true
zwave_class_basic BASIC_TYPE_ROUTING_SLAVE
zwave_deviceid 8449
zwave_devicetype 8225
zwave_frequent false
zwave_lastheal 2018-11-19T08:13:09Z
zwave_lastwakeup 2018-11-19T18:21:02Z
zwave_listening false
zwave_manufacturer 634
zwave_neighbours 1
zwave_nodeid 5
zwave_plus_devicetype NODE_TYPE_ZWAVEPLUS_NODE
zwave_routing true
zwave_secure false
zwave_version 17.9