WLan-Anwesenheitserkennung mit UniFi-Accesspoints in FHEM einbinden und an Loxone weiterleiten

Loxone im Einsatz? Dann schau dir unseren LoxKurs an und profitiere von unserem Wissen!

FHEM, f√ľr mich nach wie vor das Schweizer Taschenmesser unter den Smart-Home-Gateways, setze ich nun auch f√ľr die heimische Anwesenheitserkennung per WLan ein. Da ich insgesamt vier UniFi-Accesspoints installiert habe, verr√§t mir das System sogar recht genau, in welchem Bereich des Hauses welches Ger√§t anzutreffen ist.

Wie man diese wirklich zuverlässige WLan-Anwesenheitserkennung in nur wenigen Schritten auf einem Raspberry Pi einrichtet, ist Inhalt des nachfolgenden Blogpost. Hier wird anschließend auch kurz gezeigt, wie die Anwesenheitsinfos einzelner Devices zwecks Visualisierung an Loxone weitergereicht werden können.

UniFi-Accesspoints und die Tracking-Möglichkeiten

Nach mehr als eineinhalb Jahren seit meinem ersten Blogpost Pimp my WLAN ‚Äď Bester Empfang im ganzen Haus durch Zero Handoff Roaming folgt nun endlich ein weiterf√ľhrender Artikel zum Thema UniFi, den ich aufgrund des zur√ľckliegenden Hausbaus einfach immer wieder vor mich her geschoben hatte. Umso froher bin ich, dass die Umsetzung auf Anhieb geklappt hat und die Qualit√§t der Anwesenheitserkennung – es werden prim√§r zwei iPhone X getrackt – bisher absolut fehlerfrei l√§uft.

Aktuell nutze ich dazu pro Stockwerk zwei UAP-PRO (Affiliate-Link), welche r√§umlich so positioniert sind, dass die beiden Stockwerke des Hauses recht gleichm√§√üig versorgt werden. Im Erdgeschoss ist ein Accesspoint bspw. hinter der K√ľchenblende und ein weiterer im hinteren Dielenbereich installiert:

Das Besondere am WLan-Tracking der hier vorgestellten UniFi-L√∂sung ist dabei, dass keine stromfressende, direkte Abfrage einzelner Ger√§te (LAN-Ping) notwendig ist. Mobile Endger√§te, die im Standby aus naheliegenden Gr√ľnden auf Stromsparmechanismen zur√ľckgreifen m√ľssen, w√§ren so n√§mlich nach wenigen Minuten nicht mehr erreichbar und w√ľrden als „offline“ angezeigt, obwohl sie sich noch vor Ort befinden.

Stattdessen l√§sst sich die Anwesenheitsinformation direkt aus dem UniFi-Controller auslesen, welcher prim√§r als Einrichtungs- und Verwaltungssoftware der UniFi-Accesspoints fungiert. Und das funktioniert auch dann reibungsfrei, wenn Ger√§te in den Stromsparmodus wechseln und nicht mehr anpingbar sind. Einzige Einschr√§nkung ist dabei, dass der Status eines „schlafendes“ Ger√§tes beim Verlassen der Reichweite erst nach einer Verz√∂gerung von knapp f√ľnf Minuten auf „offline“ wechselt. Aber diese Einschr√§nkung ist halb so wild, gerade wenn man noch weitere Ortungsdienste wie bspw. Geofancing oder die Anwesenheitserkennung durch Pr√§senzmelder einbeziehen kann.

UniFi-Controller auf dem Raspberry Pi installieren

Die UniFi-Controller-Software ist gl√ľcklicherweise f√ľr verschiedene Betriebssysteme verf√ľgbar und l√§sst sich so auch mit wenigen Handgriffen auf einem Raspberry Pi installieren. Genutzt werden kann bspw. ein Grundsystem, basierend auf einem Raspbian-Image, dessen Einrichtung inkl. FHEM im Artikel FHEM-Server auf dem Raspberry Pi in weniger als einer Stunde einrichten beschrieben wurde.

In meinem Fall kommt aber ein bereits im Schaltschrank installierter Raspberry Pi auf Basis eines fertigen LoxBerry-Image zum Einsatz, wie im Blopost LoxBerry in 10 Minuten auf dem Raspberry Pi installieren ‚Äď Die ultimative Erweiterung f√ľr dein Smart Home von Loxone erkl√§rt. Das Coole an LoxBerry ist dabei, dass sich dort FHEM als LoxBerry-Plugin mit nur einem Klick nachinstallieren l√§sst und man auf diese Weise super einfach mehrere „Welten“ unter einer Haube kombinieren kann.

Aber egal welches Grundsystem darunterliegt, die Installation l√§uft im Grunde √ľberall gleich ab. Im Detail unterscheiden sich die Befehle aber dennoch etwas, weshalb nachfolgend zwei Wege gezeigt werden, einmal f√ľr ein Raspbian-Grundsystem und einmal f√ľr eine fertige LoxBerry-Installation.

Zuerst per ssh auf dem Raspberry Pi einloggen.

Im Falle von Raspbian lautet der Login:

ssh pi@192.168.3.69

Die IP muss nat√ľrlich jeder entsprechend anpassen. Das Standardpasswort lautet – sofern nicht ge√§ndert – „raspberry“ (ohne Anf√ľhrungszeichen).

Als Voraussetzungen wird JSON ben√∂tigt, welches vermutlich schon vorinstalliert ist. Zur Sicherheit einfach nochmal pr√ľfen:

sudo apt-get -y install libjson-perl

Dann werden die notwendigen Sources f√ľr den UniFi-Controller hinzugef√ľgt:

sudo sh -c "echo 'deb http://www.ubnt.com/downloads/unifi/debian stable ubiquiti' > /etc/apt/sources.list.d/ubnt.list"

Anschließend werden die notwendigen Keys ergänzt:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 06E85760C0A52C50

Abschließend wird der UniFi-Controller installiert:

sudo apt-get -y --allow-unauthenticated install unifi

Ganz zum Schluss dann noch ein Neustart des Systems:

sudo reboot

Wer den UniFi-Controller bereits installiert hat, kann auch einfach ein Update ansto√üen mit: „sudo apt-get update && sudo apt-get -y –allow-unauthenticated¬†install unifi“ (ohne Anf√ľhrungszeichen) – Neue Versionen sind √ľbrigens in regelm√§√üigen Abst√§nden verf√ľgbar, es lohnt sich also hin und wieder ein Update anzusto√üen.

Im Falle von LoxBerry lautet der Login:

ssh loxberry@loxberry.fritz.box

Auf einem LoxBerry-System sehen die Befehle wie gesagt etwas anders aus, da hier root-Befehle nicht per „sudo“ ausgef√ľhrt werden k√∂nnen. Stattdessen loggt man sich erstmal per ssh regul√§r mit dem im System hinterlegten User ein (hier „loxberry“) und wechselt dann in der Konsole mit „su -“ (ohne Anf√ľhrungszeichen) in die root-shell, gefolgt von den nachfolgenden Befehlen:

echo "deb http://www.ubnt.com/downloads/unifi/debian stable ubiquiti" > /etc/apt/sources.list.d/ubnt.list

apt-key adv --keyserver keyserver.ubuntu.com --recv 06E85760C0A52C50

apt-get -y install unifi

reboot

Nach dem Neustart des Systems – egal ob Raspbian oder LoxBerry – ist der Unifi-Controller dann unter dem Port 8443 erreichbar:

https://192.168.3.69:8443 bzw. https://loxberry.fritz.box:8443

Wichtig dabei ist das https, da eine verschl√ľsselte Verbindung aufgebaut wird.

Wer die initiale Einrichtung seiner UniFi-Accesspoints auf einem anderen System durchgef√ľhrt hat, kann die bestehende Konfiguration praktischerweise auf dem Raspberry Pi √ľbernehmen, um nicht alles neu einrichten zu m√ľssen. Dazu einfach im Ursprungssystem auf „Settings“ -> „Maintenance“ -> „Download Backup“ klicken un die Sicherung mit der Endung .unf landet auf der Fesplatte. Im neuen System dann „Restore“ -> „Choose File“ w√§hlen und das Backup zur√ľckspielen. Sobald alles wie gew√ľnscht l√§uft, geht es an den n√§chsten Schritt.

UniFi-Controller in FHEM einbinden

In FHEM l√§sst sich der uniFi-Controller einfach √ľber den FHEM-Konsolenbefehl

define UnifiController Unifi localhost 8443 username password

einbinden. „username“ und „password“ sind die Login-Daten, die im UniFi-Controller vergeben wurden. Wer nur m√∂chte, dass FHEM lesenden Zugriff auf die Daten erh√§lt, muss vorher eben entsprechend einen Benutzer mit eingeschr√§nkten Rechten im UniFi-Controller einrichten.

Standardm√§√üig aktualisiert FHEM den Online-Status der WLan-Devices dann alle 30 Sekunden. Wer diesen Wert √§ndern m√∂chte (w√ľrde ich jedoch nicht empfehlen), muss obigen Befehl nur um das passende Attribut erg√§nzen. Details dazu in der FHEM-Commandref.

Damit man das FHEM-Device schnell wiederfindet, wird es per FHEM-Konsolenbefehl in einen Raum gepackt:

attr UnifiController room Zentral

Mit „Save config“ werden alle √Ąnderungen dauerhaft gespeichert.

UniFi-Controller Readings

Klickt man nun das Ger√§t in FHEM an, sollten nach kurzer Zeit alle relevanten Statusinformationen unter „Readings“ auftauchen.

Neben den Informationen zu den einzelnen Accesspoints (Anzahl angemeldeter Ger√§te, SSID, etc.) werden hier auch alle angemeldeten WLan-Devices aufgelistet, inkl. Anwesenheitsstatus (connected, disconnected) und bei welchem Accesspoint das Ger√§te gerade angemeldet ist (bei mir bspw. „Diele“ oder „Schlafzimmer“). Dummerweise wird hier nicht die eindeutige MAC-Adresse ausgegeben, wer also automatisierte Trigger nutzen m√∂chte, muss darauf achten, dass sich die Ger√§tenamen √§ndern k√∂nnen, sofern im Endger√§t ein anderer Name eingetragen wird. Beim iPhone l√§sst sich der Ger√§tename bspw. unter „Einstellungen“ -> „Allgemein „-> „Info“ -> „Name“ anpassen.

Da ich an dieser Stelle alle f√ľr mich relevanten Informationen per UDP-Nachricht an Loxone weiterleite, habe ich keine weiterf√ľhrende Logik in FHEM definiert. Deshalb hier nur eine kurze Erg√§nzung, wie man aus ausgew√§hlten Readings bspw. eigene Eintr√§ge (Dummies) erstellen kann.

Erstmal einen neuen Dummy erzeugen, um bspw. den Onlinestatus eines einzelnen Endgeräts anzuzeigen:

define iPhone.Melle dummy

Und diesen Dummy dann mit dem gew√ľnschten Reading „Ms-X“ bef√ľllen, sobald ein neues Event generiert wird:

define UnifiControllerDummyUpdate1 notify UnifiController.-UC_wlan_state.* {my $status=ReadingsVal("UnifiController", "Ms-X", "-1");; fhem ("set iPhone.Melle $status")}

Und hier noch ein zweites Ger√§t f√ľr das Reading „iPhone“:

define iPhone.Joerg dummy
define UnifiControllerDummyUpdate2 notify UnifiController.-UC_wlan_state.* {my $status=ReadingsVal("UnifiController", "iPhone", "-1");; fhem ("set iPhone.Joerg $status")}

Onlinestatus von FHEM an Loxone weiterleiten

Dazu wird erstmal die 99_myUtils.pm erstellt bzw. erweitert (sofern bereits vorher erstellt). Weiterf√ľhrende Informationen zum Anlagen der Datei gibt es bspw. im FHEM Wiki.

Eine funktionsfähige Datei, bei welcher der Status von zwei iPhones (iPhone und Ms-X) verschickt wird, sieht bspw. so aus:

##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;

sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}

# Enter you functions below _this_ line.
use IO::Socket;

#UDP Befehle senden
sub UDP_Msg($$$)
{
my ($dest,$port,$cmd) = @_;
my $sock = IO::Socket::INET->new(
Proto => 'udp',
PeerPort => $port,
PeerAddr => $dest
) or die "Could not create socket: $!n";
$sock->send($cmd) or die "Send error: $!n";
return "send $cmd";
}

#UnifiControllerToLoxone
#device:

#1 state (connected, disconnected)
#2 iPhone (connected, disconnected)
#3 iPhone_accesspoint (Diele, Kind, Kueche, Schlafen)
#4 iPhone_snr (Zahl 0-100)
#5 Ms-X (connected, disconnected)
#6 Ms-X_accesspoint (Diele, Kind, Kueche, Schlafen)
#7 Ms-X_snr (int 0-100)

sub UnifiControllerToLoxone($)
{
my ($device) = @_;
my $state = ReadingsVal("$device","state","-1");
if ($state eq "disconnected") {
$state = "0";
}
if ($state eq "connected") {
$state = "1";
}
my $iPhone = ReadingsVal("$device","iPhone","-1");
if ($iPhone eq "disconnected") {
$iPhone = "0";
}
if ($iPhone eq "connected") {
$iPhone = "1";
}
my $iPhoneAP = ReadingsVal("$device","iPhone_accesspoint","-1");
if ($iPhoneAP eq "Diele") {
$iPhoneAP = "1";
}
if ($iPhoneAP eq "Kind") {
$iPhoneAP = "2";
}
if ($iPhoneAP eq "Kueche") {
$iPhoneAP = "3";
}
if ($iPhoneAP eq "Schlafen") {
$iPhoneAP = "4";
}
my $iPhoneSnr = ReadingsVal("$device","iPhone_snr","-1");
my $MsX = ReadingsVal("$device","Ms-X","-1");
if ($MsX eq "disconnected") {
$MsX = "0";
}
if ($MsX eq "connected") {
$MsX = "1";
}
my $MsXAP = ReadingsVal("$device","Ms-X_accesspoint","-1");
if ($MsXAP eq "Diele") {
$MsXAP = "1";
}
if ($MsXAP eq "Kind") {
$MsXAP = "2";
}
if ($MsXAP eq "Kueche") {
$MsXAP = "3";
}
if ($MsXAP eq "Schlafen") {
$MsXAP = "4";
}
my $MsXSnr = ReadingsVal("$device","Ms-X_snr","-1");
UDP_Msg("192.168.3.5" , "7002" , "$device: $state $iPhone $iPhoneAP $iPhoneSnr $MsX $MsXAP $MsXSnr");
}

1;

Die jeweiligen Werte muss nat√ľrlich jeder entsprechend selbst anpassen.

Jetzt fehlt nur noch das notwendige notify, um die √úbertragung von FEHM zu Loxone zu initiieren. Dieser wird in die FHEM-Befehlszeile eingegeben:

define UnifiControllerToLoxone notify UnifiController.-UC_wlan_state.* {UnifiControllerToLoxone("$NAME")}

Ein abschlie√üendes „Save config“ nicht vergessen.

Onlinestatus in Loxone einlesen

Um die UDP-Nachrichten in Loxone entgegenzunehmen, wird erstmal ein „Virtueller UDP Eingang“ mit dem „UDP Empfangsport“ 7002 erstellt. Darunter h√§ngen dann die jeweiligen „Virtuellen UDP Eingangsbefehle“, um die einzelnen Werte einzulesen.

[table id=31 /]

Die Elemente werden dann noch mit passenden Status-Elementen verbunden, um den jeweiligen Online-Status passend zu visualisieren:

In der Loxone-App sehen die Anwesenheitsstatus dann folgendermaßen aus:

Wenn es beim Einlesen der Statuswerte hakt, startet man in der Loxone Config am besten den „UDP Monitor“. So sieht man direkt, ob und welche Nachrichten eingehen. So kommt man dann gew√∂hnlich schnell ans Ziel.

Aus meinem täglichen Leben

Mit der UniFi-Lösung bin ich insgesamt sehr zufrieden. Die UAP-PRO (Affiliate-Link) sind zwar nicht die schnellsten Accesspoints, reichen aber völlig aus, um auch mehrere HD-Streams im zweistelligen MBit-Bereich parallel an mobile Clients auszuliefern. Nur das Zero-Handoff habe ich aktuell deaktiviert, da ich hier laufend Probleme mit Geräten hatte, die sich nach dem Schlummermodus nicht mehr im WLan einloggen konnten.

Irgendwas war da bei meiner Konfigration faul, da ich auch massiv Bandbreitenprobleme hatte. Aber auch ohne Zero-Handoff funktoiniert der Ger√§tewechsel zwischen den Accesspoints bestens, sodass ich schon √ľberlege die Accesspoints nach und nach gegen wesentlich schnellere UniFi AP AC High Desity (Affiliate-Link) zu tauschen. Neben dem hohen Preis schreckt mich aber vorallem der h√∂here Stromverbrauch ab, was sich bei insgesamt vier Accesspoints schon summiert.

In jedem Fall werde ich demnächst auch eine automatische Abschaltung nicht benötigter Accesspoints umsetzen. Nachts soll nur noch ein Accesspoint eingeschaltet bleiben und bei Abwesenheit alle vom Strom getrennt werden. Hier bietet sich die WLan-Anwesenheitserkennung mit Sicherheit an, um bspw. erst den Strom zu trennen, sobald keine der ausgewählten WLan-Geräte mehr verbunden sind.

Mit der vorgestellten WLan-Anwesenheitserkennung ist mein Setup nun also noch ein St√ľckchen vollst√§ndiger. Im laufenden Betrieb ist es wirklich immer spannend zu sehen, wie schnell die mobilen Endger√§te zwischen den Accesspoints wechseln, wenn man sich im Haus bewegt – auch ohne Zero-Handoff-Funktion. Entsprechend kann man aus den anzeigten Informationen sogar recht genau ableiten, in welchem Bereich sich gerade welches Endger√§t befindet. Aktuell nutze ich diese zus√§tzliche Information jedoch noch nicht, ebensowenig wie die √ľbermittelte Information zur Signalqualit√§t. Aber wie so oft kommen Ideen f√ľr neue Anwendungsf√§lle irgendwann automatisch beim Herumspielen.

Als n√§chsten Schritt werde ich die WLan-Statusinfos erstmal auf Hausebene nutzen, um die Anwesenheitserkennung – aktuell basierend auf Pr√§senmeldern, wie im Artikel Operation Smart Home ‚Äď Pr√§senzzonen f√ľr eine vollautomatische Beleuchtung sinnvoll nutzen (https://www.meintechblog.de/2017/10/operation-smart-home-praesenzzonen-fuer-eine-vollautomatische-beleuchtung-sinnvoll-nutzen/) beschrieben – zu erweitern. Um Strom zu sparen, kommen die Accesspoints zudem an schaltbare Steckdosen. Wobei es nat√ľrlich auch sch√∂n w√§re, wenn sich die Accesspints einzeln √ľber die UniFi-Controller-Integration ein- und ausschalten lassen w√ľrden. Mal sehen, evtl. ist das ja sogar schon mit dem passenden Befehl m√∂glich. Oder ich tausche meinen Switch gegen einen Ubiquiti US-24-250W (Affiliate-Link). Dieser l√§sst sich dann ebenfalls vom UniFi-Controller aus steuern, sodass vermtulich auch einzelne Ports deaktiviert werden k√∂nnen. Mal sehen.

Loxone im Einsatz? Dann schau dir unseren LoxKurs an und profitiere von unserem Wissen!

Verpasse keine Inhalte mehr! Trage dich in den Newsletter ein und folge uns auf Facebook.

Was ist ein Affiliate-Link? Wenn du auf einen Affiliate-Link klickst und √ľber diesen Link einkaufst, bekomme ich vom betreffenden Online-Shop oder Anbieter eine Provision, was mich u.A. bei den laufenden Kosten den Blogs unterst√ľtzt. F√ľr dich ver√§ndert sich der Preis nicht.

Jörg

hat meintechblog.de ins Leben gerufen, um seine Technikbegeisterung und Erkenntnisse zu teilen. Er veröffentlicht regelmäßig Howtos in den Bereichen Smart Home und Home Entertainment. Mehr Infos

46 Gedanken zu „WLan-Anwesenheitserkennung mit UniFi-Accesspoints in FHEM einbinden und an Loxone weiterleiten“

  1. hallo Jörg,

    danke f√ľr deinen Beitrag.
    Ich habe es bei mir √§hnlich realisiert und bin mit meinen APs nach wie vor sehr gl√ľcklich. Ich nutze die Erkennung an welchem AP ich angemeldet bin zum Beispiel um die Follow-Me-Funktion der msg-Funktion zu nutzen und Sprachausgaben nur in R√§umen auszugeben, in denen ich mich gerade befinde.
    Au√üerdem wird f√ľr eindeutig erkannte R√§ume die Heizung dar√ľber geregelt.

    Funktioniert sehr gut.

    Gruß Mchael

    1. Hi Michael,
      wieviele AP hast du verbaut? Und hast du das Abfrage-Timing bei 30 Sekunden gelassen oder angepasst? Damit wollte ich mal etwas herumspielen…

      Gr√ľ√üe
      Jörg

  2. Hi Jörg,

    wann hast du das auf deinem PI zuletzt installiert?Ich hab des vor 14 Tagen schon vergeblich versucht, und eben nach deiner Anleitung nochmal. Selber Fehler :-( Unifi m√∂chte eine mongodb Datenbank die es so f√ľr unseren (32Bit-System) Pi nicht mehr gibt :-(
    The following packages have unmet dependencies:
    unifi : Depends: mongodb-server (>= 2.4.10) but it is not installable or
    mongodb-10gen (>= 2.4.14) but it is not installable or
    mongodb-org-server (>= 2.6.0) but it is not installable
    E: Unable to correct problems, you have held broken packages.

    Hast du da evtl ne Lösung ;-)

    Gr√ľ√üe
    Achim

  3. Netter Beitrag, aber mal eine ernst gemeinte Frage:
    Welche Ersparnis erwartest du pro Jahr, wenn du die APs selektiv ausschaltest? Und dagegengerechnet: was kostet dich die Umsetzung des Ein-/Ausschaltens?
    Ich finde sowas immer irgendwie fragw√ľrdig. 50‚ā¨ investieren um 5‚ā¨ pro Jahr zu sparen …
    Sparpotential sehe ich eher wo anders: einfach einen AP pro Etage weglassen. So groß ist deine Bude ja nun auch nicht, oder sind die Wände aus Stahlbeton?

    Viele Gr√ľ√üe
    Hans

    1. Hi Hans,

      drei Accesspoints brauchen etwa 20 Watt. Wenn ich diese bei Abwesenheit und Nachts automatisch ausschalte (f√ľr die Beispielrechnung einfach mal 12 Std/Tag), spart das bei 29 CT/kWh im Jahr knappe 25 Euro. Den vierten Accesspoint w√ľrde ich nachts anlassen, bei Abwesenheit k√∂nnte dieser nat√ľrlich auch vom Strom getrennt werden. Dann w√§re die Einsparung noch gr√∂√üer. Da bei mir eh jede Steckdose schaltbar ist, kann ich die daf√ľr notwendige Funktion recht simpel durch etwas Softwarelogik abbilden.

      Ein AP pro Stockwerk w√ľrde im Grunde schon reichen, klar. Kommt eben auf den eigenen Anspruch an. Ich m√∂chte in allen R√§umen einen gleichm√§√üig guten Empfang sicherstellen ohne Geschwindigkeitseinbr√ľche, denen man bei weniger AP zwangsl√§ufig ausgesetzt ist. Vorallem auch im 5 GHz-Bereich. Und das schaffe ich nur mit zwei AP pro Stockwerk, habe da viel getestet.

      Gr√ľ√üe
      Jörg

    2. Hi Jörg,

      Super Beitrag, danke. Ich habe auch mein Netz auf Unifi umgebaut :) 3 AC-PRO APs, 4 Switches, Cloudkey und USG :) Ich bin sehr zufrieden.
      Wie schaltest du deine einzelne APs an und aus? Ich finde nur die Option alle auszuschalten?
      Ich habe nur mit dem FHEM Plugin Erfolg gehabt:
      set poeMode

      Machst du es irgendwei anders?

  4. Hi Jörg,
    die Punkte „J√∂rg Zuhause“ und „Melle Zuhause“ hast du wie umgesetzt?
    Hintergrund: ich will einen Merker der „1“ wird, wenn irgendjemand zuhause ist. Als Trigger f√ľr die Alarmanlage bzw. f√ľr den reset. (also, wenn beide iPhone weg sind=Alarm scharf; ein iPhone heimkommt=reset)
    LG

    1. Hi Herbert,
      das habe ich per Geofencing √ľber Homebridge gel√∂st. Die jeweiligen iPhones senden dann √ľber die „Home“-App die Info, ob das Ger√§t den definierten GPS-Bereich (z.B. 100m-Radius ums Haus) betritt oder verl√§sst. Funktioniert absolut zuverl√§ssig.

      Gr√ľ√üe
      Jörg

    2. Hi Jörg,
      danke f√ľr die Antwort.
      Geofencing mittels ATV funktioniert bei mir leider nicht zuverlässig. kA woran es liegt aber manchmal wird der Status des iPhones (meist das meiner Frau) nicht erkannt.
      Die Anwesenheit mittels Unifi APs gefällt mir und wird gerade zu meiner ersten FMEM Erfahrung. Etwas strauchle ich noch, da sich mir nicht erschließt wozu bspw. die dummys verwendet werden. Sie finden sich nirgends (also 99_myUtils.pm) wieder?!
      Und ob ich f√ľr jeden Wert einen Dummy brauche. Also Status, AP und Snr?
      Da blicke ich noch nicht so ganz durch.
      Hab 2 dummies erstellt und die 99_myUtils.pm von dir adaptiert.
      Mit dem Ergebnis, dass das iPhone meiner Frau mit 0% angezeigt wird. Meines zB. aber gar nicht. Obwohl ich eigentlich dasselbe gemacht habe.
      Tja… aller Anfang ist wohl schwer :)
      LG

    3. Oja,
      davon kann ich ein Lied singen. :)

      Dummys tauchen nur in der fhem.cfg auf. Die 99_myUtils.pm ist ausschlie√ülich f√ľr „Sonderlocken“ bestimmt.

      Werte kannst du grunds√§tzlich in Dummys speichern, gew√∂hnlich dann in dessen Reading „state“. Ich mache es mittlerweile aber oftmals so, dass ich gew√ľnschte Werte nicht immer in extra Dummys speichere, sondern bestehende Devices um entsprechende Readings manuell erweitere, um eben die Werte dort reinzuquetschen. Das ist oftmals √ľbersichtlicher, wobei das nat√ľrlich Geschmackssache ist.

      Gr√ľ√üe
      Jörg

      PS: Ist den Apple TV per WLAN oder Kabel angebunden? Bei mir per LAN-Kabel.

    4. hi,
      ja meine ist per WLAN angebunden. Werd ich bei Gelegenheit mal checken obs daran liegt.
      Ich hänge leider etwas bei der o.a. Anleitung.
      Ich denke alles richtig gemacht zu haben (was nat√ľrlich nicht sein kann :))
      In Loxone kommt folgendes an: UnifiController: 1 1 AP Speis 35 AP Speis 32 -1 (UnifiController 1 state [1,0000],UnifiController 2 iPhone-Babsi [1,00000],UnifiController 3 iPhone-Babsi AP [0,00000])

      Das wars. Das Ergebnis ist, dass meine Frau immer „gr√ľn“ ist und 0% hat. Auch, wenn sie lt. Controller disconnected ist. Die anderen 2 iPhones werden zudem vollkommen ignoriert.

      Im FHEM Log steht folgendes:
      2018.05.05 18:38:50 3: UnifiControllerToLoxone return value: send UnifiController: 1 1 AP OG 29 1 AP Speis 25 -1

      Was mache ich denn falsch?
      Dank und Gr√ľ√üe
      Herbert

    5. Hi Herbert,
      hmmm. Also bei mir kommt in Loxone als „Texdaten“ im „UDP Monitor“ z.B. sowas an:

      UnifController: 1 0 2 16 1 3 45

      Es d√ľrfen also nur Zahlenwerte ankommen, dann sollte es auch klappen. Du liest die Readings anscheinend irgendwie nicht korrekt aus… Vielleicht hilft dir das ja schon weiter.

      Gr√ľ√üe
      Jörg

  5. Mal wieder ein toller und n√ľtzlicher Bericht! Ich nutze das auch schon l√§nger und steuere einige Dinge mit der Anwesenheitskontrolle. Da die wenigsten wohl Loxone nutzen und alles innerhalb FHEM verarbeiten hier mein Notify um den Device DUMMY mit allen Infos aus dem Unifi Controller zu f√ľllen. Eventuell ist es f√ľr den einen oder anderen n√ľtzlich:

    UnifiController.-UC_wlan_state.* { $EVENT=~s/://;;;; fhem(„setreading DirkS8 $EVENT“) ;;;; my $status=ReadingsVal(„UnifiController“, „Dirks-Galaxy-S8“, „-1“); fhem („set DirkS8 $status“) ;;;; my $DirksAP= ReadingsVal(„UnifiController“,“Dirks-Galaxy-S8_accesspoint“,0) ;;;; fhem(„setreading DirkS8 AP $DirksAP“) ;;;; my $DirksSNR= ReadingsVal(„UnifiController“,“Dirks-Galaxy-S8_snr“,0) ;;;; fhem(„setreading DirkS8 SNR $DirksSNR“) ;;;; my $DirksESSID= ReadingsVal(„UnifiController“,“Dirks-Galaxy-S8_essid“,0) ;;;; fhem(„setreading DirkS8 ESSID $DirksESSID“) ;;;; my $DirksHOST= ReadingsVal(„UnifiController“,“Dirks-Galaxy-S8_hostname“,0) ;;;; fhem(„setreading DirkS8 hostname AP $DirksHOST“) ;;;; my $DirksSEEN= ReadingsVal(„UnifiController“,“Dirks-Galaxy-S8_last_seen“,0) ;;;; fhem(„setreading DirkS8 last_seen $DirksSEEN“)}

  6. Das ganze sollte auch ohne FHEM direkt mit Loxone funktionieren. Auf dem UniFi Controller muss einfach der Miniserver als Syslog-Server angegeben werden. Schon purzeln die ganzen Events direkt per UDP am Miniserver ein.

    1. Hmm,
      die Option „Enable remote Syslog server“ ist aktiviert, Miniserver-Adresse und -Port eingetragen – leider kommen keine Daten per UDP rein…

    2. Also ich habe bei mir „Enable remote Syslog server“ angehakt, IP vom Miniserver eingegeben und den Port bei 514 belassen. Im UDP Monitor sehe ich dann die events, wie z.B: „EVENT_STA_IP ath1: XX:XX:XX:XX:XX:XX“ und „EVENT_STA_LEAVE …“ Hiermit kann ich dann das an und abmelden als Digitaleingang in Loxone entgegennehmen.

      Tipp: da die Clients sich mal auf ath0, ath1, ath2 usw. verbinden, sollte man bei der Befehlerkennung mit der Wildcard arbeiten, also „ath\.“

    3. ja, das scheint zu gehen…. :) super.
      Patrick, wie genau hast du das in Loxone per Virtual Input implementiert?

    4. Ich habe einen virtuellen Eingang ohne Pr√ľfung der Senderadresse, aber mit Empfangsport 514 angelegt. Darunter habe ich f√ľr jedes Ger√§t dessen Anwesenheit ich tracken will 2 Befehle als Digitaleing√§nge angelegt. Im ersten wird eben,wie bereits beschrieben, der EVENT_STA_IP abgefangen (Ger√§t hat eine IP erhalten) und EVENT_STA_LEAVE (Ger√§t hat WLAN verlassen).

      Ob ein Ger√§t nun an- oder abwesend ist, zeigt der Baustein virtueller Status „iPhone 8 Plus Patrick“. Gesetzt wird der von einem Impulsschalter SR. Wenn EVENT_STA_IP getriggert wird, erh√§lt der Impulsschalter auf S eine 1. Wird EVENT_STA_LEAVE getriggert, wird der Impulsschalter auf R resettet. Zus√§tzlich habe ich vor den R Eingang noch ein verz√∂gerter Impuls geschnallt (D:60, T:0,5). Damit wird LEAVE nur dann an den Impulsschalter weitergegeben, wenn nicht innerhalb von 60 Sekunden wieder ein STA_IP kommt.

    5. Danke f√ľr diesen Tipp. Funktioniert super!

      @Oisin:
      EVENT_STA_LEAVE ath\.:

      STA_JOIN wird im Lösungsvorschlag von Patrick nicht benötigt.

  7. Ich habe es so wie du Jörg implementiert, funktioniert ganz gut. Danke!

    Wie k√∂nnte ich die Details aus dem „get cliendData“ zu Loxone schicken?
    Ich hätte gerne dazu die info, ob 5GHz oder 2.4GHz, geht das?

    1. Hi Oisin,
      bekomme in FHEM kein Reading vom Unifi-Controller, der den Status 2,4 bzw 5 GHz enth√§lt. Vielleicht sprichst du √ľbers FHEM-Forum einfach mal den Plugin-Entwickler an. Denn technisch sollte das schon m√∂glich sein denke ich.

      Gr√ľ√üe
      Jörg

    2. Hi Jörg, mit get clientData bekommt man eine Kanalnummer, davon kann man learnen ob ein Client eine 5Ghz oder eine 2.4Ghz Verbindung hat.

  8. Hallo Jörg

    Wie hast du das mit dem Datum bei „Ereignisse“ gel√∂st?
    Ich √ľbergebe bei 4 Handy die 3 Werte: Connected/Disconnected, Signalst√§rke und Zeit.
    Status und Signal funktionieren aber beim Datum gibt er mir nur 2018,0 aus und nicht z.B. 2018-10-3 10:50:10.
    Wie muss ich hier die Befehlskennung einstellen?
    So wie in deiner Erklärung splittet er mir auch beim Leerzeichen zwischen Datum und Zeit.

    Danke f√ľr die Hilfe

  9. Wie sieht denn der konkrete Befehl im virtuellen UDP ‚Äď Eingang aus? Was ich nicht ganz verstehe: brauche ich unter dem virtuellen UDP Eingang virtuelle UDP eingangsbefehle? Oder brauche ich ganz normale virtuelle Eing√§nge? Wie kriege ich es hin, dass die Entsprechende Sequenz ein Signal ein/aus generiert, was ich dann an den Impulss Halter √ľbergebe?

  10. Ich habe das Ganze jetzt auf Basis Unify-Syslog->Loxone eingerichtet und es funktioniert. Allerdings nur „im Prinzip“. Problem ist, dass das Signal f√ľr Leave nicht geliefert wird, wenn das Device tats√§chlich das Netz verl√§sst. Es wird immer erst wenige Sekunden „nachgeliefert“, bevor das Signal f√ľr EVENT_STA_IP kommt. Damit ist das Ganze witzlos… Hat irgendjemand eine funktionierende Umgebung hinbekommen und kann evtl. helfen? Zum Beispiel Patrick Wagner? W√§re toll

    1. Hi, ich hatte das ganze so umgesetzt:
      Eingang (anwesend): EVENT_STA_IP ath\.:
      Eingang (abwesend): EVENT_STA_LEAVE ath\.:

      Eingang (anwesend) geht direkt an einen Impulsschalter (S) und an den verzögerten Impuls (R)

      Eingang (abwesend) geht an einen verzögerten Impuls (TR), dieser dann an den Impulsschalter (R)

  11. Hallo,

    Als aktueller Entwickler des fhem-Unifi-Plugins freue ich mich, wenn das Plugin eingesetzt wird. Ein Hinweis aber doch:
    Wenn Unifi-Controller und FHEM wie hier beschrieben (localhodt) auf demselben RasPi laufen sollte das Update-Interval sicherheitshalber auf 60 Sekunden gesetzt werden. Wenn man Pech hat ist aufgrund einer kurzzeitigen hohen Prozessoranforderung irgendeines Programms/Threads ansonsten in den 30 Sekunden ein Update noch nicht vollständig durch und es wird ein neues Update angefordert. Das erhöht wiederum die Prozessorauslastung und es kommt zu einer Selbstverstärkung. Dann hilft oft nur ein reboot.
    Das Ganze h√§ngt nat√ľrlich von dem Umfang des Unifi-Netzwerks, FHEM und was sonst noch auf dem RasPi l√§uft ab. Kann also auch lange gut funktionieren.

    Wäre Klasse, wenn du das als Hinweis aufnimmst.

    Die Alternative √ľber syslog zu gehen ist da eleganter und hat nichts mit regelm√§√üigem Polling zu tun. Ist aber f√ľr viele auch schwieriger aufzusetzen.

    Viele Gr√ľ√üe,
    Dirk

  12. Hallo Jörg,

    du hast folgendes geschrieben, Zitat: „Wer nur m√∂chte, dass FHEM lesenden Zugriff auf die Daten erh√§lt, muss vorher eben entsprechend einen Benutzer mit eingeschr√§nkten Rechten im UniFi-Controller einrichten.“

    Ich möchte das gerne so umsetzen, weiß aber nicht, wo ich das im Controller machen kann.

    Ich bin f√ľr Hilfe dankbar.

    Viele‚Äč Gr√ľ√üe‚Äč
    Gisbert‚Äč

  13. Hallo zusammen,

    danke erstmal f√ľr die Beschreibung, mangels FHEM und Perl Wissen hat mich die Erkenntnis etwas Zeit gekostet aber jetzt l√§ufts bei mir.

    Ich musste allerdings das Event etwas anders als von dir beschrieben nennen, nämlich:
    define UnifiControllerToLoxone notify UnifiController.#UC_wlan_state.* {UnifiControllerToLoxone(„$NAME“)}

    statt:
    define UnifiControllerToLoxone notify UnifiController.-UC_wlan_state.* {UnifiControllerToLoxone(„$NAME“)}

    Vielleicht hilfts ja jemandem, ich hab einige Zeit gesucht aber nichts gefunden..

    Gr√ľ√üe Stefan

  14. Sch√∂n, dass es klappt. Eine Frage: L√§uft das bei Dir stabil, d.h. ohne Aussetzer? Bei mir leider nicht. Ich habe leider immer wieder Aussetzer von 1-5 Minuten, in denen das iPhone dann als nicht pr√§sent erkannt wird, obwohl es durchg√§ngig im WLAN ist. Da die Alarmanlage dar√ľber gesteuert wird, habe ich mir so beholfen, dass diese eben nur scharf geschaltet wird, wenn ein Device √ľber mindestens 20 min. dauerhaft offline ist. Aber trotzdem ist die Anwesenheitserkennung eben leider (doch) nicht zuverl√§ssig.

  15. @ König: bisher konnte ich das noch nicht feststellen, muss aber sagen, dass das Ding eben erst seit kurzem läuft.
    Falls mir noch was auffällt meld ich mich.
    Was mir schon aufgefallen ist, ist dass sich meine iPhones erst recht spät vom Controller abmelden.

    @ Gisbert: du gehst im Controller auf Einstellungen -> Administratoren und legst einen neuen User (z.B. FHEM o.√Ą.) an, der nur die read-only Rolle hat. Funktioniert bei mir.

  16. Hallo Jörg,
    das schaut doch mal endlich nach einer zuverl√§ssigen L√∂sung f√ľr eine Anwesenheitserkennung aus.

    Kannst Du mir sagen, ob ich zur Umsetzung zwingend die teuren Pro AP’s ben√∂tige oder ob es auch die kosteng√ľnstigere Lite Variante tut?

  17. Ich hab 3x die Lite Version (1x Long Range) und das funktioniert bei mir recht gut.

    Ich steuere damit jetzt den Betriebsmodus der L√ľftung und schicke eine Push-Benachrichtigung wenn vergessen wurde alle T√ľren und Fenster zu schlie√üen.

  18. Seit ein paar Tagen funktioniert die Anwesenheitserkennung bei mir nicht mehr.
    Zwei der drei im Einsatz befindlichen iPhones springen zwischen anwesend und abwesend hin und her.

    Stellt Ihr ähnliches fest?
    Liegt das vielleicht an einem iOS Update?

  19. Ja, ich habe das Problem auch. Aus irgendwelchen Gr√ľnden werden den Devices Neue Adressen zu gewiesen, die nicht identisch mit den Mac Adressen der iPhones sind. Ich habe das gel√∂st, indem ich im Monitor von Loxone die Adresse neu ausgelesen habe und sie den Ger√§ten zu gewiesen habe. Jetzt funktioniert es wieder.

    1. Habe es jetzt bei mir auch wieder hinbekommen.
      Es lag daran, das in der FritzBox die H√§kchen bei ‚ÄěDiesem Ger√§t immer die gleiche IP zuweisen‚Äú fehlte.

      Danke f√ľr Deinen Hinweis. Dadurch bin ich in die richtige Richtung gekommen!!!

  20. Aha, interessant. Ver√§ndert sich die Mac-Adresse, wenn sich die IP √§ndert? Du liest aber schon √ľber die MAC-Adresse aus, oder √ľber IP?

    1. Weder noch!

      Ich frage im FHEM mit einem DOIF den Status des Devices anhand seines Namens ab und schalte damit einen Dummy:

      DOIF ( [Unifi_Controller:Axels-IPhone] eq ‚Äěconnected‚Äú) (set Axel anwesend)…

  21. Hey Jörg,
    vielen Dank f√ľr deinen tollen Artikel! Habe es gerade bei mir „nachgebaut“ und es funktioniert direkt einwandfrei!
    Weiter so und alles Gute!

    Viele Gr√ľ√üe
    Fabian

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert