Added support for Vaillant Thermostat, how to integrate in official release

How to update
Erased old config file, removed Vaillant from config.yaml
Start from scratch, nothing

First of all, you should delete the Vaillant folder inside ‘custom_components’ folder. Then follow this sequence

  • reboot
  • fix your configuration.yaml
  • reinstall Vaillant from the link above
  • reboot again

You should fix it

Thx for help
How to fix configuration.yaml, what to change

I’ve said ‘fix’ because you’ve removed vaillant settings from your configuration.yaml.
So I was meaning that you should insert it again into configuration.yaml.
Sorry for the misunderstanding

For me it’s ok.
Thanks for your help

1 Like

I cannot reboot because the “Configuration validation” spins forever the moment I re-enable Vaillant. I remove all the files and pull them again.

EDIT: It somehow finished 5 minutes later Oo I know that Raspberry is slow but…

just wont
The system cannot restart because the configuration is not valid: Platform error climate.vaillant - Integration ‘vaillant’ not found. Component error: vaillant - Integration ‘vaillant’ not found.

try this:

  • delete the Vaillant folder inside ‘custom_components’ folder
  • delete all vaillant settings from configuration.yaml (both of vaillant: and climate:)
  • reboot
  • reinstall Vaillant custom component from the link below
    https://github.com/pjmaenh/home-assistant-vaillant
  • retype your settings into configuration.yaml (both of vaillant: and climate:)
  • reboot again

Tried that, still the same error

Edit:
Did it from 5 try
Thx a lot

1 Like

Also had problems with this component after updating.
It was fixed after replacing in manifest.json:
“requirements”: [“git+https://github.com/pjmaenh/pyvaillant#pyvaillant==0.0.4”],
by
“requirements”: [“git+https://github.com/pjmaenh/pyvaillant.git@master#pyvaillant==0.0.4”],

see also Update manifest.json by dckiller51 · Pull Request #10 · pjmaenh/home-assistant-vaillant · GitHub

thank you dckiller51

Dear all,

I’m new to HA and I’m struggling myself with this integration, which was indeed the reason for the switch into this platform.
I followed the instructions on the post to try integrating my Migo thermostat on a docker instance in a Synology NAS, but I’m having problems with it. The point is that I’m not capable of understanding what is going wrong.

I created the docker instance from the home assistant repository which is working perfectly.
I copied the last Vaillant folder and files in a manually created “custom_components” folder.
Then, I modified the manifest.json file as explained in the last posts,
Although not using android, I was able to download and decompress the apk with app version 1.3.0.4 in order to get the secret key.
From the class file, I made a search and I took the line finishing in “ffeb” as secret key. I got an string of 8 combinations of 4 digits divided with spaces, as the following one:

fcfc XXXX XXXX XXXX XXXX XXXX XXXX ffeb

On the configuration.yaml file I added the string with no spaces, and I tried with the following:

Captura de pantalla 2021-07-14 a las 13.06.33

Then I re-started the server so HA could start with the integration, but no Vaillant device or entities are added to the server.
What I get are some error messages on the notifications panel as follows:

"Unable to prepare setup for platform vaillant.climate: Unable to set up component.
13:32:01 – (ERROR) setup.py

Error during setup of component vaillant
13:32:01 – (ERROR) vaillant (integración personalizada)

Netatmo API returned invalid_client
13:32:01 – (ERROR) /usr/local/lib/python3.9/site-packages/pyvaillant.py

The Netatmo API returned 400
13:32:01 – (ERROR) /usr/local/lib/python3.9/site-packages/smart_home/init.py"

Could you, please, help me trying understanding what I could be doing wrong?

Thanks in advance

1 Like

OK, finally I realized that the secret_key was not ok due to the format used when opening the classes file.
After changing the format I found that the secret_key is 28d3xxxxxxxxxxxxxxxxxxxxxxxxxffeb
I changed it into the config file and when re-starting no error is given.
The point is that I get no device but just an entity called Thermostat for which HA tells me it has no Unique ID so it can not be managed from the UI.
Is it normal? Do I need to modify or add something?

1 Like

Hello,
any support to retrieve the configuration/secret parameters for the MiGo Thermostat? Thanks!

Hello all,

I have successfully decompiles the android APK for vSmart and looked inside the classes.dex file as mentioned in this thread with a java decompiler, but I was unable to find the secret key.

My current config is:

vaillant:
api_key: na_client_android_vaillant
secret_key: <SECRET_KEY>
username: USER
password: PASS
discovery: False
app_version: 1.0.4.0
user_prefix: vaillant

Please, I anyone who got it working could PM their secret key or show where they found it I’d very much appreciate it!!

Thanks in advance.

Looks like this component is not being maintained anymore. Migrated to a rewritten component by Mislav Mandarić: https://github.com/MislavMandaric/home-assistant-vaillant-vsmart
Will be added to HACS someday. It is configured in the UI and needs the same config parameters (api, secret keys). Works well for my MiGo thermostat.

4 Likes

Alright, it works, but trying to operate with this thermostat I get several errors:

Logger: homeassistant.components.websocket_api.http.connection
Source: custom_components/vaillant_vsmart/climate.py:167
Integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 14:28:18 (5 occurrences)
Last logged: 14:29:35

[139925084349200] 400 Client Error: Bad Request for url: https://api.netatmo.com/api/setminormode For more information check: https://httpstatuses.com/400
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/websocket_api/commands.py", line 185, in handle_call_service
    await hass.services.async_call(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1492, in async_call
    task.result()
  File "/usr/src/homeassistant/homeassistant/core.py", line 1527, in _execute_service
    await handler.job.target(service_call)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 213, in handle_service
    await self.hass.helpers.service.entity_service_call(
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 658, in entity_service_call
    future.result()  # pop exception if have
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 843, in async_request_call
    await coro
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 695, in _handle_entity_call
    await result
  File "/config/custom_components/vaillant_vsmart/climate.py", line 167, in async_set_hvac_mode
    await self._client.async_set_minor_mode(
  File "/usr/local/lib/python3.9/site-packages/vaillant_netatmo_api/thermostat.py", line 151, in async_set_minor_mode
    resp.raise_for_status()
  File "/usr/local/lib/python3.9/site-packages/httpx/_models.py", line 1423, in raise_for_status
    raise HTTPStatusError(message, request=request, response=self)
httpx.HTTPStatusError: 400 Client Error: Bad Request for url: https://api.netatmo.com/api/setminormode
For more information check: https://httpstatuses.com/400

and

Logger: homeassistant
Source: custom_components/vaillant_vsmart/climate.py:120
Integration: Vaillant vSMART (documentation, issues)
First occurred: 14:00:36 (7 occurrences)
Last logged: 14:30:27

Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 134, in _handle_refresh_interval
    await self._async_refresh(log_failures=True, scheduled=True)
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 265, in _async_refresh
    update_callback()
  File "/usr/src/homeassistant/homeassistant/helpers/update_coordinator.py", line 325, in _handle_coordinator_update
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 464, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 500, in _async_write_ha_state
    attr.update(self.state_attributes or {})
  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 298, in state_attributes
    if self.hvac_action:
  File "/config/custom_components/vaillant_vsmart/climate.py", line 120, in hvac_action
    if self._module.measured.temperature < self._module.measured.setpoint_temp:
TypeError: '<' not supported between instances of 'float' and 'NoneType'

Confirming this works with MiGo. In the config CLIENT ID relates to api_key. Everything else is self explanatory. Does anyone know what does the new switch entity HWB do?

Hello, I can’t install this new integration.
It’s giving me the following error message:

Logger: homeassistant.config_entries
Source: config_entries.py:698
First occurred: 10:02:25 (1 occurrences)
Last logged: 10:02:25

Error occurred loading configuration flow for integration vaillant_vsmart: cannot import name ‘USE_CLIENT_DEFAULT’ from ‘httpx’ (/usr/local/lib/python3.9/site-packages/httpx/init.py)

Does anybody knows what’s the problem?
As info, my HA is working on a docker instance in a Synology NAS

Hi everyone.

First of all, I’d like to thank @pjmaenh for the work on his integration. I’ve been using it for 9 months now and it worked pretty well for me.

But all my other integrations have a configuration from the UI, are grouped into devices and are assigned into areas. With me trying to find any excuse to write a custom integration, I chose to rewrite this integration. :smiley:

I’ve rewritten the library for using the Vaillant API as well as the integration. Both are based on previous work by @pjmaenh and the work of others before him (samueldumont, jabesq).

The new integration has the following features right now:

  • Climate entity, which is working slightly differently than the previous integration
  • Hot Water Boost switch, for turning on HWB functionality available from the official app
  • Configuration in the UI
  • Storing only tokens, not your credentials, inside Home Assistant

To expand a little on the last point… For this integration, you have to enter client id and secret (those extracted from the official app) and your credentials (email and password) in the UI. But after you enter these, the integration fetches a token which is used for accessing the API and stores only the client id/secret and this token inside HA storage. Credentials are discarded and never stored on device.

Please do note that this is still heavily work in progress. My thinking was to share the component here in the community once I add it to HACS default repository, because at that point I’d do all the changes, document all the features and fix all the issues I encounter while testing it out in my setup.

Since you guys already found it, well I guess I’ll have some help in testing it out :smiley:

Some of the things I plan on adding:

  • Already mentioned listing in the HACS default store
  • Adding thermostat battery level sensor entity
  • Re-authentication through the UI if for some reason token expires
  • Tests :sweat_smile:

Thanks to anyone who’s going to try it out and please, if you have any issues with it, post them here and I’ll try to resolve them.

2 Likes

For the current issues you’re facing, please make sure you’re running the latest HA and latest version of the component.

Also, I only have Vaillant vSMART thermostat, so if anything doesn’t work on some other device/brand, I’ll need help with testing and debugging as I’m unable to do anything myself.

I’ll be doing the improvements on a regular basis, but as with most of the custom components, this is a hobby project, so please be patient. Especially before the component is in the HACS, because until then, it will miss some key parts (like regular automated tests with multiple versions of the HA) and is considered pre-alpha :smiley:

This looks like something new to me. I’ll focus on adding better logging and tests in the following period, hopefully this will help. In the meantime, if you can’t use your thermostat, I’d advice going back to the previous integration until I roll out these logging and testing improvements. The component is still new and rough around the edges, so it will probably be less frustrating to remove it. :sweat_smile:

But I’ll save this message and get back to it and help you resolve the issues.

In the Vaillant vSMART app there is a “Hot Water Boost” button. Not sure if there is something like that in MiGo, but if yes, this is it. :smiley:

Previous integration had this option as a preset, but I extracted this away from the climate entity into a separate entity.

I’ll document everything once I prepare the component for v1.

Ok, this one I saw already in my setup :smiley:

Please upgrade to the newest HA and use the newest version of the component. The library for accessing the API is using a beta versions of the underlying HTTP libraries. Those had some breaking changes in the last couple of months, as they are still not fully finished. One of those breaking changes caused the issue you are seeing.

Upgrading should make things work. If not, please write an update here and I’ll try to help out more than “pls upgrade” :smiley:

image

3 Likes