MieleRESTServer -- Miele@home Without Cloud Possible

@akappner

I’m trying to connect my Miele TWD360WP dryer. Wifi credentials were uploaded successfully and I can see the dryer is connected to the wifi network. I successfully generated the keys.json file, but I got stuck at provisioning the keys. When I run the provision-key.sh script, I get error “403 Forbidden” for the http attempt, and “failed: Connection refused” for the https.

Is there anything I should try to solve this?

The complete output is:

./provision-key.sh 192.168.21.62 ./keys.json

Trying HTTP
--2026-02-26 12:20:59--  http://192.168.21.62/Security/Commissioning
Connecting to 192.168.21.62:80... connected.
HTTP request sent, awaiting response... 403 Forbidden
2026-02-26 12:20:59 ERROR 403: Forbidden.

Trying HTTPS
--2026-02-26 12:20:59--  https://192.168.21.62/Security/Commissioning
Connecting to 192.168.21.62:443... failed: Connection refused.

Hi,

you seem to be running into the same problem that @bencope is having. Which is weird because I have a TWD360 and it’s running fine. Have you ever attempted using it with the official app - does that work?

@bencope and @seashrimp: It appears there are some code paths where the device rejects HTTP requests that contain an incorrect time, which would also explain why the official app fails. I have updated the provisioning script to include the current time. If your device is set to a device other than the current time (which it should tell you in the HTTP response), please modify the script to send the same “fake” time. It appears that these devices are programmed to reject HTTP requests that are more than 2 days off from the current time.

@akappner
When inspecting the HTTP reply, I found that the dryer was indeed set to a wrong date and time.

I tried to set several similar “fake” time values in the provisioning script, but it did not help.

I then tried to factory reset the wifi settings on the dryer and repeated the procedure from the beginning. This time, I connected the dryer to a different wifi network and gave it access to the internet (it was not allowed to access the internet before). When inspecting the HTTP reply, the date and time is now correct.

When running the script now, I can see that the times are correct and both match, but the key provisioning still fails with the same errors.

@akappner
I also tested the original Miele App (v4.17.0).

The dryer has already been connected to the wifi (since the provision-wifi.sh script has already been executed before). The Miele App, when given access to the same wifi, immediately found the dryer without any problems. I added the dryer in the App and everything seems to work fine, including the remote start.

When exploring the information about the dryer in the App, I noticed that it says “Wi-Fi module version 03.88” and there seems to be an update available to version “04.05”. (Found when opening the tumble dryer and tapping the Settings cogwheel button in the top right corner and then selecting “Information”.)

Maybe updating it could help. Nevertheless, before running the update, I would prefer to check whether this could really be the cause of the troubles. Would it possible for you to check which version your TWD360 dryer has?

Thanks for the info – quite strange! The good news is that my dryer is HTTP-based, not HTTPS-based, so we should be able to sniff the provisioning. Would you be able to reset it, repeat the provisioning from the official app by running Wireshark or another packet sniffer, and sending me the log?

@akappner I’ve sent you a personal message

Thanks for the packet cap. Strangely, the app provisions the device with a key of only 1… let’s see if we can do the same. Please use the config below to try to connect. Then reset the device, and attempt to provision those same keys through the script as well. If that resolves it, there must have been some change in the software that only allows this weird key to be set. If that does not resolve it, there’s some issue with the provisioning script.

endpoints:
washer:
[…]
groupId: “1111111111111111”
groupKey: “11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111”

Following seashrimps example, I also now have my TWD640WP connected to the official Miele app! Using a completely different unrestricted wifi network.

After checking I could remove and register it again, I tried the provisioning script which failed. So when l re-add it to the app, I ran a packet capture which I’ll DM you, but from the traces in my network monitor and the capture I can’t see any http requests and looks like it’s using some TLS websocket to push the credentials so I’m not sure what to do now.

Hi,

THanks – unfortunately your packet log got truncated (you probably used tcpdump without the -s0 option), but the pairing is all behind TLS anyways, so we cannot see anything passively about the pairing. I’d be interested though in getting a full-length packet dump from you now without disconnecting the device, capturing the mDNS packets it sent.

From what I can tell, yours and seashrimp’s device may have the same issue, and I’m optimistic we’re close to understanding and solving it.

I tried running the server with the “1…” keys, but it doesn’t work.

From the server output, I see that the dryer responds with error 404.

(Details in DM.)

Dear all,
thank you very much for the findings and the great work.

I can confirm a compatible and working Miele WWE380 washer model:

  1. The SSID is Miele@home-{some suffix}, connecting with device serial as password
  2. Miele device is running a DHCP server
  3. Push wifi credentials with provision-wifi.sh
  4. Generate keys with generate-keys.py
  5. Push keys with provision-key.sh
  6. Edit MieleRESTServer.config
  7. Run server

Notes so far:

  • Url should be http://<ip>:5001/generate-summary, because
    http://<ip>:5001/generate-summary/ (with slash) will return 404.
  • http://<ip>:5001/walkdop2tree/washer returns “Internal Server Error”
  • http://<ip>:5001/wakeup/washer returns 404

Please drop me a line if you need any more information.

Well done!