ha_washdata is a free, open source internet of things (iot) project written in Python and released under AGPL-3.0. It has 1,383 GitHub stars, 45 forks and 9 open issues, and was last pushed 18 hours ago. On this registry it ranks #63 of 89 tracked projects in Internet of Things (IoT), with 5 head-to-head comparisons available.

What is ha_washdata?

WashData is a Home Assistant integration that reads an appliance's power curve through its smart plug to detect each cycle, recognise which program is running, and estimate the time remaining — built for Home Assistant users who want washing machines, dryers, dishwashers and similar appliances to report their own progress.

What it is

WashData is a custom integration for Home Assistant, written in Python and released under the AGPL-3.0 licence, that connects to the power sensor of a smart plug and interprets what the appliance behind it is doing. It lives in the Home Assistant custom-component ecosystem as custom_components/ha_washdata and is distributed through the HACS default list. Supported appliance types include washing machines, dryers, washer-dryers, dishwashers, air fryers, bread makers and pumps, with two catch-all types — Other (Advanced) for full program matching and Threshold Device for on/off detection only — covering everything else.

The concrete problem it solves is that most household appliances are not connected devices: the only signal available is the wattage drawn through the plug, which on its own says little more than on or off. WashData turns that single power trace into cycle boundaries with start, pause and end handled per appliance type, a recognised program, a remaining-time estimate, a current phase, and energy and cost figures per cycle. Rather than treating the plug's sensor as a simple threshold, it treats the shape of the power curve as the input.

Key capabilities

  • Cycle detection from the power trace, with start, pause and end handled according to the configured appliance type.
  • Program recognition from the power curve once the user has taught the integration their programs, alongside time remaining, progress and the current phase.
  • Energy and cost per cycle with support for dynamic tariffs, plus a lifetime sensor intended for the Home Assistant Energy dashboard.
  • Notifications through ready-made pushes per event, or custom automations triggered on WashData's events.
  • Pause and resume handling, door sensor support, and a reminder that laundry is still inside the machine.
  • A full-screen panel in the sidebar covering status, cycles, programs, settings and a what-if Playground.
  • Local-only operation: everything runs inside Home Assistant, and the optional Community Store is the only online feature and is off by default.

Who uses it and how

  • Home Assistant households running a washing machine, dryer, washer-dryer or dishwasher behind a metering smart plug that reports power in watts.
  • HACS users who install and update the integration through the Home Assistant Community Store rather than copying files by hand.
  • Households on dynamic electricity tariffs that want a per-cycle cost figure and a lifetime energy sensor feeding the Energy dashboard.
  • Users of less common loads — air fryers, bread makers or pumps — who configure Other (Advanced) or Threshold Device when a preset appliance type does not fit.
  • Automators who wire their own notifications and routines to WashData's events instead of the bundled pushes.

Getting started

The recommended route is HACS, where WashData sits in the default list: click Download, then restart Home Assistant. Alternatively, copy custom_components/ha_washdata from the latest release into the custom_components folder and restart, then add the integration under Settings > Devices & Services > Add Integration > WashData with a name, a device type, the plug's power entity in watts and a minimum power threshold (default 2 W).

How it compares

No other tool of this kind is named in the facts supplied for this entry, so WashData stands alone in this registry rather than being compared against an alternative. The nearest reference point in the material is the plain threshold behaviour of the smart plug itself, which the Threshold Device type reduces to on/off detection and which the full program-matching modes deliberately go beyond.

When to use it — and when not to

Use it if Home Assistant is already running and the appliance is behind a plug that reports power frequently and is rated in watts for the appliance's peak load, which is often above 2500 W. Do not pick it if there is no Home Assistant instance to host it, if the plug is cheap or under-rated for that load — the README carries an explicit electrical-safety warning about overheating and fire — or if plug-and-play behaviour is expected, since WashData ships no programs at all and requires the user to teach two or three common ones by recording a run or labelling a past cycle before matching becomes automatic.

project readme (upstream, from github) — read inline

Installs Latest Matrix

WashData

A Home Assistant integration that watches an appliance through its smart plug. It detects each cycle, recognises which program ran from the power curve, and tells you how long is left.

Works with washing machines, dryers, washer-dryers, dishwashers, air fryers, bread makers and pumps. Two catch-all types cover the rest: Other (Advanced) (full program matching) and Threshold Device (on/off detection only).

[!CAUTION] Electrical safety. A plug on a washer, dryer or dishwasher carries the full heating load for hours. It must be rated in watts at your mains voltage for the appliance's peak power, often over 2500 W (16 A is 3680 W at 230 V, but 15 A at 120 V is only 1800 W), or use a hardwired module. Cheap or under-rated plugs can overheat and catch fire. Use at your own risk and check the plug regularly. More in Smart plugs.

What you get

  • Cycle detection from the power trace, with start, pause and end handled per appliance type.
  • Program recognition once you have taught it your programs, plus time remaining, progress and the current phase.
  • Energy and cost per cycle, with dynamic tariffs, and a lifetime sensor for the Energy dashboard.
  • Notifications: ready-made pushes per event, or your own automations on WashData's events.
  • Pause / Resume, door sensor support and a "laundry still inside" reminder.
  • A full-screen panel in the sidebar for status, cycles, programs, settings and a what-if Playground.
  • Local only. Everything runs inside Home Assistant. The optional Community Store is the only online feature and is off by default.

Install

HACS (recommended): WashData is in the HACS default list.

Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

Click Download, then restart Home Assistant.

Manual: copy custom_components/ha_washdata from the latest release into your custom_components folder and restart.

Set up a device

Open your Home Assistant instance and start setting up a new integration.

Settings > Devices & Services > Add Integration > WashData, then fill in:

Field What to enter
Name e.g. "Washing Machine"
Device Type sets the detection defaults for that kind of appliance
Power Sensor the plug's power entity, in watts
Minimum Power below this the appliance counts as off (default 2 W)

Everything else is in the WashData panel in the sidebar. Before you start, check your plug reports often enough: see Smart plugs.

Teach it your programs

WashData ships no programs, because every machine is different. Teach it your 2-3 most common ones:

  • Record: on the panel's Overview tab, use Manual Recording > Start Recording, run the program, stop the recording, then save it to a profile.
  • Or label afterwards: just use the machine. Each run is stored as an unlabelled cycle; open it in Cycles and assign it to a new profile.

After that, matching is automatic. When WashData is not sure, it puts the cycle in the review queue in Cycles (Overview links to it), where you confirm or correct it.

How many profiles? One per program you can tell apart by length or power curve (Quick vs Cotton, wash only vs wash + dry). Programs that differ only in temperature or spin look alike; WashData may mix them up at first and learns from 3-5 corrections. For a washer-dryer, make one profile per wash + dry combination.

Entities

`` is your device name, for example sensor.washing_machine_state.

Entity What it shows
sensor._state off, idle, starting, running, paused, user_paused, ending, finished, anti_wrinkle, interrupted, force_stopped, clean, delay_wait, unknown
binary_sensor._running On for the whole cycle, through soaks, pauses and the end wait. Use this for "is it done" automations.
sensor._program The recognised program
sensor._time_remaining Minutes left
sensor._total_duration Elapsed + remaining (good for timer-bar-card)
sensor._progress 0-100 %, with projected energy and cost
sensor._current_phase The phase you defined for the program at this point ("Rinse", "Spin"), else unknown
sensor._cycle_count Lifetime runs, for maintenance by count
sensor._energy_total Lifetime kWh, for the Energy dashboard
sensor._suggested_settings_available Number of tuning suggestions waiting in Settings
binary_sensor._maintenance_due On when a maintenance reminder is due
select._cycle_program Pick the program by hand
button._pause_cycle / _resume_cycle Pause and resume a cycle (Pause can also cut the plug's power)
button._force_end_cycle End a stuck cycle
button._mark_unloaded Confirm the load is out (available in clean)
sensor._pump_runs_today Pump devices only: runs in the last 24 h

State meanings: idle means the display is on between cycles; paused covers quiet spells and a cycle halted on standby power (sub-state Stalled); user_paused is your own pause; ending is the wait before WashData calls the end; clean means finished with the load still inside.

Services

Service Use
ha_washdata.pause_cycle / resume_cycle e.g. pause during a peak tariff
ha_washdata.record_start / record_stop record a program from a button
ha_washdata.label_cycle, auto_label_cycles label stored cycles
ha_washdata.mark_unloaded confirm the load is out (NFC tag, button)
ha_washdata.export_config / import_config back up or restore one device (administrators)
action: ha_washdata.record_start
data:
  device_id: "washer_device_id"

Assist: ask "Is my washer done?". Copy docs/custom_sentences/en/ha_washdata.yaml to /custom_sentences/en/ and restart so Assist knows the phrases.

When something is off

Problem Try
Cycles start on standby blips Raise Start Energy (e.g. 2 Wh).
A cycle ends during a soak or pause Raise Off Delay or Min Off Gap above the longest quiet spell in the program. For a soak you start yourself, press Pause.
One run is split into two cycles Raise Min Off Gap above the quiet gap before the tail.
Program shows "unknown" Label a few runs of that program; group near-identical profiles.
You want a warning before the end Set Pre-End Alert.

Settings show suggestions from your own history, applied only when you click Use or Apply all. What each setting does: Settings guide. Quick answers: FAQ.

Documentation

Page Contents
Smart plugs Choosing and configuring the plug
FAQ Short answers to common questions
Panel walkthrough Tour of every tab
Settings guide What each setting does, with graphs
Notifications and events Push options, automations, event payloads
Community Store Adopt or share a setup for your model
Export and import Backup, transfer, undo an import
Community projects Projects that work with WashData
How it works Detection, matching and learning internals
WebSocket API Panel API reference
Changelog Version history

Questions? Join the Matrix / Element chat or open an issue. Contributing: CONTRIBUTING.md.

Languages

🇦🇱 Shqip • 🇧🇦 Bosanski • 🇧🇬 Български • 🇭🇷 Hrvatski • 🇨🇿 Čeština • 🇩🇰 Dansk • 🇳🇱 Nederlands • 🇬🇧 English • 🇪🇪 Eesti • 🇫🇮 Suomi • 🇫🇷 Français • 🇩🇪 Deutsch • 🇬🇷 Ελληνικά • 🇭🇺 Magyar • 🇮🇸 Íslenska • 🇮🇹 Italiano • 🇯🇵 日本語 • 🇰🇷 한국어 • 🇱🇻 Latviešu • 🇱🇹 Lietuvių • 🇲🇰 Македонски • 🇳🇴 Norsk • 🇵🇱 Polski • 🇵🇹 Português • 🇧🇷 Português (BR) • 🇷🇴 Română • 🇷🇺 Русский • 🇷🇸 Srpski • 🇸🇰 Slovenčina • 🇸🇮 Slovenščina • 🇪🇸 Español • 🇸🇪 Svenska • 🇹🇷 Türkçe • 🇺🇦 Українська • 🇨🇳 简体中文

Translations are community-maintained on GitLocalize.

License

AGPL-3.0-or-later. Free to use, study, modify and share; if others use a modified version over a network, you must offer them its source under the same licence.

Frequently asked questions

Is ha_washdata free to use?

ha_washdata is open source under the AGPL-3.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does ha_washdata do?

Home Assistant integration for smart-plug appliance monitoring: detects cycles, matches programs, estimates time remaining. Supports washing machines, dryers, d

What is ha_washdata written in?

ha_washdata is primarily written in Python. Its source is publicly available at https://github.com/3dg1luk43/ha_washdata, and it has 1,383 GitHub stars.