KapfenbergThis saves me …WaterLocal over cloud

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.

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.