Autor Thema: Codevorschlag Erweiterung sub IsDevice()  (Gelesen 905 mal)

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3926
  • Wer anderen eine Bratwurst brät...
Codevorschlag Erweiterung sub IsDevice()
« am: 22 Dezember 2017, 20:56:09 »
Ich habe die sub IsDevice() umgebaut und um zwei Parameter erweitert damit man damit auch prüfen kann ob das Device ein bestimmtes Reading besitzt mit bestimmten Werten.
Würde mich freuen wenn das Anklang findet und in fhem.pl mit einfliessen würde.

sub
IsDevice($;$$$)
{
  my ($devname,$devtype,$devread,$readval) = @_;
  return 0
    if (!defined($devname) || !defined($defs{$devname}));
  return 0
    if ($devtype && $defs{$devname}{TYPE} !~ /^$devtype$/);
  return 0
    if ($devread && !defined(ReadingsVal($devname,$devread,undef)));
  return 0
    if ($readval && ReadingsVal($devname,$devread,"") !~ /^$readval$/);
  return 1;
}

Auch wenn die Logik in der Funktion nun umgekehrt ist, sollte es voll abwärtskompatibel sein, habe es vielfach getestet.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20460
Antw:Codevorschlag Erweiterung sub IsDevice()
« Antwort #1 am: 22 Dezember 2017, 21:50:36 »
Den Namen finde ich fuer diesen Fall irrefuehrend, die Aufgabe klingt eher nach ReadingsVal.
Wozu braucht man sowas?

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3926
  • Wer anderen eine Bratwurst brät...
Antw:Codevorschlag Erweiterung sub IsDevice()
« Antwort #2 am: 22 Dezember 2017, 23:09:18 »
Wozu braucht man sowas?

Für Automationsmodule bei denen es wichtig ist dass die zu automatisierenden Devices auch bestimmte Readings und Werte haben damit die Automation funktioniert.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20460
Antw:Codevorschlag Erweiterung sub IsDevice()
« Antwort #3 am: 22 Dezember 2017, 23:29:06 »
So eine Antwort haette ich auch selbst formulieren koennen.
Kannst du es mir anders beschreiben, evtl. mit einem Beispiel?

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3926
  • Wer anderen eine Bratwurst brät...
Antw:Codevorschlag Erweiterung sub IsDevice()
« Antwort #4 am: 22 Dezember 2017, 23:46:49 »
In einem Attribut kann man ein Triggerdevice mit passenden Reading und möglichen on/off Werten angeben.
z.B.: device1:reading:onValue:offValue
Dann könnte man prüfen mit:
my @d = split /:/,$attr_value;
return "Not a valid device!" if(!IsDevice($d[0],undef,$d[1],$d[2]."|".$d[3]));

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15921
  • s/fhem\.cfg/configDB/g
Antw:Codevorschlag Erweiterung sub IsDevice()
« Antwort #5 am: 23 Dezember 2017, 12:40:30 »
Sowas gehört m.E. nicht in die fhem.pl sondern maximal in ein Modul, das diese Abfrage wirklich benötigt und die Information nicht mit den unzähligen bereits bestehenden Möglichkeiten beschaffen kann (was ich mir aber irgendwie nicht vorstellen kann).

  • Ob ein device überhaupt existiert, läßt sich beispielsweise schon lange problemlos über die Funktion defInfo() herausfinden.
  • Ob ein Reading in einem vorhandenen device existiert, läßt sich mit ReadingsVal() herausfinden, indem man als default einfach undef zurückliefert.

Warum soll es zur Lösung solch simpler Aufgaben im Standard immer mehrere Lösungen geben?
« Letzte Änderung: 23 Dezember 2017, 12:44:15 von betateilchen »
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 14.06.2019

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3926
  • Wer anderen eine Bratwurst brät...
Antw:Codevorschlag Erweiterung sub IsDevice()
« Antwort #6 am: 23 Dezember 2017, 14:56:26 »
Okay, ist also nicht gewünscht!

Ziehe hiermit meinen Codevorschlag zurück.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced