Integration of Bosch Home Connect washing machine and dryer

Introduction

Two months ago I’ve replaced my 15-year-old washing machine with a new one and I also bought a dryer. Both devices are from Bosch (Serie) 8 with WiFi and Home Connect. Today I may present integration of those two household appliances with Loxone. In my solution I use ioBroker do retrieve data from Bosch Home Connect cloud and to publish it to MQTT broker from where the MQTT Gateway Plugin sends it to Miniserver UPD port. Everything is done within one LoxBerry system running on RPi4 mounted in a DIN rack. Integration provides insight into device status, current program, program progress and remaining time. It provides also push notifications at the end of washing / drying job.

Those are the appliances I’m using: Bosch WAVH8K90PL washing machine at the bottom and Bosch WTX87KH0PL dryer at the top. Please mind the product codes are country specific.  I chose those specific models because of the features that were important to me: the i-Dos system in the washing machine and the AutoClean system in the dryer. Both devices have the same load capacity of 9 kg.

Prerequisites

You need to have:

  • Loxberry system with MQTT Gateway and Docker plugins

  • ioBroker run as docker container, with MQTT client and Home Connect adapters installed

  • Both washer and dryer successfully connected to Home Connect cloud

  • Home Connect adapter paired with your Home Connect cloud account. This is not exactly easy but its well described in adapter manual:
    https://github.com/dna909/ioBroker.homeconnect

Installing tools mentioned above is out of the scope of this tutorial. To connect your appliances to cloud please refer to user manual.

Please note

Integration with Home Connect might be done in different way (probably directly from ioBroker to Miniserver websocket API). I personally prefer to integrate as much external systems as possible over MQTT and that's just my way.

The Data

This is how the object tree should look like in ioBoker after you successfully connect the adapter the Home Connect cloud:



By expanding the object tree you see data provided by Home Connect cloud:



Only few of those objects are required to be published to MQTT (7 for washer, 6 for dryer). Names of the topics I’ve used will be shown below in this tutorial but here’s their structure in MQTT Explorer app:



As much of the data provided by Home Connect is in text form it must be converted into numerical values first before being sent over UDP to the Miniserver. This is complete conversion list that I have created based on Bosch API documentation and own experience:



Feel free to copy that conversion list from here:

null=0
LaundryCare.Common.EnumType.ProcessPhase.DetectingLoad=1
LaundryCare.Common.EnumType.ProcessPhase.Washing=2
LaundryCare.Washer.EnumType.SpinSpeed.Off=0
LaundryCare.Washer.EnumType.SpinSpeed.RPM400=400
LaundryCare.Washer.EnumType.SpinSpeed.RPM600=600
LaundryCare.Washer.EnumType.SpinSpeed.RPM800=800
LaundryCare.Washer.EnumType.SpinSpeed.RPM1000=1000
LaundryCare.Washer.EnumType.SpinSpeed.RPM1200=1200
LaundryCare.Washer.EnumType.SpinSpeed.RPM1400=1400
LaundryCare.Washer.EnumType.SpinSpeed.RPM1600=1600
LaundryCare.Washer.EnumType.Temperature.Cold=0
LaundryCare.Washer.EnumType.Temperature.GC20=20
LaundryCare.Washer.EnumType.Temperature.GC30=30
LaundryCare.Washer.EnumType.Temperature.GC40=40
LaundryCare.Washer.EnumType.Temperature.GC50=50
LaundryCare.Washer.EnumType.Temperature.GC60=60
LaundryCare.Washer.EnumType.Temperature.GC70=70
LaundryCare.Washer.EnumType.Temperature.GC80=80
LaundryCare.Washer.EnumType.Temperature.GC90=90
LaundryCare.Washer.Program.Cotton=11
LaundryCare.Washer.Program.Sensitive=12
LaundryCare.Washer.Program.EasyCare=13
LaundryCare.Washer.Program.Mix=14
LaundryCare.Washer.Program.DelicatesSilk=15
LaundryCare.Washer.Program.Wool=16
LaundryCare.Washer.Program.Rinse=17
LaundryCare.Washer.Program.SpinDrain=21
LaundryCare.Washer.Program.DrumClean=22
LaundryCare.Washer.Program.SportFitness=23
LaundryCare.Washer.Program.ShirtsBlouses=24
LaundryCare.Washer.Program.Super153045.Super1530=25
LaundryCare.Washer.Program.Auto30=27
BSH.Common.EnumType.PowerState.Off=0
BSH.Common.EnumType.PowerState.On=1
BSH.Common.EnumType.DoorState.Locked=-1
BSH.Common.EnumType.DoorState.Closed=0
BSH.Common.EnumType.DoorState.Open=1
BSH.Common.EnumType.OperationState.Ready=0
BSH.Common.EnumType.OperationState.Run=1
BSH.Common.EnumType.OperationState.Finished=2
BSH.Common.EnumType.OperationState.Pause=3
BSH.Common.EnumType.OperationState.DelayedStart=4
LaundryCare.Dryer.Program.Cotton=31
LaundryCare.Dryer.Program.Synthetic=32
LaundryCare.Dryer.Program.Mix=33
LaundryCare.Dryer.Program.Delicates=34
LaundryCare.Dryer.Program.TimeWarm=36
LaundryCare.Dryer.Program.Super40=42
LaundryCare.Dryer.Program.ColdRefresh.1Piece=45



All MQTT topics I’ve created are listed here. They all carry numeric values after MQTT Gateway data conversion process:



Feel free to copy my MQTT topics from here:

iobroker/homeconnect/0/dryer/progs/act/ActiveProgram
iobroker/homeconnect/0/dryer/progs/act/opt/ProgramProgress
iobroker/homeconnect/0/dryer/progs/act/opt/RemainingProgramTime
iobroker/homeconnect/0/dryer/status/DoorState
iobroker/homeconnect/0/dryer/status/OperationState
iobroker/homeconnect/0/dryer/status/RemoteControlStartAllowed

iobroker/homeconnect/0/washer/progs/act/ActiveProgram
iobroker/homeconnect/0/washer/progs/act/opt/ProgramProgress
iobroker/homeconnect/0/washer/progs/act/opt/RemainingProgramTime
iobroker/homeconnect/0/washer/settings/PowerState
iobroker/homeconnect/0/washer/status/DoorState
iobroker/homeconnect/0/washer/status/OperationState
iobroker/homeconnect/0/washer/status/RemoteControlStartAllowed

The Diagram

Heart of the integration – the diagram. In the next two pics additional details will be shown, but first I mention two tricks were required due to flaws in Home Connect API.

  1. API reports bad device state after pausing the program. Hence the logic created with Saving Switches at the top of the page and use of intermediate state in Washer State block.

  2. Dryer does not report program finish properly, probably due to the anti-crease function still active (cyclic rotation of the drum). Hence the logic with Saving Switch at the bottom of page and the use of intermediate state in Dryer State block.

After more than two months of testing I may confirm that this diagram works fine.



Details of the left part of the diagram related to washer. Configuration of all Status blocks is shown here as well as formulas:



Please note: most of status texts in image above are in Polish (that my native language and the language of my Loxone app interface).
I believe you will figure out their meaning by yourself but for your convenience I attach a some basic translations 

Polish

English

Polish

English

W gotowości

Standby / Ready

Pranie w toku

Washing in progress

Pranie zakończone

Washing finished

Pranie wstrzymane

Washing paused

Pranie w toku (wznowione)

Washing in progress (resumed)

Oczekiwanie na start

Waiting for delayed start

Zamknięte

Closed

Otwarte

Open

Zablokowane

Locked

Pralka

Washer / Washing machine

Suszarka

Dryer

Stan drzwi

Door status

Pozostały czas

Remaining Time

Zdalny start

Remote start

Aktywny

Active

Nieaktywny

Inactive



Details of the right part of the diagram related to the dryer. Many elements are similar obviously, but not everything is:

The App

This is what it looks like in the Loxone app. On this screen washing is in progress and the dryer is not in use. The estimated remaining time of washing or drying is an information that might be useful in everyday life logistics:



The end of washing or drying generates a push notification. Contrary to the push notifications from the Bosch Home Connect app (which I have disabled), Loxone can make these notifications dependent on e.g. presence at home or other factors. Furthermore, the washing done notification is triggered immediately in this kind of integration. That was not possible in the days of my old washing machine where I’ve been using smart plug solution to monitor the power usage.



This is how it looks after washing has been finished:



Here the washing machine is unused and open and a drying is in progress. I might have made some cooler icons for the door but those will do for me.