Unifi: Unterschied zwischen den Versionen
K (typos) |
K (diverse Kleinigkeiten (Intra-Wiki Link nur einmal, Typos, syntaxhighlight für HTML, ...)) |
||
Zeile 7: | Zeile 7: | ||
|ModOwner=Wuehler ({{Link2FU|Wuehler|Forum}} / [[Benutzer Diskussion:Wuehler|Wiki]])}} | |ModOwner=Wuehler ({{Link2FU|Wuehler|Forum}} / [[Benutzer Diskussion:Wuehler|Wiki]])}} | ||
Das Modul [[Unifi]] ermöglicht die Steuerung eines Unifi-Controllers durch FHEM. Wenn durch den Unifi-Controller auch ein [[UnifiSwitch]] verwaltet wird, so legt das Modul bei aktiviertem | Das Modul [[Unifi]] ermöglicht die Steuerung eines Unifi-Controllers durch FHEM. Wenn durch den Unifi-Controller auch ein [[UnifiSwitch]] verwaltet wird, so legt das Modul bei aktiviertem [[autocreate]] UnifiSwitch-Devices an. | ||
== Voraussetzungen == | == Voraussetzungen == | ||
Zeile 18: | Zeile 18: | ||
* ip: Der Unifi-Controller muss eine feste IP-Adresse haben | * ip: Der Unifi-Controller muss eine feste IP-Adresse haben | ||
* port: Port der Adminkonsole des Unifi-Controllers. In der Regel 8443 oder 443. | * port: Port der Adminkonsole des Unifi-Controllers. In der Regel 8443 oder 443. | ||
* username/ | * username/password: Entweder der standardmäßig angelegt Admin des Unifi-Controllers, oder besser ein im Unifi-Controller angelegter eigener User, unter <code>settings-> admins -> add new admin</code> | ||
* interval: Gibt die Zeit in Sekunden an, nach der das Modul erneut die Daten beim Unifi-Controller abfragt. Default: 30 Sekunden. Es ist darauf zu achten, dass das Intervall groß genug ist, so dass auch unter Last nicht vor Ende eines Update-Zyklus ein neuer Update-Zyklus gestartet wird. Dies kann zum Beispiel passieren, wenn FHEM und der Unifi-Controller auf demselben RaspberryPi laufen (interval dann zB auf 90 setzen). | * interval: Gibt die Zeit in Sekunden an, nach der das Modul erneut die Daten beim Unifi-Controller abfragt. Default: 30 Sekunden. Es ist darauf zu achten, dass das Intervall groß genug ist, so dass auch unter Last nicht vor Ende eines Update-Zyklus ein neuer Update-Zyklus gestartet wird. Dies kann zum Beispiel passieren, wenn FHEM und der Unifi-Controller auf demselben RaspberryPi laufen (interval dann zB auf 90 setzen). | ||
* siteID: Üblicherweise und als Default <code>default</code> | * siteID: Üblicherweise und als Default <code>default</code> | ||
Zeile 26: | Zeile 26: | ||
== Anwendung == | == Anwendung == | ||
=== Readings === | === Readings === | ||
Details siehe Siehe {{Link2CmdRef|Lang= | Details siehe Siehe {{Link2CmdRef|Lang=en|Anker=Unifi}} | ||
==== Attribut customClientReadings ==== | ==== Attribut customClientReadings ==== | ||
Mit dem Attribut <code>customClientReadings</code> können die Readings für Clients individualisiert werden: | Mit dem Attribut <code>customClientReadings</code> können die Readings für Clients individualisiert werden: | ||
* Der state eines clients kann nicht entfernt werden. D.h. für jeden client wird es ein Reading <clientName> geben, | * Der state eines clients kann nicht entfernt werden. D.h. für jeden client wird es ein Reading <clientName> geben, das entweder den Wert <code>connected</code> oder <code>disconnected</code> hat. | ||
* Es werden die Daten, die der Unifi-Controller zu den Clients vorhält 1:1 als Readings zur | * Es werden die Daten, die der Unifi-Controller zu den Clients vorhält 1:1 als Readings zur Verfügung gestellt. | ||
* Zusätzlich stehen mit dem Präfix _f_ versehen formatierte Werte als Reading zur Verfügung. | * Zusätzlich stehen mit dem Präfix _f_ versehen formatierte Werte als Reading zur Verfügung. | ||
* Wenn der Unifi-Controller einen Wert nicht liefert, so wird auch kein Reading angelegt, selbst wenn dies im Attribut customClientReadings explizit angegeben wird. | * Wenn der Unifi-Controller einen Wert nicht liefert, so wird auch kein Reading angelegt, selbst wenn dies im Attribut customClientReadings explizit angegeben wird. | ||
Zeile 37: | Zeile 38: | ||
* Das Reading <clientName>_last_seen wird nicht als Datum formatiert dargestellt, sondern wie vom Unifi-Controller zurückgegeben als Unix-Timestamp. | * Das Reading <clientName>_last_seen wird nicht als Datum formatiert dargestellt, sondern wie vom Unifi-Controller zurückgegeben als Unix-Timestamp. | ||
* Das Reading <clientName>_hostname kann ggf. auch fehlen. Ohne das Attribut customClientReadings wird bei fehlendem hostname die ip oder "unknown" angezeigt. | * Das Reading <clientName>_hostname kann ggf. auch fehlen. Ohne das Attribut customClientReadings wird bei fehlendem hostname die ip oder "unknown" angezeigt. | ||
* Das | * Das Reading <clientName>_snr entfällt und lautet <clientName>_rssi. | ||
Beispiele: | Beispiele: | ||
Zeile 78: | Zeile 79: | ||
==== Voucher bereitstellen ==== | ==== Voucher bereitstellen ==== | ||
Die Beispiele gehen davon aus, dass auch die Verwendung aufgezeichnet werden soll | Die Beispiele gehen davon aus, dass auch die Verwendung aufgezeichnet werden soll. | ||
===== über Telegram ===== | ===== über Telegram ===== | ||
Voraussetzung in diesem Beispiel ist, dass das Modul msgDialog eingerichtet ist und ein VoucherCache mit der note "2h" konfiguriert wurde: | Voraussetzung in diesem Beispiel ist, dass das Modul msgDialog eingerichtet ist und ein VoucherCache mit der note "2h" konfiguriert wurde: | ||
Zeile 91: | Zeile 93: | ||
===== in FTUI ===== | ===== in FTUI ===== | ||
Im head der Seite wird folgender code benötigt: | Im head der Seite wird folgender code benötigt: | ||
< | <source lang="html"> | ||
<script> | |||
var oldcode=0; | |||
function setComment(){ | |||
var code =document.getElementById('voucherCode').children[0].value; | |||
if(oldcode!=code){ | |||
oldcode=code; | |||
ftui.sendFhemCommand('get Unifi voucher ' + document.getElementById('voucherCacheNote').children[0].children[0].options.item(document.getElementById('voucherCacheNote').children[0].children[0].selectedIndex).text); | |||
ftui.sendFhemCommand('set voucherComment comment ' + code +' ('+document.getElementById('voucherCacheNote').children[0].children[0].options.item(document.getElementById('voucherCacheNote').children[0].children[0].selectedIndex).text+'): '+document.getElementById('comment').children[0].value); | |||
} | |||
} | |||
</script> | |||
</source> | |||
Im body der Seite kann der folgende code verwendet werden. Es wird vorausgesetzt, dass es Vouchercaches mit der note 2h und 3h gibt. | Im body der Seite kann der folgende code verwendet werden. Es wird vorausgesetzt, dass es Vouchercaches mit der note 2h und 3h gibt. | ||
[[Datei:ftui_vouchercache.png|thumb|FTUI-Darstellung]] | [[Datei:ftui_vouchercache.png|thumb|FTUI-Darstellung]] | ||
< | <source lang="html"> | ||
<li data-row="18" data-col="1" data-sizex="2" data-sizey="3" class="semitransparent"> | |||
<header>Voucher</header> | <header>Voucher</header> | ||
Typ: | Typ: | ||
Zeile 126: | Zeile 130: | ||
onclick="setComment()"> | onclick="setComment()"> | ||
Save</div> | Save</div> | ||
</li> </ | </li> | ||
</source> | |||
=== Erkennung neuer clients === | === Erkennung neuer clients === | ||
Kleines DOIF mit Telegram-Benachrichtigung: | Kleines DOIF mit Telegram-Benachrichtigung: |
Version vom 22. März 2019, 10:28 Uhr
An dieser Seite wird momentan noch gearbeitet. |
Unifi | |
---|---|
Zweck / Funktion | |
Steuerung des Unifi-Controllers über FHEM | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Automatisierung |
Modulname | 74_Unifi.pm |
Ersteller | Wuehler (Forum / Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Das Modul Unifi ermöglicht die Steuerung eines Unifi-Controllers durch FHEM. Wenn durch den Unifi-Controller auch ein UnifiSwitch verwaltet wird, so legt das Modul bei aktiviertem autocreate UnifiSwitch-Devices an.
Voraussetzungen
Unifi-Controller
Es wird eine dauerhaft laufende Unifi-Controller-Software benötigt. Diese kann z.B. auf dem Unifi-Cloud-Key oder selbst installiert z.B. auf einem RaspberryPi laufen.
Definition
Die Definition erfolgt mittels define <name> Unifi <ip> <port> <username> <password> [<interval> [<siteID>]]
.
Dabei ist folgendes zu beachten:
- ip: Der Unifi-Controller muss eine feste IP-Adresse haben
- port: Port der Adminkonsole des Unifi-Controllers. In der Regel 8443 oder 443.
- username/password: Entweder der standardmäßig angelegt Admin des Unifi-Controllers, oder besser ein im Unifi-Controller angelegter eigener User, unter
settings-> admins -> add new admin
- interval: Gibt die Zeit in Sekunden an, nach der das Modul erneut die Daten beim Unifi-Controller abfragt. Default: 30 Sekunden. Es ist darauf zu achten, dass das Intervall groß genug ist, so dass auch unter Last nicht vor Ende eines Update-Zyklus ein neuer Update-Zyklus gestartet wird. Dies kann zum Beispiel passieren, wenn FHEM und der Unifi-Controller auf demselben RaspberryPi laufen (interval dann zB auf 90 setzen).
- siteID: Üblicherweise und als Default
default
Damit ist die Installation abgeschlossen. Nach kurzer Zeit sollten die ersten Readings angezeigt werden.
Anwendung
Readings
Details siehe Siehe commandref/Unifi
Attribut customClientReadings
Mit dem Attribut customClientReadings
können die Readings für Clients individualisiert werden:
- Der state eines clients kann nicht entfernt werden. D.h. für jeden client wird es ein Reading <clientName> geben, das entweder den Wert
connected
oderdisconnected
hat. - Es werden die Daten, die der Unifi-Controller zu den Clients vorhält 1:1 als Readings zur Verfügung gestellt.
- Zusätzlich stehen mit dem Präfix _f_ versehen formatierte Werte als Reading zur Verfügung.
- Wenn der Unifi-Controller einen Wert nicht liefert, so wird auch kein Reading angelegt, selbst wenn dies im Attribut customClientReadings explizit angegeben wird.
Bei der Verwendung des Attributes gibt es teilweise Abweichungen vom Standardverhalten, die bei einer nachträglichen Verwendung des Attributes ggf. berücksichtigt werden müssen:
- Das Reading <clientName>_last_seen wird nicht als Datum formatiert dargestellt, sondern wie vom Unifi-Controller zurückgegeben als Unix-Timestamp.
- Das Reading <clientName>_hostname kann ggf. auch fehlen. Ohne das Attribut customClientReadings wird bei fehlendem hostname die ip oder "unknown" angezeigt.
- Das Reading <clientName>_snr entfällt und lautet <clientName>_rssi.
Beispiele:
.:^mac$
: Stellt für alle Clients zusätzlich ein Reading mit der mac-Adresse zur Verfügung.:^mac$|^uptime$
: Stellt für alle Clients zusätzlich ein Reading mit der mac-Adresse und ein Reading mit der uptime (Unix-Timestamp) zur Verfügung^meinTelefon$:^mac$
: Stellt nur für den Client mit dem Namen "meinTelefon" ein zusätzliches Reading mit der mac-Adresse zur Verfügung^meinTelefon$:^mac$ ^seinTelefon$:^mac$
: Stellt nur für die Clients mit dem Namen "meinTelefon" oder "seinTelefon" ein zusätzliches Reading mit der mac-Adresse zur VerfügungeinTelefon$:^mac$:^mac$
: Stellt für alle Clients, die auf "einTelefon" enden im Client-Namen haben die mac-Adresse zusätzlich zur Verfügung.:uptime
: Stellt für alle Clients zusätzlich einige Readings zur Verfügung, die "uptime" im Namen enthalten. Darunter sind auch formatierte uptimes.
Anwesenheitserkennung
Üblicherweise: siehe PRESENCE
Todo: weitere Varianten? |
Voucher
Das Modul kann automatisiert immer eine ausreichende Anzahl an Voucher-Nummern für den Zugang in ein per GuestPortal mit Voucherzugang konfiguriertes WLAN bereithalten.
Dazu wird das Attribut voucherCache
genutzt. Mit Komma separiert können mehrere Vouchercaches angegeben werden. Je Vouchercache werden vier Attribute mit Leerzeichen getrennt mitgegeben:
- expire: Ablaufzeit des Vouchers in Minuten
- quota: Anzahl der Voucher, die mindestens vorgehalten werden (sinnvoller Wert ist >=2)
- n: Gibt an, wie oft ein einzelner Voucher genutzt werden kann (sinnvoll ist in der Regel der Wert 1)
- note: der Name des Vouchers. Er darf keine Leerzeichen enthalten und kann z.B. bei einer Auswahl in ftui angezeigt werden.
Je Vouchercache wird ein Reading -VC_<note> mit dem nächsten noch nicht bzw. am längsten nicht angeforderten Voucher zur Verfügung gestellt. Wenn weniger als "quota"-Voucher zur Verfügung stehen werden "quota" neue Voucher erstellt. Die Maximalanzahl an vorgehaltenen Vouchern beträgt als 2*quota-1.
Voucherverwendung aufzeichnen
Dies geschieht außerhalb des Moduls mit einem dummy und wird in den weiteren Beispielen mit verwendet:
defmod voucherComment dummy attr voucherComment event-on-change-reading comment attr voucherComment readingList comment attr voucherComment setList comment
Über eine ReadingsHistory kann dies festgehalten werden:
defmod voucherCacheRH readingsHistory voucherComment:comment attr voucherCacheRH nolinks 1 attr voucherCacheRH rows 10 attr voucherCacheRH timestampFormat %Y.%m.%d_%H:%M:%S
Und/oder in einem Log speichern:
defmod voucherCommentLog FileLog ./log/voucher.log voucherComment:.*
Voucher bereitstellen
Die Beispiele gehen davon aus, dass auch die Verwendung aufgezeichnet werden soll.
über Telegram
Voraussetzung in diesem Beispiel ist, dass das Modul msgDialog eingerichtet ist und ein VoucherCache mit der note "2h" konfiguriert wurde:
defmod voucher_Dialog msgDialog {\ "Voucher": {\ "commands": [\ "{fhem('set voucherComment comment '.ReadingsVal('Unifi','-VC_2h','').' (2h): $recipient')}"\ ],\ "message": "{return('Code: '.fhem('get Unifi voucher 2h'))}"\ }\ }
in FTUI
Im head der Seite wird folgender code benötigt:
<script>
var oldcode=0;
function setComment(){
var code =document.getElementById('voucherCode').children[0].value;
if(oldcode!=code){
oldcode=code;
ftui.sendFhemCommand('get Unifi voucher ' + document.getElementById('voucherCacheNote').children[0].children[0].options.item(document.getElementById('voucherCacheNote').children[0].children[0].selectedIndex).text);
ftui.sendFhemCommand('set voucherComment comment ' + code +' ('+document.getElementById('voucherCacheNote').children[0].children[0].options.item(document.getElementById('voucherCacheNote').children[0].children[0].selectedIndex).text+'): '+document.getElementById('comment').children[0].value);
}
}
</script>
Im body der Seite kann der folgende code verwendet werden. Es wird vorausgesetzt, dass es Vouchercaches mit der note 2h und 3h gibt.
<li data-row="18" data-col="1" data-sizex="2" data-sizey="3" class="semitransparent">
<header>Voucher</header>
Typ:
<div data-type="select" data-items='["-VC_2h","-VC_3h"]' data-alias='["2h","3h"]' id="voucherCacheNote" class="notransmit w3x"></div>
Kommentar:
<div data-type="input"
id="comment"
class="notransmit"></div>
Code:
<div data-type="input"
data-device="Unifi"
data-get="#voucherCacheNote"
id="voucherCode"
class="notransmit w3x"></div>
<div data-type="link"
class="round notransmit"
onclick="setComment()">
Save</div>
</li>
Erkennung neuer clients
Kleines DOIF mit Telegram-Benachrichtigung:
defmod di_newClients DOIF ([Unifi:-UC_newClients] ne "" ) (set Telegram message unbekannter WLAN Zugriff:[Unifi:-UC_newClients])