Hallo zusammen,
Ich hab eben mal geschaut aber nichts vergleichbares gefunden.
Ich versuche ein DOIF zu bauen, welches vergleiche auf Werte aus anderen Devices zieht, geht das überhaupt? Vom ESP wird immer nur eine ID zurückgegeben.
defmod di_opendoor DOIF ([ESPEasy_esphaustuer_Wohnungstuer:Tag] =~ [tagTorsten:tagids])(set danalock open)
Ich nutze =~ weil ich dem device mehrere IDs zugewiesen habe.
defmod tagTorsten dummy
attr tagTorsten userattr tagids tagowner
attr tagTorsten DbLogExclude .*
attr tagTorsten devStateIcon on:ios-on-green off:ios-off
attr tagTorsten event-on-change-reading .*
attr tagTorsten group Key
attr tagTorsten room Haus->Zutritt
attr tagTorsten setList on off
attr tagTorsten tagids 2,3,4,5,6
attr tagTorsten tagowner Torsten
Ich möchte jetzt erreichen wenn der ESp einen Tag 2-6 ausspuckt, soll er öffnen. Im zweiten Schritt würde ich dann gern weg von dem festdefinierten TagTorsten Dummy und alle Tagids durchsuchen, öffnen und dann sagen wer geöffnet hat. ähnlich wie mit dem Fenster Status wo ich ^Fenster eingeben kann um alle Fenster zu durchsuchen. Ist dies hier so möglich?
defmod di_opendoor DOIF (AttrVal("tagTorsten","tagids","") =~ [ESPEasy_esphaustuer_Wohnungstuer:Tag]) (set danalock open)
ZitatIm zweiten Schritt würde ich dann gern weg von dem festdefinierten TagTorsten Dummy und alle Tagids durchsuchen, öffnen und dann sagen wer geöffnet hat. ähnlich wie mit dem Fenster Status wo ich ^Fenster eingeben kann um alle Fenster zu durchsuchen. Ist dies hier so möglich?
Ich verstehe deine ^Fenster Geschichte nicht.
Irgendwo musst Du aber eine Zuweisung ids<->owner haben. Wie stellst Du dich das vor?
Zitat von: amenomade am 06 Oktober 2019, 18:26:40
Ich verstehe deine ^Fenster Geschichte nicht.
Irgendwo musst Du aber eine Zuweisung ids<->owner haben. Wie stellst Du dich das vor?
Naja wenn ich die Tags auswerte und sehe Tag 4 ist ausgelöst, dann hatte ich die Hoffnung ich bekomme es auch hin dann zu sagen Tag 4 gehört (in dem Fall zu tagTorsten)
Zitat von: amenomade am 06 Oktober 2019, 18:14:48
defmod di_opendoor DOIF (AttrVal("tagTorsten","tagids","") =~ [ESPEasy_esphaustuer_Wohnungstuer:Tag]) (set danalock open)
Danke, das scheint zu funktionieren, ich verstehe es nur nicht.
laut meinem Verständnis kommt doch immer erst das Eventdevice und dann der Vergleichswert?
Wie bist Du auf diese Lösung gekommen? wo ist das nachzulesen?
Zitat von: AmunRe am 06 Oktober 2019, 18:42:58
laut meinem Verständnis kommt doch immer erst das Eventdevice und dann der Vergleichswert?
Das macht keinen Unterschied.
Wichtiger ist die richtige Perl Syntax... Siehe =~ Operator in der Perl Doku
("2" =~ "2,3,4,5") ist falsch
("2,3,4,5" =~ "2") ist wahr
EDIT: aber pass auf:
("124,125,126,127" =~ "25") ist auch wahr.
Zitat von: amenomade am 06 Oktober 2019, 18:49:19
Das macht keinen Unterschied.
Wichtiger ist die richtige Perl Syntax... Siehe =~ Operator in der Perl Doku
("2" =~ "2,3,4,5") ist falsch
("2,3,4,5" =~ "2") ist wahr
EDIT: aber pass auf:
("124,125,126,127" =~ "25") ist auch wahr.
Letzteres war ein echt guter Hinweis. Vielen Dank, für die Ausführliche Antwort!
Weil 12 enthält auch die 2 demnach ist das dann auch wahr - soll es aber nicht sein.
bessere Möglichkeit ohne =~ abzufragen ob einer der Werte im Reading enthalten ist?
Ich befürchte, Du muss mit deinem DOIF auf Perl Modus wechseln. Ich kenne sonst keine einfache Möglichket.
Zitat von: amenomade am 06 Oktober 2019, 18:49:19EDIT: aber pass auf:
("124,125,126,127" =~ "25") ist auch wahr.
Daher
(",124,125,126,127," =~ ",25,")
nehmen.
Oder
(",124,125,126,127," =~ "," + [device:tag] + ",")