Wie greift man auf List-Parameter im notify zu?

Begonnen von Crania, 21 November 2019, 15:37:38

Vorheriges Thema - Nächstes Thema

Crania


Hallo,
ich habe da zwei setList's:  Group und Pos:


attr WZ_Rollo setList Group:Alle,Rollo1,Rollo2,Rollo3  Pos:Close,20%,40%,60%,80%,Open
attr WZ_Rollo webCmd Group:Pos


und ein Notify


define n_WZ_Rollo notify WZ_Rollo set TerrasseControl $EVENT


Im $EVENT steht aber nur der Wert aus der gerade selektierten Liste.
Ich benötige aber, für ein komplettes Kommando, auch den Wert aus der
jeweils anderen Liste. Wie greift man denn darauf zu?
Gruß Crania

amenomade

Ein Event (Ereignis) ist immer nur eine einzelne Aktualisierung eines Readings.
Ein notify reagiert auf diese Ereignisse.

Du musst überlegen: Event triggert Massnahme

Wenn ich richtig verstanden habe, möchtest Du nur "triggern" wenn Pos sich ändert, und dabei dann Group benutzen
Das heisst: notifu auf "Pos" Trigger bauen, und im Befehl, mit ReadingsVal("WZ_Rollo","Group","defaultval") oder SetMagic greifen.

Z.B.:
define n_WZ_Rollo notify WZ_Rollo:Pos.* set TerrasseControl [WZ_Rollo:Group] $EVENT
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Crania

Hallo amenomade,

was Du geschrieben hast ist genau das was ich vorhabe.
Ich habe das Notify jetzt daraufhin geändert.
Dieser Teil funktioniert jetzt. Es wird nur noch auf Änderungen in Pos getriggert.
Weiterhin wird in $EVENT nur ,,Pos" weitergegeben, hier musste ich  $EVTPART0 $EVTPART1 reinsetzen.


define n_WZ_Rollo notify WZ_Rollo:Pos.* set TerrasseControl $EVTPART0-$EVTPART1


Dann erscheint im Log:  DEBUG>Set:Pos-80%    das ist soweit ok.

Aber zum zweiten Teil – Zugriff auf Group - habe ich immer noch ein massives Verständnisproblem.


define n_WZ_Rollo notify WZ_Rollo:Pos.* set TerrasseControl $EVTPART0-$EVTPART1-ReadingsVal("WZ_Rollo", "Group", "def")


bringt mir im Log:

DEBUG>Set:Pos-80%-ReadingsVal("WZ_Rollo","Group","def")

Der Ausdruck   ReadingsVal("WZ_Rollo","Group","def")   wird gar nicht ausgewertet, sondern 1:1 als Kommando weitergegeben.
Was ich hier benötige, ist der aktuell selektierte Wert aus Group.
Was Beispielhaft letztendlich rauskommen soll ist:

DEBUG>Set:Pos-80%-Group-Rollo1

Was mir auch unklar ist, das die zwei Listen - Group und Pos - ja keine Readings sind, sondern Attribute von WZ_Rollo.

Gruß Crania

CoolTux

ReadingsVal ist eine Perlfunktion. Daher musst Du alles in Perl schreiben oder SetMagic verwenden


define n_WZ_Rollo notify WZ_Rollo:Pos.* set TerrasseControl $EVTPART0-$EVTPART1-[WZ_Rollo:Group]


Hoffe ich habe Dich da richtig verstanden wie Du es brauchst
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Crania

Hallo CoolTux,

ja, genauso wäre es richtig, ja wenn es denn funktionieren würde.
Es hat mich aber auch ein Stück weitergebracht.


define n_WZ_Rollo notify WZ_Rollo:Pos.* set TerrasseControl $EVTPART0-$EVTPART1-[WZ_Rollo:Group]


Dies bringt mir jetzt im Log

DEBUG>Set:Pos-40%-[WZ_Rollo:Group]

Die Erkenntnis ist: Egal was ich hinter $EVTPART1 eintrage, es wird 1:1 als Kommando übertragen.
Es werden nur $NAME, $EVENT, $EVTPART, $TYPE akzeptiert/umgesetzt.
Werde mich noch mal mit den Unterschieden {xx},  [xx], fhem(xx) beschäftigen.

Gruß Crania

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

define n_WZ_Rollo notify WZ_Rollo:Pos.* { CommandSet(undef,'TerrasseControl '. $EVTPART0 . '-' . $EVTPART1 . '-' . ReadingsVal('WZ_Rollo', 'Group', undef)
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Crania


Hallo,
also die Lernkurve von Fhem und Perl ist wirklich sehr, sehr steil.
Vielleicht interessiert es den Einen oder Anderen wie die Lösung aussieht.

Wie in den vorigen Post's beschrieben, habe ich zwei Listen im Device dummy: Group und Pos.
Diese sollen über ein notify zu EINEM Kommando zusammengeführt werden.

Hier also die Lösung zum obigen Problem:
1.   Das Notify muss auf BEIDE Listen ein Event erzeugen
2.   Der Name der jeweils selektierten Liste steht in $EVTPART0
3.   Der Wert aus der jeweils selektierte Liste steht in $EVTPART1
4.   Der Wert aus der Liste Group wird in einem Reading zwischengespeichert
5.   Wenn die Liste Pos ein Event erzeugt, wird das Kommando zusammengebaut und versendet.
6.   That's it

Hier das Notify

WZ_Rollo {
  if ($EVTPART0 eq "Group" ) {
    fhem("setReading WZ_Rollo group $EVTPART1");
  }
  if ($EVTPART0 eq "Pos" ) {
    my $cmd = "Group-[WZ_Rollo:group]-$EVTPART0-$EVTPART1" ;
    fhem("set TerrasseControl $cmd");
  }
}


Man lernt nur dazu, wenn etwas nicht funktioniert.
Vielen Dank an alle für die kreativen Hinweise.
Gruß Crania