FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: DocCyber am 07 März 2017, 16:00:18

Titel: [GELÖST!] Perl: Iteration über alle definierten "Devices"
Beitrag von: DocCyber am 07 März 2017, 16:00:18
Hallo zusammen,

Aus der Gesamtheit der definierten FHEM-Devices möchte ich gern einzelne herausfiltern, die bestimmten Kriterien genügen. Zum Beispiel alle Geräte, deren Namen mit hm_device_ beginnen.

Da ich Perl einsetzen möchte, sollte das mit einer foreach-Schleife gehen.
Nur - über was muss ich eigentlich iterieren?
Wie müsste die Schleifenbedingung aussehen?

Titel: Antw:Perl: Iteration über alle definierten "Devices"
Beitrag von: DeeSPe am 07 März 2017, 16:02:39
Zitat von: DocCyber am 07 März 2017, 16:00:18
Hallo zusammen,

Aus der Gesamtheit der definierten FHEM-Devices möchte ich gern einzelne herausfiltern, die bestimmten Kriterien genügen. Zum Beispiel alle Geräte, deren Namen mit hm_device_ beginnen.

Da ich Perl einsetzen möchte, sollte das mit einer foreach-Schleife gehen.
Nur - über was muss ich eigentlich iterieren?
Wie müsste die Schleifenbedingung aussehen?

Thema devspec!
Dazu mal belesen und Du brauchst kein Iterieren.

Gruß
Dan
Titel: Antw:Perl: Iteration über alle definierten "Devices"
Beitrag von: DocCyber am 07 März 2017, 17:49:29
ZitatThema devspec!

Hi Dan,

danke für deinen Input.
Nun will ich aber nicht auf der FHEM Kommandozeile arbeiten, sondern ich brauche die Werte in Perl, um damit weiterarbeiten zu können.

Kann ich deinen Hinweis auch mit Perl umsetzen?
Und wenn ja, wie?
Titel: Antw:Perl: Iteration über alle definierten "Devices"
Beitrag von: CoolTux am 07 März 2017, 17:52:09

my @monitored=devspec2array("(.*KontaktBadZ.*):FILTER=STATE!=closed");
Titel: Antw:Perl: Iteration über alle definierten "Devices"
Beitrag von: DeeSPe am 07 März 2017, 17:55:01
Zitat von: DocCyber am 07 März 2017, 17:49:29
Hi Dan,

danke für deinen Input.
Nun will ich aber nicht auf der FHEM Kommandozeile arbeiten, sondern ich brauche die Werte in Perl, um damit weiterarbeiten zu können.

Kann ich deinen Hinweis auch mit Perl umsetzen?
Und wenn ja, wie?

Aber klar! (FHEM ist doch in Perl) 8)
Schau Dir die Funktion devspec2array an.

Z.B.:
my @devs = devspec2array("TYPE=dummy:FILTER=reading=wert:FILTER=reading2!=wert");

Damit hast Du in dem Array devs alle Devices die von TYPE ein dummy sind, ein Reading namens reading mit dem Wert wert haben und Reading reading2 haben welches nicht den Wert wert hat.

Gruß
Dan

P.S. FILTER akzeptiert auch Internals oder Attribute.
Titel: Antw:Perl: Iteration über alle definierten "Devices"
Beitrag von: DocCyber am 07 März 2017, 18:11:35
@CoolTux, @DeeSPe

DAS habe ich gesucht!
Herzlichen Dank euch beiden!  :)