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.
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
Dann mit
my $hash=$defs{"FritzBox"};
Die alle Readings sind dann in $hash->{READINGS}
Kannst filtern
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 :)
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.
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?
Regex geht nicht. Du musst schon mit einem Schleifenaufruf arbeiten. Einfach mal im Netz nach Perl Hash schleife foreach suchen
Danke für die Hinweise.
Mit viel herumprobieren, google und eurer Hilfe hat es nun geklappt ;D
Würdest Du Deinen Code für die Anfängernachwelt posten?
Grüße
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
}
}
}