🔌Schnittstellen
Wie Programme mit Home Assistant reden (REST, WebSocket) und wie Home Assistant mit Geräten redet (MQTT, Zigbee, Z-Wave, Matter, ESPHome). Alle Tokens sind Platzhalter, alle Adressen aus 192.0.2.0/24.
🔑Anmeldung: Long-Lived Access Token
secrets.yaml. Hier steht überall <LONG_LIVED_ACCESS_TOKEN> – echte Tokens nimmt diese App gar nicht an.🔄WebSocket-API Schritt für Schritt
Der Client verbindet sich mit /api/websocket – über wss://, wenn TLS/Proxy davor steht.
WebSocket öffnen: ws://192.0.2.20:8123/api/websocket
🌐REST-API
Weitere: /api/config, /api/events, /api/services, /api/logbook, /api/error_log, /api/calendars, /api/config/core/check_config, DELETE /api/states/…
Action aufrufen. Antwort: Liste der States, die sich dabei geändert haben. Mit ?return_response gibt es Antwortdaten (bei Actions, die welche liefern).
curl -X POST \
-H "Authorization: Bearer <LONG_LIVED_ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"entity_id":"light.flur","brightness_pct":60}' \
http://192.0.2.20:8123/api/services/light/turn_on[{"entity_id": "light.flur","state": "on","attributes": {"supported_color_modes": ["brightness"],"color_mode": "brightness","brightness": 153,"friendly_name": "esp-flur Flurlicht","supported_features": 40},"last_changed": "2026-09-25T19:30:00.000+00:00","last_reported": "2026-09-25T19:30:00.000+00:00","last_updated": "2026-09-25T19:30:00.000+00:00","context": {"id": "01M3D0QHP0EVTYHPPW5RG0XSRY","parent_id": null,"user_id": null}}]
📨MQTT-Discovery
Format: <discovery_prefix>/<component>/[<node_id>/]<object_id>/config, Präfix standardmäßig „homeassistant“.
{"name": "Temperatur","device_class": "temperature","state_topic": "garten/esp-garten/temperatur/state","unit_of_measurement": "°C","state_class": "measurement","availability_topic": "garten/esp-garten/status","unique_id": "esp_garten_temperatur","device": {"identifiers": ["esp_garten"],"name": "Gartenhaus","manufacturer": "Eigenbau","model": "ESP32"}}
Neuer ist die Geräte-Discovery: ein Topic homeassistant/device/<object_id>/config mit allen Entitäten unter cmps (components) – weniger Nachrichten, gemeinsame Geräteangaben. Zigbee2MQTT und ESPHome (im MQTT-Modus) erzeugen solche Discovery-Nachrichten automatisch.
📶Funk- und Geräteprotokolle
🐝 Zigbee · ZHA
Integration im Core: spricht über einen Zigbee-Koordinator (USB- oder Netzwerk-Stick) direkt mit den Geräten. Kein MQTT nötig, alles in der HA-Oberfläche.
Gerät ~~Funk~~ Stick ─USB─ ZHA (im Core) ─▶ Entitäten
📨 Zigbee · Zigbee2MQTT
Eigenes Projekt (als App oder Container) mit eigener Weboberfläche und sehr großer Geräteliste. Es übersetzt Zigbee in MQTT; Home Assistant bindet die Geräte per MQTT-Discovery ein.
Gerät ~~Funk~~ Stick ─ Z2M ─MQTT─ Broker ─MQTT─ HA
🌊 Z-Wave · Z-Wave JS
Die Z-Wave-Integration verbindet sich per WebSocket mit einem Z-Wave-JS-Server – üblicherweise die App „Z-Wave JS“ bzw. Z-Wave JS UI. Bei Container-Installationen betreibt man den Server selbst.
Gerät ~~Funk~~ Stick ─ Z-Wave JS Server ─WS─ HA
🧵 Matter & Thread
Matter ist ein herstellerübergreifender Standard über WLAN, Ethernet oder Thread. HA nutzt die App „Matter Server“ (WebSocket). Anlernen per Companion-App über Bluetooth; dank Multi-Admin gleichzeitig in Apple Home, Google Home und HA. IPv6 im Netz ist Pflicht; Thread-Geräte brauchen einen Thread-Border-Router. Offiziell unterstützt nur unter Home Assistant OS.
Thread-Gerät ~~802.15.4~~ Border Router ─IPv6─ Matter Server ─WS─ HA
🔌 ESPHome
Firmware für ESP32/ESP8266 aus einer YAML-Beschreibung. Geräte werden per mDNS gefunden und über die Native API (TCP-Port 6053, Protobuf, optional mit Noise-Verschlüsselung) angebunden – schnell und ohne Broker.
ESP32 (ESPHome) ─Native API :6053─ HA
📡 MQTT allgemein
Publish/Subscribe über einen Broker (z. B. Mosquitto). Viele Eigenbau- und Tasmota/Shelly-Geräte sprechen MQTT; mit Discovery erscheinen sie automatisch als Geräte in HA.
Gerät ─publish─▶ Broker ─subscribe─▶ HA
# ESPHome-Gerät „esp-flur“ (Ausschnitt, Werte erfunden)
esphome:
name: esp-flur
esp32:
board: esp32dev
wifi:
ssid: "Musterhaus-WLAN"
password: "beispiel-passwort"
api:
encryption:
key: "<PLATZHALTER-SCHLÜSSEL>" # Noise-PSK, Base64
light:
- platform: monochromatic
name: "Flurlicht"
output: pwm_flur
output:
- platform: ledc
id: pwm_flur
pin: GPIO16
# → in HA: light.esp_flur_flurlicht (hier im Musterhaus umbenannt zu light.flur)