Wer UniFi im Einsatz hat (UDM, USG, Cloud Key & Co.) und FHEM nutzt, kommt früher oder später auf die Idee:
Warum nicht Netzwerkzustände direkt in FHEM ziehen und dort weiterverarbeiten?
Genau das geht ziemlich gut über die UniFi Network API – man muss nur wissen, wo die Fallstricke liegen. Der größte davon: Authentifizierung und Session-Handling.
Grundprinzip
Die UniFi Network Application stellt intern eine REST-API bereit. Darüber lassen sich u. a. abrufen:
- Gateway-Status
- WAN-Traffic
- WAN-Failover
- AP-Status
- Client-Infos
- DPI / Traffic-Stats
- Port-Status
Der klassische Endpoint für Geräte:
/proxy/network/api/s/default/stat/device
Auf einer UDM z. B.:
https://<UDM-IP>/proxy/network/api/s/default/stat/device
In FHEM pollt man diesen Endpoint typischerweise per at oder InternalTimer und schreibt die Daten in Readings.
Die größte Hürde: Authentifizierung
Ohne Login geht nichts. Und genau hier wird’s interessant, weil UniFi OS nicht nur ein simples Cookie erwartet.
Was wirklich passiert
Beim Login:
POST /api/auth/login
mit JSON:
{
"username": "user",
"password": "pass"
}
liefert UniFi:
- Ein Cookie (
TOKEN) - Ein JWT-Token
- Darin eingebettet: ein CSRF-Token
Und genau diese Kombination brauchst du später:
- Cookie:
TOKEN=... - Header:
X-CSRF-Token: ...
Wenn du nur das Cookie sendest, funktioniert es oft:
- Minuten
- manchmal Stunden
- …und friert dann plötzlich ein
Du bekommst dann zwar noch HTTP 200, aber die Daten sind stale (z. B. last_seen bleibt stehen).
Darum:
Für stabile API-Abfragen brauchst du immer TOKEN + CSRF.
Wichtig: Im Unifi muss natürlich ein entsprechender User im Vorfeld angelegt werden. Sonst wird das natürlich nichts. 😉
Typische Auth-Abhängigkeiten / Stolperfallen
Darauf solltest du achten:
- Session-Timeout: UniFi killt Sessions nach einiger Zeit
- CSRF Pflicht: je nach Firmware zwingend
- Cookie-Rotation: TOKEN kann sich ändern
- Site-Kontext: falsche Site → scheinbar “statische” Daten
- Proxy-Pfad:
/proxy/network/...bei UniFi OS nötig
Praxis-Lösung:
- Bei jedem Poll neu einloggen oder
- HTTP-Code prüfen und bei 401/403 neu einloggen
- TOKEN + CSRF sauber extrahieren
Beispiel: Sinnvolle Daten für FHEM
Sobald die API stabil läuft, wird’s spannend. Ein paar typische Use-Cases:
WAN-Status überwachen
Reading-Ideen:
WAN_state→ UP/DOWNWAN1_stateWAN2_stateWAN_active
Automationen
- Push bei Internet-Ausfall
- LED / Hue rot blinken lassen
- Sprachansage über Alexa / TTS
WAN-Failover in FHEM signalisieren
Gerade bei Dual-WAN extrem nützlich.
Beispiel:
- WAN1 = Glasfaser
- WAN2 = LTE Backup
Automation:
if WAN_active wechselt auf WAN2
→ Telegram Push
→ Dashboard Warnung
→ Traffic drosseln
Oder visuell:
- WLED Streifen orange
- Homematic Sirene kurz piepen
- TabletUI Icon wechseln
Bandbreite loggen
Readings:
WAN_rx_mbitWAN_tx_mbit
Nutzen:
- Graphen in FHEM
- Traffic-Spitzen erkennen
- Backup-Traffic sehen
- Streaming / Uploads nachvollziehen
Mit Counter-Delta sogar sehr genau.
AP-Monitoring
API liefert:
- Online / Offline
- AP-Name
- Last Seen
FHEM kann daraus:
- Offline-Alarm
- Reboot-Reminder
- PoE-Switch Trigger
Beispiel:
Wenn AP Garage offline > 5min
→ Steckdose Switch neu starten
Client-Presence (optional)
Über /stat/sta:
- Geräte online
- MAC / Hostname
- WLAN / LAN
Use-Cases:
- Anwesenheit
- Gäste-Erkennung
- Alarmanlagen-Freigabe
FHEM Poll-Intervall – realistischer Wert
UniFi aktualisiert viele Stats nicht sekündlich.
Bewährt:
- 15–30 Sekunden → guter Kompromiss
- <10s → unnötige Last
- 60s → träge Failover-Erkennung
Freeze erkennen (wichtig)
Ein extrem nützliches Debug-Reading:
last_seen
Wenn das stehen bleibt:
- Controller bekommt keine Informs
- Network App hängt
- Session hängt
Dann hilft kein Code-Fix → nur Re-Login oder App-Restart.
Fazit
UniFi-API in FHEM ist mächtig – aber nur, wenn Auth sauber läuft.
Die drei Erfolgsfaktoren:
- TOKEN + CSRF korrekt setzen
- HTTP-Code überwachen
- last_seen als Lebensindikator nutzen
Wenn das passt, bekommst du stabile Live-Netzwerkdaten ins Smarthome und kannst darauf reagieren wie auf jeden anderen Sensor auch.
Bei Interesse am fertigen Script in Form einer perl Funktion?
Kein Problem – einfach über die Kommentarfunktion melden.
Siehe auch:
Hallo Matthias,
auch ich habe mit großem Interesse dein Artikel gelesen und hätte Interesse an dem Script. Würdest du mir das bitte schicken. Allerdings habe ich noch ein größerers Problem ich weiss nicht wie ich dieses Script in Fhem intergriere. Vielen Dank für das schicken des Scripts im Voraus.
Grüße
Steven
Moin Matthias,
ein wirklich informativer Artikel mit einem super Kochrezept.
Bislang habe ich meine Controller über das UNIFI-Device abgerufen. Nach einem Upgradeauf einen neuen Controller funktioniert das allerdings nicht mehr 🙁
Könntest du mir bitte die perl-Funktion zur Verfügung stellen, so dass ich wieder in den Genuss der Automatisierung komme?
Vielen Dank & viele Grüße
Peter
Du hast Mail 🙂