MAC Adressen aus FritzBox auslesen und in Array speichern

Begonnen von Saphora, 03 Juni 2017, 22:44:19

Vorheriges Thema - Nächstes Thema

Saphora

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.

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

amenomade

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

Die alle Readings sind dann in $hash->{READINGS}
Kannst filtern
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Saphora

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  :)

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Saphora

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?

CoolTux

Regex geht nicht. Du musst schon mit einem Schleifenaufruf arbeiten. Einfach mal im Netz nach Perl Hash schleife foreach suchen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Saphora

Danke für die Hinweise.
Mit viel herumprobieren, google und eurer Hilfe hat es nun geklappt  ;D

CoolTux

Würdest Du Deinen Code für die Anfängernachwelt posten?



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Saphora

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
}
}
}