UnifiClient: Unterschied zwischen den Versionen

Aus FHEMWiki
(→‎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 client nach dem Verbrauch der Online-Zeit (Attribut maxOnlineMinutesPerDay) entweder zu blocken (default; Achtung Provisionierung) oder in eine andere Usergroup zu verschieben (Attribut blockingUsergroup; ohne Provisionierung).
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:
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:
<pre>
:<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","?"))}
</pre>


=== 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 <code>is_wired</code>:
<pre>
attr <UnifiClientName> userReadings presence {((ReadingsVal("$name","is_wired","?") eq "true") ? "absent" : ((ReadingsVal("$name","fhem_state","?") eq "connected") ? "present":"absent"));;}


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>
</pre>
 


Um die Ressourcennutzung des Unifi-Moduls zu reduzieren kann man im DEF des Unifi-Devices das Update-Intervall hoch setzen und nur einzelne Clients mittels at einzeln updaten:
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, 09: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");;\
}