Codevorschlag Erweiterung sub IsDevice()

Begonnen von DeeSPe, 22 Dezember 2017, 20:56:09

Vorheriges Thema - Nächstes Thema

DeeSPe

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
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

rudolfkoenig

Den Namen finde ich fuer diesen Fall irrefuehrend, die Aufgabe klingt eher nach ReadingsVal.
Wozu braucht man sowas?

DeeSPe

Zitat von: rudolfkoenig am 22 Dezember 2017, 21:50:36
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
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

rudolfkoenig

So eine Antwort haette ich auch selbst formulieren koennen.
Kannst du es mir anders beschreiben, evtl. mit einem Beispiel?

DeeSPe

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
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

betateilchen

#5
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?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DeeSPe

Okay, ist also nicht gewünscht!

Ziehe hiermit meinen Codevorschlag zurück.

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