[notify] mehrer Pattern auf "on" prüfen?

1,923 views
Skip to first unread message

lo4dro

unread,
Jun 11, 2012, 4:08:33 PM6/11/12
to fhem-...@googlegroups.com
Hallo,

ich versuche gerade "notify" zu verstehen.
Mein ersten Versuche sehen so aus, das abhängig von Patten ein Licht geschalt wird.
Das klappt sehr gut.

Nun versuche ich zu verstehen wie man mehrere Pattern abfragt um danach ein Licht zu schalten.
Ich habe drei Dummys konfiguriert die die Rückgabewert von einem Rollo-Aktor überwacht.
Wenn alle drei Rückgabewerte 1 sind dann soll die LED geschaltet werden

Rollo zu = 1

Die Dummys sehen so aus:

define R1ZU EIB 0/0/15
attr R1ZU dummy 1

define R2ZU EIB 0/0/15
attr R2ZU dummy 1

define R3ZU EIB 0/0/15
attr R3ZU dummy 1

nur wie Frage ich so was im notify ab?
Ich habe folgendes Versucht.

define alleRolloZu notify R.ZU { fhem "set LEDalleRolloZu  %" }

Das funktioniert als "oder" aber nicht als "und" Funktion.
Was muss ich ändern damit es eine "und" Funktion wird?

Gruß
lo4dro




Maz

unread,
Jun 11, 2012, 6:06:54 PM6/11/12
to fhem-...@googlegroups.com
 
Hi Lothar,

Du willst also die LED einschaanhaben, wenn alle 3 Rolläden zu sind, richtig?
Da brauchst Du erst mal keine dummys (BTW: dummy ist ein eigenes Modul und nicht dummy attribut, wie Du es hier verwendest).

Einfach so mal dahin gerotzt und die syntax muss nicht 100% sein:

Annahme: Du hast 3 Rollos mit den folgenden Namen: Rollo1, Rollo2, Rollo3
Weitere Annahme, Du willst die LED einschalten, wenn alle Rollos auf on stehen.

dann sieht Dein notify wie folgt aus: (wie gesagt nicht getestet und kann fehlerhaft sein)

define nt.allerolloszu (Rollo1|Rollo2|Rollo3) { \
  my $rollo1 = $value{"Rollo1"};;\
  my $rollo2 = $value{"Rollo2"};;\
  my $rollo3 = $value{"Rollo3"};;\
  if($rollo1 eq "on" && $rollo2 eq "on" && $rollo3 eq "on") {\
     fhem("set LEDalleRolloZu on");;\
  }else {\
     fhem("set LEDalleRolloZu off");;\
  }
 
Viele Grüße
Maz

lo4dro

unread,
Jun 12, 2012, 2:41:06 AM6/12/12
to fhem-...@googlegroups.com
Danke Maz.

Das ist ja mal harter Toback.

Ich versuche das mal zu zerlegen und zu verstehen

Die Werte zwischen den Klammern sind die abzufragen Statuswerte in dem Beispiel den Rückgabewert von Rollo1, Rollo2 und Rollo3
(Kann man das auch Rollo[123] oder Rollo. schreiben?)

In der geschweiften Klammer folgt Perl Code.
Ich weis der Variable $rollo1 den Rückgabelwert von Rollo1 zu.
Danach benutze ich eine normale "if then else" Konstrukt für das Steuern der LED?

Wenn das so funktioniert wird es dokumentiert damit andere Anfänger es einfacher haben.
Genau solche Beispiele fehlen in der gesamte fhem Doku

Ich werde es heute noch testen.

Gruß
lo4dro

Christian K.

unread,
Jun 12, 2012, 2:48:20 AM6/12/12
to fhem-...@googlegroups.com
Und wenn du dann dabei bist, könntest du noch aufzeigen wie das mit
dem "oder" geht :)

Danke!! :)
> --
> To unsubscribe from this group, send email to
> fhem-users+...@googlegroups.com

Rudolf Koenig

unread,
Jun 12, 2012, 3:26:15 AM6/12/12
to fhem-...@googlegroups.com
> Genau solche Beispiele fehlen in der gesamte fhem Doku

Ich sehe das anders (um es nett zu formulieren). Folgendes schon durchgelesen?
- http://fhem.de/commandref.html#notify
- http://fhem.de/commandref.html#perl
- http://fhem.de/faq.html#faq12
- http://fhem.de/faq.html#faq14
- http://fhem.de/faq.html#faq16

weiterhin 'zig Beispiele in der Google.Gruppe, und das ist nur das was ich
geschrieben habe.
In der fhemwiki und in der Heimautomatisierung-mit-fhem-V2.pdf existieren
natuerlich auch noch "unzaehlige" Beispiele von anderen fleissigen.

lo4dro

unread,
Jun 12, 2012, 4:41:45 AM6/12/12
to fhem-...@googlegroups.com
Hallo,

Richtig du hast eine Kurzanleitug geschrieben, aus der ich nicht schlau werde, da Praktische Beispiele fehlen.
Die ersten zwei Links kenne ich und hab die auch schon oft gelesen.
Und zum Thema google Groups sag ich besser nichts. Ein Forum ist auch kein Sammelplatz für dokumentierte Beispiele.

Was die Anzahl der Beispiele angeht, so gibt es viele. Für mich, und ich rede hier nur von mir, sind die alle zu schlecht Erklärt.
Da wird ein Haufen Code abgedruckt. Aber wie das funktioniert versteht wohl nur ein Perl Profi.

Tolles Projekt, das mit gut gefällt und ich gerne weiter nutzen möchte, aber eben nur für Perl Programmierer und net für Anwender

lo4dro

unread,
Jun 12, 2012, 5:44:52 AM6/12/12
to fhem-...@googlegroups.com
http://fhemwiki.de/wiki/Funktionsbeschreibung_zu_notify#einfache_ODER_Funktion

Da habe ich das mal Beschrieben.
Leideer Funktioniert die UND Funktion so noch nicht.
> fhem-users+unsubscribe@googlegroups.com

lo4dro

unread,
Jun 12, 2012, 8:11:29 AM6/12/12
to fhem-...@googlegroups.com
Hallo Maz
#nach vielen Versuche und viel lesen habe ich ein funktionierendes notify geschaft.

define nt.allerolloszu (R1ZU|R2ZU|R6ZU) {
my $r1 = $value{"R1ZU"};;
my $r2 = $value{"R2ZU"};;
my $r3 = $value{"R6ZU"};;
if ($r1 eq "on" && $r2 eq "on" && $r3 eq "on") {
fhem "set LEDalleRolloZu on"
} else {
fhem "set LEDalleRolloZu off"
}
}

Gruß
lo4dro

Christian K.

unread,
Jun 12, 2012, 8:15:37 AM6/12/12
to fhem-...@googlegroups.com
Danke für den tollen Wiki Eintrag! :)

2012/6/12 lo4dro <gog.g...@googlemail.com>:
> --
> To unsubscribe from this group, send email to
> fhem-users+...@googlegroups.com

lo4dro

unread,
Jun 12, 2012, 8:21:21 AM6/12/12
to fhem-...@googlegroups.com


Am Dienstag, 12. Juni 2012 14:15:37 UTC+2 schrieb Christian K.:
Danke für den tollen Wiki Eintrag! :)



Kein Thema.
Ich versuche soweit es in meiner Macht steht, das Erlernte für andere zu Verfügung zu stellen.
Das Thema notify ist schwer und kompliziert und ich hoffe das ich es mit meinen Worte anderen verständlich erklären kann.

Die UND Funktion funktioniert inzwischen auch.

lo4dro

unread,
Jun 12, 2012, 3:29:45 PM6/12/12
to fhem-...@googlegroups.com
Mir ist gerade etwas aufgefallen.

im Webfrontend habe ich folgendes eingetragen:


(R1ZU|R2ZU|R6ZU) { 
my $r1 = $value{"R1ZU"};;
my $r2 = $value{"R2ZU"};;
my $r3 = $value{"R6ZU"};;
 if ($r1 eq "on" && $r2 eq "on" && $r3 eq "on") {
    fhem "set LEDalleRolloZu on" 
 } else {
    fhem "set LEDalleRolloZu off"
 }
}


Das steht in der fhem.cfg
define alleRolloZu2 notify (R1ZU|R2ZU|R3ZU) { \\

  my $r1 = $value{"R1ZU"};;;;\\
  my $r2 = $value{"R2ZU"};;;;\\
  my $r3 = $value{"R3ZU"};;;;\\
  if($r1 eq "on" && $r2 eq "on" && $r3 eq "on") {\\

     fhem("set LEDalleRolloZu on");;;;\\
  }else {\\
     fhem("set LEDalleRolloZu off");;;;\\
  }

Gruß
lo4dro

Rudolf Koenig

unread,
Jun 13, 2012, 2:26:47 AM6/13/12
to fhem-...@googlegroups.com
> im Webfrontend habe ich folgendes eingetragen:

Das ist viel zu ungenau, ich nehme aber an, dass damit FHEMWEB mit dem "DEF"
Knopf im Detailansicht gemeint war. Das ist mein preferierter Weg fhem Objekte
zu aendern, im Gegensatz zum direkten editieren der fhem.cfg. Beim Letzteres
wird auch ein reload durchgefuehrt, was mAn viel zu viel initialisiert, bei der
"DEF" Methode wird nur ein "minimalinvasiver" modify durchgefuehrt.

Die DEF Methode spart einem auch noch das laestige ;; und \, Programmstuecke
schauen also nach "normalen" perl aus. %% und @@ ist weiterhin ein Thema, da
FHEMWEB nicht unterscheiden kann, was gemeint ist.


> Das steht in der fhem.cfg
> define alleRolloZu2 notify (R1ZU|R2ZU|R3ZU) { \\
...
Kann ich so nicht genau nachvollziehen, statt \\ sehe ich nur \
Der Rest ist klar bzw. Absicht.

lo4dro

unread,
Jun 13, 2012, 4:10:06 AM6/13/12
to fhem-...@googlegroups.com
Vielen Dank für die Info.
Ich habe den DEF knopf gemeint.
Es ist gut zu wissen, das man wenn man DEF nutzt auf der sicheren Seite ist.
Reply all
Reply to author
Forward
0 new messages