Homeconnect

Adapter for Homeconnect devices

Current Release
1.6.1
Developer
TA2k, iobroker-community-adapters
License
MIT

Control and monitor Bosch, Siemens, NEFF and Gaggenau home appliances through the official Home Connect cloud API — dishwashers, washers, dryers, ovens, hobs, hoods, fridges, freezers, coffee makers, cleaning robots and more.

Every value arrives in a form you can use directly: on/off as a boolean, a fixed choice as a readable name, a measurement as a number with its unit and limits. Updates arrive live through a single event stream, and programs can be selected, configured and started from ioBroker.

Requirements

  • Node.js >= 22
  • js-controller >= 7.2.5
  • Admin >= 8.2.0
  • A free Home Connect developer account, for a Client ID and a Client Secret

Getting your Home Connect credentials

Three things belong together: your normal Home Connect account (the one of the Home Connect app, where your appliances are paired), a developer account linked to it, and an application registered in the developer account. The settings page shows the same steps as a checklist, with buttons for creating the developer account, registering the application and opening your applications.

  1. Create a free developer account at developer.home-connect.com. As Default Home Connect Account for Testing enter the e-mail address of your Home Connect app account — exactly as in the app, in lower case. This links the two accounts; without it the sign-in is refused.
  2. Register an application: any Application ID, OAuth Flow Device Flow (the adapter runs on a server without a browser; the flow cannot be changed later), Success Redirect empty, One Time Token Mode off.
  3. Wait 15 to 60 minutes — a new or edited application only becomes active at Home Connect after that.
  4. Copy the Client ID (64 characters) and the Client Secret into the adapter settings and save.

Signing in

After saving the credentials the adapter requests a sign-in link. The settings panel shows it together with the code to confirm. Open the link, sign in with your Home Connect account and approve the access — the adapter picks the approval up on its own within a few seconds and stores the login encrypted. The notification only points you to the settings: the code changes every five minutes, and the panel always shows the current one.

While the link waits, it renews itself every five minutes. If nobody confirms one for an hour, the adapter stops asking Home Connect for new links; Request a new sign-in link in the panel starts again, and so does a restart. Reset sign-in forgets the login and starts a new sign-in — for example to switch to another Home Connect account. The Test connection button asks Home Connect directly: it reports how many appliances your account lists and how many of them are connected right now, and whether live updates are running.

You sign in once. The adapter refreshes its access by itself; a new sign-in is only needed when the access is revoked in your Home Connect account, when Home Connect refuses the application (disabled, deleted, new secret), or when the ioBroker data moved to another system — the stored login cannot be read there, and the log says so.

When Home Connect refuses the sign-in, the panel shows what it answered and what to do; auth.lastError keeps the answer (see Troubleshooting).

The object tree

Each appliance gets one folder. Its name is the appliance's model and the last four characters of its own Home Connect number (for example sx87tx02ce-5775) — unchangeable, and different for two appliances of the same model, which neither the app name nor the E-number from the type plate is. The appliance name from the app stays visible as the folder's display name and follows it live. Should two appliances of one model end in the same four characters, the second one gets its whole number.

Below each appliance — which channels an appliance gets depends on its type; fridges, freezers and wine coolers have no programs:

ChannelWhat is in it
inforeachable — whether the appliance is connected to Home Connect right now (the green/grey dot on the folder); firmware — the firmware version of a washer, dryer or washer-dryer; Home Connect has no query for it, so it appears once the appliance sends its versions by itself and then stays
statusRead-only appliance state: operation state, programRunning, remote and local control, interior light, faults, battery
runThe program under way: remaining, elapsed and total time, progress, phase, energy and water forecasts, recommendations — empty while no program runs
settingsWritable settings: power state, child lock, interior light, fridge temperatures
doorsEvery door of the appliance as a boolean: door (the appliance door), doorLocked, and on refrigeration appliances each compartment (freezer, refrigerator …)
eventsEvery event of this appliance type as a boolean: program finished, salt nearly empty, rinse aid empty, filter saturated, door alarm …
countersRunning totals: runs, running time, energy, water, detergent, softener, beverages
programsselectedProgram, activeProgram, and the start / stop buttons
optionsThe options you choose for a program: temperature, spin speed, intensive zone, delayed start …
commandsMomentary buttons the appliance offers, e.g. acknowledging an event
historyThe runs, one channel each: latest, previous, thirdLatest … with program and duration; latest also carries start, end, how it ended, and water, energy, detergent and softener where the appliance reports them
statisticsPer program: runs started, runs completed, running time

At instance level, info.devicesTotal, info.devicesOnline and info.devicesAllOnline summarise the account, info.connection is green when the adapter is signed in and live updates are running, and auth.lastError holds Home Connect's answer to a refused sign-in (empty while signed in, Unknown while nothing was asked yet).

Where the data points come from:

  • Status, settings, programs, options and commands are what the appliance itself reports to Home Connect — the adapter creates exactly those. options holds only what you choose for a program; values the appliance reports while a program runs (remaining time, progress, forecasts, process phase) are under run.
  • Events are the exception. Home Connect has no way to ask which events an appliance can send — an event only arrives at the moment it happens. So the adapter creates every known event of the appliance type in advance, from its own catalogue: you can build a script on "salt empty" today instead of waiting months for the salt to run out. An appliance may therefore have event data points it never uses; an event the catalogue does not know is added the first time the appliance sends it.

Two properties are worth knowing:

  • Every data point exists from the first read of the connected appliance on — the events of the appliance type even from the first start, and the options of all its programs, not only of the one currently selected.
  • No data point ever disappears. A switched-off appliance reports far less to the cloud, but that never means it lost a capability. Only an appliance you remove from your Home Connect account loses its folder. (Exception: a statistics channel named program<number> moves to the program's name once the adapter has learned it or its program table names the number; recordings, aliases, rooms and functions move along.)

Operating appliances

  • A setting: write the value into the data point under settings. "true", 1 and true all work — the adapter converts to the data point's type before sending.
  • Start a program: pick it in programs.selectedProgram, set the options you want under options, then set programs.start to true. The adapter sends the selected options with the start; if the appliance refuses that combination, it retries once with the program's defaults.
  • Stop a program: set programs.stop to true.
  • A command: set the button under commands to true; it falls back to false by itself.

A written value counts as done (ack) once the appliance reports it back. If the appliance refuses it, the data point returns to the appliance's real value.

Home Connect only accepts remote operation when the appliance allows it — most machines need Remote Start enabled on the appliance itself, and many refuse a change while a program is running. status.remoteControlActive and status.remoteControlStartAllowed tell you what the appliance currently permits.

Data point names and descriptions

The adapter's own names come first: it names the events, the common status values and settings, the program options and its own structure in eleven languages. Where it has no name of its own, it uses the localized name Home Connect sends in your ioBroker system language, and as a last resort a readable name derived from the id. The description explains what a data point means, never repeats the manufacturer's key, and stays empty where the adapter has nothing to explain.

Names and descriptions belong to the adapter: an update brings existing installations along, so a tree from an older version does not keep old labels. If you want your own naming, use aliases or your own data points under 0_userdata.

Updating from 1.x

Version 2.0 replaces the raw data tree of the community releases up to 1.6.x with a readable one per appliance. Example: homeconnect.0.012345678901234567.status.BSH_Common_Status_DoorState becomes homeconnect.0.kg49nsbbf-4567.status.doorOpen — the device folder is named by the model and the last four characters of the appliance's own number.

The update takes care of the tree itself: your login and Client ID are kept, and rooms, functions and aliases move to the datapoint that takes the old one's place as soon as the appliance has been read once. A recording setting moves along only on a tree that also carries a room, function or alias, and only where exactly one new datapoint of the same value type replaces the old one. Where the type changed (a door text became yes/no) or one old datapoint became several (operation state → operation state + program running), the new datapoint starts without a recording — enable it again there. The log counts the room/function entries and aliases carried and the datapoints with a room or alias that had no counterpart.

What you have to do:

  1. Make a backup before the update. Going back to 1.x is not supported — the old tree is removed once it has been handed over, and 1.x cannot read the login 2.0 stores encrypted.
  2. Adjust your scripts and visualizations to the new IDs. The table lists, for the last part of every old ID, the datapoint that replaces it (below the new device folder). Rows marked (decoded) are new datapoints read from the old raw value; rooms, functions, aliases and recordings of the old raw datapoint are not carried to them.
Old ID, last part (1.x)New datapoint (2.0)
BSH_Common_Command_AcknowledgeEventcommands.acknowledgeEvent
BSH_Common_Command_DeactivateWiFi— (appliance-internal, no longer created)
BSH_Common_Command_OpenDoorcommands.openDoor
BSH_Common_Command_PartlyOpenDoorcommands.partlyOpenDoor
BSH_Common_Command_PauseProgramcommands.pauseProgram
BSH_Common_Command_ResumeProgramcommands.resumeProgram
BSH_Common_Command_StopProgramprograms.stop
BSH_Common_Event_AlarmClockElapsedevents.alarmClockElapsed
BSH_Common_Event_AquaStopOccuredevents.aquaStopOccured
BSH_Common_Event_Favorite_001_ExternalTriggerevents.favorite001ExternalTrigger
BSH_Common_Event_Favorite_002_ExternalTriggerevents.favorite002ExternalTrigger
BSH_Common_Event_LowWaterPressureevents.lowWaterPressure
BSH_Common_Event_ProgramAbortedevents.programAborted
BSH_Common_Event_ProgramFinishedevents.programFinished
BSH_Common_Option_BaseProgramprograms.baseProgram
BSH_Common_Option_CurrentStepRemainingTimerun.currentStepRemainingTime
BSH_Common_Option_Durationoptions.duration
BSH_Common_Option_ElapsedProgramTimerun.elapsedProgramTime
BSH_Common_Option_ElapsedProgramTime_AutoCountingrun.elapsedProgramTimeAutoCounting
BSH_Common_Option_EnergyForecastrun.energyForecast
BSH_Common_Option_EstimatedTotalProgramTimerun.estimatedTotalProgramTime
BSH_Common_Option_FinishInRelativeoptions.finishInRelative
BSH_Common_Option_ProgramNameprograms.programName
BSH_Common_Option_ProgramProgressrun.programProgress
BSH_Common_Option_RemainingProgramTimerun.remainingProgramTime
BSH_Common_Option_RemainingProgramTime_AutoCountingrun.remainingProgramTimeAutoCounting
BSH_Common_Option_RemainingProgramTimeEstimationStaterun.remainingProgramTimeEstimationState
BSH_Common_Option_RemainingProgramTimeIsEstimatedrun.remainingProgramTimeIsEstimated
BSH_Common_Option_SmartEnergyService_SmartStartEnabledstatus.smartEnergyServiceSmartStartEnabled
BSH_Common_Option_StartInRelativeoptions.startInRelative
BSH_Common_Option_WaterForecastrun.waterForecast
BSH_Common_Root_ActiveProgramprograms.activeProgram
BSH_Common_Root_SelectedProgramprograms.selectedProgram
BSH_Common_Setting_AlarmClocksettings.alarmClock
BSH_Common_Setting_AllowBackendConnection— (appliance-internal, no longer created)
BSH_Common_Setting_AmbientLightBrightnesssettings.ambientLightBrightness
BSH_Common_Setting_AmbientLightColorsettings.ambientLightColor
BSH_Common_Setting_AmbientLightCustomColorsettings.ambientLightCustomColor
BSH_Common_Setting_AmbientLightEnabledsettings.ambientLightEnabled
BSH_Common_Setting_ChildLocksettings.childLock
BSH_Common_Setting_LiquidVolumeUnitsettings.liquidVolumeUnit
BSH_Common_Setting_PowerStatesettings.powerState
BSH_Common_Setting_TemperatureUnitsettings.temperatureUnit
BSH_Common_Status_BackendConnected— (appliance-internal, no longer created)
BSH_Common_Status_BatteryChargingStatestatus.batteryChargingState
BSH_Common_Status_BatteryLevelstatus.batteryLevel
BSH_Common_Status_ChargingConnectionstatus.chargingConnection
BSH_Common_Status_DoorStatedoors.door (+ doors.doorLocked on appliances with a lockable door)
BSH_Common_Status_ErrorCodesListstatus.errorCodes, status.faultActive (decoded)
BSH_Common_Status_InteriorIlluminationActivestatus.interiorIlluminationActive
BSH_Common_Status_LocalControlActivestatus.localControlActive
BSH_Common_Status_OperationStatestatus.operationState, status.programRunning
BSH_Common_Status_Program_All_Count_Completedcounters.programAllCountCompleted
BSH_Common_Status_Program_All_Count_Startedcounters.programAllCountStarted
BSH_Common_Status_Program_All_Energy_Consumedcounters.programAllEnergyConsumed
BSH_Common_Status_Program_All_Time_Effectivecounters.programAllTimeEffective
BSH_Common_Status_Program_All_Water_Consumedcounters.programAllWaterConsumed
BSH_Common_Status_ProgramSessionSummary_Latesthistory.latest.* (decoded)
BSH_Common_Status_RemoteControlActivestatus.remoteControlActive
BSH_Common_Status_RemoteControlStartAllowedstatus.remoteControlStartAllowed
BSH_Common_Status_RemoteControlStartAllowedSincestatus.remoteControlStartAllowedSince
BSH_Common_Status_SoftwareUpdateTransactionID— (appliance-internal, no longer created)
BSH_Common_Status_Video_CameraStatestatus.videoCameraState
ConsumerProducts_CleaningRobot_Event_DockingStationNotFoundevents.dockingStationNotFound
ConsumerProducts_CleaningRobot_Event_DustBin_NotInstalledevents.dustBinNotInstalled
ConsumerProducts_CleaningRobot_Event_EmptyDustBoxAndCleanFilterevents.emptyDustBoxAndCleanFilter
ConsumerProducts_CleaningRobot_Event_Robot_Liftedevents.robotLifted
ConsumerProducts_CleaningRobot_Event_RobotIsStuckevents.robotIsStuck
ConsumerProducts_CleaningRobot_Option_CarpetBoostEnabledoptions.carpetBoostEnabled
ConsumerProducts_CleaningRobot_Option_CleaningModeoptions.cleaningMode
ConsumerProducts_CleaningRobot_Option_CleaningPassesoptions.cleaningPasses
ConsumerProducts_CleaningRobot_Option_CleaningSpeedoptions.cleaningSpeed
ConsumerProducts_CleaningRobot_Option_MopExtensionEnabledoptions.mopExtensionEnabled
ConsumerProducts_CleaningRobot_Option_ProcessPhaserun.processPhase
ConsumerProducts_CleaningRobot_Option_ReferenceMapIdoptions.referenceMapId
ConsumerProducts_CleaningRobot_Option_SuctionPoweroptions.suctionPower
ConsumerProducts_CleaningRobot_Option_WaterFlowRateoptions.waterFlowRate
ConsumerProducts_CleaningRobot_Setting_CurrentMapsettings.currentMap
ConsumerProducts_CleaningRobot_Setting_NameOfMap1settings.nameOfMap1
ConsumerProducts_CleaningRobot_Setting_NameOfMap2settings.nameOfMap2
ConsumerProducts_CleaningRobot_Setting_NameOfMap3settings.nameOfMap3
ConsumerProducts_CleaningRobot_Setting_NameOfMap4settings.nameOfMap4
ConsumerProducts_CleaningRobot_Setting_NameOfMap5settings.nameOfMap5
ConsumerProducts_CleaningRobot_Status_DustBoxInsertedstatus.dustBoxInserted
ConsumerProducts_CleaningRobot_Status_LastSelectedMapstatus.lastSelectedMap
ConsumerProducts_CleaningRobot_Status_Liftedstatus.lifted
ConsumerProducts_CleaningRobot_Status_Loststatus.lost
ConsumerProducts_CleaningRobot_Status_ProcessPhaserun.processPhase
ConsumerProducts_CoffeeMaker_Event_BeanContainerEmptyevents.beanContainerEmpty
ConsumerProducts_CoffeeMaker_Event_CalcNCleanIn10Cupsevents.calcNCleanIn10Cups
ConsumerProducts_CoffeeMaker_Event_CalcNCleanIn15Cupsevents.calcNCleanIn15Cups
ConsumerProducts_CoffeeMaker_Event_CalcNCleanIn20Cupsevents.calcNCleanIn20Cups
ConsumerProducts_CoffeeMaker_Event_CalcNCleanIn5Cupsevents.calcNCleanIn5Cups
ConsumerProducts_CoffeeMaker_Event_DescalingIn10Cupsevents.descalingIn10Cups
ConsumerProducts_CoffeeMaker_Event_DescalingIn15Cupsevents.descalingIn15Cups
ConsumerProducts_CoffeeMaker_Event_DescalingIn20Cupsevents.descalingIn20Cups
ConsumerProducts_CoffeeMaker_Event_DescalingIn5Cupsevents.descalingIn5Cups
ConsumerProducts_CoffeeMaker_Event_DeviceCalcNCleanBlockageevents.deviceCalcNCleanBlockage
ConsumerProducts_CoffeeMaker_Event_DeviceCalcNCleanOverdueevents.deviceCalcNCleanOverdue
ConsumerProducts_CoffeeMaker_Event_DeviceCleaningOverdueevents.deviceCleaningOverdue
ConsumerProducts_CoffeeMaker_Event_DeviceDescalingBlockageevents.deviceDescalingBlockage
ConsumerProducts_CoffeeMaker_Event_DeviceDescalingOverdueevents.deviceDescalingOverdue
ConsumerProducts_CoffeeMaker_Event_DeviceShouldBeCalcNCleanedevents.deviceShouldBeCalcNCleaned
ConsumerProducts_CoffeeMaker_Event_DeviceShouldBeCleanedevents.deviceShouldBeCleaned
ConsumerProducts_CoffeeMaker_Event_DeviceShouldBeDescaledevents.deviceShouldBeDescaled
ConsumerProducts_CoffeeMaker_Event_DripTrayFullevents.dripTrayFull
ConsumerProducts_CoffeeMaker_Event_KeepMilkTankCoolevents.keepMilkTankCool
ConsumerProducts_CoffeeMaker_Event_WaterTankEmptyevents.waterTankEmpty
ConsumerProducts_CoffeeMaker_Option_AromaSelectoptions.aromaSelect
ConsumerProducts_CoffeeMaker_Option_BeanAmountoptions.beanAmount
ConsumerProducts_CoffeeMaker_Option_BeanContainerSelectionoptions.beanContainerSelection
ConsumerProducts_CoffeeMaker_Option_BeverageSizeoptions.beverageSize
ConsumerProducts_CoffeeMaker_Option_BeveragesRemainingstatus.beveragesRemaining
ConsumerProducts_CoffeeMaker_Option_Coarsnessoptions.coarsness
ConsumerProducts_CoffeeMaker_Option_Coarsness_Recommendationrun.coarsnessRecommendation
ConsumerProducts_CoffeeMaker_Option_CoffeeMilkRatiooptions.coffeeMilkRatio
ConsumerProducts_CoffeeMaker_Option_CoffeeStrengthoptions.coffeeStrength
ConsumerProducts_CoffeeMaker_Option_CoffeeStrength_Recommendationrun.coffeeStrengthRecommendation
ConsumerProducts_CoffeeMaker_Option_CoffeeTemperatureoptions.coffeeTemperature
ConsumerProducts_CoffeeMaker_Option_CoffeeTemperature_Recommendationrun.coffeeTemperatureRecommendation
ConsumerProducts_CoffeeMaker_Option_FillQuantityoptions.fillQuantity
ConsumerProducts_CoffeeMaker_Option_FillQuantity_Recommendationrun.fillQuantityRecommendation
ConsumerProducts_CoffeeMaker_Option_FlowRateoptions.flowRate
ConsumerProducts_CoffeeMaker_Option_FlowRate_Recommendationrun.flowRateRecommendation
ConsumerProducts_CoffeeMaker_Option_HotWaterTemperatureoptions.hotWaterTemperature
ConsumerProducts_CoffeeMaker_Option_MultipleBeveragesoptions.multipleBeverages
ConsumerProducts_CoffeeMaker_Option_Shot_Countoptions.shotCount
ConsumerProducts_CoffeeMaker_Setting_CupWarmersettings.cupWarmer
ConsumerProducts_CoffeeMaker_Status_BeverageCounterCoffeecounters.beverageCounterCoffee
ConsumerProducts_CoffeeMaker_Status_BeverageCounterCoffeeAndMilkcounters.beverageCounterCoffeeAndMilk
ConsumerProducts_CoffeeMaker_Status_BeverageCounterFrothyMilkcounters.beverageCounterFrothyMilk
ConsumerProducts_CoffeeMaker_Status_BeverageCounterHotMilkcounters.beverageCounterHotMilk
ConsumerProducts_CoffeeMaker_Status_BeverageCounterHotWatercounters.beverageCounterHotWater
ConsumerProducts_CoffeeMaker_Status_BeverageCounterHotWaterCupscounters.beverageCounterHotWaterCups
ConsumerProducts_CoffeeMaker_Status_BeverageCounterMilkcounters.beverageCounterMilk
ConsumerProducts_CoffeeMaker_Status_BeverageCounterPowderCoffeecounters.beverageCounterPowderCoffee
ConsumerProducts_CoffeeMaker_Status_BeverageCounterRistrettoEspressocounters.beverageCounterRistrettoEspresso
Cooking_Common_Event_Hood_GreaseFilterMaxSaturationNearlyReachedevents.hoodGreaseFilterMaxSaturationNearlyReached
Cooking_Common_Event_Hood_GreaseFilterMaxSaturationReachedevents.hoodGreaseFilterMaxSaturationReached
Cooking_Common_Option_Hood_Boostoptions.hoodBoost
Cooking_Common_Option_Hood_IntensiveLeveloptions.hoodIntensiveLevel
Cooking_Common_Option_Hood_VentingLeveloptions.hoodVentingLevel
Cooking_Common_Setting_Lightingsettings.lighting
Cooking_Common_Setting_LightingBrightnesssettings.lightingBrightness
Cooking_Hob_Setting_Ventilationsettings.ventilation
Cooking_Hood_Setting_ColorTemperaturesettings.colorTemperature
Cooking_Hood_Setting_ColorTemperaturePercentsettings.colorTemperaturePercent
Cooking_Oven_Event_PreheatFinishedevents.preheatFinished
Cooking_Oven_Event_RegularPreheatFinishedevents.regularPreheatFinished
Cooking_Oven_Option_AirExchangeoptions.airExchange
Cooking_Oven_Option_CavitySelectoroptions.cavitySelector
Cooking_Oven_Option_FastPreHeatoptions.fastPreHeat
Cooking_Oven_Option_HeatupProgressrun.heatupProgress
Cooking_Oven_Option_Leveloptions.level
Cooking_Oven_Option_MeatProbeTemperatureV2options.meatProbeTemperatureV2
Cooking_Oven_Option_MicrowavePoweroptions.microwavePower
Cooking_Oven_Option_PyrolysisLeveloptions.pyrolysisLevel
Cooking_Oven_Option_SetpointTemperatureoptions.setpointTemperature
Cooking_Oven_Option_SteamAssistLeveloptions.steamAssistLevel
Cooking_Oven_Option_SteamBoostoptions.steamBoost
Cooking_Oven_Option_WarmingLeveloptions.warmingLevel
Cooking_Oven_Setting_SabbathModesettings.sabbathMode
Cooking_Oven_Status_CurrentCavityTemperaturestatus.currentCavityTemperature
Dishcare_Dishwasher_Event_MachineCareAndFilterCleaningReminderevents.machineCareAndFilterCleaningReminder
Dishcare_Dishwasher_Event_MachineCareAndLowMaintenanceFilterCleaningReminderevents.machineCareAndLowMaintenanceFilterCleaningReminder
Dishcare_Dishwasher_Event_MachineCareReminderevents.machineCareReminder
Dishcare_Dishwasher_Event_ProgramBlockedSaltLackevents.programBlockedSaltLack
Dishcare_Dishwasher_Event_RinseAidLackevents.rinseAidLack
Dishcare_Dishwasher_Event_RinseAidNearlyEmptyevents.rinseAidNearlyEmpty
Dishcare_Dishwasher_Event_SaltLackevents.saltLack
Dishcare_Dishwasher_Event_SaltNearlyEmptyevents.saltNearlyEmpty
Dishcare_Dishwasher_Event_SmartFilterCleaningReminderevents.smartFilterCleaningReminder
Dishcare_Dishwasher_Option_BrillianceDryoptions.brillianceDry
Dishcare_Dishwasher_Option_DelicateBasketoptions.delicateBasket
Dishcare_Dishwasher_Option_EcoDryoptions.ecoDry
Dishcare_Dishwasher_Option_EnergySafeoptions.energySafe
Dishcare_Dishwasher_Option_ExtraDryoptions.extraDry
Dishcare_Dishwasher_Option_ExtraRinseoptions.extraRinse
Dishcare_Dishwasher_Option_FixedZoneoptions.fixedZone
Dishcare_Dishwasher_Option_FlexSpray_BackLeftoptions.flexSprayBackLeft
Dishcare_Dishwasher_Option_FlexSpray_BackRightoptions.flexSprayBackRight
Dishcare_Dishwasher_Option_FlexSpray_FrontLeftoptions.flexSprayFrontLeft
Dishcare_Dishwasher_Option_FlexSpray_FrontRightoptions.flexSprayFrontRight
Dishcare_Dishwasher_Option_FlexSpray_Typeoptions.flexSprayType
Dishcare_Dishwasher_Option_HalfLoadoptions.halfLoad
Dishcare_Dishwasher_Option_HolidayModeoptions.holidayMode
Dishcare_Dishwasher_Option_HygienePlusoptions.hygienePlus
Dishcare_Dishwasher_Option_IntensivZoneoptions.intensivZone
Dishcare_Dishwasher_Option_LearningDishwasher_CleaningLeveloptions.learningDishwasherCleaningLevel
Dishcare_Dishwasher_Option_LearningDishwasher_DryingLeveloptions.learningDishwasherDryingLevel
Dishcare_Dishwasher_Option_LearningDishwasher_DurationLeveloptions.learningDishwasherDurationLevel
Dishcare_Dishwasher_Option_Pretreatmentoptions.pretreatment
Dishcare_Dishwasher_Option_SanitationUCoptions.sanitationUC
Dishcare_Dishwasher_Option_SilenceOnDemandoptions.silenceOnDemand
Dishcare_Dishwasher_Option_StorageFunctionoptions.storageFunction
Dishcare_Dishwasher_Option_Turbooptions.turbo
Dishcare_Dishwasher_Option_VarioSpeedoptions.varioSpeed
Dishcare_Dishwasher_Option_VarioSpeedPlusoptions.varioSpeedPlus
Dishcare_Dishwasher_Option_ZeoliteDryoptions.zeoliteDry
Dishcare_Dishwasher_Setting_TimeLightsettings.timeLight
Dishcare_Dishwasher_Status_EcoDryActiverun.ecoDryActive
Dishcare_Dishwasher_Status_ProgramPhaserun.programPhase
LaundryCare_Common_Event_DelayedShutdownevents.delayedShutdown
LaundryCare_Common_Event_DelayedShutdownCanceledevents.delayedShutdownCanceled
LaundryCare_Common_Event_DoorNotLockableevents.doorNotLockable
LaundryCare_Common_Event_DoorNotUnlockableevents.doorNotUnlockable
LaundryCare_Common_Event_DoorOpenevents.doorOpen
LaundryCare_Common_Event_FatalErrorOccuredevents.fatalErrorOccured
LaundryCare_Common_Event_FoamDetectionevents.foamDetection
LaundryCare_Common_Event_SupplyPower_BlackedOutevents.supplyPowerBlackedOut
LaundryCare_Common_Event_SupplyPower_SupplyVoltageTooLowevents.supplyPowerSupplyVoltageTooLow
LaundryCare_Common_Option_LoadRecommendationrun.loadRecommendation
LaundryCare_Common_Option_LowTemperatureHygieneoptions.lowTemperatureHygiene
LaundryCare_Common_Option_ProcessPhaserun.processPhase
LaundryCare_Common_Option_SilentModeoptions.silentMode
LaundryCare_Common_Option_SpeedPerfectoptions.speedPerfect
LaundryCare_Common_Option_VarioPerfectoptions.varioPerfect
LaundryCare_Common_Setting_Brightnesssettings.brightness
LaundryCare_Common_Setting_EndSignalVolumesettings.endSignalVolume
LaundryCare_Common_Setting_KeySignalVolumesettings.keySignalVolume
LaundryCare_Common_Status_Program_Details_Program01statistics.<program>.* (decoded)
LaundryCare_Common_Status_Program_Details_Program02statistics.<program>.* (decoded)
LaundryCare_Common_Status_Program_Details_Program06statistics.<program>.* (decoded)
LaundryCare_Common_Status_Program_Details_Program08statistics.<program>.* (decoded)
LaundryCare_Common_Status_Program_Details_Program09statistics.<program>.* (decoded)
LaundryCare_Common_Status_Program_Details_Program10statistics.<program>.* (decoded)
LaundryCare_Common_Status_Program_Details_Program11statistics.<program>.* (decoded)
LaundryCare_Common_Status_Program_Details_Program20statistics.<program>.* (decoded)
LaundryCare_Common_Status_Program_History_EffectiveTimehistory.latest.*, history.previous.*, … (decoded)
LaundryCare_Common_Status_Program_History_Uidhistory.latest.*, history.previous.*, … (decoded)
LaundryCare_Common_Status_Version_Smm_DomainFwinfo.firmware (the version number only)
LaundryCare_Common_Status_Version_Smm_HcFw— (appliance-internal, no longer created)
LaundryCare_Dryer_Event_DryingProcessFinishedevents.dryingProcessFinished
LaundryCare_Dryer_Option_ConnectedDry_OriginalProgramTimerun.connectedDryOriginalProgramTime
LaundryCare_Dryer_Option_DryingTargetoptions.dryingTarget
LaundryCare_Dryer_Option_DryingTargetAdjustmentoptions.dryingTargetAdjustment
LaundryCare_Dryer_Option_Gentleoptions.gentle
LaundryCare_Dryer_Option_HalfLoadoptions.halfLoad
LaundryCare_Dryer_Option_ProcessPhaserun.processPhase
LaundryCare_Dryer_Option_Refresheroptions.refresher
LaundryCare_Dryer_Option_WrinkleGuardoptions.wrinkleGuard
LaundryCare_Washer_Event_Circulation_Pump_ErrorLockedRotorevents.circulationPumpErrorLockedRotor
LaundryCare_Washer_Event_Circulation_Pump_ErrorMaxTorqueevents.circulationPumpErrorMaxTorque
LaundryCare_Washer_Event_IDos1FillLevelPoorevents.iDos1FillLevelPoor
LaundryCare_Washer_Event_IDos2FillLevelPoorevents.iDos2FillLevelPoor
LaundryCare_Washer_Event_IDosUnitDefectevents.iDosUnitDefect
LaundryCare_Washer_Event_PumpErrorevents.pumpError
LaundryCare_Washer_Event_Spin_SpinAbortevents.spinSpinAbort
LaundryCare_Washer_Event_WaterSupply_WarmWaterAbsentevents.waterSupplyWarmWaterAbsent
LaundryCare_Washer_Option_EISAoptions.eISA
LaundryCare_Washer_Option_IDos1_Activeoptions.iDos1Active
LaundryCare_Washer_Option_IDos1Activeoptions.iDos1Active
LaundryCare_Washer_Option_IDos1DosingLeveloptions.iDos1DosingLevel
LaundryCare_Washer_Option_IDos2_Activeoptions.iDos2Active
LaundryCare_Washer_Option_IDos2Activeoptions.iDos2Active
LaundryCare_Washer_Option_IDos2DosingLeveloptions.iDos2DosingLevel
LaundryCare_Washer_Option_IntensivePlusoptions.intensivePlus
LaundryCare_Washer_Option_LessIroningoptions.lessIroning
LaundryCare_Washer_Option_MiniLoadoptions.miniLoad
LaundryCare_Washer_Option_MultipleSoakoptions.multipleSoak
LaundryCare_Washer_Option_Prewashoptions.prewash
LaundryCare_Washer_Option_ProcessPhaserun.processPhase
LaundryCare_Washer_Option_RinseHoldoptions.rinseHold
LaundryCare_Washer_Option_RinsePlusoptions.rinsePlus
LaundryCare_Washer_Option_RinsePlus1options.rinsePlus1
LaundryCare_Washer_Option_SilentWashoptions.silentWash
LaundryCare_Washer_Option_Soakoptions.soak
LaundryCare_Washer_Option_SpeedPerfectoptions.speedPerfect
LaundryCare_Washer_Option_SpinSpeedoptions.spinSpeed
LaundryCare_Washer_Option_Stainsoptions.stains
LaundryCare_Washer_Option_Temperatureoptions.temperature
LaundryCare_Washer_Option_WaterAndRinsePlus1options.waterAndRinsePlus1
LaundryCare_Washer_Option_WaterPlusoptions.waterPlus
LaundryCare_Washer_Setting_EnableDrumCleanRemindersettings.enableDrumCleanReminder
LaundryCare_Washer_Setting_IDos1BaseLevelsettings.iDos1BaseLevel
LaundryCare_Washer_Setting_IDos1_ContentNamesettings.iDos1ContentName
LaundryCare_Washer_Setting_IDos2BaseLevelsettings.iDos2BaseLevel
LaundryCare_Washer_Setting_IDos2Contentsettings.iDos2Content
LaundryCare_Washer_Setting_IDos2_ContentNamesettings.iDos2ContentName
LaundryCare_Washer_Status_Detergent_All_Consumedcounters.detergentAllConsumed
LaundryCare_Washer_Status_Softener_All_Consumedcounters.softenerAllConsumed
LaundryCare_WasherDryer_Option_DryingTargetoptions.dryingTarget
LaundryCare_WasherDryer_Option_LowTemperatureHygieneoptions.lowTemperatureHygiene
LaundryCare_WasherDryer_Option_ProgramModeoptions.programMode
LaundryCare_WasherDryer_Option_WrinkleGuardBoostoptions.wrinkleGuardBoost
Refrigeration_Common_Setting_BottleCooler_SetpointTemperaturesettings.bottleCoolerSetpointTemperature
Refrigeration_Common_Setting_ChillerCommon_SetpointTemperaturesettings.chillerCommonSetpointTemperature
Refrigeration_Common_Setting_ChillerLeft_SetpointTemperaturesettings.chillerLeftSetpointTemperature
Refrigeration_Common_Setting_ChillerRight_SetpointTemperaturesettings.chillerRightSetpointTemperature
Refrigeration_Common_Setting_Dispenser_Enabledsettings.dispenserEnabled
Refrigeration_Common_Setting_Door_AssistantForceFreezersettings.doorAssistantForceFreezer
Refrigeration_Common_Setting_Door_AssistantForceFridgesettings.doorAssistantForceFridge
Refrigeration_Common_Setting_Door_AssistantFreezersettings.doorAssistantFreezer
Refrigeration_Common_Setting_Door_AssistantFridgesettings.doorAssistantFridge
Refrigeration_Common_Setting_Door_AssistantTimeoutFreezersettings.doorAssistantTimeoutFreezer
Refrigeration_Common_Setting_Door_AssistantTimeoutFridgesettings.doorAssistantTimeoutFridge
Refrigeration_Common_Setting_Door_AssistantTriggerFreezersettings.doorAssistantTriggerFreezer
Refrigeration_Common_Setting_Door_AssistantTriggerFridgesettings.doorAssistantTriggerFridge
Refrigeration_Common_Setting_EcoModesettings.ecoMode
Refrigeration_Common_Setting_FreshModesettings.freshMode
Refrigeration_Common_Setting_Light_External_Brightnesssettings.lightExternalBrightness
Refrigeration_Common_Setting_Light_External_Powersettings.lightExternalPower
Refrigeration_Common_Setting_Light_Internal_Brightnesssettings.lightInternalBrightness
Refrigeration_Common_Setting_Light_Internal_EnableTheaterModesettings.lightInternalEnableTheaterMode
Refrigeration_Common_Setting_Light_Internal_Powersettings.lightInternalPower
Refrigeration_Common_Setting_SabbathModesettings.sabbathMode
Refrigeration_Common_Setting_VacationModesettings.vacationMode
Refrigeration_Common_Setting_WineCompartment_SetpointTemperaturesettings.wineCompartmentSetpointTemperature
Refrigeration_Common_Setting_WineCompartment2_SetpointTemperaturesettings.wineCompartment2SetpointTemperature
Refrigeration_Common_Setting_WineCompartment3_SetpointTemperaturesettings.wineCompartment3SetpointTemperature
Refrigeration_Common_Status_Door_BottleCoolerdoors.bottleCooler
Refrigeration_Common_Status_Door_Chillerdoors.chiller
Refrigeration_Common_Status_Door_ChillerCommondoors.chillerCommon
Refrigeration_Common_Status_Door_ChillerLeftdoors.chillerLeft
Refrigeration_Common_Status_Door_ChillerRightdoors.chillerRight
Refrigeration_Common_Status_Door_FlexCompartmentdoors.flexCompartment
Refrigeration_Common_Status_Door_Freezerdoors.freezer
Refrigeration_Common_Status_Door_Refrigeratordoors.refrigerator
Refrigeration_Common_Status_Door_Refrigerator2doors.refrigerator2
Refrigeration_Common_Status_Door_Refrigerator3doors.refrigerator3
Refrigeration_Common_Status_Door_WineCompartmentdoors.wineCompartment
Refrigeration_FridgeFreezer_Event_DoorAlarmFreezerevents.doorAlarmFreezer
Refrigeration_FridgeFreezer_Event_DoorAlarmRefrigeratorevents.doorAlarmRefrigerator
Refrigeration_FridgeFreezer_Event_TemperatureAlarmFreezerevents.temperatureAlarmFreezer
Refrigeration_FridgeFreezer_Setting_SetpointTemperatureFreezersettings.setpointTemperatureFreezer
Refrigeration_FridgeFreezer_Setting_SetpointTemperatureRefrigeratorsettings.setpointTemperatureRefrigerator
Refrigeration_FridgeFreezer_Setting_SuperModeFreezersettings.superModeFreezer
Refrigeration_FridgeFreezer_Setting_SuperModeRefrigeratorsettings.superModeRefrigerator
general.brand— (no longer created)
general.connectedinfo.reachable
general.enumber— (no longer created)
general.haId— (no longer created)
general.name— (no longer created)
general.type— (no longer created)
general.vib— (no longer created)
own_request.request_json— (no longer created)
own_request.response— (no longer created)
rateLimit.*, rateTokenLimit.* (below homeconnect.0)— (removed)

Updating from 1.7 – 1.23

The device folders were named after the app name (up to 1.12) or the E-number from the type plate (1.13 – 1.23, sx87tx02ce-60), which names the model only. With this version every folder moves once to the model and the appliance's own number (sx87tx02ce-5775). Values, recording settings, rooms, functions and aliases move along, and recorded history continues in its old series. Scripts and visualizations that use the old IDs must be updated.

The running program, the doors and the totals have their own channels now: status.remainingProgramTime → run.remainingProgramTime (likewise elapsed time, progress, phase, forecasts and recommendations), status.doorOpen → doors.door, status.doorLocked → doors.doorLocked, status.programAllCountCompleted → counters.programAllCountCompleted (likewise every total). An event or compartment door of a 2.0 test build that was a channel of its own (events.programFinished.active, doors.freezer.open) becomes a plain datapoint again (events.programFinished, doors.freezer). The last run is part of the history: lastRun.start → history.latest.start (likewise end, how it ended and the consumption); where the history already had the program and the duration, those stay and the two from lastRun go. Values, recordings, aliases, rooms and functions move along.

Rate limits

Home Connect grants 1000 requests per day per application and account, at most 50 per minute, and blocks for ten minutes after ten failed requests in a row. The adapter is built around that: it uses one persistent event stream instead of polling, remembers program definitions permanently, sends at most 50 requests per minute (so the first start after an update or with a new appliance reads for a few minutes), puts your commands before waiting reads, and pauses on its own after a rate-limit answer — the log names the limit and how long Home Connect blocks. There is nothing to configure — but a second application of your own using the same credentials shares the same budget.

Troubleshooting

SymptomCause and remedy
info.connection stays redNot signed in, or the event stream is down. Use Test connection in the settings — it names the reason.
No appliances appearThe developer account must be linked to your Home Connect app account (its profile's default testing account = the app's e-mail address), and the sign-in must be approved.
Sign-in link does not workCodes expire after a few minutes. The adapter requests a new one automatically; the settings panel shows it on its own.
No sign-in link any moreNobody confirmed a link for an hour, so the adapter stopped asking. Use Request a new sign-in link in the settings.
unauthorized_client: Invalid client idThe Client ID is unknown — copy it again from your application (64 characters).
unauthorized_client: request rejected by client authorization authority (developer portal)The application is not active yet — wait 15 to 60 minutes after registering or editing it, check that its status is Enabled, then request a new sign-in link.
unauthorized_client: client not authorized for this oauth flow (grant_type)The application uses another OAuth flow — register a new one with Device Flow.
invalid_clientThe Client Secret was rejected — check it.
access_deniedThe account was refused — check it in the Home Connect app (SingleKey ID, accepted terms of use) and that it is the one entered in the developer portal.
In ChinaHome Connect in China (api.home-connect.cn) is not supported.
An appliance stays greyIt is switched off or has no network. Its data points stay and keep their last values.
A write does nothingThe appliance permits no remote operation right now (status.remoteControlActive), or the program option does not belong to the selected program.
Log says "SDK.Error.NoProgramActive"That is the normal answer of an idle appliance, not an error — it is logged at debug level.

Diagnostics report

When an appliance does not do what it should, open the instance settings, tab Expert, pick the appliance and download its diagnostics report. It holds what Home Connect answered for this appliance (also a fresh read of its status, settings and programs while it is connected), the events of the live stream, the appliance's datapoints with their values and the adapter's recent log lines. Attach the file to an issue with the form Report a device — the card links to it.

The report is made only when you ask for it, stays in memory until the download and writes nothing. Serial numbers, the names you gave your appliances and your sign-in data stand in it as placeholders.

Support

Questions, bug reports and ideas: github.com/iobroker-community-adapters/ioBroker.homeconnect.

Changelog

2.0.0-alpha.0 (2026-10-21)

  • (krobipd) Changed: complete rewrite with a new object tree and new datapoint IDs — breaking for existing scripts and visualizations
  • (krobipd) Changed: readable values with units and labels in the user's language
  • (krobipd) New: program history and the consumption of the last run as readable datapoints
  • (krobipd) Changed: the adapter requires js-controller 7.2.5 and Admin 8.2.0 or newer now
  • (krobipd) New: sign-in panel in the instance settings with a connection test and a reset of the login
  • (krobipd) Improved: an update from 1.x keeps rooms, functions, aliases and the Home Connect sign-in
  • (krobipd) Fixed: the object database no longer grows with every value change (#387), and the start stays within the Home Connect request limits (#327, #58)
  • (krobipd) New: diagnostics report on the Expert tab, with a 'Report a device' issue form for it

1.6.1 (2026-05-12)

  • (TA2k) Login/Refresh flow improved

1.6.0 (2026-05-11)

  • (copilot) Adapter requires node.js >= 22 now
  • (copilot) Adapter requires admin >= 7.7.22 now
  • (Lucky-ESA) Fixed adapter crash if URI is empty
  • (Lucky-ESA) Save remaining time in active folder
  • (Lucky-ESA) Device monitoring starts only after the adapter has started (this may take up to 2 minutes)

1.5.2 (2025-12-14)

  • (Lucky-ESA) Rate limit of 50 requests per minute intercepted at adapter startup
  • (Lucky-ESA) Added custom request

1.5.1 (2025-09-20)

  • (Lucky-ESA) Fixed: Name of the objects are deleted

License

The MIT License (MIT)

Copyright (c) 2019-2026 TA2k tombox2020@gmail.com
Copyright (c) 2024-2026 iobroker-community-adapters iobroker-community-adapters@gmx.de
Copyright (c) 2026 krobi krobi@power-dreams.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.