UnifiClient: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „{{Infobox Modul |ModPurpose=Steuerung von Unifi-Clients über FHEM |ModType=d |ModForumArea=Automatisierung |ModTechName=74_UnifiClient.pm |ModOwner=Wuehler (…“)
 
K (Link auf Modulowner im Forum korrigiert)
 
(7 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
|ModForumArea=Automatisierung
|ModForumArea=Automatisierung
|ModTechName=74_UnifiClient.pm
|ModTechName=74_UnifiClient.pm
|ModOwner=Wuehler ({{Link2FU|Wuehler|Forum}} / [[Benutzer Diskussion:Wuehler|Wiki]])}}
|ModOwner=Wuehler ({{Link2FU|18141|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.


== Voraussetzungen ==
== Voraussetzungen ==
=== UnifiModul-Device ===
=== UnifiModul-Device ===
Es wird ein [[Unifi]]-Device (als IODev) benötigt.
Es wird ein [[Unifi]]-Device (als [[Interface|IODev]]) benötigt.


=== Definition ===
== Definition ==
Die Definition erfolgt mittels <code>define <name> UnifiClient <clientname in Unifi-Modul> </code>.
Die Definition erfolgt mittels <code>define <name> UnifiClient <clientname in Unifi-Modul> </code>.


== 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.
=== 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.
 
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>


=== Anwesenheitserkennung ===
=== Anwesenheitserkennung ===
<code>define <NAME> PRESENCE event <UnifiClientName>:fhem_state:.disconnected <UnifiClientName>:fhem_state:.connected</code>
Mittels [[PRESENCE]]:
:<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:
:<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 hochsetzen und nur einzelne Clients mittels at einzeln updaten:
<pre>defmod updateUnifiClients at +*00:00:10 {\
  fhem("set clientName1 update");;\
  fhem("set clientName2 update");;\
}</pre>

Aktuelle Version vom 16. März 2021, 11:51 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");;\
}