FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: freetz am 07 November 2016, 01:03:08

Titel: Liste aller Devices in 99_MyUtils auswerten
Beitrag von: freetz am 07 November 2016, 01:03:08
Hallo zusammen,

ich möchte über eine Funktion alle Devices mit dem Type "HeatingThermostat" auswerten und dachte, dass ich das über das Hash %defs machen kann. Da streikt FHEM/Perl aber und möchte, dafür ein eigenes Package haben. Als Alternative habe ich mir bisher mit dem Funktionsaufruf {fhem(list TYPE=MAX)} geholfen, über dessen Rückmeldung ich dann nacheinander mit InternalVal den Type abgefragt habe.
Nun habe ich aber festgestellt, dass jeder dieser Funktionsaufrufe die Liste der MAX-Devices auch ins Log schreibt. Bei einer zyklischen Funktion natürlich unsinnig.

Daher meine Frage, ob das von Euch schon jemand anders/besser gelöst hat? Freue mich über jede Rückmeldung.

Gruß,

F.
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: DeeSPe am 07 November 2016, 01:06:40
my $devs = devspec2array("TYPE=MAX");
Damit hast Du Dein Array bestehend aus MAX Devices und kannst auf jedes Reading oder Internal zugreifen.

Gruß
Dan
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: Hans Franz am 07 November 2016, 01:11:38
Oder so das Loggen unterdrücken:
{fhem("list TYPE=MAX",1)}

Gruß
Hans
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: freetz am 07 November 2016, 07:10:34
...wunderbar, danke für die beiden tollen Tipps!
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: freetz am 07 November 2016, 08:06:18
Kurze Nachfrage noch: Gibt es auch die Möglichkeit, mir alle Geräte eines Raumes (und idealerweise dann noch nach Type gefiltert) über eine Funktion ausgeben zu lassen?

Vielen Dank noch mal und Gruß,

F.
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: DeeSPe am 07 November 2016, 08:10:21
Es funktionieren alle FILTER.

my $devs = devspec2array("room=Badezimmer");

oder

my $devs = devspec2array("TYPE=MAX:FILTER=room=Badezimmer");

Gruß
Dan
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: freetz am 07 November 2016, 08:28:40
Das ist ja klasse und hilft mir sehr - und vielen Dank für die blitzschnelle Antwort :)!
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: freetz am 07 November 2016, 08:34:30
...ok, hoffentlich letzte Nachfrage: Mit
{devspec2array("room=.*")}
bekomme ich nicht wie erhofft eine Liste aller Räume, sondern aller Devices in allen Räumen. Gibt es da noch eine Möglichkeit, eine Liste der Räume zu bekommen?

Vielen Dank und Gruß,

F.
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: DeeSPe am 07 November 2016, 09:55:11
So ohne weiteres nicht!

Mit ein Wenig Perl geht das fix.

Code für 99_myUtils (ungetestet):
sub listAllRooms(;$)
{
  my ($type) = @_;
  my @rooms;
  foreach my $dev (devspec2array(".*"))
  {
    foreach my $room (split(",",AttrVal($dev,"room","")))
    {
      push @rooms,$room if (!grep(/^$room$/,@rooms));
    }
  }
  return join(",",sort @rooms) if ($type eq "list");
  return \@rooms;
}


Dann die Funktion aufrufen mit:
{ listAllRooms }
um ein Array zurück zu bekommen oder:
{ listAllRooms("list") }
um eine kommaseparierte Liste zu erhalten.

Gruß
Dan

EDIT: Hab nochmal ergänzt dass die Raumliste sortiert wird.
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: freetz am 07 November 2016, 10:11:49
Wow, vielen Dank! Ich hätte mir sonst auch was in Perl zusammengestrickt, aber sicher nicht so elegant :)!
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: DeeSPe am 07 November 2016, 10:13:54
Wenn es funktioniert und Deine Anforderungen erfüllt ist es doch super.
Und wenn Du dabei noch etwas gelernt hast, ist es noch besser!!! 8)

Gruß
Dan
Titel: Antw:Liste aller Devices in 99_MyUtils auswerten
Beitrag von: freetz am 07 November 2016, 10:29:07
Natürlich :) - aber trotzdem ist so schnelle und hilfreiche Reaktion ja nicht selbstverständlich, insofern noch mal vielen Dank :)!