For example sending 0x31 0x05 0x01 0x01 0x17 to the device is supposed to display 23 °C as the outdoor temperature. Question 1: How can I send a raw output like that through HA?
I tried to understand a bit of the payload, but there are some constants I am not too sure what they mean:
0x31 : Constant 0x05 : Constant 0x01 : Constant (seems to indicate it is a temperature?) 0x01 : 3 bits to indicate the float precision - 2 bit for the unit (0=°C, 1=°F) - 3 bits for the size (bytes) of the value 0x17 : The value. This can span multiple bytes for .1 precision. Negatives seem to use the 4 MSB and positives the 4 LSB?
Question 2: is it possible to do that with a proper OZW xml config or am I gonna need to replicate the logic in my automation?
An xml config file will not help you here. The xml file is used to define configuration parameters. You are trying to send a Multilevel Sensor Report command to the node from the controller, which OZW does not support. There is a Github issue with an explanation. However, In OZW 1.6 (HA uses 1.4), there is the ability to send raw commands to a node. Maybe that gives you the capability to construct your own Multilevel Sensor Report command manually.
The description of the Multilevel Sensor command is described in document SDS13781. The list of sensor types and values is in document SDS13812.
Sorry to revive this old thread, is this problem solved now in 2021? I’m looking to switch from Vera Lite to Home Assistant soon and I have 10 of these thermostats in my home.
Here’s the automation code I’m using to push temperature from a sensor to the thermostats (I have three of them at the moment) in my house as exterior temperature. The thermostats resolve to 1/2 increments. (Eg: 1.2 = 1.5, 2.9 = 3.0, etc)
I set up zwavejs2mqtt rather than the native zwavejs as it allows for these commands to be sent.
Does anybody know a way to update the outdoor temperature value with ZwaveJS2MQTT / Home-Assistant, but without the service “mqtt.publish”? I’m not sure why it’s not available in my setup and I never used MQTT before so I’d like to believe there’s a way without it right?
Copy and paste that service code into the Services Dev Tools. Then use the target selector to choose your device or entity.
For parameters, 1 is the sensor type (1 == temperature), 0 is the scale (0 == Celsius, 1 == Fahrenheit), 20 is the temperature values (20 degrees Celsius in the above example).
wow thank you so much for the fast reply!
I know there is a ZwaveJS DB for parameters such as theses (Z-Wave JS Config DB Browser) , but it isn’t very populated for this device. Mind sharing where you got access to such info for this thermostat? I’d gladly help filling the fields if I knew what they were. Thanks again for you time
Most of the information came from the original post. See my reply in the second post, which explained what needed to be done. That was almost three years ago, since then Z-Wave JS has come along and it implements the missing functionality that OZW did not want to do, which is the ability to send Multilevel Sensor Reports to end devices from the controller.
The integration supports the invoke_cc_api service call, which is a layer on top of the driver’s CC API. The CC API lets you call other methods that aren’t directly supported by the HA entities. In short, it’s a more advanced API for application developers, but it’s exposed for advanced usage in HA (and zwavejs2mqtt). The CC API for Multilevel Sensor CC supports the sendReport function. You can see the required parameters, sensor type, scale and value. This function sends a Z-Wave Multilevel Sensor Report Command to the given node using those parameters. This command is standardized, and nothing specific to the thermostat. It takes a little understanding of the driver code and z-wave commands to fully understand though.
The HA service call code I posted is also a literal translation of the MQTT code used earlier. HA’s invoke_cc_api and z2m’s sendCommand are essentially the same thing.