It looks like I have the same issue, also on Openhab 3.2.0. I followed the steps described and deleted all millheat:heater and millheat:account things, and added the account again. Added items via item files, and tried setting the account and things online/offline.
The heater in question (155417) is not added to a room in the Millheat app.
I see the same result as @SmartHome4all - no channels.
Debug log looks similar, too:
2022-02-01 20:57:45.020 [DEBUG] [llheat.internal.client.RequestLogger] - Request xxx-109
b5c300cb5a-109 > POST https://eurouter.ablecloud.cn:9005/millService/v1/selectHomeList
b5c300cb5a-109 > Accept-Encoding: gzip
b5c300cb5a-109 > User-Agent: Jetty/9.4.43.v20210629
b5c300cb5a-109 > Connection: Keep-Alive
b5c300cb5a-109 > X-Zc-Major-Domain: seanywell
b5c300cb5a-109 > X-Zc-Msg-Name: millService
b5c300cb5a-109 > X-Zc-Sub-Domain: milltype
b5c300cb5a-109 > X-Zc-Seq-Id: 1
b5c300cb5a-109 > X-Zc-Version: 1
b5c300cb5a-109 > Content-Type: application/x-zc-object
b5c300cb5a-109 > X-Zc-Timestamp: 1643745465
b5c300cb5a-109 > X-Zc-Timeout: 300
b5c300cb5a-109 > X-Zc-Nonce: XXX
b5c300cb5a-109 > X-Zc-User-Id: 110030
b5c300cb5a-109 > X-Zc-User-Signature: XXX
b5c300cb5a-109 > X-Zc-Content-Length: 2
b5c300cb5a-109 > Host: eurouter.ablecloud.cn:9005
b5c300cb5a-109 > Content-Length: 2
{}
2022-02-01 20:57:45.059 [DEBUG] [llheat.internal.client.RequestLogger] - Response xxx-109
b5c300cb5a-109 < HTTP/1.1 200 OK
b5c300cb5a-109 < Content-Length: 521
b5c300cb5a-109 < Content-Type: application/x-zc-object
b5c300cb5a-109 < Server: Jetty(9.1.5.v20140505)
b5c300cb5a-109 < X-Zc-Msg-Name: X-Zc-Ack
b5c300cb5a-109 < X-Zc-Trace-Id: XXX
b5c300cb5a-109 < Date: Tue, 01 Feb 2022 19:57:45 GMT
{
"hourSystem": 1,
"homeList": [
{
"maxTemperature": 0,
"maxTemperatureMsg": "Temperature range is limited by administrator to 5-35℃",
"homeAlways": 0,
"changeTemperature": 0,
"homeName": "House",
"isHoliday": 0,
"postcode": "XXX",
"holidayStartTime": 0,
"timeZone": "+01:00",
"modeMinute": 0,
"modeStartTime": 0,
"holidayTemp": 14,
"modeHour": 0,
"changeTemperatureMsg": "Temperature change not allowed by administrator",
"currentMode": 0,
"holidayEndTime": 0,
"holidayTempType": 0,
"homeType": 0,
"homeId": XXX,
"programId": XXX
}
]
}
2022-02-01 20:57:45.060 [DEBUG] [llheat.internal.client.RequestLogger] - Request xxx-110
b5c300cb5a-110 > POST https://eurouter.ablecloud.cn:9005/millService/v1/selectRoombyHome
b5c300cb5a-110 > Accept-Encoding: gzip
b5c300cb5a-110 > User-Agent: Jetty/9.4.43.v20210629
b5c300cb5a-110 > Connection: Keep-Alive
b5c300cb5a-110 > X-Zc-Major-Domain: seanywell
b5c300cb5a-110 > X-Zc-Msg-Name: millService
b5c300cb5a-110 > X-Zc-Sub-Domain: milltype
b5c300cb5a-110 > X-Zc-Seq-Id: 1
b5c300cb5a-110 > X-Zc-Version: 1
b5c300cb5a-110 > Content-Type: application/x-zc-object
b5c300cb5a-110 > X-Zc-Timestamp: 1643745465
b5c300cb5a-110 > X-Zc-Timeout: 300
b5c300cb5a-110 > X-Zc-Nonce: XXX
b5c300cb5a-110 > X-Zc-User-Id: 110030
b5c300cb5a-110 > X-Zc-User-Signature: XXX
b5c300cb5a-110 > X-Zc-Content-Length: 61
b5c300cb5a-110 > Host: eurouter.ablecloud.cn:9005
b5c300cb5a-110 > Content-Length: 61
{
"homeId": 202002231649150016,
"timeZoneNum": "+01:00"
}
2022-02-01 20:57:45.221 [DEBUG] [llheat.internal.client.RequestLogger] - Response xxx-110
b5c300cb5a-110 < HTTP/1.1 200 OK
b5c300cb5a-110 < Content-Length: 743
b5c300cb5a-110 < Content-Type: application/x-zc-object
b5c300cb5a-110 < Server: Jetty(9.1.5.v20140505)
b5c300cb5a-110 < X-Zc-Msg-Name: X-Zc-Ack
b5c300cb5a-110 < X-Zc-Trace-Id: XXX
b5c300cb5a-110 < Date: Tue, 01 Feb 2022 19:57:45 GMT
{
"maxTemperature": 0,
"backMinute": 0,
"maxTemperatureMsg": "Temperature range is limited by administrator to 5-35℃",
"homeAlways": 0,
"changeTemperature": 0,
"homeName": "House",
"isHoliday": 0,
"changeTemperatureMsg": "Temperature change not allowed by administrator",
"backHour": 0,
"roomInfo": [],
"offLineDeviceNum": 0,
"mode": 0,
"onlineDeviceNum": 0,
"programList": [
{
"programName": "Standard Program",
"homeId": XXX,
"programId": XXX
},
{
"programName": "Homeoffice",
"homeId": XXX,
"programId": XXX
},
{
"programName": "Kitchen",
"homeId": XXX,
"programId": XXX
},
{
"programName": "Lekerom",
"homeId": XXX,
"programId": XXX
}
],
"homeType": 0,
"homeId": 202002231649150016
}
2022-02-01 20:57:45.224 [DEBUG] [llheat.internal.client.RequestLogger] - Request xxx-111
b5c300cb5a-111 > POST https://eurouter.ablecloud.cn:9005/millService/v1/getIndependentDevices
b5c300cb5a-111 > Accept-Encoding: gzip
b5c300cb5a-111 > User-Agent: Jetty/9.4.43.v20210629
b5c300cb5a-111 > Connection: Keep-Alive
b5c300cb5a-111 > X-Zc-Major-Domain: seanywell
b5c300cb5a-111 > X-Zc-Msg-Name: millService
b5c300cb5a-111 > X-Zc-Sub-Domain: milltype
b5c300cb5a-111 > X-Zc-Seq-Id: 1
b5c300cb5a-111 > X-Zc-Version: 1
b5c300cb5a-111 > Content-Type: application/x-zc-object
b5c300cb5a-111 > X-Zc-Timestamp: 1643745465
b5c300cb5a-111 > X-Zc-Timeout: 300
b5c300cb5a-111 > X-Zc-Nonce: XXX
b5c300cb5a-111 > X-Zc-User-Id: 110030
b5c300cb5a-111 > X-Zc-User-Signature: XXX
b5c300cb5a-111 > X-Zc-Content-Length: 34
b5c300cb5a-111 > Host: eurouter.ablecloud.cn:9005
b5c300cb5a-111 > Content-Length: 34
{
"homeId": XXX
}
2022-02-01 20:57:45.605 [DEBUG] [llheat.internal.client.RequestLogger] - Response xxx-111
b5c300cb5a-111 < HTTP/1.1 200 OK
b5c300cb5a-111 < Content-Length: 729
b5c300cb5a-111 < Content-Type: application/x-zc-object
b5c300cb5a-111 < Server: Jetty(9.1.5.v20140505)
b5c300cb5a-111 < X-Zc-Msg-Name: X-Zc-Ack
b5c300cb5a-111 < X-Zc-Trace-Id: XXX
b5c300cb5a-111 < Date: Tue, 01 Feb 2022 19:57:45 GMT
{
"deviceInfo": [
{
"fanStatusShow": 0,
"manualControlTime": 0,
"isManualControl": 0,
"isHoliday": 0,
"description": "",
"canChangeTemp": 1,
"holidayTemp": 22,
"deviceId": 155417,
"deviceName": "Kjeller",
"roomId": XXX,
"deviceStatus": 0,
"timer": "",
"heaterFlag": 1,
"powerStatus": 1,
"times": "",
"fanStatus": 0,
"subDomainId": 5316,
"coolingStatus": 0,
"currentTemp": 22.0,
"open": 0
},
{
"fanStatusShow": 0,
"manualControlTime": 0,
"isManualControl": 0,
"isHoliday": 0,
"description": "OFF",
"canChangeTemp": 0,
"holidayTemp": 21,
"deviceId": 157618,
"deviceName": "Kjøkken",
"roomId": XXX,
"deviceStatus": 0,
"timer": "OFF in 00:32",
"heaterFlag": 1,
"powerStatus": 1,
"times": "00:32",
"fanStatus": 0,
"subDomainId": 5316,
"coolingStatus": 0,
"currentTemp": 21.0,
"open": 0
}
]
}
2022-02-01 20:57:45.607 [DEBUG] [ternal.handler.MillheatHeaterHandler] - Cannot update power for heater as the nominal power has not been configured for thing millheat:heater:xxx:157618
2022-02-01 20:58:03.340 [DEBUG] [ternal.handler.MillheatHeaterHandler] - Initializing Millheat heater using config MillheatHeaterConfiguration [macAddress=null, heaterId=155417, power=null]
The thing is online and all channels, except masterSwitch and targetTemperature are available:
I did look into the code of the binding, and there is something that grabbed my attention. In MillheatHeaterHandler.java, where the heater is initialized (I believe), there is a check for canChangeTemp and no room set before adding the two channels in question:
private void addOptionalChannels(final Heater heater) {
final List<Channel> newChannels = new ArrayList<>();
newChannels.addAll(getThing().getChannels());
if (heater.canChangeTemp() && heater.getRoom() == null) {
// Add power switch channel
newChannels
.add(ChannelBuilder
.create(new ChannelUID(getThing().getUID(), MillheatBindingConstants.CHANNEL_MASTER_SWITCH),
"Switch")
.withType(MillheatBindingConstants.CHANNEL_TYPE_MASTER_SWITCH_UID).build());
// Add independent heater target temperature
newChannels.add(ChannelBuilder
.create(new ChannelUID(getThing().getUID(), MillheatBindingConstants.CHANNEL_TARGET_TEMPERATURE),
"Number:Temperature")
.withType(MillheatBindingConstants.CHANNEL_TYPE_TARGET_TEMPERATURE_HEATER_UID).build());
}
updateThing(editThing().withChannels(newChannels).build());
}
From the debug log, it looks like the roomId is set, despite the heater not beeing assigned to a room. If that is the case, the check above would return false, and no additional channels would be added?
Or did I miss something?