FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: hjjk am 19 Juli 2016, 18:41:08

Titel: Anwesenheitserkennung
Beitrag von: hjjk am 19 Juli 2016, 18:41:08
Hallo
Ich bin noch FHEM Anfänger und habe folgendes Problem.

Ich möchte aus der FritzBox die Zahl der erkannten aktiven Netzwerk-Devices ermitteln.
Hintergrund ist, ich möchte eine Anwesenheitserkennung für eine Ferienwohnung erstellen.
Dazu gibt es bereits Lösungen, aber alle bauen auf bereits bekannte MAC-Adressen auf.
In dieser Ferienwohnung sind aber nur einige Zeit Gäste von deren Devices (smartphone, table etc.)
mir nicht die MAC-Adressen vor liegen.
Daher mein Ansatz:
Ich zähle die Zahl der angemeldeten Devices (MAC-Adressen) und vergleiche sie mit der Anzahl
der Devices der leeren Wohnung.

Ich habe ein Gerät MyFB definiert.

define MyFB FRITZBOX
attr MyFB room Fritzbox

ich sehe in den Readings alle MAC-Adressen

Readings
...
mac_00_05_CD_23_XX_XX Device1 2016-07-19 18:09:15
mac_00_0E_8E_34_XX_XX Device2 2016-07-19 18:09:15
mac_00_11_32_12_XX_XX Device3 2016-07-19 18:09:15
...

Ich kann aber diese Readings Werte nicht auswerten und weiter verabeiten.

Was mir bisher zur Lösung eingefallen ist das ich alle Devices in einen Log-File schreibe

define FileLog_MyFB ./log/MyFB-%Y-%m.log (MyFB:mac_.*)

Ich habe schon aus den Beispielen der Anwesenheitserkennung in den Foren folgenden Code
in einem Unterprogramm im myUtils.pm zu nutzen versucht:

sub CountNetDevices()
{
  my $devcount = 0;
  my @fbs = devspec2array("TYPE=FRITZBOX");

  foreach( @fbs ) {
       ...
       $devcount++;
    }
  }
  return $devcount;
}

oder

sub CountNetDevices()
{
  my $devcount = 0;
  my @devices = ReadingsVal("MyFB", "mac_.*", "");

  $devcount = @devices;
  return $devcount;
}

Dabei tauchen 2 Probleme auf.
1. Das Array @fbs hat nur ein Element, in meinem Fall ist dieses Element=MyFB
2. ReadingsVal scheint nicht mit Wildcards zu arbeiten und das Ergebnis in ein Array schreiben zu können.

Was übersehe ich, was mache ich falsch ?
Titel: Antw:Anwesenheitserkennung
Beitrag von: Markus Bloch am 19 Juli 2016, 19:32:04
Die Funktion ReadingsVal arbeitet nicht mit Wildcards wie Du schon festgestellt hast. Daher geht es nur folgendermaßen:

sub CountNetDevices()
{
  my $devcount = 0;
  my @devices = grep {/^mac_/} keys %{$defs{"MyFB"}{READINGS}};

  $devcount = @devices;
  return $devcount;
}


ungetestet!

Gruß
Markus
Titel: Antw:Anwesenheitserkennung
Beitrag von: hjjk am 20 Juli 2016, 09:14:38
Hallo Markus,
vielen Dank. Funktioniert super.
Da werd ich wohl noch viel lernen müssen  :-[

Gruß Hajo