Melitta Barista Smart — Custom Integration + Lovelace Card (early MVP)

Hi all,

Sharing my custom integration for Melitta Barista T Smart / TS Smart coffee machines. It connects via BLE and lets you control the machine from HA — brew recipes, monitor status, change settings, run maintenance cycles.

This is an early MVP. I use it daily with my TS Smart and it works, but it’s far from polished. Expect rough edges and possible breaking changes. If you have a Melitta Barista — give it a try and let me know what breaks.

What’s there

  • BLE auto-discovery and pairing (D-Bus Agent1, no manual bluetoothctl)
  • Recipe select + brew button (21 recipes on T, 24 on TS)
  • Live status: state, activity, progress %, action required alerts
  • Settings: water hardness, brew temperature, auto-off, energy saving
  • Maintenance: easy clean, intensive clean, descaling, power off
  • Lovelace card with status, recipe picker, progress bar
  • 29 languages

Screenshot

Install via HACS (custom repository)

Integration: add https://github.com/dzerik/melitta-barista-ha → category Integration

Card: add https://github.com/dzerik/melitta-barista-card → category Dashboard

Links

Bug reports and feedback on GitHub are appreciated.

1 Like

Awesome ! Thank you for your work.
I tried it and no issues found. :+1:

Melitta Barista T Smart + ESP32 BLE proxy

The project has grown a lot since the MVP. Here’s where things are now.


Integration v0.29

Full BLE protocol with AES/RC4 encryption, same as the official Melitta app. Everything local, no cloud.

What’s new since the MVP:

  • Freestyle builder — custom drinks with two components, intensity, aroma, temperature, shots, portion size
  • DirectKey profiles — brew from personalized profile slots
  • Maintenance — descaling, evaporating, water filter insert/replace/remove
  • Cup counters per recipe
  • User profile names (read/write)
  • ESPHome BLE proxy support (ESP32-C6/S3) — for when HA host is too far from the machine
  • Options flow — configurable poll interval, reconnect delays, timeouts
  • 350+ tests, 89% coverage

Card v2.1 — complete rewrite

The card now has the same features as the standalone app. Just add custom:melitta-barista-card — auto-detects the device.

Recipes — DirectKey quick-access, user profiles, full recipe grid
Freestyle — custom drink builder
Stats — cup counter dashboard
Maintenance — cleaning, descaling, water filter
Settings — toggles and sliders

New: Standalone PWA

GitHub — melitta-barista-app

Full-screen app for wall-mounted tablets and kiosks. Connects to HA via WebSocket API. Installable as PWA on any device. No data goes to external servers — token stored only in browser localStorage.

Live Demo (needs your own HA instance with the integration)


Install via HACS (custom repository)

Integration: add https://github.com/dzerik/melitta-barista-ha → category Integration
Card: add https://github.com/dzerik/melitta-barista-card → category Dashboard

Feedback and bug reports welcome.

This is fantastic work - thank you!

I've been having some issues pairing using a BLE proxy. Some details follow:

Proxy-mode pairing fails: async_pair_device enters local-BlueZ _pair_and_trust instead of skipping D-Bus pairing

Setup: Melitta Barista TS Smart, ESPHome BLE proxy only (Seeed XIAO ESP32-C6, esp-idf framework, active connections enabled). No local Bluetooth adapter in use.

Discovery works perfectly — the machine is identified ("Melitta Barista TS Smart"), advertisement 850102U211022440502-, MAC C4:0E:38:AD:2D:4B, RSSI ~−55 dB via the proxy. The "Pair with Melitta Barista TS Smart" config flow appears correctly.

On Submit, pairing fails immediately with:

File "custom_components/melitta_barista/ble_agent.py", line 258, in async_pair_device
    return await _pair_and_trust(bus, device_path, address, timeout)
File "custom_components/melitta_barista/ble_agent.py", line 139, in _pair_and_trust
    device_iface = proxy.get_interface("org.bluez.Device1")
dbus_fast.errors.InterfaceNotFoundError: interface not found on this object: org.bluez.Device1

Per the BLE architecture docs, in proxy mode ble_agent.py should detect the absent Adapter1 and skip D-Bus pairing (delegating pair=True to the ESP32). That isn't happening — it always enters the local-BlueZ _pair_and_trust path.

Confirmed it is not local-adapter state: the error is identical after (a) deleting the HA Bluetooth integration entry, (b) a full HA restart, and (c) bluetoothctl power off on the host's hci0 adapter. The BlueZ D-Bus service remains present on HA OS regardless, so the proxy-mode detection appears to be keying off bus presence rather than a usable adapter/device object.

I'm probably doing something dumb here, but this is far as I can get with troubleshooting.

Any ideas? Thank you!

Environment: HA 2026.6.2, Python 3.14, integration v0.23.3, HA OS on Raspberry Pi 4.

Hi there, this is a fantastic integration and card. Just installed it today and it works flawlessly with my Barista TS Smart. Thank you for all your effort :slight_smile:

The only open issue I think is the missing multilanguage support for the barista card.

Kind regards,

Daniel

Hi, is there the option to get the Nivona9101 in the Integration. BLE finds the coffee machine but doesn't connect via bluetooth. Would be nice to get the machine in the Integration. thanks Christian

Hi @cspecks, thanks for the report!

I looked into it — your symptom (“BLE finds the coffee machine but doesn’t connect”) matches the code exactly: the integration discovers any Nivona by its numeric BLE advertisement, but the NIVO 9101 serial prefix wasn’t in the model table yet, so the machine fell through to “unknown family” and the connection was never established.

I’ve just published v0.84.0 with alpha support for the NIVO 9101: it’s mapped onto the NIVO 8000 family profile (same NIVO line, same OEM stack). Fair warning: I don’t own a 9101, so this mapping is an educated guess — the 2025 “9000 series” may differ in recipe layout.

Could you update via HACS and try it? Things to check: pairing/handshake, machine status showing up, and a simple brew. Whatever the result, please open a GitHub issue with:

  1. the BLE advertisement name of your machine (visible in the HA Bluetooth integration or in the config flow),
  2. debug logs if something fails (logger: custom_components.melitta_barista: debug).

If the 8000-family mapping turns out wrong for the 9000 series, that data is exactly what I need to build a proper profile. Thanks for testing! :coffee:

Hi @Spitfyre — sorry for the slow reply, and thank you for the excellent report: the stack trace pointed exactly at the problem.

Root cause confirmed: your host still exposes a BlueZ adapter on D-Bus (hci0), so the pairing code took the “local adapter” path — but the machine is only visible through your ESP32-C6 proxy, so it introspected a device object hci0 had never seen and died with InterfaceNotFoundError: org.bluez.Device1. The existing proxy shortcut only kicked in when there was no local adapter at all.

Just published v0.85.0 with the fix: the config flow now asks the HA Bluetooth registry which scanner actually sees the device, and when it’s a remote (ESPHome proxy) scanner it skips D-Bus pairing entirely — bonding is handled by the proxy on connect, same as the no-adapter path.

Could you update via HACS and retry the pairing flow? If anything still misbehaves, please open a GitHub issue with debug logs (custom_components.melitta_barista: debug). Thanks again for the diagnostics! :hot_beverage:

Hi @Snapjack, glad it works well for you!

Good news on your one open point — the card is now fully localized. Card v2.3.3 ships with 29 languages (the same list as the integration: de, en, ru, fr, it, es, nl, pl, cs, uk, sv, da, nb, fi, …), reusing the integration’s terminology for machine states, cleaning and settings. The UI follows your Home Assistant profile language and switches on the fly.

Update the card via HACS and hard-refresh the browser (Ctrl+Shift+R) — it should greet you in German right away. If you spot a translation that reads oddly, corrections are welcome: the files live in src/localize/languages/.

Hi @dzerik! HA found my Barista and paired very straightforwardly. Great work - thank you! I’m looking forward to exploring further. I’ve had over 6000 cups of coffee from this machine (or, more accurately, individual coffee components, it’s probably more like 2,000 composite cups), so you can tell this is very important to me! I’[m looking forward to exploring the integration’s capabilities further.