FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: t1me2die am 12 September 2018, 15:56:28

Titel: [gelöst] Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben
Beitrag von: t1me2die am 12 September 2018, 15:56:28
Moin liebes Forum,

ich brauche etwas Hilfe.

Ziel: Alle Devices innerhalb eines Raumes innerhalb von PERL (99_myUtils) auslesen.

Wenn ich in die Kommandozeile:
list room=Preisvergleich

mache, erscheinen alle Devices innerhalb dieses Raumes, super.
Genau diese Devices möchte ich innerhalb meiner 99_myUtils in ein Array einlesen und dann weiterverarbeiten.

Die Frage ist, wie stelle ich dies an?  ;D
Ich habe keine Ahnung, wonach ich genau suchen soll.

Gruß
Mathze
Titel: Antw:Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben
Beitrag von: Beta-User am 12 September 2018, 16:09:47
Schau mal nach devspec2array().
Titel: Antw:[gelöst] Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben
Beitrag von: t1me2die am 12 September 2018, 21:42:36
Wunderbar, genau das habe ich gesucht, danke!

Gruß
Mathze
Titel: Antw:[gelöst] Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben
Beitrag von: t1me2die am 13 September 2018, 11:43:30
Ich brauche leider noch mal eure Unterstützung.

Ich möchte mir alle Devices mit dem TYPE=TelegramBot anzeigen lassen

Wenn ich:
list TYPE=TelegramBot NAME
eingebe, bekomme ich die Devicenamen, die den TYPE=TelegramBot haben

Dazu habe ich nun in meine myUtils folgendes reingebaut:

foreach $devicename (devspec2array("TYPE=TelegramBot NAME"))
{ @array[$i] = $devicename;
$i = $i+1;
}


Ich glaube hier ist der Ausdruck im devspec2array nicht ganz richtig, anstatt des erwartenden Namens "Telegram" schreibt der gute nur eine "1" in das Array.

Gruß
Mathze
Titel: Antw:Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben
Beitrag von: marvin78 am 13 September 2018, 11:50:38
Lass das NAME weg. Woher kommt das?
Titel: Antw:Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben
Beitrag von: t1me2die am 13 September 2018, 11:56:59
Aus der commandref. (oder ich verstehe die Beispiele falsch)
https://fhem.de/commandref_DE.html#devspec

list TYPE=FS20 STATE

Wenn ich das NAME weglasse, dann bekomme ich als Ergebnis ein "list" vom Device.
Ich möchte ja aber gar nicht ein List haben, sondern nur dem Namen von den Device / Devices.

Gruß
Mathze
Titel: Antw:Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben
Beitrag von: JensS am 13 September 2018, 12:36:14
Hallo Mathze,

in der WIKI steht:
ZitatDie Funktion devspec2array() gibt eine Array mit Definitionsnamen zurück
Die Funktion gibt ausschließlich den Namen zurück.
Deine foreach-Schleife bedarf keines $i - sie läuft automatisch bis zum Ende durch.

foreach my $devicename(devspec2array("TYPE=TelegramBot")){return $devicename}

...sollte dir x-mal den Devicenamen zurückgeben.


Gruß Jens

p.s. Ich sehe gerade, dass ess dir nur ein Array geht. Dann solltemy @devicename = devspec2array("TYPE=TelegramBot")genügen.
Titel: Antw:Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben
Beitrag von: t1me2die am 13 September 2018, 12:49:41
Zitat von: dirigent am 13 September 2018, 12:36:14
...
in der WIKI steht: Die Funktion gibt ausschließlich den Namen zurück.
...

Ihr habt beide Recht.
Ich habe es einfach überlesen...

Auszug aus dem Wiki
...Die Funktion devspec2array() gibt eine Array mit Definitionsnamen zurück die...

Danke für eure Hilfe  :)

Gruß
Mathze
Titel: Antw:[gelöst] Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben
Beitrag von: marvin78 am 13 September 2018, 14:31:33
Um das noch klar zu stellen: Der commandref Abschnitt behandelt zwar devspec, das genannte Beispiel ist aber ein list Beispiel, welches devspec verwendet.