FritzBox: ActiveDevices: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
(Englisch/Deutsch Mischung komplett auf Deutsch umgestellt; html-Formatierungen entfernt)
Zeile 1: Zeile 1:
This is a derivate of the function FBWlanStat published in "FritzBox: WhoIsAtHome". Thanks to the original autor
'''FritzBox ActiveDevices''' ist eine von ''FBWlanStat'' abgeleitete Funktion (FBWlanStat ist im Detail beschrieben in [[FritzBox: WhoIsAtHome]]).


Stellt fest, ob ein bestimmtes Device in der FB angemeldet ist. For a WLAN device it can take about 10 minutes before the FB knows it left.
Diese Funktion stellt fest, ob ein bestimmtes Gerät an der [[AVM Fritz!Box|FritzBox]] angemeldet ist. Bei einem WLAN-Gerät kann es bis zu zehn Minuten dauern, bis die FritzBox feststellt, dass das Gerät nicht mehr angemeldet ist.
<br><b>HINWEIS</b>: Seit fhem 5.4 gibt es das Modul PRESENCE, das auch im Modus '''fritzbox''' definiert werden kann und dieselben Aufgaben übernimmt wie die hier vorgestellte Routine.<br>
 
'''Hinweis''': Seit fhem 5.4 gibt es das Modul [[Anwesenheitserkennung|PRESENCE]], das auch im Modus '''fritzbox''' definiert werden kann und dieselben Aufgaben übernimmt wie die hier vorgestellte Routine.


== fhem.cfg ==
== fhem.cfg ==
Erforderliche Definitionen in der fhem.cfg:
define MyAttendance dummy
attr MyAttendance icon icoHouse.png
attr MyAttendance room WhoIsAtHome
define WLAN notify WLAN {FBWLanDevActive('MyWLANDeviceName', "MyAttendance")}
define search_for_MyWLANDeviceName at +*00:05:00 trigger WLAN


<pre>define MyAttendance dummy
== Unterroutine FBWLanDevActive ==
attr MyAttendance icon icoHouse.png
Unterroutine, z.&nbsp;B. in MyUtils.pm definiert:
attr MyAttendance room WhoIsAtHome
sub FBWLanDevActive($$) {
define WLAN notify WLAN {FBWLanDevActive('MyWLANDeviceName', "MyAttendance")}
  my ($net_device1)=@_[0];
define search_for_MyWLANDeviceName at +*00:05:00 trigger WLAN
  my $myLength=length($net_device1);
</pre>
  my $number=0;
 
  my $status=0;
== Sub z.B. 99 MyUtils.pm ==
  my $net_device="";
<pre>
  my $net_device2="";
sub FBWLanDevActive($$) {
  my $attendance="";
my ($net_device1)=@_[0];
  while($number &lt;= 25){
my $myLength=length($net_device1);
  $net_device=
my $number=0;
      qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice$number/name);
my $status=0;
  $net_device2=substr($net_device, 0, $myLength);
my $net_device="";
  if($net_device2 eq $net_device1){
my $net_device2="";
  $status=
my $attendance="";
      qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice$number/active);
while($number &lt;= 25){
    if ($status == 1) {last;}
  $net_device=
  }
      qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice$number/name);
  $number++;
  $net_device2=substr($net_device, 0, $myLength);
  if($net_device2 eq $net_device1){
  $status=
    qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice$number/active);
  if ($status == 1) {last;}
   }
   }
   $number++;
   if ($status == 1) {$attendance="Anwesend";}else{$attendance="Abwesend";}
  if(Value("@_[1]") ne $attendance){fhem "set @_[1] $attendance"}
  }
  }
if ($status == 1) {$attendance="Anwesend";}else{$attendance="Abwesend";}
if(Value("@_[1]") ne $attendance){fhem "set @_[1] $attendance"}
}
</pre>


== Test ==
== Test ==
Eingabe im fhem Frontend:
Die Funktion kann getestet werden durch die Eingabe im fhem Frontend:
<pre>
<nowiki>{ FBWLanDevActive('MyLANDeviceName', "MyAttendance")}</nowiki>
{ FBWLanDevActive('MyLANDeviceName', "MyAttendance")}
</pre>


== Hinweis ==
== Hinweis ==
Benutzername (hier'MyLANDeviceName') aus dem FB Frontend ermitteln.
Benutzernamen (hier "MyLANDeviceName") aus dem FB Frontend ermitteln: es ist ausreichend, einen eindeutigen Teil am Anfang des Gerätenames anzugeben. Die Routine sucht über alle Gerätenamen, ob es ein Gerät gibt, dessen name mit dem angegebenen Suchbegriff beginnt.
It is sufficient to specify the first unique part of the LanDevice. The routine searches all devices if it can find at least 1 device of which the name starts with "MyLanDevicename".
 
Beispiel: angenommen, der Gerätename ist "HTC-Harry" or "HTC-Harry-1", dann findet ein Aufruf
:<code>FBWLanDevActive('HTC-Harry', "GSMHarry")</code>
oder sogar auch "nur"
:<code>FBWLanDevActive('HTC', "GSMHarry")</code>


Example:
das Gerät (vorausgesetzt, es ist das einzige Gerät, das mit dieser Buchstabenfolge beginnt).
if the devicename is HTC-Harry or HTC-Harry-1, a call with FBWLanDevActive('HTC-Harry', "GSMHarry") or even FBWLanDevActive('HTC', "GSMHarry") is sufficient if this is the only device with a name starting with "HTC"


== Links ==


[[Kategorie:FritzBox]]
[[Kategorie:FritzBox]]
[[Kategorie:Code Snippets]]
[[Kategorie:Code Snippets]]

Version vom 8. Oktober 2013, 08:58 Uhr

FritzBox ActiveDevices ist eine von FBWlanStat abgeleitete Funktion (FBWlanStat ist im Detail beschrieben in FritzBox: WhoIsAtHome).

Diese Funktion stellt fest, ob ein bestimmtes Gerät an der FritzBox angemeldet ist. Bei einem WLAN-Gerät kann es bis zu zehn Minuten dauern, bis die FritzBox feststellt, dass das Gerät nicht mehr angemeldet ist.

Hinweis: Seit fhem 5.4 gibt es das Modul PRESENCE, das auch im Modus fritzbox definiert werden kann und dieselben Aufgaben übernimmt wie die hier vorgestellte Routine.

fhem.cfg

Erforderliche Definitionen in der fhem.cfg:

define MyAttendance dummy
attr MyAttendance icon icoHouse.png
attr MyAttendance room WhoIsAtHome
define WLAN notify WLAN {FBWLanDevActive('MyWLANDeviceName', "MyAttendance")} 
define search_for_MyWLANDeviceName at +*00:05:00 trigger WLAN

Unterroutine FBWLanDevActive

Unterroutine, z. B. in MyUtils.pm definiert:

sub FBWLanDevActive($$) {
 my ($net_device1)=@_[0];
 my $myLength=length($net_device1);
 my $number=0;
 my $status=0;
 my $net_device="";
 my $net_device2="";
 my $attendance="";
 while($number <= 25){
  $net_device=
      qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice$number/name);
  $net_device2=substr($net_device, 0, $myLength);
  if($net_device2 eq $net_device1){
  $status=
     qx(/usr/bin/ctlmgr_ctl r landevice settings/landevice$number/active);
   if ($status == 1) {last;}
  }
  $number++;
 }
 if ($status == 1) {$attendance="Anwesend";}else{$attendance="Abwesend";}
 if(Value("@_[1]") ne $attendance){fhem "set @_[1] $attendance"}
}

Test

Die Funktion kann getestet werden durch die Eingabe im fhem Frontend:

{ FBWLanDevActive('MyLANDeviceName', "MyAttendance")}

Hinweis

Benutzernamen (hier "MyLANDeviceName") aus dem FB Frontend ermitteln: es ist ausreichend, einen eindeutigen Teil am Anfang des Gerätenames anzugeben. Die Routine sucht über alle Gerätenamen, ob es ein Gerät gibt, dessen name mit dem angegebenen Suchbegriff beginnt.

Beispiel: angenommen, der Gerätename ist "HTC-Harry" or "HTC-Harry-1", dann findet ein Aufruf

FBWLanDevActive('HTC-Harry', "GSMHarry")

oder sogar auch "nur"

FBWLanDevActive('HTC', "GSMHarry")

das Gerät (vorausgesetzt, es ist das einzige Gerät, das mit dieser Buchstabenfolge beginnt).