liebherr2mqtt

liebherr2mqtt

Docker app from ripleyxlr8's Repository

Overview

Bridges connected Liebherr fridges and freezers (SmartDeviceBox) to your MQTT broker, using Home Assistant style discovery. The appliance then shows up on its own in Jeedom, Home Assistant, or any other MQTT Discovery consumer: temperature, setpoint, SuperCool, SuperFrost, Party Mode, Night Mode, presentation light, ice maker, HydroBreeze, BioFresh-Plus and auto door - whichever your own appliance actually exposes. Multi-zone appliances get one entity per zone. REAL TIME, NO POLLING: State changes arrive as a push over Server-Sent Events, so the Liebherr cloud is never polled in a loop. That avoids the API rate limits and the IP blocks people have run into. The bridge is built on pyliebherrhomeapi, the library behind the official Home Assistant integration. ROBUST: Discovery, states and command subscriptions are replayed on every reconnection to the broker, so a broker restart cannot leave the bridge publishing states while silently ignoring commands. An MQTT Last Will reports the bridge going down. REQUIREMENTS: An MQTT broker, and a HomeAPI key generated in the Liebherr SmartDevice mobile app: Settings > Become a beta tester > Activate the HomeAPI interface > Generate a new key. Note that the key can only be copied once. Door state and door alarms are not available: they are not part of the Liebherr HomeAPI. Not affiliated with, endorsed by, or supported by Liebherr.

liebherr2mqtt
liebherr2mqtt

Liebherr SmartDevice HomeAPI → MQTT bridge, with Home Assistant style discovery.
Brings a connected Liebherr fridge or freezer into Jeedom, Home Assistant, or anything else that speaks MQTT Discovery — in real time, without polling the cloud.


Why

Liebherr appliances fitted with a SmartDeviceBox are cloud-only in practice. The box does contain a LocalAPI, but Liebherr disables it remotely on consumer appliances — it is only enabled on the SmartModule of their professional ranges. The remaining option is the official SmartDevice HomeAPI, published in beta in April 2025.

Home Assistant has had a first-class integration for it since 2026.3. Jeedom has nothing. This bridge fills that gap, and works for any MQTT-Discovery consumer.

It is built on pyliebherrhomeapi, the library behind Home Assistant's official liebherr integration, rather than on a hand-rolled HTTP client — so it inherits that project's data model, error taxonomy and SSE reconnection logic.

Features

  • Real-time, no polling. State changes arrive as a push over Server-Sent Events (/v1/sse/devices/{id}/controls). Liebherr rate-limits the HomeAPI and has been known to block calling IP addresses; this bridge simply does not hammer it. A single full re-read every 15 minutes (configurable, and disableable) acts as a safety net.
  • Auto-discovery. Entities appear on their own in Jeedom or Home Assistant, grouped as one device, with proper units, ranges and icons.
  • Reconnection-proof. Discovery, states and command subscriptions are replayed on every MQTT (re)connection. This is the failure mode that silently breaks a lot of home-made bridges: with a non-persistent session the broker drops your subscriptions on any disconnect, and a bridge that only subscribes at startup keeps publishing states while quietly ignoring every command.
  • Last Will. If the container dies, the appliance's online indicator flips to off by itself.
  • Only what your appliance actually has. Entities are built from the controls the device declares, not from a hard-coded model list.

Supported controls

HomeAPI control Published as Notes
temperature sensor (measured) + number (setpoint) Uses the device's own min/max. Becomes a select if the appliance only accepts discrete steps.
supercool switch Per zone
superfrost switch Per zone
partymode switch Whole appliance. ⚠️ Runs SuperCool/SuperFrost for 24 h
nightmode switch Whole appliance
holidaymode, bottletimer switch Whole appliance
presentationlight number Brightness, 0…max
icemaker select Off / On / MaxIce, MaxIce only if supported
hydrobreeze select Off / Low / Medium / High
biofreshplus select Only the modes the appliance reports as supported
autodoor sensor (state) + switch (open)
binary_sensor "online" Connectivity, backed by the MQTT Last Will

Multi-zone appliances get one entity per zone, suffixed with the zone position.

Door state and door alarms are not available. They are not part of the HomeAPI — the mobile app reads them from a separate, undocumented internal API.

Getting an API key

In the SmartDevice mobile app:

Settings → Become a beta testerActivate the HomeAPI interfaceGenerate a new key

⚠️ The key can only be copied once. Copy it before leaving that screen.

Running it

Docker

docker run -d \
  --name liebherr2mqtt \
  --restart unless-stopped \
  -e LIEBHERR_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx \
  -e MQTT_HOST=192.168.1.10 \
  -e MQTT_USER=mqttuser \
  -e MQTT_PASSWORD=mqttpassword \
  ghcr.io/ripleyxlr8/liebherr2mqtt:latest

Unraid

Install it from Community Applications — open the Apps tab and search for liebherr2mqtt. Every setting is a field in the UI, and the API key field is masked.

The CA template lives in ripleyXLR8/unraid-templates, which is the repository Community Applications indexes.

Configuration

Everything can be set through environment variables, or through a /config/liebherr2mqtt.conf file (see liebherr2mqtt.conf.template). Environment variables win over the file, and the file is entirely optional.

Variable Default Meaning
LIEBHERR_API_KEY Required. HomeAPI key from the app
LIEBHERR_REFRESH_INTERVAL 900 Seconds between full re-reads; 0 disables
MQTT_HOST / MQTT_PORT 127.0.0.1 / 1883 Broker
MQTT_USER / MQTT_PASSWORD empty Leave empty for an anonymous broker
MQTT_CLIENT_ID liebherr2mqtt
MQTT_DISCOVERY_PREFIX homeassistant Where discovery messages go
MQTT_TOPIC_PREFIX liebherr Root of state and command topics
LOG_LEVEL INFO DEBUG, INFO, WARNING, ERROR

Topics

liebherr/<device>/availability              online | offline
liebherr/<device>/<entity>/state            current value    (retained)
liebherr/<device>/<entity>/set              command
homeassistant/<component>/liebherr_<device>/<entity>/config   discovery (retained)

Jeedom notes

Install the MQTT Discovery plugin, point it at your broker, and the appliance shows up on its own. Two traps worth knowing:

  • ⚠️ Add liebherr to the plugin's "data topics" setting. The plugin checks that the root of a discovery message's state topic is in that list, and silently ignores the message otherwise — it merely records the unknown root in discovered_data_topics. Nothing appears, and nothing explains why.
  • The plugin renames a command after the discovery device_class, which is why the setpoint here deliberately carries no device_class: it would be created as a second command named "Temperature" instead of "Setpoint".

Home Assistant notes

If you use Home Assistant, prefer its official liebherr integration — it talks to the same API directly, with no broker in between. This bridge is for everything else.

License

MIT — see LICENSE.

Not affiliated with, endorsed by, or supported by Liebherr. "Liebherr", "SmartDevice", "BioFresh", "SuperCool" and "SuperFrost" are trademarks of their respective owners.

Install Liebherr2mqtt on Unraid in a few clicks.

Find Liebherr2mqtt in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Liebherr2mqtt Review the template variables and paths Click Install

Requirements

An MQTT broker, and a HomeAPI key generated in the Liebherr SmartDevice mobile app (Settings > Become a beta tester > Activate the HomeAPI interface > Generate a new key). The key can only be copied once.

Categories

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/ripleyxlr8/liebherr2mqtt:latest
Last Updated2026-09-03
First Seen2026-09-03

Runtime arguments

Network
bridge
Shell
sh
Privileged
false

Template configuration

HomeAPI keyVariable

Generated in the Liebherr SmartDevice mobile app: Settings &gt; Become a beta tester &gt; Activate the HomeAPI interface &gt; Generate a new key. The key can only be copied once, so save it somewhere before leaving that screen.

Target
LIEBHERR_API_KEY
MQTT broker hostVariable

IP address or hostname of your MQTT broker.

Target
MQTT_HOST
MQTT broker portVariable

Port of your MQTT broker.

Target
MQTT_PORT
Default
1883
MQTT usernameVariable

Leave empty if your broker allows anonymous connections.

Target
MQTT_USER
MQTT passwordVariable

Leave empty if your broker allows anonymous connections.

Target
MQTT_PASSWORD
Discovery topic prefixVariable

Where discovery messages are published. Must match what your consumer listens on: homeassistant for Home Assistant, or the configuration topic of the Jeedom MQTT Discovery plugin.

Target
MQTT_DISCOVERY_PREFIX
Default
homeassistant
State topic prefixVariable

Root of the state and command topics. Jeedom users: this prefix must ALSO be listed in the data topics setting of the MQTT Discovery plugin, otherwise the plugin silently ignores the discovery messages.

Target
MQTT_TOPIC_PREFIX
Default
liebherr
Safety re-read intervalVariable

Seconds between two full re-reads of the appliance state, 0 disables it. Changes normally arrive as a push, so this is only a safety net. Do not lower it much: Liebherr rate-limits the HomeAPI.

Target
LIEBHERR_REFRESH_INTERVAL
Default
900
MQTT client idVariable

Only change this if another client already uses that id on your broker.

Target
MQTT_CLIENT_ID
Default
liebherr2mqtt
Log levelVariable

DEBUG, INFO, WARNING or ERROR.

Target
LOG_LEVEL
Default
INFO
TimezoneVariable

Timezone used for the timestamps in the container log.

Target
TZ
Default
Europe/Paris
Config folderPathrw

Optional. Lets you supply a liebherr2mqtt.conf file instead of the variables above. The variables take precedence over the file, so you can leave this unset.

Target
/config