UnifiClient: Unterschied zwischen den Versionen
(→Anwesenheitserkennung: Erweiterung des presence-Readings auf wired-Abfrage) |
K (diverse kleine Korrekturen) |
||
Zeile 6: | Zeile 6: | ||
|ModOwner=Wuehler ({{Link2FU|Wuehler|Forum}} / [[Benutzer Diskussion:Wuehler|Wiki]])}} | |ModOwner=Wuehler ({{Link2FU|Wuehler|Forum}} / [[Benutzer Diskussion:Wuehler|Wiki]])}} | ||
Das Modul [[UnifiClient]] 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. | Das Modul [[UnifiClient]] 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. | ||
Ausserdem gibt es das Unterstützungsmodul [[UnifiClient]], welches alle vorhandenen Informationen zu Clients als Reading bereitstellt und clientspezifische Funktionen zur Verfügung stellt. | Ausserdem gibt es das Unterstützungsmodul [[UnifiClient]], welches alle vorhandenen Informationen zu Clients als Reading bereitstellt und clientspezifische Funktionen zur Verfügung stellt. | ||
Zeile 18: | Zeile 18: | ||
== Anwendung == | == Anwendung == | ||
Aufgrund der großen Anzahl an Readings bietet es sich an, die Events mittels Attribut <code>event-on-change-reading</code> einzuschränken. | Aufgrund der großen Anzahl an Readings bietet es sich an, die Events mittels Attribut <code>event-on-change-reading</code> einzuschränken. | ||
=== Online-Zeitsteuerung === | === Online-Zeitsteuerung === | ||
Das Modul versucht die Onlinezeit eines Clients zu berechnen und stellt Attribute bereit, um den | Das Modul versucht die Onlinezeit eines Clients zu berechnen und stellt Attribute bereit, um den Client nach dem Verbrauch der Online-Zeit (Attribut maxOnlineMinutesPerDay) entweder zu blockieren (default; Achtung Provisionierung) oder in eine andere Usergroup zu verschieben (Attribut blockingUsergroup; ohne Provisionierung). | ||
Mit dem Attribut treshholdBytesPerMinute kann die Menge an | |||
Es bietet sich folgendes stateFormat an: | Mit dem Attribut treshholdBytesPerMinute kann die Menge an Bytes angegeben werden, die ein Client ohne Anrechnung auf die Onlinezeit verbrauchen darf. Es bietet sich folgendes stateFormat an: | ||
< | :<code>{ ReadingsVal("$name","fhem_usedOnlineTime","? Minuten")." / ".ReadingsVal("$name","_f_usergroup_name","? Minuten")." / ".((ReadingsVal("$name","blocked","?") eq "true") ? "blocked":ReadingsVal("$name","fhem_state","?"))}</code> | ||
{ ReadingsVal("$name","fhem_usedOnlineTime","? Minuten")." / ".ReadingsVal("$name","_f_usergroup_name","? Minuten")." / ".((ReadingsVal("$name","blocked","?") eq "true") ? "blocked":ReadingsVal("$name","fhem_state","?"))} | |||
</ | |||
=== Anwesenheitserkennung === | === Anwesenheitserkennung === | ||
Mittels [[PRESENCE]]: | Mittels [[PRESENCE]]: | ||
<code>define <NAME> PRESENCE event <UnifiClientName>:fhem_state:.disconnected <UnifiClientName>:fhem_state:.connected</code> | :<code>define <NAME> PRESENCE event <UnifiClientName>:fhem_state:.disconnected <UnifiClientName>:fhem_state:.connected</code> | ||
Oder, bei Verwendung von ROOMMATE ohne eigenes PRESENCE-Device, per userReadings. Da beim Verlassen des WLANs das Handy oft als "wired" an den USG o.ä. "übergeben" wird, mit einer zusätzlichen Abfrage auf ''is_wired'': | |||
:<code>attr <UnifiClientName> userReadings presence {((ReadingsVal("$name","is_wired","?") eq "true") ? "absent" : ((ReadingsVal("$name","fhem_state","?") eq "connected") ? "present":"absent"));;}</code> | |||
und im Roommate: | und im Roommate: | ||
attr <myRoommate> rr_presenceDevice <UnifiClientName> | :<code>attr <myRoommate> rr_presenceDevice <UnifiClientName></code> | ||
</ | |||
Um die Ressourcennutzung des Unifi-Moduls zu reduzieren kann man im DEF des Unifi-Devices das Update-Intervall | Um die Ressourcennutzung des Unifi-Moduls zu reduzieren, kann man im DEF des Unifi-Devices das Update-Intervall hochsetzen und nur einzelne Clients mittels at einzeln updaten: | ||
<pre>defmod updateUnifiClients at +*00:00:10 {\ | <pre>defmod updateUnifiClients at +*00:00:10 {\ | ||
fhem("set clientName1 update");;\ | fhem("set clientName1 update");;\ | ||
fhem("set clientName2 update");;\ | fhem("set clientName2 update");;\ | ||
}</pre> | }</pre> |
Version vom 4. Juni 2019, 08:49 Uhr
UnifiClient | |
---|---|
Zweck / Funktion | |
Steuerung von Unifi-Clients über FHEM | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | EN / DE |
Support (Forum) | Automatisierung |
Modulname | 74_UnifiClient.pm |
Ersteller | Wuehler (Forum / Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Das Modul UnifiClient 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.
Ausserdem gibt es das Unterstützungsmodul UnifiClient, welches alle vorhandenen Informationen zu Clients als Reading bereitstellt und clientspezifische Funktionen zur Verfügung stellt.
Voraussetzungen
UnifiModul-Device
Es wird ein Unifi-Device (als IODev) benötigt.
Definition
Die Definition erfolgt mittels define <name> UnifiClient <clientname in Unifi-Modul>
.
Anwendung
Aufgrund der großen Anzahl an Readings bietet es sich an, die Events mittels Attribut event-on-change-reading
einzuschränken.
Online-Zeitsteuerung
Das Modul versucht die Onlinezeit eines Clients zu berechnen und stellt Attribute bereit, um den Client nach dem Verbrauch der Online-Zeit (Attribut maxOnlineMinutesPerDay) entweder zu blockieren (default; Achtung Provisionierung) oder in eine andere Usergroup zu verschieben (Attribut blockingUsergroup; ohne Provisionierung).
Mit dem Attribut treshholdBytesPerMinute kann die Menge an Bytes angegeben werden, die ein Client ohne Anrechnung auf die Onlinezeit verbrauchen darf. Es bietet sich folgendes stateFormat an:
{ ReadingsVal("$name","fhem_usedOnlineTime","? Minuten")." / ".ReadingsVal("$name","_f_usergroup_name","? Minuten")." / ".((ReadingsVal("$name","blocked","?") eq "true") ? "blocked":ReadingsVal("$name","fhem_state","?"))}
Anwesenheitserkennung
Mittels PRESENCE:
define <NAME> PRESENCE event <UnifiClientName>:fhem_state:.disconnected <UnifiClientName>:fhem_state:.connected
Oder, bei Verwendung von ROOMMATE ohne eigenes PRESENCE-Device, per userReadings. Da beim Verlassen des WLANs das Handy oft als "wired" an den USG o.ä. "übergeben" wird, mit einer zusätzlichen Abfrage auf is_wired:
attr <UnifiClientName> userReadings presence {((ReadingsVal("$name","is_wired","?") eq "true") ? "absent" : ((ReadingsVal("$name","fhem_state","?") eq "connected") ? "present":"absent"));;}
und im Roommate:
attr <myRoommate> rr_presenceDevice <UnifiClientName>
Um die Ressourcennutzung des Unifi-Moduls zu reduzieren, kann man im DEF des Unifi-Devices das Update-Intervall hochsetzen und nur einzelne Clients mittels at einzeln updaten:
defmod updateUnifiClients at +*00:00:10 {\ fhem("set clientName1 update");;\ fhem("set clientName2 update");;\ }