Liste aller Devices in 99_MyUtils auswerten

Begonnen von freetz, 07 November 2016, 01:03:08

Vorheriges Thema - Nächstes Thema

freetz

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.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

DeeSPe

my $devs = devspec2array("TYPE=MAX");
Damit hast Du Dein Array bestehend aus MAX Devices und kannst auf jedes Reading oder Internal zugreifen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Hans Franz

Oder so das Loggen unterdrücken:
{fhem("list TYPE=MAX",1)}

Gruß
Hans
Raspi
CUL, Nano-CUL
FHT8V, FHT80B, S300TH
WM1000WZ, ELRO
LW12, LD382,DS18B20

freetz

...wunderbar, danke für die beiden tollen Tipps!
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

freetz

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.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

DeeSPe

Es funktionieren alle FILTER.

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

oder

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

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

freetz

Das ist ja klasse und hilft mir sehr - und vielen Dank für die blitzschnelle Antwort :)!
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

freetz

...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.
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

DeeSPe

#8
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.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

freetz

Wow, vielen Dank! Ich hätte mir sonst auch was in Perl zusammengestrickt, aber sicher nicht so elegant :)!
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

freetz

Natürlich :) - aber trotzdem ist so schnelle und hilfreiche Reaktion ja nicht selbstverständlich, insofern noch mal vielen Dank :)!
Alle Infos zur Anbindung von Heizungssystemen mit PPS-, LPB- bzw. BSB-Bus ans LAN gibt es hier:
https://github.com/fredlcore/BSB-LAN

Alle Infos zum WLAN-Interface "Robotan" für Ambrogio/Stiga/Wolf und baugleiche Rasenmähroboter:
https://github.com/fredlcore/robotan