Homematic / Homegear - can't set display mode on wall thermostat

I’ve made the migration to Homematic + Homegear, which is a big step forward in terms of timeliness and reliability of the actual transmission (as compared to my previous Openhab 1 install with the old MaxCul addon).

I have one element that I cannot get working. There is a channel for “SHOW_SET_TEMPERATURE” on the wall thermostat (BC-TC-C-WM-4). I can’t get this display setting to work via paper UI or via setting a switch on it in the basic UI.

The documentation says it takes a 0 or 1, and it has an enumerated type for SET_TEMPERATURE or ACTUAL_TEMPERATURE.
https://ref.homegear.eu/device.html?directory=MAX!&file=BC-TC-C-WM-4.xml&familyLink=max&name=BC-TC-C-WM-4#affixSubsubsection1_0_15

On Paper UI it shows as a dropdown with “Setpoint Temperature” or “Actual Temperature” as the options. When I pick either of these I get an error onscreen of “Error 400 bad request”, and in the Openhab log I get:

2020-10-02 13:01:28.510 [WARN ] [rest.core.internal.item.ItemResource] - Received HTTP POST request at 'items/WallLoungeMode' with an invalid status value 'ACTUAL_TEMPERATURE'.

It looks to me like the enumerated type isn’t being changed into a 0 or 1 correctly.

On basic UI it presents a bit differently (it shows ACTUAL_TEMPERATURE and SETPOINT_TEMPERATURE as options), but same result in log when selecting.

If I go to the karaf console and directly issue the command:

openhab> smarthome:send WallLoungeMode ON
Command has been sent successfully.

It claims to be sending it. But I see no activity in the Homegear log that suggests it was actually sent, and the wall thermostat behaviour doesn’t change.

Is this a known issue / does someone have a different thing to try? My last option is to try the Homegear admin UI directly, but I haven’t quite worked out how to even start the Homegear admin UI yet.

The Homematic binding receives the type dynamically from the CCU (resp. Homegear) and then tries to send the correct values. If received types are not correct or if the are misinterpreted errors may occur.
I have a Homematic wall thermostat (HM-TC-IT-WM-W-EU) and this works correctly.

Maybe there is configuration problem (somewhere) because this device is not a “real” Homematic device. Can you please enable the TRACE logmode for the Homematic binding and post the openhab.log file. Maybe we can see the reason for this problem.

openhab.log (194.6 KB) It doesn’t look very informative - I think there is some other element that perhaps needs tracing. It basically gives the same error message of:

 2020-10-03 16:29:32.187 [WARN ] [rest.core.internal.item.ItemResource] - Received HTTP POST request at 'items/WallMasterMode' with an invalid status value 'SET_TEMPERATURE'.

Here’s the full log for that area:

2020-10-03 16:29:22.466 [DEBUG] [ommunicator.AbstractHomematicGateway] - Received new (String) value 'ABDD5864-8959-5743-FE7A-8ADC71DCD01D' for 'CENTRAL:0#PONG' from gateway with id 'ABDD5864-8959-5743-FE7A-8ADC71DCD01D'
2020-10-03 16:29:22.460 [TRACE] [nal.communicator.client.BinRpcClient] - Client BinRpcResponse:
true
2020-10-03 16:29:22.472 [TRACE] [nal.communicator.client.BinRpcClient] - Client BinRpcRequest:
listBidcosInterfaces()
2020-10-03 16:29:22.474 [TRACE] [al.communicator.client.SocketHandler] - Returning socket for port 2001
2020-10-03 16:29:22.484 [TRACE] [nal.communicator.client.BinRpcClient] - Client BinRpcResponse:
[
        {
                ADDRESS=VBC8696336
                CONNECTED=true
                DEFAULT=true
                DESCRIPTION=Homegear default BidCoS interface
        }
]
2020-10-03 16:29:32.187 [WARN ] [rest.core.internal.item.ItemResource] - Received HTTP POST request at 'items/WallMasterMode' with an invalid status value 'SET_TEMPERATURE'.
2020-10-03 16:29:32.486 [TRACE] [nal.communicator.client.BinRpcClient] - Client BinRpcRequest:
ping()
4BCAAC30-44F5-BBDE-DF54-27D1B87DCE09
2020-10-03 16:29:32.491 [TRACE] [al.communicator.client.SocketHandler] - Returning socket for port 2001
2020-10-03 16:29:32.507 [TRACE] [nal.communicator.client.BinRpcClient] - Client BinRpcResponse:
true
2020-10-03 16:29:32.510 [TRACE] [nal.communicator.client.BinRpcClient] - Client BinRpcRequest:
listBidcosInterfaces()
2020-10-03 16:29:32.512 [TRACE] [nicator.server.BinRpcResponseHandler] - Event BinRpcMessage: system.multicall()
[
        {
                methodName=event
                params=
                [
                        RF-4BCAAC30-44F5-BBDE-DF54-27D1B87DCE09
                        CENTRAL
                        PONG
                        4BCAAC30-44F5-BBDE-DF54-27D1B87DCE09
                ]
        }
]
2020-10-03 16:29:32.512 [TRACE] [al.communicator.client.SocketHandler] - Returning socket for port 2001

The startup log might tell us something, attached as well. There’s an enormous amount of stuff in there, things that looked interesting included:

2020-10-03 16:33:26.982 [TRACE] [omematic.internal.type.MetadataUtils] - Description not found for: CLIMATECONTROL_TRANSCEIVER|PARTY_STOP_MONTH, PARTY_STOP_MONTH
2020-10-03 16:33:26.983 [TRACE] [omematic.internal.type.MetadataUtils] - Description not found for: CLIMATECONTROL_TRANSCEIVER|PARTY_TEMPERATURE, PARTY_TEMPERATURE
2020-10-03 16:33:26.984 [TRACE] [omematic.internal.type.MetadataUtils] - Description not found for: CLIMATECONTROL_TRANSCEIVER|SHOW_SET_TEMPERATURE, SHOW_SET_TEMPERATURE
2020-10-03 16:33:26.986 [TRACE] [omematic.internal.type.MetadataUtils] - Description not found for: CLIMATECONTROL_TRANSCEIVER|PARTY_STOP_DAY, PARTY_STOP_DAY
2020-10-03 16:33:26.987 [TRACE] [omematic.internal.type.MetadataUtils] - Description not found for: CLIMATECONTROL_TRANSCEIVER|BOOST_TIME_PERIOD, BOOST_TIME_PERIOD
2020-10-03 16:33:26.988 [TRACE] [omematic.internal.type.MetadataUtils] - Description not found for: CLIMATECONTROL_TRANSCEIVER|BOOST_TIME_PERIOD|0 min, BOOST_TIME_PERIOD|0 min, 0 min
....
       SHOW_SET_TEMPERATURE=
        {
                DEFAULT=0
                FLAGS=1
                ID=SHOW_SET_TEMPERATURE
                MAX=1
                MIN=0
                OPERATIONS=7
                TAB_ORDER=6
                TYPE=ENUM
                UNIT=
                VALUE_LIST=
                [
                        SET_TEMPERATURE
                        ACTUAL_TEMPERATURE
                ]
        }
....
2020-10-03 16:33:27.514 [TRACE] [ommunicator.AbstractHomematicGateway] -     HmDatapoint[name=SHOW_SET_TEMPERATURE,value=0,defaultValue=0,type=ENUM,minValue=0,maxValue=1,step=<null>
,options=SET_TEMPERATURE;ACTUAL_TEMPERATURE,readOnly=false,readable=true,unit=<null>,description=SHOW_SET_TEMPERATURE,info=<null>,paramsetType=VALUES,virtual=false,trigger=false]
....
2020-10-03 16:33:27.905 [TRACE] [converter.type.AbstractTypeConverter] - Converting datapoint 'MEQ0856945:1#SHOW_SET_TEMPERATURE' (dpType='ENUM', dpUnit='null', dpValue='0') with St
ringTypeConverter


Interestingly, I still couldn’t see any action when I tried any of toggling the switch (just got the HTTP error), or tried directly manipulating from the console:

openhab> smarthome:send WallLoungeMode ON
Command has been sent successfully.
openhab> smarthome:update WallLoungeMode ON                                                                                                               
Update has been sent successfully.
openhab> smarthome:update WallLoungeMode OFF
Update has been sent successfully.
openhab> smarthome:update WallLoungeMode 1
Error: State '1' is not valid for item 'WallLoungeMode'
Valid data types are: ( OnOffType UnDefType )
openhab> smarthome:update WallLoungeMode (1 as NumberItem
sequence> )
Error executing command: Cannot coerce as(Token) to any of []

It seem that the channel was correctly derived from the data point. I assumed that there was a problem in the binding but maybe the explanation is simpler:

How is the channel defined and how did you define the item? Maybe it is similar to this problem: Invalid Status Value

That could make sense. I migrated from openhab1, and in openhab1 that was a switch, so I had it defined as a switch:

Switch WallMasterMode "Wall Master Display Mode" (wallMaster, DeviceModes) { channel="homematic:HG-BC-TC-C-WM-4:4BCAAC30-44F5-BBDE-DF54-27D1B87DCE09:MEQ0856945:1#SHOW_SET_TEMPERATURE" }

I tried changing it to a number:

Number WallMasterMode "Wall Master Display Mode" (wallMaster, DeviceModes) { channel="homematic:HG-BC-TC-C-WM-4:4BCAAC30-44F5-BBDE-DF54-27D1B87DCE09:MEQ0856945:1#SHOW_SET_TEMPERATURE" }

I get the same error on PaperUI, on basic UI it’s not updateable (maybe I need to define it as a setpoint so I can change it?) I also tried restarting OpenHab.

Looking at PaperUI, it claims the type of this channel is String. So I have also tried changing the definition to a string:

String WallMasterMode "Wall Master Display Mode" (wallMaster, DeviceModes) { channel="homematic:HG-BC-TC-C-WM-4:4BCAAC30-44F5-BBDE-DF54-27D1B87DCE09:MEQ0856945:1#SHOW_SET_TEMPERATURE" }

In that situation, PaperUI gives me a data entry field to populate. I tried putting 1 in that, and can see in the error log:

2020-10-04 08:18:19.676 [DEBUG] [ematic.handler.HomematicThingHandler] - Received command '1' for channel 'homematic:HG-BC-TC-C-WM-4:4BCAAC30-44F5-BBDE-DF54-27D1B87DCE09:MEQ0856945:1#SHOW_SET_TEMPERATURE'
2020-10-04 08:18:19.681 [TRACE] [converter.type.AbstractTypeConverter] - Converting type StringType with value '1' using StringTypeConverter to datapoint 'MEQ0856945:1#SHOW_SET_TEMPERATURE' (dpType='ENUM', dpUnit='null')
2020-10-04 08:18:19.686 [ERROR] [ematic.handler.HomematicThingHandler] - Option value '1' not found in datapoint 'MEQ0856945:1#SHOW_SET_TEMPERATURE'
org.eclipse.smarthome.binding.homematic.internal.converter.ConverterException: Option value '1' not found in datapoint 'MEQ0856945:1#SHOW_SET_TEMPERATURE'

Which gave me a hint to type in the ENUM value entirely - so I typed in “ACTUAL_TEMPERATURE”, which then worked!! Not a great UI experience, but this is something I’ll probably set once and once only.

2020-10-04 08:19:06.030 [DEBUG] [ematic.handler.HomematicThingHandler] - Received command 'ACTUAL_TEMPERATURE' for channel 'homematic:HG-BC-TC-C-WM-4:4BCAAC30-44F5-BBDE-DF54-27D1B87DCE09:MEQ0856945:1#SHOW_SET_TEMPERATURE'
2020-10-04 08:19:06.039 [TRACE] [converter.type.AbstractTypeConverter] - Converting type StringType with value 'ACTUAL_TEMPERATURE' using StringTypeConverter to datapoint 'MEQ0856945:1#SHOW_SET_TEMPERATURE' (dpType='ENUM', dpUnit='null')
2020-10-04 08:19:06.050 [DEBUG] [ommunicator.AbstractHomematicGateway] - Sending datapoint 'MEQ0856945:1#SHOW_SET_TEMPERATURE' with value '1' to gateway with id '4BCAAC30-44F5-BBDE-DF54-27D1B87DCE09' using rxMode 'DEFAULT'

I’ll look around, but any hint on how I’d set the definition or the sitemap so that it has a dropdown whilst having a string value?

You can use an element of type “Selection” together with a mapping: https://www.openhab.org/docs/configuration/sitemaps.html#element-type-selection

Excellent, thank you.