The washing machine reports in — if you let it
Programme, temperature and spin speed on my phone, locally and without a vendor account. And why the same brand could not be connected at all in Merano.
Contents
The benefit is about as small as benefits get, and still noticeable: I no longer walk over to check whether the washing is done. A notification arrives instead, with programme, temperature and spin speed.
The remarkable part is not the notification. It is that it is produced locally — no vendor account, no cloud, no app running in the background. And that the same brand could not be connected at all in my second home.
One thing up front, because it colours the whole article: the documentation still lists the first real wash cycle with Wi-Fi switched on as an open item. The message templates are verified and a test notification was delivered — the real case is still pending.
It was not found where you would look
The machine does not answer ping. A network scan does not find it. It turned
up in the client list of a Wi-Fi satellite under the meaningless name
espressif — the chip vendor. Exactly one port was open: 80.
The proof came from the endpoint itself:
/http-read.json?encrypted=0 HTTP 200 {"response":"BAD REQUEST"}
/http-read.json?encrypted=1 HTTP 200 1264 hex characters
An arbitrary device returns 404 there. Here the endpoint answers — and the encrypted variant returns the status data as hex.
The order is the trap. If you only try encrypted=0, read “BAD REQUEST” and
stop, you write the device off as mute. The query that works is the second one.
Nine values, no account
The integration in use is an add-on integration, not a built-in one, and works purely locally. Setting it up needs nothing but the machine’s IP address. What arrives:
| Value | Example |
|---|---|
| State | Idle |
| Programme | 2 |
| Temperature | 40 °C |
| Spin speed | 1400 rpm |
| Remaining time | 0 min |
| Fill level | 0 % |
| Delayed start | 0 h |
| Error code | 0 |
| Remote control | yes |
From that you can derive “running”, “finished” and “error” — without a smart plug and without a cloud.
Two traps in the state machine
Read in the integration’s source, not guessed.
First trap: two codes both read “Finished”. The machine knows states 7 and 8,
and both arrive in Home Assistant as the same text. Looking for a difference is
futile — a trigger on Finished catches both by itself.
Second trap, the more important one: “Off” is invented. The integration sets
that state when the device is unreachable and last showed Finished or
Idle, so the sensors display something rather than “unavailable”.
Build an “washing machine offline” warning on that and you have built a warning that fires for every sleeping machine.
Confirmed the same evening: after a restart the machine read Off, three extra
fields were unknown or unavailable — and the port was indeed closed. The
machine was asleep.
Practical consequence: error monitoring on the error-code sensor would have to
fight unknown. The automation therefore triggers on the machine state
Error, not on the error code. That was a guess while building — now it is
measured.
The property that governs everything
This machine does not stay on Wi-Fi. It has to be actively switched onto it and does not join by itself. If it is off, it is off — there is no standby mode in which anything could still be queried.
So Off is the normal state here, not the exception:
| Situation | What Home Assistant sees |
|---|---|
| Machine off | Off |
| On, Wi-Fi not enabled | Off |
| On, Wi-Fi enabled | real values |
And with it the inconvenient consequence: the finished message only arrives if Wi-Fi was on during the wash. Wash without Wi-Fi and you get nothing. Nothing can be built around that; it is how the device is made.
Why the trigger has to be Running → Finished
The first version accepted any previous state. That was too loose, precisely because of the property above.
Switch the Wi-Fi on after a wash has finished and the entity jumps straight
from Off to Finished — and you would get a completion message for something
long since done. On a device you put on the network by hand, that is not an edge
case, it is the normal case.
Running → Finished is the only transition that genuinely means: just finished
now. With a 60-second polling interval and an hour-long cycle, Running is
guaranteed to be seen.
The same condition handles a second case in passing: after a Home Assistant restart there is no previous state — that falls through too.
A gap left open on purpose
If Wi-Fi drops exactly at the end of the programme, Home Assistant never sees the transition and the message does not come.
The obvious remedy would be to also trigger on Running → Idle. That catches the
case — but it also reports an aborted cycle as “finished”. Aborted and
finished look identical from outside.
A false completion message is worse than a missing one. Nobody waits for the missing one; the false one sends somebody to the machine.
So the unambiguous trigger stays. To me that is the single most important rule in building notifications at all, and it reaches far beyond washing machines.
Same brand, second home, nothing at all
In Merano there is a machine from the same group. Connecting it was impossible from the outset — it has NFC instead of Wi-Fi. You hold your phone to the panel. There is no radio module on the network, so there is nothing to connect to.
That was not assumed but ruled out: the entire subnet was searched, both in deep sleep and with the machine switched on. All that turned up were error responses from the router and a door-lock bridge. No interface.
The substitute was already there: a smart plug with power measurement. From the consumption curve you can derive “running” and “finished” — coarser than the real programme status, but it carries.
And there the machine earns its place in a second way: it is stage 1 of load shedding. The flat has a limited supply capacity; when things get tight, the washing machine goes first. The reason is a good one: it resumes its programme by itself after an interruption. A switched-off air conditioner is immediately noticeable at 29 degrees — a briefly interrupted wash is not.
So what?
What actually disappears: the walk to the bathroom to check. Nothing more. It is one of the smallest automations in the house and one of the most frequently useful.
What I would do differently when buying: check before purchase whether the device has a local interface, not just “app control”. NFC on the front panel is a feature from a marketing standpoint and worthless for home automation. And a device that joins Wi-Fi by itself is worth considerably more than one you have to talk into it every time.
The cheap way out remains the smart plug. It costs under 20 euros, works on any machine of any age and needs no interface. It will not tell you what temperature was used — but it will tell you it is over. And that is the part you were waiting for.
If you want to follow this: use RSS
No newsletter. You give me no address, I keep no list, and nobody has to agree to anything to learn that an article is finished. RSS is the older and, for both sides, the more honest solution.
How it works, and why no newsletter
- 1Get a feed reader. No account needed with an app on your phone or a browser extension; use a hosted service if you prefer.
- 2Add the address above to it.
- 3Done. New articles turn up in your reader by themselves — unread stays unread, and nothing lands between invoices and ads in your inbox.
Why that is better: your reader fetches the file. I get no address and cannot see who reads or whether anyone opened it. Unsubscribing means deleting the entry — no link, no confirmation mail, no me.
