FHEM Forum

FHEM - Hardware => FRITZ!Box => Thema gestartet von: Saphora am 03 Juni 2017, 22:44:19

Titel: MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: Saphora am 03 Juni 2017, 22:44:19
Guten Abend
ist es möglich Werte aus der Fritzbox auszulesen und in ein Array zu speichern?
Ich würde gern alle meine angemeldeten MAC Adressen in einem Array ablegen.
Mein Vorschlag war:

my  @fritzArray = ReadingsVal("FritzBox", "mac_", "leer");

Das Array ist aber immer nur mit "leer" gefüllt, weil kein Matching stattfindet. Ich denke es liegt an "mac_"?
Die MAC Adressen in der Fritzbox werden als Reading so dargestellt, aber wie erfasst man diese in der Abfrage?
Danke für Hilfe.
Titel: Antw:MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: CoolTux am 03 Juni 2017, 22:56:22
Das geht so nicht. Du musst wissen wie viele Readings du hast mit mac_ und wie sie genau heißen. Also musst du erstmal alle Readingsnamen mit mac_ rausfinden. Und dann kannst du sie abfragen
Titel: Antw:MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: amenomade am 04 Juni 2017, 01:14:53
Dann mit
my $hash=$defs{"FritzBox"};

Die alle Readings sind dann in $hash->{READINGS}
Kannst filtern
Titel: Antw:MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: Saphora am 05 Juni 2017, 21:53:24
Danke für die Idee mit dem Hash.
Jedoch ist das für mich in Perl noch sehr unbekannt.
Habe ein Tutorail angesehen.
Die Deklaration ist aber von deiner abweichend.
Gibt es zu deiner Herangehensweise ein Tutorial?
Danke  :)
Titel: Antw:MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: CoolTux am 05 Juni 2017, 21:59:53
Es gibt eine super FHEM Developer Guide hierzu.
Da Du alle Readings in $hash->{READINGS} hast, kannst du eine eine foreach Schleife durch die Hash Referenz machen und alle mac_ Readings und seine values einlesen lassen.
Titel: Antw:MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: Saphora am 05 Juni 2017, 22:51:12
Danke.
Habe jetzt auch eine funktionierenden Aufruf:

$hash->{READINGS}{mac_00_00_00_00_00_00/}{VAL};

Jedoch muss beim Auslesen ein konkreter Wert angegeben werden, damit der passende Key Value geliefert wird.
Kann beim Abfragen auch Regex verwendet werden, z.B. wie $hash->{READINGS}{/mac_*/}{VAL}; ?
Die Werte könnten dann in einem Array abgespeichert werden, oder?
Titel: Antw:MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: CoolTux am 06 Juni 2017, 00:27:32
Regex geht nicht. Du musst schon mit einem Schleifenaufruf arbeiten. Einfach mal im Netz nach Perl Hash schleife foreach suchen
Titel: Antw:MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: Saphora am 06 Juni 2017, 21:40:10
Danke für die Hinweise.
Mit viel herumprobieren, google und eurer Hilfe hat es nun geklappt  ;D
Titel: Antw:MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: CoolTux am 06 Juni 2017, 21:57:14
Würdest Du Deinen Code für die Anfängernachwelt posten?



Grüße
Titel: Antw:MAC Adressen aus FritzBox auslesen und in Array speichern
Beitrag von: Saphora am 07 Juni 2017, 21:56:07
Klar.
Hier der gesamte Code:


my $key;

# Array mit MACs definieren laut Fritzbox Notation
my @macArray = ("mac_00_11_22_33_44_55");

my $hash = $defs{"FritzBox"};

while (($key) = each($hash->{READINGS})){
if ($key =~ 'mac_') {
# Wenn nicht enthalten
if (!(grep { $_ =~ /$key/ } @macArray)){
# Do something
}
}
}