Connect MeticAI to Home Assistant to get real-time espresso machine telemetry, create automations, and control your Meticulous from HA dashboards.
MeticAI includes an MQTT bridge (based on the excellent meticulous-addon by @nickwilsonr) that publishes live sensor data from your Meticulous machine to an internal Mosquitto MQTT broker. By enabling the Home Assistant overlay, port 1883 is exposed so Home Assistant can connect and subscribe to all telemetry topics.
Meticulous Machine ←── Socket.IO ──→ MQTT Bridge ──→ Mosquitto (:1883)
│
▼
Home Assistant
(MQTT Integration)
- MeticAI running with the MQTT bridge enabled (Settings → Control Center → MQTT Bridge: On)
- Home Assistant instance on the same network as MeticAI
- The MQTT integration available in Home Assistant (built-in)
The Home Assistant overlay exposes the MQTT broker (port 1883) so external clients can connect.
During installation (install script will ask):
Enable Home Assistant MQTT integration? (y/N): y
On an existing installation:
cd ~/MeticAI # or wherever MeticAI is installed
# Start with the Home Assistant overlay
docker compose -f docker-compose.yml -f docker-compose.homeassistant.yml up -dVerify the port is open:
nc -zv <meticai-host-ip> 1883
# Should output: Connection to <ip> port 1883 succeeded!Note:
ping <ip>:1883will not work —pinguses ICMP and doesn't understand TCP ports. Usenc(netcat) to test TCP port connectivity.
- In Home Assistant, go to Settings → Devices & Services → Add Integration
- Search for MQTT
- Configure:
- Broker: The IP address of the machine running MeticAI (e.g.,
192.168.50.22) - Port:
1883 - Username: (leave empty)
- Password: (leave empty)
- Broker: The IP address of the machine running MeticAI (e.g.,
- Click Submit
Tip: If MeticAI and Home Assistant are running on the same machine (e.g., both on a Raspberry Pi), use
localhostor127.0.0.1as the broker address. If they are in separate Docker networks, use the host machine's LAN IP instead.
The MQTT bridge must be enabled for sensor data to flow:
- Open MeticAI web UI → Settings
- Under Control Center, toggle MQTT Bridge to On
- Verify: the bridge status should show "Connected"
The meticulous-addon bridge publishes data using Home Assistant MQTT discovery conventions.
All sensor data is published under the meticulous_espresso/sensor/ prefix:
| Topic | Type | Description |
|---|---|---|
meticulous_espresso/sensor/boiler_temperature |
float | Boiler temperature (°C) |
meticulous_espresso/sensor/brew_head_temperature |
float | Brew head temperature (°C) |
meticulous_espresso/sensor/pressure |
float | Brew pressure (bar) |
meticulous_espresso/sensor/flow_rate |
float | Water flow rate (mL/s) |
meticulous_espresso/sensor/shot_weight |
float | Current shot weight (g) |
meticulous_espresso/sensor/shot_timer |
float | Shot elapsed time (s) |
meticulous_espresso/sensor/power |
float | Heater power (W) |
meticulous_espresso/sensor/voltage |
int | Supply voltage (V) |
meticulous_espresso/sensor/target_temperature |
float | Target temperature (°C) |
meticulous_espresso/sensor/target_weight |
float | Target weight (g) |
meticulous_espresso/sensor/preheat_countdown |
float | Preheat time remaining (s) |
meticulous_espresso/sensor/brewing |
bool | Whether a shot is in progress |
meticulous_espresso/sensor/connected |
bool | Machine connection state |
meticulous_espresso/sensor/total_shots |
int | Lifetime shot count |
| Topic | Description |
|---|---|
meticulous_espresso/availability |
Bridge availability (online / offline) |
meticulous_espresso/health |
Bridge health status |
Commands can be published to control the machine:
| Topic | Payload | Description |
|---|---|---|
meticulous_espresso/command/start_shot |
— | Start brewing |
meticulous_espresso/command/stop_shot |
— | Stop current shot |
meticulous_espresso/command/abort_shot |
— | Abort current shot |
meticulous_espresso/command/preheat |
— | Start preheat |
meticulous_espresso/command/tare_scale |
— | Tare the scale |
meticulous_espresso/command/home_plunger |
— | Home the plunger |
meticulous_espresso/command/purge |
— | Purge the group head |
meticulous_espresso/command/load_profile |
{"name": "..."} |
Load a profile by name |
meticulous_espresso/command/set_brightness |
{"value": 75} |
Set LED brightness (0–100) |
meticulous_espresso/command/enable_sounds |
{"enabled": true} |
Enable/disable sounds |
automation:
- alias: "Espresso Shot Done"
trigger:
- platform: mqtt
topic: "meticulous_espresso/sensor/brewing"
payload: "false"
condition:
- condition: template
value_template: "{{ trigger.payload == 'false' }}"
action:
- service: notify.mobile_app_your_phone
data:
title: "☕ Espresso Ready"
message: "Your shot is done!"automation:
- alias: "Morning Preheat"
trigger:
- platform: time
at: "07:00:00"
condition:
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
action:
- service: mqtt.publish
data:
topic: "meticulous_espresso/command/preheat"
payload: ""Add an Entities card or a custom gauge to your HA dashboard:
type: sensor
entity: sensor.meticulous_espresso_boiler_temperature
name: Boiler Temperature
unit_of_measurement: "°C"
icon: mdi:thermometer- Is the overlay running? Check that you started with
-f docker-compose.homeassistant.yml - Is the port open? Run
nc -zv <meticai-ip> 1883from the HA host - Firewall? Ensure port 1883 is not blocked between the HA and MeticAI hosts
- Same machine? If both are on the same host, use
localhostas the broker address. If HA is in Docker too, you may need the host's LAN IP or Docker bridge IP.
- Make sure the MQTT Bridge is enabled in MeticAI Settings
- Check that MeticAI can reach your Meticulous machine: Settings → Machine Status should show "Connected"
- Check bridge logs:
docker logs meticai 2>&1 | grep bridge
- Verify the bridge is running:
curl http://<meticai-ip>:3550/api/bridge/status - Make sure the machine is powered on and connected to the network
- Try restarting the bridge:
curl -X POST http://<meticai-ip>:3550/api/bridge/restart
- The MQTT broker has no authentication enabled by default (suitable for local networks)
- Only expose port 1883 on trusted networks
- If you need MQTT authentication, you can create a custom mosquitto config with username/password
- The overlay only exposes MQTT — the MeticAI web UI remains on port 3550
You can stack all compose overlays:
docker compose \
-f docker-compose.yml \
-f docker-compose.homeassistant.yml \
-f docker-compose.tailscale.yml \
-f docker-compose.watchtower.yml \
up -d