Miele@home, miele@mobile component

your latest error seems to be since your token is old… So I think you need to renew that. If I’m not mistaken I read somewhere the token only works for a month? Not sure though!

I have tried with new client_id and client_secret in my configuration.yaml. However, still same error message. Do I need to reconfigure Home Assistant to initialize the miele component again? How would I do this?

Now it works again! I used the new client_id and client_secret. I also deleted the file .miele-token-cache before restarting. This way I could authorize the miele component once more.

Making this an official component was the intend all along - but that still requires some work, especially around automated tests etc. Maybe I’ll find the time during the christmas break…

There is some code that attempts to renew the token and I am pretty sure I haven’t manually updated mine in quite a while. So generally speaking, things should work automatically. If that happens again to anybody, a quick look into the log file might reveal some more details.

Hey *,

i spend the last few days developing a custom component to access the state of a miele dryer/washing machine directly over the network via XKM3100W (no gateway required).
I was wondering if we should join our efforts on this topic and if someone else is interested in this project.

1 Like

Hey,

I am all for collaborating, so from that perpspective - sure, what did you have in mind?

Independent of that, I do have such a dishwasher myself, it does appear via the component and I am sure it doesn’t require a gateway to do so. I know there is some information that the Miele apps are showing that can is available via homebus raw data - e.g. energy consumption. Is it that you’ve been working on?

Cheers
Boris

nothing concrete yet, but i think at least a common interface (set of components) towards HA, so that we can share those and then implement different components for our backends.
If i am not mistaken we have 3 ways to communicate with miele machines (cloud, XGW3000 gateway, XKM3100W). Since i don’t have a gateway and cloud is not an option and not necessary i was focusing on the direct way using XKM3100W which allows me to directly connect via local network. This is also what the mobile app uses, at least partially.

The communication schema is pretty simple, besides the encryption part, and you get a json blob with all info. I just checked, the information you get while the machine is off/idle doesn’t contain power consumption or such, but i know there is an extendedState attribute which contains encoded information while the machine is running, but i haven’t gone that deep yet. I am confident that we will be able to get that as well and it is likely that power consumption will be in there.

I’ve been doing three different integrations over the past few years: one based on Homebus 1.0, one based on Homebus 2.0 and finally one based on the current SDK. For Homebus 1.0 and 2.0, documentation was virtually non-existing and everything had to be reverse engineered. None of those three implementations had much in common:

  • Homebus 1.0 is a purely XML-based REST-like API.
  • Homebus 2.0 is JSON-RPC is I recall correctly.
  • The current SDK is a REST-like API using JSON as serialization format.

Based on that experience, I am kind of skeptical that we’ll find much to share between

  • using the SDK to talk to the Cloud service
  • talking to the device directly

If I look at your description, maybe the serialization piece could be something that the approaches might have in common. Do you have some example JSON that you can share?

In addition, there might be some value in agreeing on the model as exposed towards HA. That way it would be possible to write UI components that would work with both approaches.

What do you think?

Agree, we should focus on models exposed towards HA.
The API is a REST-like one returning JSON, but in a bit strange way with references to further documents. The original response looks for “/” like:

{'Devices': {'XXXXXXXXX': {'href': 'XXXXXXXXX/',
   'Group': 'XXXXXXXXX',
   'Pairing': 'false'}},
 'Subscriptions': {},
 'Host': 'Miele-XXXXXXXXX.local.',
 'Info': '',
 'WLAN': {'Scan': {'href': 'Scan/'},
  'WPSPBC': False,
  'SSID': 'XXXXXXXXX',
  'Sec': 'WPA',
  'Key': '***',
  'IP': 'XXXXXXXXX',
  'Subnet': '255.255.254.0',
  'Gateway': 'XXXXXXXXX',
  'DNS1': 'XXXXXXXXX',
  'DNS2': '0.0.0.0'},
 'Homebus': {'User': 'Homebus', 'Password': '***'},
 'Update': {'NewerAvailable': False,
  'CurrentVersion': '02.45',
  'AvailableVersion': '',
  'Type': 'XKM3100W',
  'ReleaseNotes': '',
  'UpdateInProgress': False}}

I wrote an model for it that resolves references recursively. To get the information under the Scan property you have to do another request for /Scan/. So the full data you get in the end looks like:

{'Devices': {'xxxxxxxxxx': {'Ident': {'DeviceType': 2,
    'SubType': 0,
    'CECEDType': 0,
    'DeviceName': '',
    'AppSupport': 0,
    'FctSupport': 3,
    'XKMSupport': 0,
    'ProtocolVersion': 0,
    'DeviceIdentLabel': {'Version': 'E',
     'FabNumber': 'xxxxxxxxxx',
     'FabIndex': '11',
     'TechType': 'XXXXXXXX',
     'MatNumber': 'XXXXX',
     'SWIDs': [3493,
      20199,
      25017,
      25026,
      3545,
      25027,
      25055,
      20228,
      3493,
      20199,
      25017,
      25026]},
    'XKMIdentLabel': {'Version': 'E',
     'FabNumber': 'xxxxxxxxx',
     'FabIndex': '12',
     'TechType': 'XKM3100W',
     'MatNumber': 'xxxxxxx',
     'SWIDs': [4297],
     'ReleaseVersion': '02.45'}},
   'State': {'Status': 1,
    'InternalState': 255,
    'ProgramType': 0,
    'ProgramID': -1,
    'ProgramPhase': 65535,
    'RemainingTime': [0, 0],
    'StartTime': [0, 0],
    'TargetTemperature': [-32768],
    'Temperature': [-32768, -32768, -32768],
    'SignalInfo': False,
    'SignalFailure': False,
    'SignalDoor': False,
    'RemoteEnable': [0, 0, 0],
    'ProcessAction': 0,
    'Light': 0,
    'ElapsedTime': [0, 0],
    'DryingStep': None,
    'ExtendedState': ''},
   'Settings': {'TimeSync': {}},
   'Update': {'State': 255,
    'FileName': '',
    'FlashAccessPossible': False,
    'FileSize': '0'}}},
 'Subscriptions': {},
 'Host': 'Miele-XXXXXXXX.local.',
 'Info': '',
 'WLAN': {'Scan': {'Result': [{'SSID': 'UpStream',
     'Sec': 'WPA',
     'RSSI': -79}]},
  'WPSPBC': False,
  'SSID': 'xxxx',
  'Sec': 'WPA',
  'Key': '***',
  'IP': 'xxxxxxxx',
  'Subnet': '255.255.254.0',
  'Gateway': 'xxxxxxxx',
  'DNS1': 'xxxxxxxx',
  'DNS2': '0.0.0.0'},
 'Homebus': {'User': 'Homebus', 'Password': '***'},
 'Update': {'NewerAvailable': False,
  'CurrentVersion': '02.45',
  'AvailableVersion': '',
  'Type': 'XKM3100W',
  'ReleaseNotes': '',
  'UpdateInProgress': False}}

But you can also ask for any sub property directly.
But all this is abstracted away by the model.

I re-installed Homeassistant and tried to re-add this component. But Everytime I try to link my miele account I get a empty webpage with this error :

Something went wrong when attempting authenticating with Miele@home. The error encountered was (missing_token) Missing access token parameter… Please try again!

There is no hidden token in .homeassistant and the return link is allright… Also the ID and secret are allright. Is there any other thing I can try? I’m running it from a virtual environment on armbian. Oauth is installed succesfully.

Hello, I am stuck at this part of the install:

  • The Home Assistant Web UI will show you a UI to configure the Miele platform. Follow the instructions to log into the Miele Cloud Service. This will communicate back an authentication token that will be cached to communicate with the Cloud Service.

Maybe this is not the case anymore when the lovelace-UI is the default? There is a miele@home configurator entity in the list, but how do i “start” it?

I found the configuration in the UI, but i get the same problem as kloknibor. Missing access token parameter.

me too just tried to set this up today via web ui and I am getting

" Something went wrong when attempting authenticating with Miele@home. The error encountered was (missing_token) Missing access token parameter… Please try again!"

Problem is fixed now. For some reason either the OAuth library wasn’t sending the client_id anymore or Miele didn’t care before.

Feel free to pick up the latest version and try again. @schford already verified it.

Working Great - Thanks :slight_smile: now to work out what to actually do with the information I have about the washing machines, dryers and dish washer lol :slight_smile:

Thanks, works great know (although i had to restart the entire virtual machine, not just HA). Would it be possible to implement control as well, not just sensors? I would like to be able to start my ventilation hood and turn on its light with the light switch on the wall :slight_smile:

I got a prototype working that’s exposing lights as proper light entities. Ventilation hood is more tricky. According to me current information, ventilation should be a device of type 18. According to https://www.miele.com/developer/swagger-ui/put_additional_info.html those devices can be stopped and the light toggled. However, you cannot start the device.

Is this possible via the Miele app?

Yeah, the control options are actually quite extensive. You can do the following:

  • Choose Fan speed between: Off, 1, 2, 3 and Boost
  • Chose run-on time between 5, 15 and 60 minutes (the fan runs for the given time)
  • View the remaning run-on time.
  • Dim the lighting
  • Turn on and off the lightning
  • View “Percentage left” of grease filter
  • View “Percentage left” of Charcoal filter

It is actually on of the most feature rich of the miele appliances i have (app-wise), except the dishwasher.

I am not very skilled (i haven’t even got the ouath2 authentication to work by myself), but i have some rudimentary skills in networking, and super-basic programming skill. But let me know if there is anything I can try to do to help you get to the bottom of it.

Thanks a lot for your work on this!

I attached a screenshot as well, just in case it is interesting.