Aeotec ZW100 Temperature Calibration Value: "No message body writer has been found for class java.util.Collections$UnmodifiableMap, ContentType: */*"

The device is an Aeotec ZW100 Multisensor 6, firmware version 1.13.
openHAB version is 3.0.0.

In the Web UI on the “Thing” Tab, when I press “Save” without changing any field, then the following dialog is displayed:
image


Clicking “Ok” and scrolling down shows


(in English: “251 - the value must be smaller or equal to 127”)


When I change to value from 251 to e.g. 1 and press “Save”, then the Web UI does not complain, but the openhab logfile shows:

2021-01-02 12:43:35.685 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 63: Configuration update received
2021-01-02 12:43:35.713 [ERROR] [rg.apache.cxf.jaxrs.utils.JAXRSUtils] - No message body writer has been found for class java.util.Collections$UnmodifiableMap, ContentType: */*


Remarks:

  • 251 is the negative value -5.
  • I was able to change parameter 201 in a 2.x version of openHAB


Any help?

Thanks!
Gert

I have a theory regarding the default value for that database entry. I think it is a bug on that side.

The default value is supposed to be 0. Are you able to enter that and successfully save?

The new web UI does not let us enter that value.

Taken from the documentation of the device:
This parameter is an offset in two byte representation: the high byte is the value of the desired offset and in the low byte the unit is coded with “1” for Celsius and “2” for Fahrenheit. So there are two defaults really, “1” for european and australian devices and “2” for american devices.
The range for the parameter is -128 to 127 for the offset itself, the unit needs to be considered seperately as far as I see it and needs to be either “1” or “2”, other values are not valid.

Just did a check (have that device myself): the two halves of the parameter are seperated in the database, meaning one can set them independently in the GUI. I did two tests, one with a valid unit and another with an invalid unit and in both cases I get the same message (in events.log, not in openhab.log):

2021-01-02 14:49:31.899 [INFO ] [openhab.event.ConfigStatusInfoEvent ] - ConfigStatusInfo [configStatusMessages=[ConfigStatusMessage [parameterName=config_201_2_000000FF, type=PENDING, messageKey=null, arguments=null, message=null, statusCode=null]]]

And the GUI checks the value for the offset correctly. If one changes it with the up/down arrows, the value cannot be changed into the invalid areas, that can only be done by entering the value manually but will result in an error message as described by Gert.
For the unit valuas other than 1 or 2 are possible using the up/down arrows.

Not in this case. If you want to have an offset of -0,5 degrees you need to adjust the value actually to -5. It works in my setup, regardless of the message in events.log

That was a device database issue I just now corrected. In the future it will be limited to options.

1 Like

First of all - thank you very much for your quick responses!!

Just to be sure that I get the right understanding, please let me try to come back on the 251 value: when I click on the device in the Web UI, then the following is shown in the “Thing” tab:

I.e. the 251 for “Temperature Calibration Value” is already there. The 1 for “Temperature Calibration Unit” is fine and is not a problem.

Then when I press “Save” without changing anything the following is shown:

When after this I replace the 251 for “Temperature Calibration Value” with 0 (or other values) the error appears and no further action is accomplished:

2021-01-02 15:33:40.085 [DEBUG] [ding.zwave.handler.ZWaveThingHandler] - NODE 63: Configuration update received
2021-01-02 15:33:40.119 [ERROR] [rg.apache.cxf.jaxrs.utils.JAXRSUtils] - No message body writer has been found for class java.util.Collections$UnmodifiableMap, ContentType: */*


That was a device database issue I just now corrected. In the future it will be limited to options.

Will this device database update also correct the problem with the “Temperature Calibration Value”?

Thanks a lot!
Gert

That does appear to be a bug then.
@chris they should be able to set the value to the default of 0, correct?

It should work, but I’m not really sure what is happening. The debug log ought to print more than this - or alternatively there could be an exception printed somewhere in the logs?

1 Like

Gert, is your screenshot of the parameter 201 in any form cut or is is complete? If it is complete I see a difference to my setup: Both fields show up and down arrows to adjust the values. These seem to be missing in your case. So we have a difference:

I can set and save an offset value of “0” and it works (needed to do that before when I tested whether the offset was working as expected).

1 Like

Gentlemen - it is a pleasure to track down problems with your support!

Here is my latest finding: when I check “Show advanced”

Then there is a new field for parameter 201 called “Temperature Calibration”:

After setting “Temperature Calibration” to a valid value I was able to “Save” successfully! The error in the log file is gone.

Now, the issue is, I cannot reproduce the original problem, because I am not able to enter “invalid” values such as 251!

@chris: in the 2 lines of logging above only org.openhab.binding.zwave was set to DEBUG. There were no exceptions or other errors nearby.

@stefan.oh: the up and down arrows show up for me when I move the mouse over the field and when I set the focus in the field. I use Chrome.

I will spend some more time tomorrow trying to reproduce the original problem - I will report my test results then.

2 Likes

Glad to read it at least now works for you :slight_smile:

I spent quite some time trying to reproduce the problem. The problem can be reproduced, however the behaviour seems occasionally to be deviating; not sure what causes the deviations.

Here the easiest way to reproduce:

Step 1: set “Temperature Calibration Value” to 0. Then press “Save” and wait till the “Pending” disappears (for me sometimes I have to click to another thing and back to get the “Pending” updated).


Step 2: set “Temperature Calibration Value” to a negative value, e.g. -5. Then press “Save” wait till the “Pending” disappears (again for me sometimes I have to click to another thing and back to get the “Pending” updated):


Step 3: Press “Save” again, without updating any field
-> there is a short message “Thing updated” in a black box in the left bottom corner
-> the -1279 and the 251 appear


Step 4: Press “Save” again, without updating any field


Side remark: While investigating it also occurred that the “Error” did show in the log file, but I am not able to consistently reproduce that error.

Hope that the Steps 1 through 4 give enough information to reproduce the problem about entering negative values and solve the problem?

With best regards,
Gert

This is part of your problem: your device is a battery device and is only able to accept config changes during wakeup. That is the reason for the pending mark.
After you saved the changes you need to wake your battery device (or wait for automatic wakeup), then the pending mark will disappear.

As sihui already mentioned, changes only take effect when battery driven devices wake up and “talk” to the controller.
My ZW100 are powered with the USB option instead of batteries. But there is a difference between your screenshots and mine: yours show three fields for parameter 201 where mine only show two (which I think should be the correct way so noone is confused with the combined field). I’ve tested it with PaleMoon brwoser and with Firefox, the screenshot shows the Firefox view:

I’m curious where that difference stems from.

We have several different ZW100 in the database with different firmware versions which may have different config options.

This is part of your problem: your device is a battery device and is only able to accept config changes during wakeup. That is the reason for the pending mark.
After you saved the changes you need to wake your battery device (or wait for automatic wakeup), then the pending mark will disappear.

Sure, only after a device wakeup the config parameters will be set.

The issue with the display of “Pending” is: when I press “Save”, finally the device does wake up and the new configuration value is set in the device (and ‘get’ from the device again), then the “Pending” sometimes does not disappear. In that case only when I click to some other information in the Web UI and then back, then the “Pending” has disappeared.
Besides, I wait for the next automatical device wakeup which takes several minutes; during that time I change browser tabs and do some other work; maybe the browser (I use Chrome) decides to ‘put at rest’ the openHAB Tab? Just a guess.

Well, I belive that “Pending update” issue is just another issue, which I think is unrelated to the problem of negative values for the “Temperature Calibration Value”. I would need to open another thread for the “Pending update” issue.

Stefan, the third field is shown when you select “Show advanced”:

Best greetings,
Gert

Thanks for pointing that out, Gert.

I followed your step by step test in my setup to reproduce the outcome but WITHOUT the “advanced option” being active as I wanted to eliminate a possible influence from the third field. And as you wrote, in step 3 the value “251” is shown instead of “-5”. Which leads me to suspect that somewhere in the chain negative values are calculated/represented in a diffent way than expected in the GUI.

1 Like

@stefan.oh: thank you very much for reproducing the problem!

Now that we have confirmation for this bug, what is the next step? Should we open a bug report?

What could we write as problem description:

  • is this problem a general conversion problem somewhere in the openHAB code?
  • or is it only a specific database parameter error for the Aeotec ZW100 “Temperature Calibration Value”?

With best regards,
Gert