FHEM Forum

FHEM => Sonstiges => Thema gestartet von: dt2510 am 26 März 2019, 11:56:12

Titel: devspec2array ... ich stehe gerade auf dem Schlauch
Beitrag von: dt2510 am 26 März 2019, 11:56:12
vielleicht kann mir jemand weiterhelfen ...

Ich versuche gerade über devspec2array alle Devices mit dem Reading "battery" zu greifen, habe aber keine Ahnung wie  :-\
Titel: Antw:devspec2array ... ich stehe gerade auf dem Schlauch
Beitrag von: rudolfkoenig am 26 März 2019, 11:59:46
list .* batteryoderlist .* r:battery
Titel: Antw:devspec2array ... ich stehe gerade auf dem Schlauch
Beitrag von: dt2510 am 26 März 2019, 12:02:43
das kann ich aber doch nicht in der Form

foreach my $myItem (devspec2array("list .* battery")) {

in meinem perl-Code verwenden oder ?

Den Inhalt könnte ich mit

foreach my $myItem (devspec2array("battery=ok")) {

abfragen ...
Titel: Antw:devspec2array ... ich stehe gerade auf dem Schlauch
Beitrag von: marvin78 am 26 März 2019, 12:04:11
Das list ist ein Befehl. Rudis Beispiel zeigt die Verwendung von devspec (in seinem Beispiel eben im Befehl list).
Titel: Antw:devspec2array ... ich stehe gerade auf dem Schlauch
Beitrag von: dt2510 am 26 März 2019, 12:09:03
Dass "list" ein Befehl ist, ist mir schon klar - ich bekomme dann ja auch alle Devices mit Reading "battery" aufgelistet.

Ich brauche aber ein Array mit allen Devices, die das Reading "battery" besitzen, zur Auswertung in meiner 99_myUtils.pm.
Meines Wissens geht das dort mit devspec2array.
Was aber gebe ich dort mit ? "list .* battery" macht keinen Sinn - muss ich stattdessen "*. battery" nehmen ? Ich konnte hierzu leider keine Dokumentation finden ...
Titel: Antw:devspec2array ... ich stehe gerade auf dem Schlauch
Beitrag von: DeeSPe am 26 März 2019, 12:15:29
Zitat von: dt2510 am 26 März 2019, 12:09:03
Ich brauche aber ein Array mit allen Devices, die das Reading "battery" besitzen, zur Auswertung in meiner 99_myUtils.pm.

devspec2array(".*:FILTER=battery!=")

oder nur:
devspec2array("battery!=")

Gruß
Dan
Titel: Antw:devspec2array ... ich stehe gerade auf dem Schlauch
Beitrag von: dt2510 am 26 März 2019, 12:17:07
wenn ich folgende Prozedur in meine 99_myUtils.pm einbaue

sub Test() {
  foreach my $myItem (devspec2array("*. battery")) {
    Log 1, $myItem;
  }


führt die Ausführung (über die Eingabezeile in FHEM) von

{Test()}

zu folgenden Fehlermeldungen im Logfile:

2019.03.26 12:13:39 1: devspec2array *. battery: Unknown verb pattern '. battery' in regex; marked by <-- HERE in m/^(*. battery) <-- HERE $/ at fhem.pl line 1307.

2019.03.26 12:13:39 1: stacktrace:
2019.03.26 12:13:39 1:     main::devspec2array                 called by ./FHEM/99_myUtils.pm (95)
2019.03.26 12:13:39 1:     main::Test               called by (eval 1941) (1)
2019.03.26 12:13:39 1:     (eval)                              called by fhem.pl (1127)
2019.03.26 12:13:39 1:     main::AnalyzePerlCommand            called by fhem.pl (1152)
2019.03.26 12:13:39 1:     main::AnalyzeCommand                called by fhem.pl (1081)
2019.03.26 12:13:39 1:     main::AnalyzeCommandChain           called by ./FHEM/01_FHEMWEB.pm (2666)
2019.03.26 12:13:39 1:     main::FW_fC                         called by ./FHEM/01_FHEMWEB.pm (939)
2019.03.26 12:13:39 1:     main::FW_answerCall                 called by ./FHEM/01_FHEMWEB.pm (567)
2019.03.26 12:13:39 1:     main::FW_Read                       called by fhem.pl (3697)
2019.03.26 12:13:39 1:     main::CallFn                        called by fhem.pl (744)
2019.03.26 12:13:39 1: *. battery
Titel: Antw:devspec2array ... ich stehe gerade auf dem Schlauch
Beitrag von: dt2510 am 26 März 2019, 12:20:21
Zitat von: DeeSPe am 26 März 2019, 12:15:29
devspec2array(".*:FILTER=battery!=")

oder nur:
devspec2array("battery!=")

Gruß
Dan

Ah ! So funktioniert es :) Danke !!
Titel: Antw:devspec2array ... ich stehe gerade auf dem Schlauch
Beitrag von: marvin78 am 26 März 2019, 12:21:46
Das macht meinen nächsten Beitrag unnötig ;)