Skip to main content

Miele smart home integration, free and open source

Miele integration for Gladys Assistant

Miele@home appliances: state, program, time left, temperatures and end-of-cycle scenes.

Follow your Miele@home appliances in Gladys: washing machines, tumble dryers, dishwashers, ovens, cooker hoods, hobs, fridges, freezers, wine units, coffee machines and robot vacuum cleaners. The integration uses the official "Miele 3rd Party API", the same one Home Assistant uses.

Developed without the hardware nor a Miele account: feedback welcome. The code is checked against real answers of the API published by the Home Assistant project, not yet on a real appliance.

Community integration, not affiliated with Miele. Miele and Miele@home are trademarks of Miele & Cie. KG.

Overview​

  • One Gladys device per Miele appliance: state (running, paused, finished, fault…), current program and phase, time left, elapsed time, expected end, door, temperatures, energy and water used by the cycle.
  • Real time: the integration listens to Miele's event stream. A finished wash is known within seconds.
  • Safe commands: on/off of a washing machine, dishwasher, cooker hood or coffee machine, lights, setpoint and SuperCool/SuperFreeze of a fridge or freezer, starting a program prepared on the machine. An oven or a hob is never turned on remotely.
  • Scene triggers: "Miele program finished" and "Miele appliance fault".
  • Widget "Miele appliances": what is running, and for how long.

Requirements​

  • Gladys Assistant 5.1.0 or newer.
  • Miele@home appliances already paired in the Miele app (smartphone), with the Miele account you will use here.
  • Internet access for Gladys: everything goes through the Miele cloud, there is no local API.
  • Miele developer credentials (client ID and client secret), free: see step 1 below.
  • Gladys Plus is not needed.

Configuration​

Step 1 — Ask Miele for credentials. Open Miele's form and fill it in (application name: for instance "Gladys"). Miele e-mails you a client ID and a client secret. If the form asks for a "redirect URI", give the one Gladys shows in step 3 (by default https://my.gladysassistant.com/redirect/oauth).

Step 2 — Install the integration. In Gladys: Integrations → Miele (store) or Integrations → Install from GitHub with the address https://github.com/guim31/gladys-miele.

Step 3 — Fill in and connect. On the Configuration screen of the integration:

  1. paste the client ID and the client secret, pick the language, then Save;
  2. under "Miele account", copy the redirect URI shown if needed, then click Connect;
  3. a Miele window opens: sign in with your Miele account (the one of the app), choose your country if asked, then allow the access;
  4. the window closes, the connection badge turns green.

Step 4 — Add the appliances. Open the Discover tab of the integration: every Miele appliance of the account shows there. Click Add to Gladys for the ones you want to follow. Their states arrive right away.

The Test the connection button of the Configuration screen lists the appliances Miele returns: handy to check that everything is in place.

The chosen language names the features of new devices, the states and the widget. The program and phase names come from Miele, which gives them in English or German only (German if you choose German, English otherwise).

What each device does​

ApplianceFeatures
Washing machine, washer-dryerState, program, phase, time left, elapsed time, expected end, door, on/off, energy and water of the cycle
Tumble dryerThe same, without water
DishwasherState, program, phase, time left, elapsed time, expected end, door, on/off, energy and water of the cycle
Oven, steam oven, microwave, warming drawerState, program, phase, time left, elapsed time, expected end, door, temperature, set temperature and food probe temperature (read only), light (depending on the model)
HobState (read only)
Cooker hoodState, on/off, light
Fridge, freezer, wine unitState, door, temperature and setpoint of each zone, SuperCool and/or SuperFreeze, light (wine units)
Coffee machineState, program, phase, door, on/off, light
Robot vacuum cleanerState, program, phase, battery

A few details:

  • Expected end: end time computed from the time left (and from the delayed start if any), in the time zone of Gladys. "—" when nothing runs or the program is paused.
  • Door: an opening sensor, open or closed.
  • Energy and water of the cycle: what Miele reports for the current or the last cycle, when the appliance measures it ("EcoFeedback"). The value of the last cycle stays while the appliance is off.
  • Fridge setpoint: one degree per step, within the range the appliance accepts (usually 1 to 9 °C in the fridge, −28 to −14 °C in the freezer).
  • An appliance no longer connected to the Miele cloud shows "Not connected" and the "unreachable" badge.

Commands and safety​

  • What can be controlled: on/off (washing machine, tumble dryer, dishwasher, cooker hood, coffee machine), lights (hood, ovens, coffee machine, wine units), setpoint and SuperCool/SuperFreeze (cold appliances), and the scene action "Control a Miele appliance" (start, pause, stop).
  • What never is: turning on an oven, a hob, a microwave or a warming drawer, changing its temperature, starting a program on it. Even if the Miele API allowed it, the integration refuses. Stopping an oven program stays possible.
  • Starting a program remotely needs the appliance to accept it: a program chosen on the machine, the door closed and Remote Start (or MobileStart, depending on the model) enabled on the appliance. Otherwise the integration answers "The appliance does not accept this command now".
  • Delayed start: set the program on the machine with Remote Start, then let a scheduled Gladys scene start it at the right time (off-peak hours). A delayed start set on the appliance itself (SmartStart included) shows as the state "Waiting to start" and in the expected end.

Refresh and quotas​

  • The integration keeps one event stream open at Miele: every change arrives within seconds, with no extra request.
  • On top of it, it reads the whole account every 30 minutes (one request, plus one per controllable appliance). If the stream is down, it reads every 2 minutes until it is back.
  • It does not depend on the polling of Gladys (unreliable for external integrations): it refreshes by itself.
  • Miele publishes no figure for the quota of its API; this pace stays well below Home Assistant's (one read every 2 minutes, all the time). Miele's terms of use apply to your credentials.
  • Only the changes are sent to Gladys, plus a reminder every 6 hours of a value that does not move (otherwise Gladys would consider it stale).

Widget​

The Miele appliances widget (Dashboard → Edit → add a widget → Miele) lists the appliances added to Gladys that are running, paused, waiting for a delayed start, finished or in fault, the most urgent first: program, phase, end time and a badge with the time left or the state. Fridges, always "running", are left out. It updates every minute and as soon as an appliance starts or stops. It has no setting.

Scene triggers and actions​

Trigger "Miele program finished": an appliance goes from "Running" (or "Paused") to "Finished". Optional filter: the appliance. Variables for the following actions: appliance name, program, energy used (kWh) and water used (liters) when Miele gives them. It fires once per end of program, never when Gladys restarts.

Trigger "Miele appliance fault": an appliance goes to the "Fault" state or reports a failure. Optional filter: the appliance. Variable: appliance name.

Action "Control a Miele appliance": start, pause or stop the program of an appliance. Start and pause: washing machines, tumble dryers, dishwashers only. Stop: also ovens, cooker hood and coffee machine. Output: "Command sent". When refused, the action fails with the reason and the scene goes on.

No "door open too long" trigger: the standard Gladys trigger on the door (opening sensor) with the "for" option already does it, on any appliance.

Scene examples​

  • Laundry done: trigger "Miele program finished" (appliance: the washing machine) → send a message "The laundry is done ({{triggerEvent.data.program}}, {{triggerEvent.data.energy_kwh}} kWh)".
  • Dishwasher in off-peak hours: prepare the program in the evening with Remote Start enabled; a scene scheduled at 1:30 am runs "Control a Miele appliance → Start".
  • Freezer left open: trigger "Freezer door = open for 3 minutes" → notification.
  • Breakdown: trigger "Miele appliance fault" → message with {{triggerEvent.data.device_name}}.

Troubleshooting​

  • "Fill in the client ID and client secret…": the fields are empty or not saved.
  • The Miele window refuses the sign-in or the redirect URI: check the client ID; if your Miele application has a registered redirect URI, it must be exactly the one shown under "Miele account".
  • "This sign-in expired…": more than 15 minutes between the click on Connect and the end of the sign-in, or a sign-in started from another Gladys. Click Connect again.
  • "Miele refused the saved authorization": the access was revoked, the Miele password changed or the client ID was modified: click Connect.
  • No appliance in Discover: the Test the connection button tells what Miele returns. An empty account means the appliances are paired with another Miele account.
  • "The appliance does not accept this command now": door open, no program chosen, Remote Start/MobileStart disabled, or the appliance is already in the requested state.
  • Logs: nothing is written during normal operation. To see everything, give the container the variable LOG_LEVEL=debug. No token nor secret is ever logged.

Limitations​

  • No remote choice of the program (no program list in Gladys): the one prepared on the machine is started.
  • Program and phase names in English or German (a limit of the Miele API).
  • No control of ovens, hobs and microwaves (a safety choice), nor of the robot vacuum cleaner, nor of the hood fan speed.
  • TwinDos/PowerDisk levels, the zones of a hob and a delayed start set remotely are not covered.
  • Depends on the Miele cloud: without Internet or during a Miele outage, no more updates (the appliances work normally).
  • Feature names are frozen when the device is added: changing the language only renames new devices (the states do change language).

Data and privacy​

  • The Miele access tokens are kept in the /data volume of the integration (a file only it can read), never in the Gladys configuration nor in the logs.
  • The client secret is a Gladys secret field: it is never shown again.
  • The sign-in happens on Miele's page: the integration never sees your password. The Gladys redirect page (my.gladysassistant.com) only sends your browser back to your Gladys; the code it sees passing is useless without the client secret.
  • The integration only talks to api.mcs3.miele.com.

Configuration settings​

These are the settings Miele asks for in its configuration screen in Gladys.

SettingTypeRequiredDescription
Before you startsectionNoMiele has no local API: everything goes through the Miele cloud, with the account of the Miele app. Ask Miele for free developer credentials (client ID and client secret, sent by e-mail), paste them below and save. If Miele asks for a redirect URI, copy the one shown under the Connect button. Then click Connect and sign in with your Miele account.
Client IDstringYesClient ID sent by Miele.
Client secretsecretYesClient secret sent by Miele, never shown again.
Miele accountoauth2NoSign in with the Miele account your appliances are paired with in the Miele app.
LanguageselectNoFeature names of new devices, states and widget. Program names come from Miele, in English or German.

How to install Miele in Gladys​

  1. In Gladys, open Integrations: Miele appears in the catalog, next to the native integrations, with a community badge.
  2. Click Install. Gladys pulls the Docker image (ghcr.io/guim31/gladys-miele:1.0.1), starts it in a sandbox isolated from the core, and generates the integration's interface (devices, discovery and configuration).
  3. Open the Configuration screen of the integration, fill in the settings, and save.
  4. You can also install it directly from its repository URL: https://github.com/guim31/gladys-miele.

Miele requires Gladys >=5.1.0. The catalog inside Gladys refreshes every hour, so a new version becomes available at most one hour after its release.

Not running Gladys yet? It is free and open source: follow the installation guide to get started.

About external integrations​

Miele is an external integration: a community integration packaged as a Docker container and published on GitHub, that Gladys installs in one click and runs in a sandbox isolated from its core. It is published and maintained by guim31, not by the Gladys core team.

Subscribe to the Gladys Assistant newsletter

A few emails per month about new releases and project news. Sent by Pierre-Gilles Leymarie, founder of the project. Unsubscribe anytime 🙂