Millheat Binding - channels missing?

I am on OH3.2 on a Debian linux system, and trying to set up the Millheat binding.

I have two independent heaters which are fully working in the app - and which I have been controlling through HomeAssistant until now.

When installing the Millheat binding - and defining my account, home and heaters - everything seems to work in OH. They all are discovered and come online.

However, when setting up items for the heaters it seems, that two channels are missing in the UI compared to the example in the docs ? - targetTemperature and masterSwitch. Both seem to be very important to actually use the heaters ?

These are the items from the documentation:


Number:Power Heating_Office_Heater_Current_Energy "Energy usage [%d W]" <energy>  {channel="millheat:heater:home:office:currentEnergy"}
Number:Temperature Heating_Office_Heater_Current_Temperature "Heater current [%.1f %unit%]" <temperature>  {channel="millheat:heater:home:office:currentTemperature"}
Number:Temperature Heating_Office_Heater_Target_Temperature "Heater target [%.1f %unit%]" <temperature>  {channel="millheat:heater:home:office:targetTemperature"}
Switch Heating_Office_Heater_Heater_Active "Heater active [%s]" <fire>  {channel="millheat:heater:home:office:heatingActive"}
Switch Heating_Office_Heater_Fan_Active "Fan active [%s]" <fan>  {channel="millheat:heater:home:office:fanActive"}
Contact Heating_Office_Heater_Window "Window status [%s]" <window>  {channel="millheat:heater:home:office:window"}
Switch Heating_Office_Heater_Independent "Heater independent [%s]" <switch>  {channel="millheat:heater:home:office:independent"}
Switch Heating_Office_Heater_MasterSwitch "Heater masterswitch [%s]" <switch>  {channel="millheat:heater:home:office:masterSwitch"}

These are the available channels in the UI:

What am I missing ?

I have created a bug in github for this, as I suspect it is - a bug….

What you are missing: Reading the docs: Millheat - Bindings | openHAB :wink:

Have in mind that the Millheat lineup is built very much around a room concept. You add one or more heaters there, and you control it by room temperature, not heater temperature. In order to control the heater directly you must mark it as “independent”.

It is marked as independent- but the channels are still missing?
Are you saying it should work if I create a room for each and control them through the room?

I am controlling them through a room configuration.

I was working on a new binding last night (for Panasonic aircons), and noticed that I had to delete the Thing for newly added channels to show up. I did not notice this behavior in OH2 for which the binding was developed. I need to investigate further to see if something changed with OH3. In the meantime, try to delete and re-add the thing.

Regards

I can confirm that it doesnt work; the channels does not come up… I am very happy that you are spending time to investigate.

BTW: I also have a panasonic aircon (connected through Panasonic Comfort Cloud). If you need someone to help you test - let me know.

OK, last resort is then to link the channels manually by using item files as in the example. Pay attention to room vs heater items.

About the panasonic, yes it is the Comfort Cloud version. The binding isn’t ready for testing yet, but thanks for volunteering. I will notify you when I have something running.

Linking through item files does not work either - for the two missing channels; changing the targetTemperature does not work.

Could you set the logging to DEBUG for this binding and provide the logs? HTTP Traffic is logged, ensure you remove any credentials etc.

The API is unpublished and the binding is based on reverse engineering. So things may change without notification.

Here is my logs after setting to DEBUG for the millheat binding. First I try to change the masterSwitch item to ON - and after I try to adjust/set the targetTemperature. As you can see, it just says “predicted to” - but never sets the values… As for the debug-messages from the binding, I really don’t know what to look for. I redacted (XXXXXXX) everything in the log I thought was “secret”…

2022-01-31 19:22:32.452 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Millheat_MasterBedroom_Heater_MasterSwitch' received command OFF
2022-01-31 19:22:32.454 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Millheat_MasterBedroom_Heater_MasterSwitch' predicted to become NULL
2022-01-31 19:22:36.387 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Millheat_MasterBedroom_Heater_Target_Temperature' received command 17
2022-01-31 19:22:36.389 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Millheat_MasterBedroom_Heater_Target_Temperature' predicted to become NULL
2022-01-31 19:22:36.560 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Millheat_MasterBedroom_Heater_Target_Temperature' received command 17
2022-01-31 19:22:36.562 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Millheat_MasterBedroom_Heater_Target_Temperature' predicted to become NULL
2022-01-31 19:22:36.939 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Millheat_MasterBedroom_Heater_Target_Temperature' received command 17
2022-01-31 19:22:36.940 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Millheat_MasterBedroom_Heater_Target_Temperature' predicted to become NULL
2022-01-31 19:22:37.127 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Millheat_MasterBedroom_Heater_Target_Temperature' received command 17
2022-01-31 19:22:37.129 [INFO ] [penhab.event.ItemStatePredictedEvent] - Item 'Millheat_MasterBedroom_Heater_Target_Temperature' predicted to become NULL
2022-01-31 19:22:46.920 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'YrWeather_Current_updated_at' changed from 2022-01-31T18:19:20.000+0000 to 2022-01-31T18:19:03.000+0000
==> /var/log/openhab/openhab.log <==
2022-01-31 19:22:47.189 [DEBUG] [llheat.internal.client.RequestLogger] - Request home-464
home-464 > POST https://eurouter.ablecloud.cn:9005/millService/v1/selectHomeList
home-464 > Accept-Encoding: gzip
home-464 > User-Agent: Jetty/9.4.43.v20210629
home-464 > Connection: Keep-Alive
home-464 > X-Zc-Major-Domain: seanywell
home-464 > X-Zc-Msg-Name: millService
home-464 > X-Zc-Sub-Domain: milltype
home-464 > X-Zc-Seq-Id: 1
home-464 > X-Zc-Version: 1
home-464 > Content-Type: application/x-zc-object
home-464 > X-Zc-Timestamp: 1643653367
home-464 > X-Zc-Timeout: 300
home-464 > X-Zc-Nonce: XXXXXXXXXXXXXXXX
home-464 > X-Zc-User-Id: XXXXXXX
home-464 > X-Zc-User-Signature: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
home-464 > X-Zc-Content-Length: 2
home-464 > Host: eurouter.ablecloud.cn:9005
home-464 > Content-Length: 2
{}
2022-01-31 19:22:47.220 [DEBUG] [llheat.internal.client.RequestLogger] - Response home-464
home-464 < HTTP/1.1 200 OK
home-464 < Content-Length: 529
home-464 < Content-Type: application/x-zc-object
home-464 < Server: Jetty(9.1.5.v20140505)
home-464 < X-Zc-Msg-Name: X-Zc-Ack
home-464 < X-Zc-Trace-Id: 4806b5414040c256809955969715dfb1
home-464 < Date: Mon, 31 Jan 2022 18:22:47 GMT
{
  "hourSystem": 0,
  "homeList": [
    {
      "maxTemperature": 0,
      "maxTemperatureMsg": "Temperature range is limited by administrator to 5-35℃",
      "homeAlways": 1,
      "changeTemperature": 0,
      "homeName": "XXXX",
      "isHoliday": 0,
      "postcode": "4400",
      "holidayStartTime": 1616705247,
      "timeZone": "+01:00",
      "modeMinute": 0,
      "modeStartTime": 0,
      "holidayTemp": 10,
      "modeHour": 0,
      "changeTemperatureMsg": "Temperature change not allowed by administrator",
      "currentMode": 0,
      "holidayEndTime": 0,
      "holidayTempType": 1,
      "homeType": 0,
      "homeId": XXXXXXXXXXXXX,
      "programId": XXXXXXXXXXXXXXXXX
    }
  ]
}
2022-01-31 19:22:47.228 [DEBUG] [llheat.internal.client.RequestLogger] - Request home-465
home-465 > POST https://eurouter.ablecloud.cn:9005/millService/v1/selectRoombyHome
home-465 > Accept-Encoding: gzip
home-465 > User-Agent: Jetty/9.4.43.v20210629
home-465 > Connection: Keep-Alive
home-465 > X-Zc-Major-Domain: seanywell
home-465 > X-Zc-Msg-Name: millService
home-465 > X-Zc-Sub-Domain: milltype
home-465 > X-Zc-Seq-Id: 1
home-465 > X-Zc-Version: 1
home-465 > Content-Type: application/x-zc-object
home-465 > X-Zc-Timestamp: 1643653367
home-465 > X-Zc-Timeout: 300
home-465 > X-Zc-Nonce: XXXXXXXXXXXXXX
home-465 > X-Zc-User-Id: XXXXXX
home-465 > X-Zc-User-Signature: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
home-465 > X-Zc-Content-Length: 61
home-465 > Host: eurouter.ablecloud.cn:9005
home-465 > Content-Length: 61
{
  "homeId": XXXXXXXXXXXXXXXXXX,
  "timeZoneNum": "+01:00"
}
2022-01-31 19:22:47.269 [DEBUG] [llheat.internal.client.RequestLogger] - Response home-465
home-465 < HTTP/1.1 200 OK
home-465 < Content-Length: 484
home-465 < Content-Type: application/x-zc-object
home-465 < Server: Jetty(9.1.5.v20140505)
home-465 < X-Zc-Msg-Name: X-Zc-Ack
home-465 < X-Zc-Trace-Id: 0ad494f3408a4468805d32f8a55292fe
home-465 < Date: Mon, 31 Jan 2022 18:22:47 GMT
{
  "maxTemperature": 0,
  "backMinute": 0,
  "maxTemperatureMsg": "Temperature range is limited by administrator to 5-35℃",
  "homeAlways": 1,
  "changeTemperature": 0,
  "homeName": "XXXXXXXX",
  "isHoliday": 0,
  "changeTemperatureMsg": "Temperature change not allowed by administrator",
  "backHour": 0,
  "roomInfo": [],
  "offLineDeviceNum": 0,
  "mode": 0,
  "onlineDeviceNum": 0,
  "programList": [
    {
      "programName": "Standard Program",
      "homeId": XXXXXXXXXXXXX,
      "programId": XXXXXXXXXXXXXX
    }
  ],
  "homeType": 0,
  "homeId": XXXXXXXXXXXXXXXXX
}
2022-01-31 19:22:47.271 [DEBUG] [llheat.internal.client.RequestLogger] - Request home-466
home-466 > POST https://eurouter.ablecloud.cn:9005/millService/v1/getIndependentDevices
home-466 > Accept-Encoding: gzip
home-466 > User-Agent: Jetty/9.4.43.v20210629
home-466 > Connection: Keep-Alive
home-466 > X-Zc-Major-Domain: seanywell
home-466 > X-Zc-Msg-Name: millService
home-466 > X-Zc-Sub-Domain: milltype
home-466 > X-Zc-Seq-Id: 1
home-466 > X-Zc-Version: 1
home-466 > Content-Type: application/x-zc-object
home-466 > X-Zc-Timestamp: 1643653367
home-466 > X-Zc-Timeout: 300
home-466 > X-Zc-Nonce: XXXXXXXXXXXXXXXX
home-466 > X-Zc-User-Id: XXXXX
home-466 > X-Zc-User-Signature: XXXXXXXXXXXXXXXXXXXXXXX
home-466 > X-Zc-Content-Length: 34
home-466 > Host: eurouter.ablecloud.cn:9005
home-466 > Content-Length: 34
{
  "homeId": XXXXXXXXXXXXXX
}
2022-01-31 19:22:47.321 [DEBUG] [llheat.internal.client.RequestLogger] - Response home-466
home-466 < HTTP/1.1 200 OK
home-466 < Content-Length: 710
home-466 < Content-Type: application/x-zc-object
home-466 < Server: Jetty(9.1.5.v20140505)
home-466 < X-Zc-Msg-Name: X-Zc-Ack
home-466 < X-Zc-Trace-Id: 5b7558e740f27f2d80e65ad6a6e16a8e
home-466 < Date: Mon, 31 Jan 2022 18:22:47 GMT
{
  "deviceInfo": [
    {
      "fanStatusShow": 0,
      "manualControlTime": 0,
      "isManualControl": 0,
      "isHoliday": 0,
      "description": "",
      "canChangeTemp": 1,
      "holidayTemp": 5,
      "deviceId": XXXXXX,
      "deviceName": "Master Bedroom",
      "roomId": XXXXXXXXXXXXXXX,
      "deviceStatus": 0,
      "timer": "",
      "heaterFlag": 0,
      "powerStatus": 0,
      "times": "",
      "fanStatus": 0,
      "subDomainId": 5316,
      "coolingStatus": 0,
      "currentTemp": 8.0,
      "open": 0
    },
    {
      "fanStatusShow": 0,
      "manualControlTime": 0,
      "isManualControl": 0,
      "isHoliday": 0,
      "description": "",
      "canChangeTemp": 1,
      "holidayTemp": 5,
      "deviceId": XXXXXX,
      "deviceName": "Oliver",
      "roomId": XXXXXXXXXXXXXXXXXXX,
      "deviceStatus": 0,
      "timer": "",
      "heaterFlag": 0,
      "powerStatus": 0,
      "times": "",
      "fanStatus": 0,
      "subDomainId": 5316,
      "coolingStatus": 0,
      "currentTemp": 8.0,
      "open": 0
    }
  ]
}

The issue is solved by this: