[gelöst] Alle Devices innerhalb eines Raumes auslesen und in ein Array schreiben

Begonnen von t1me2die, 12 September 2018, 15:56:28

Vorheriges Thema - Nächstes Thema

t1me2die

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

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

t1me2die


t1me2die

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

marvin78


t1me2die

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

JensS

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.
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

t1me2die

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

marvin78

Um das noch klar zu stellen: Der commandref Abschnitt behandelt zwar devspec, das genannte Beispiel ist aber ein list Beispiel, welches devspec verwendet.