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
Den Namen finde ich fuer diesen Fall irrefuehrend, die Aufgabe klingt eher nach ReadingsVal.
Wozu braucht man sowas?
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
So eine Antwort haette ich auch selbst formulieren koennen.
Kannst du es mir anders beschreiben, evtl. mit einem Beispiel?
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
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?
Okay, ist also nicht gewünscht!
Ziehe hiermit meinen Codevorschlag zurück.
Gruß
Dan