v2.8.12 · self-hosted · open source (LGPLv3)

The home automation backend
you actually own.

myHAB runs on your own hardware and talks directly to your devices over MQTT — no vendor cloud in the control path. Wire up ESP32 and MegaD controllers, solar inverters, heat pumps and weather data, then drive it all from a floor-plan dashboard, a scenario script, a Telegram message or your voice.

74domain entities
16scheduled jobs
2languages (EN / RO)
0cloud accounts required
myHAB · Dashboard
The myHAB dashboard showing lighting, climate, socket, gate, irrigation, weather, solar and heat-pump cards
Why myHAB

Infrastructure-grade home automation

Most home automation software models devices. myHAB models the whole installation — zones, racks, patch panels, cables, controller ports and the peripherals wired to them — so what you see on screen matches what is actually in the wall.

Local first

Devices talk MQTT to your own broker. Commands never leave the LAN, and the system keeps working when your internet does not.

Models the wiring

Cables, patch panels, racks and controller ports are first-class entities. Print a QR label, scan it later, and land on the exact port you're chasing.

Energy aware

Solar production, per-phase grid metering and heat-pump statistics are stored as time series and aggregated hourly, daily and monthly.

Automations that read like sentences

Scenarios are short Groovy scripts — if (isRaining()) switchOff(...) — triggered by cron, by device events, or by hand.

Guests without accounts

Hand out a tokenised link that opens the gate three times in the next two days, optionally PIN-protected, with a full audit trail of every attempt.

Voice that knows your house

An LLM agent is grounded in your live catalogue of peripherals, zones and scenarios — it cannot invent a device, and every action is re-validated server-side.

Product tour

What you get out of the box

Floor-plan control screens

Drop a rendering or photo of each floor in as a background, then place live widgets on it — lights, heating valves, locks, sensors, temperature readouts and navigation links between levels. Tap a bulb on the plan and the real one switches.

  • Drag-and-drop editor with per-widget icon, size and target
  • Values render in place — 26.87°C, 95.9%, on/off state colouring
  • Full-screen kiosk mode for a wall tablet
  • Legacy SVG floor plans can be imported
/wuikioskdrag & drop
Ground floor · live plan
Ground-floor plan with live light, heating and lock widgets overlaid

Energy and climate, measured

Solar production, house consumption, grid import and export flow through one animated diagram. The heat pump reports every sensor it has — outdoor, room, supply, return, hot water, brine — plus compressor hours, starts and the energy split between heating and hot water.

  • Huawei FusionSolar inverter and DTSU smart-meter polling
  • NIBE heat pump over the myUplink API, with automatic token refresh
  • Open-Meteo weather with 3-day forecast, sunrise/sunset and sunshine hours
  • Everything stored as time series, aggregated hourly / daily / monthly
HuaweiNIBE F1145Open-MeteoGrafana-ready
Weather · Solar · Heat pump
Weather station, solar power plant flow diagram and heat pump widgets

Share access without sharing your house

Create a link for one peripheral — a gate, a light, a pump, a sprinkler — with a validity window, a maximum number of uses and an optional PIN. The recipient gets a single-purpose page. No account, no app, no access to anything else.

  • Gate links spend one use per open; switch links spend one per start — stopping is always free
  • Every attempt, allowed or denied, is recorded with IP and user agent
  • Links can be disabled or archived instantly from the admin list
  • Auto-off timeout is shown to the guest: “stops automatically after 5 hours”
/shared/<token>PINaudit trail
Guest gate page: tap to unlock, 5 uses remaining
Guest switch page with start and stop controls
PIN entry screen for a shared gate link

Speak to your house

Say “turn off everything on the terrace” or “aprinde lumina din birou”. Speech is transcribed in the browser, an LLM agent maps it to concrete actions against your real catalogue, and the reply is spoken back — optionally in a natural neural voice.

  • Switch one peripheral or an entire zone; run scenarios by name; ask state questions
  • Asks a clarifying question instead of guessing, and keeps the conversation going
  • Anthropic Claude or OpenAI, chosen by configuration — your key, your account
  • A native Android client adds hands-free wake-word activation
Web Speech APIClaude / GPTGoogle neural TTSAndroid
How the voice assistant works
Voice Control
The voice control page with a microphone button and a command box

See the wire, not just the widget

A built-in MQTT explorer shows every retained topic as a live tree plus a raw message monitor, and lets you publish a payload by hand. The port list is the other half of the same story: every I/O line on every controller, its type, state and last value.

  • Live topic tree with per-topic payloads and a rolling raw monitor
  • Publish arbitrary topic/payload pairs for debugging
  • Ports auto-created by integrations are labelled and searchable
  • Per-peripheral event log showing who changed what, and from where
MQTTretained treeevent log
MQTT Explorer · 476 topics
MQTT explorer showing a topic tree, publish form and raw monitor

Schedules that fit the season

The sprinkler scheduler is a week-by-hour grid: pick the days, drag the start hour, set a duration per zone. Everything else — heating curves, device polling, statistics rollups, auto-off timeouts — runs on Quartz jobs whose intervals you control from configuration.

  • Per-sprinkler day mask, start time and run length, with an “apply to all” default
  • Individual schedules can be disabled without deleting them
  • Heating control job drives thermostats from room temperature and degree-minutes
  • Auto-off timeout stops anything left running
Quartzcrondegree-minutes
Sprinkler Scheduler
Sprinkler scheduler grid with days of week and hour columns
Screenshots

The whole application

Click any image to enlarge.

Dashboard
DashboardZone-grouped cards for lighting, climate, sockets, temperature, gate and irrigation.
Energy widgets
Energy & climate widgetsWeather, solar flow diagram and full heat-pump telemetry.
Ground floor plan
Ground floor planLive widgets placed on a rendering of the actual house.
Upper floor plan
Upper floor planMotion, humidity and per-room temperature shown in place.
Screen editor
Screen editorPlace, resize and link widgets; import legacy SVG plans.
MQTT explorer
MQTT explorerRetained topic tree, raw monitor and a manual publish form.
Port list
Port listEvery controller I/O line with type, state and last value.
Message inbox
Message inboxDevice-offline warnings and alerts, with mute-similar and archive.
Sprinkler scheduler
Sprinkler schedulerWeek-by-hour irrigation grid, per zone.
Share access dialog
Share accessValidity window, maximum uses and an optional PIN.
Guest switch page
Guest control pageWhat the recipient of a shared link sees.
Voice control
Voice controlSpeak or type; the agent replies out loud.
Integrations

Hardware and services it speaks to

Everything tied to hardware you might not own ships disabled. Enable what is actually in your house and ignore the rest.

ESP32

Relay and sensor boards over MQTT. Command out, state echo back — the echo is what updates the UI, so nothing lies about its state.

MQTTcore

MegaD-2561

Multi-port Ethernet I/O controllers, with an HTTP ?cmd=all reconciliation sweep alongside the MQTT stream.

MQTT + HTTPcore

Huawei FusionSolar

SUN2000 inverter and DTSU666-H smart meter: instantaneous power, per-phase grid data, daily and lifetime yield.

optional

NIBE heat pumps

F1145 and family via myUplink: all temperature sensors, compressor statistics, alarms, degree-minutes.

optional

Open-Meteo

Free weather with no API key — current conditions, 3-day forecast, hourly detail, sunrise and sunshine duration.

optional

Segway Navimow

Robotic mower: battery, state, start / pause / resume / dock, plus notifications for errors and completed runs.

optional

ONVIF cameras

Motion and presence events bridged onto MQTT, usable as scenario triggers.

optional

Telegram

A bot with role-based menus for status, switching, gate opening and push notifications.

optional
Under the hood

A boring, durable stack

A Grails 7 / Groovy 4 backend on the JVM, PostgreSQL for persistence and time series, Spring Integration for MQTT, Quartz for scheduling and Hazelcast for caching. The client is a Vue 3 + Quasar PWA talking GraphQL, with STOMP over WebSocket for live state.

It ships as a single Docker image plus a database and a broker. No microservices, no message bus to operate, nothing that needs a Kubernetes cluster to survive the night.

Backend

Java 17 · Grails 7.2 · Groovy 4 · GORM/Hibernate · GraphQL · Quartz · Spring Integration · Spring Security (JWT) · Hazelcast

Frontend

Vue 3 · Quasar 2 · Pinia · Apollo Client 3 · STOMP WebSocket · Workbox PWA · i18n (EN/RO)

Data

PostgreSQL with partitioned port_values and event_log, an archive schema and rollup statistics

Transport

MQTT (Mosquitto) for devices · GraphQL for queries and mutations · WebSocket for live state · REST for the public share pages

No install required

A whole fictional house, running right now

The public demo is a seven-zone home with twenty-one peripherals and simulated ESP32 controllers answering on a real MQTT broker. Switch the lights, run a scenario, open the floor plans, break something — it resets when it goes idle.

user  demo / demo admin  demo-admin / demo-admin

Data is shared between visitors and resets when idle. Please don't put anything real in it.