Anwesenheitserkennung mit UniFi AP's
Einklappen
X
-
ich kann dir zwar nicht helfen, habe aber das selbe problem.
die anleitung basiert auf dem alten unifi-api-browser. beim neuen ist die index.php neu aufgebaut und ich suche auch noch nach der lösung..
grüsse
oliverKommentar
-
Hallo. Soweit ich das sehe, habe ich meine index.php gar nicht angepasst. Die Controllerversion habe ich auf die letzte v5-Version geupdated. Sollte aber mit v6 sicher auch gehen. Die Version vom API Browser ist bei mir sehr alt, aber die neueren Versionen sollten ohne Weiteres auch funktionieren. Eventuell folge mal der Anleitung unten und schau in das PHP-Error log.
Ich habe mich aber auch nicht an die Anleitung gehalten, zumal ich mir nicht vorstellen kann, dass der Miniserver auf Dauer stabil läuft, wenn ich die messages, mittlerweile 1,6MB groß, in regelmäßigen Abständen dort abhole. Ich habe mir hingegen die Datei /examples/list_connected_users.php in das Root Verzeichnis herausgeholt und verwende dieses um alle verbundenen Clients in Form eines JSONs abzuholen. Dabei hatte ich das Problem, wie bereits hier erwähnt: #100 .
Jedoch führt das mit neueren Miniserverversionen zu regelmäßigen Reboots des Miniservers. Loxone findet hier den Fehler nicht. Aus diesem Grund habe ich es nun auch einfach mit Node-Red umgesetzt. Das ist in ein paar Minuten getan:- List_connected_users.php Datei nach Root raus kopieren und testen.
- Auf einem Loxberry Portainer installieren. Dazu gib's ein Plugin.
- In Portainer Node-Red installieren.
- Einen solchen Flow erstellen:
- Das Inject soll einfach alle paar Sekunden aufgerufen werden.
- http request node:
- Function node. Dort habe in einfach den folgenden code geschrieben:
Code:if(msg.payload.length <= 0) return null; var presences = { "Person1": false, "Person2": false, "Person3": false, "Person4": false } for(var i=0;i<msg.payload.length;i++) { var client = msg.payload[i]; if(client.hostname == "hostname von Person1") presences.Person1 = true; else if(client.hostname == "hostname von Person2") presences.Person2 = true; else if(client.hostname == "hostname von Person3") presences.Person3 = true; else if(client.hostname == "hostname von Person4") presences.Person4 = true; } return [ { "payload": [presences.Person1 && "on" || "off"]}, { "payload": [presences.Person2 && "on" || "off"]}, { "payload": [presences.Person3 && "on" || "off"]}, { "payload": [presences.Person4 && "on" || "off"]}, ];
- An den 4 Ausgängen des function blocks einfach die out nodes von node-red-contrib-loxone anhängen. Natürlich braucht es dafür vorher die entsprechenden virtuellen Eingänge in Loxone, damit diese verknüpft werden können.
Der ganze Aufwand eigentlich nur deswegen, weil ich das unifi node noch nicht zum Laufen gebracht habe. Ansonsten könnte man sich den PHP-Teil komplett sparen und das komplett in Node-Red machen. Aber dazu kann ich im Moment noch nichts sagen, weil ich es noch nicht hinbekommen habe.
hast du bereits die neue api-browser version im einsatz? ich bringe die list_connected_users.php nicht zu laufen und kriege auch die neue index.php nicht angepasst, dass beim aufrufen direkt die verbundenen user angezeigt werden.
grüsseKommentar
-
Vom API Browser hatte ich eine ältere Version. Irgendwo habe ich sie hier in diesem Thread geschrieben. Aber ich empfehle dir den API Browser komplett wegzulassen und in Node-Red den unifi Node zu verwenden. Der verbindet sich dann direkt auf den Controller. Dann brauchst du nicht lange mit dem API Browser umher kämpfen.Kommentar
-
Vom API Browser hatte ich eine ältere Version. Irgendwo habe ich sie hier in diesem Thread geschrieben. Aber ich empfehle dir den API Browser komplett wegzulassen und in Node-Red den unifi Node zu verwenden. Der verbindet sich dann direkt auf den Controller. Dann brauchst du nicht lange mit dem API Browser umher kämpfen.Kommentar
-
Leider nicht, denn das habe ich selbst "programmiert". Aber ja, habe mir auch schon gedacht das in das Wiki zu geben zu Dokumentationszwecken. Gebe hier Bescheid, sobald ich was habe.Kommentar
Kommentar