KaZa Home automation

Home automation

Quick Overview

KaZa Home Automation

KaZa is an open-source home automation platform built on Qt and QML. It connects physical devices — KNX bus, MQTT brokers, HTTP appliances — into a unified object model and serves a native, hardware-accelerated user interface to any number of phones, tablets, and desktops simultaneously.

Key Characteristics

  • Native everywhere — the client is a compiled Qt application for Linux, Windows, and Android. No browser required.
  • Declarative automation — server-side logic is written in QML. Bindings, timers, and schedulers express your rules concisely.
  • Secure by design — all client connections use mutual TLS. Every device gets its own certificate, generated by the server on demand.
  • Efficient protocol — object value updates are binary frames of 10–20 bytes. A Raspberry Pi handles hundreds of objects and multiple clients with no measurable load.
  • Extensible — new device types are added as Qt QML extension modules (plugins) in C++. The integrator imports the plugin in QML and uses its types immediately.

Documentation

Section Audience Description
Introduction Everyone Architecture, components, security model, existing integrations
Integrator Guide Integrators Writing server-side and client-side QML for your home
Plugin Development Developers Creating new integration plugins in C++/Qt/CMake
KaZa vs Home Assistant Everyone Objective pros/cons comparison with the most popular alternative

Quick Overview

Raspberry Pi (server)              Phones & tablets (clients)
──────────────────────             ──────────────────────────
kazad daemon                       KaZa Client (native app)
  └── main.qml (your code)           └── UI from app.rcc
        ├── KnxBus (ETS project)           bound to object names
        ├── MqttClient                     updated in real time
        ├── Scheduler (cron rules)
        └── DataLogger (PostgreSQL)
              │
              └── SSL port 1756 ──────────► synchronized objects
                  (mutual TLS)               ← user actions

Example: Minimal Server Application

import QtQml 2.0
import org.kazoe.kaza 1.0
import org.kazoe.knx 1.0

KaZaElement {
    KnxBus {
        knxd:    "ip:192.168.1.250"
        knxProj: "/etc/kaza/home.knxproj"
    }

    // Evening automation
    Scheduler {
        hour:   "20"
        minute: "0"
        onTimeout: {
            outdoorLights.set(true)
            livingRoomDimmer.set(60)
        }
    }

    KzObject { id: outdoorLights;    object: "light.switch.outside" }
    KzObject { id: livingRoomDimmer; object: "light.dim.lounge" }
}