core: intergas incomfort: InvalidHeaterList: There is no valid Heater in the heaterlist

The problem

Intergas InComfort/Intouch Lan2RF gateway integration fails after applying update 2023.3.2. Gateway device is reachable from any other device in network

What version of Home Assistant Core has the issue?

2023.3.2

What was the last working version of Home Assistant Core?

2023.3.1

What type of installation are you running?

Home Assistant OS

Integration causing the issue

Intergas InComfort/Intouch Lan2RF gateway

Link to integration documentation on our website

https://www.home-assistant.io/integrations/incomfort

Diagnostics information

No response

Example YAML snippet

incomfort:
  host: 192.168.xxx.xx
  username: admin
  password: xxxxxxx

sensor:
  - platform: template
    sensors:
      boiler:
        friendly_name: "CV Boiler"
        value_template: "{{ state_attr('water_heater.incomfort', 'display_text') }}"

Anything in the logs that might be useful for us?

Logger: homeassistant.setup
Source: components/incomfort/__init__.py:56
First occurred: 21:30:11 (1 occurrences)
Last logged: 21:30:11

Error during setup of component incomfort
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/setup.py", line 256, in _async_setup_component
    result = await task
  File "/usr/src/homeassistant/homeassistant/components/incomfort/__init__.py", line 56, in async_setup
    heaters = incomfort_data["heaters"] = list(await client.heaters())
  File "/usr/local/lib/python3.10/site-packages/incomfortclient/__init__.py", line 205, in heaters
    raise InvalidHeaterList
incomfortclient.InvalidHeaterList: There is no valid Heater in the heaterlist (check the binding between the gateway and the heater)

Additional information

No response

About this issue

  • Original URL
  • State: open
  • Created a year ago
  • Comments: 60 (13 by maintainers)

Most upvoted comments

Today the integration failed again on my installation. After a restart I get this: The following integrations and platforms could not be set up…

Logfile:

2023-03-17 08:47:38.366 ERROR (MainThread) [homeassistant.setup] Error during setup of component incomfort
File "/usr/src/homeassistant/homeassistant/components/incomfort/__init__.py", line 56, in async_setup
heaters = incomfort_data["heaters"] = list(await client.heaters())
File "/usr/local/lib/python3.10/site-packages/incomfortclient/__init__.py", line 205, in heaters
incomfortclient.InvalidHeaterList: There is no valid Heater in the heaterlist (check the binding between the gateway and the heater)

I have put in the debug config in configuration.yaml, the main this I get out of that is this:

2023-03-17 09:00:35.325 DEBUG (MainThread) [incomfortclient] _get(url=heaterlist.json): response = {'heaterlist': ['000W00000', None, None, None, None, None, None, None]}

And that seems right when I do a direct call to <ip>/protect/heaterlist.json:

{"heaterlist":["000W00000",null,null,null,null,null,null,null]}

@guidokieboom

Hi, The good news is that thanks to your help I now have my Intergas boiler back on line. However the fault turned out to be a silly mistake on my part as so many issues tend to be. I have a router which is connected to a Google Mesh wifi. I have an Ethernet hub with both Intergas gateway and Pi (Home Assistant) connected to the hub. Somewhere along the line the Intergas gateway had changed its IP address. Im not really sure how or why this happened, but it coincided with a Home Assistant update. Consequently the boiler didnt come back available, leaving me beliving the issue was connected to the update.

Anyway working through the above I discovered the gateway on a different IP. So I’ve identified it and used the Google Home app to set the IP as static. Using your code above everything now seems to be working! 😃

I still haven’t managed to ascertain the heater ID and I’m not sure if I need to pursue this further or indeed how to discover it.

Generally however everything’s up and running, which with the onset of winter is a great result!

Many thanks for your help!

Maybe I can further help by sharing how my configuration looks like (and it is functioning well past months). It was built more by trial and error, googling and help&hints from others then from decent knowledge of HA/coding 😃

  1. Installed Intergas LAN2RF device (gateway) in location where it can have good (RF) connection with the Intergas Boiler (as I experience when too close to other devices in my utility cabinet (‘meterkast’) the connection (RF) between the LAN2RF device and my boiler became intermittent (i.e. not constantly showing the numbers 1234).
  2. Gave the LAN2RF device (which is connected to my router via ethernet cable) a static IP address in my router
  3. Patience to have a valid heater ID, that I obtained via the built-in web interface of the LAN2RF device (or gateway as also called). Took several hours or so in my case; I read for some it took days. Check for valid heater ID via the local IP address of the router (which brings you to the built-in web interface of the Intergas LAN2RF device)
  4. As I have split my HA configuration into separate files, I added following in my home assistant’s file ‘configuration.yaml’
default_config:

homeassistant:
  packages: !include_dir_named packages  

Then I created a new file (intergas.yaml) and placed this in folder \config\packages\ (I’m not sure if this folder was created in past; if not for you you might create this folder \packages\ yourself). I put the following in the sensor.yaml file: As you will notice I used !secret several times (this is to have my specific inputs like password, username, IP address, etc. in 1 place in the ‘secrets.yaml’ file.

# Example configuration.yaml entry, newer firmware with user credentials
# from : https://www.home-assistant.io/integrations/incomfort/#configuration (Sept2023)
# Example configuration.yaml entry, newer firmware with user credentials
incomfort:
  host: !secret intergas_ip
  username: !secret intergas_username
  password: !secret intergas_password


# from: https://github.com/home-assistant/core/issues/89405
sensor:
- platform: rest
  resource: !secret intergas_resource
  #resource: http://xxx.xxx.x.xxx/protect/data.json
  username: !secret intergas_username
  password: !secret intergas_password
  name: Intergas
  value_template: "OK"
  scan_interval: 15
  unique_id: sensor.intergas
  json_attributes:
    - nodenr
    - ch_temp_lsb
    - ch_temp_msb
    - tap_temp_lsb
    - tap_temp_msb
    - ch_pressure_lsb
    - ch_pressure_msb
    - room_temp_1_lsb
    - room_temp_1_msb
    - room_temp_set_1_lsb
    - room_temp_set_1_msb
    - room_temp_2_lsb
    - room_temp_2_msb
    - room_temp_set_2_lsb
    - room_temp_set_2_msb
    - displ_code
    - IO
    - serial_year
    - serial_month
    - serial_line
    - serial_sn1
    - serial_sn2
    - serial_sn3
    - room_set_ovr_1_msb
    - room_set_ovr_1_lsb
    - room_set_ovr_2_msb
    - room_set_ovr_2_lsb
    - rf_message_rssi
    - rfstatus_cntr

- platform: template
  sensors:
    intergas_tapwatertemp:
      value_template: "{{(state_attr('sensor.intergas','tap_temp_lsb')+state_attr('sensor.intergas','tap_temp_msb')*256)/100}}"
      device_class: temperature
      unit_of_measurement: "°C"
      unique_id: intergas_tapwatertemp
    intergas_cvwatertemp:
      value_template: "{{(state_attr('sensor.intergas','ch_temp_lsb')+state_attr('sensor.intergas','ch_temp_msb')*256)/100}}"
      device_class: temperature
      unit_of_measurement: "°C"
      unique_id: intergas_cvwatertemp
    intergas_waterdruk:
      value_template: "{{(state_attr('sensor.intergas','ch_pressure_lsb')+state_attr('sensor.intergas','ch_pressure_msb')*256)/100}}"
      device_class: pressure
      unit_of_measurement: "bar"
      unique_id: intergas_waterdruk
    intergas_cvstatus:
      value_template: "{{state_attr('sensor.intergas','IO')}}"
      unique_id: intergas_cvstatus
    intergas_lockout:
      value_template: "{{'on' if (state_attr('sensor.intergas','IO')|bitwise_and(1)) else 'off'}}"
      unique_id: intergas_lockout
    intergas_pompen:
      value_template: "{{'on' if (state_attr('sensor.intergas','IO')|bitwise_and(2)) else 'off'}}"
      unique_id: intergas_pompen
    intergas_tappen:
      value_template: "{{'on' if (state_attr('sensor.intergas','IO')|bitwise_and(4)) else 'off'}}"
      unique_id: intergas_tappen
    intergas_brander:
      value_template: "{{'on' if (state_attr('sensor.intergas','IO')|bitwise_and(8)) else 'off'}}"
      unique_id: intergas_brander

Then several sensors are created and I obtained their names via Home Assistant, Settings, Entities and then search for ‘intergas’. With these sensor names I created the following simple LoveLace card:

image.

Next and final was to create a card for Thermostat. E.g. the standard card in HA: image

Or using a custom card (e.g. from https://github.com/nervetattoo/simple-thermostat) like I did eventually. Hope this can help to get your Intergas into your Home Assistant.

Same issue here. Heater serial is 000W00000 after a reboot of the gateway. I can see the web interface just fine (and it gets populated as it should). But why look at the serial if the data is available through /protect/data.json?heater=0 (and possibly heater=1 for those with more than 1 heater).