FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Hifly am 15 November 2016, 09:55:36

Titel: versuche UND-Verknüpfung zu verstehen...
Beitrag von: Hifly am 15 November 2016, 09:55:36
Hallo erstmal,
Ich als Anfänger habe Verständnissprobleme bei der UND-Verknüpfung.
Das ersten Schritte Howto habe ich durch und einfache Sache habe ich auch schon zum laufen bekommen.

Aus dem Howto habe ich noch folgende devices:
define mySchalter1 dummy
define mySchalter2 dummy
define mylampe2 dummy

Damit wollte ich für mich nur zur Verständigung ein notify basteln was mylampe2 einschaltet wenn mySchalter1 UND mySchalter2 ON sind.

Hierzu habe ich ein Beispiel aus dem Anfänger PDF(Seite39) umgeändert und über DEF ein in das notify kopiert:

mySchalter1 { if ( Value("mySchalter1") eq "on" &&  Value("mySchalter2") eq "on") {fhem("set mylampe2 on")} }

Aber mylampe2 geht nicht an, wo ist mein Fehler?
Danke und Gruß Dennis



Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: marvin78 am 15 November 2016, 09:59:07
Bitte Codetags verwenden! Bitte die angepinnten Beiträge lesen!

Willst du wirklich ein UND oder ein ODER realisieren? Ist denn mySchalter2 zu dem Zeitpunkt, wenn das notify für mySchalter1 auslöst wirklich an?
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Hifly am 15 November 2016, 10:18:21
Oder ist klar, ich möchte definitiv ein UND!
Ja beide schalter sind an und mylampe2 bleibt aus
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: marvin78 am 15 November 2016, 10:22:22
Sind sie an oder wird Schalter1 eingeschaltet? notify reagiert auf Events. Also in deinem Fall genau dann, wenn du schalter1 an oder aus schaltest.

Bitte, wie in den angepinnten Beiträgen beschrieben, ein list von allen beteiligten Devices (ALLE, auch notify) machen und hier posten
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Hifly am 15 November 2016, 10:53:12
Also die Schalter schalte ich über webcmd on:off (mehrmals alle möglichen kombinationen)
Im eventMonitor steht:
2016-11-15 10:40:50 dummy mySchalter1 on
2016-11-15 10:40:51 dummy mySchalter2 on
2016-11-15 10:40:54 dummy mySchalter1 off
2016-11-15 10:40:56 dummy mySchalter2 off

In meinem Notify steht unter:
Probably associated with
mySchalter1   off    dummy
mySchalter2   off    dummy
mylampe2   off    dummy

Mit einem Schalter geht mylampe2 an:
mySchalter1 { if ( Value("mySchalter1") eq "on") {fhem("set mylampe2 on")} }

Hoffe das hilft weiter,
ich lerne ja auch in Forensachen gerne noch dazu  :)


Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: marvin78 am 15 November 2016, 10:58:15
Dann solltest du die angepinnten Beiträge lesen. Ich habe um lists der Devices gebeten!

list Device

Das Ergebnis jeweils hier posten. Nicht so schwer.
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: JensS am 15 November 2016, 11:07:05
Hallo Dennis,

für den Fall wäre DOIF passend:

http://fhem.de/commandref_DE.html#DOIF_Lesbarkeit_der_Definitionen

Gruß Jens
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Benni am 15 November 2016, 11:43:46
Zitat von: dirigent am 15 November 2016, 11:07:05
für den Fall wäre DOIF passend:

Du hast aber schon verstanden, dass der TE explizit versucht ein notify zu verstehen.

Dass es natürlich mehrere Wege gibt, den Anwendungsfall zu lösen, steht dabei außer Frage.
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Otto123 am 15 November 2016, 11:53:13
Hallo Hifly,

Zitat2016-11-15 10:40:50 dummy mySchalter1 on
2016-11-15 10:40:51 dummy mySchalter2 on
Es läuft alles richtig, zum Zeitpunkt wo Du Schalter1 einschaltest ist Schalter 2 noch off, Wenn Du Schalter2 on schaltest ist die "Eule für das notify schon weggeflogen"  ;D

Wenn Du erst Schalter2 schaltest wird das notify funktionieren, aber das ist nicht was Du willst.
mySchalter.* { if ( Value("mySchalter1") eq "on" &&  Value("mySchalter2") eq "on") {fhem("set mylampe2 on")} }
Wird mit Deiner Schaltreihenfolge auch funktionieren. Ist aber etwas komisch gelöst.

Man könnte es auch so machen:
mySchalter1:on|mySchalter2:on { if ( Value("mySchalter1") eq "on" &&  Value("mySchalter2") eq "on") {fhem("set mylampe2 on")} }

Dann triggert das notify bei beiden Schaltern explizit auf on.
Wenn Du sie auch wieder ausschalten willst, wenn beide Schalter aus sind, wäre das eine Idee
mySchalter1:(on|off)|mySchalter2:(on|off) { if ( Value("mySchalter1") eq $EVENT &&  Value("mySchalter2") eq $EVENT) {fhem("set mylampe2 $EVENT")} }


Gruß Otto
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Beta-User am 15 November 2016, 11:55:12
...sorry, Doppelpost :-X
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Hifly am 15 November 2016, 12:48:18
Danke erstmal.
Bin gerade auf der Arbeit und kann deswegen jetzt leider nicht rumprobieren.
Wofür steht denn das mySchalter.* bzw mySchalter1 ganz am Anfang des notifys?
Was drücke ich dadurch aus?
Das .* in diesem Fall für 1 oder 2 steht ist mir klar.
Ich habe auch schon daran gedacht das sich doif wohl besser eignen würde.
Aber mir gehts erstmal ums Verständnis. Ich möchte ja nicht später wegen jedem Furz das Forum belästigen.  ;)

Trotzdem, wie müsste denn das doif aussehen?

Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Damian am 15 November 2016, 13:01:32
Zitat von: Hifly am 15 November 2016, 12:48:18
Danke erstmal.
Bin gerade auf der Arbeit und kann deswegen jetzt leider nicht rumprobieren.
Wofür steht denn das mySchalter.* bzw mySchalter1 ganz am Anfang des notifys?
Was drücke ich dadurch aus?
Das .* in diesem Fall für 1 oder 2 steht ist mir klar.
Ich habe auch schon daran gedacht das sich doif wohl besser eignen würde.
Aber mir gehts erstmal ums Verständnis. Ich möchte ja nicht später wegen jedem Furz das Forum belästigen.  ;)

Trotzdem, wie müsste denn das doif aussehen?

Nach dem Motto wer die Lampe anmacht, sollte auch definieren wann sie wieder ausgehen soll. Wann die ausgehen sollte, hast du noch nicht gesagt.

Vielen Nicht-Programmieren ist nicht bewusst, was die Negation von (a und b) ist, das wird vermutlich die Bedingung bei dir zum Ausschalten sein.

Natürlich kann man dieses Problem, wenn es klar definiert ist, mit notify lösen, da du aber jetzt nach der DOIF-Lösung fragst:

define di DOIF (Schalter1 eq "on" and Schalter2 eq "on") (set lampe2 on) DOELSE (set lampe2 off)


Dieses Bespiel beinhaltet auch gleich das Ausschalten der Lampe. Im übrigen ist die Negation von (a and b) = not (a) or not (b).

Für welche Lösung du dich schlussendlich entscheidest, sei dir überlassen.

Gruß

Damian
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Beta-User am 15 November 2016, 13:03:29
Zitat von: Hifly am 15 November 2016, 12:48:18
Wofür steht denn das mySchalter.* bzw mySchalter1 ganz am Anfang des notifys?
Was drücke ich dadurch aus?
Das .* in diesem Fall für 1 oder 2 steht ist mir klar.
Genau das; es wird ausgelöst, wenn einer der Auslöser triggert...
Zitat von: Hifly am 15 November 2016, 12:48:18
Ich habe auch schon daran gedacht das sich doif wohl besser eignen würde.
Aber mir gehts erstmal ums Verständnis. Ich möchte ja nicht später wegen jedem Furz das Forum belästigen.  ;)

Trotzdem, wie müsste denn das doif aussehen?
Danke für Deinen Post!
Ich habe auch so ein paar "einfache" DOIFs, die aber leider nicht immer tun, was ich von Ihnen erwarte. Durch Deinen Post habe ich mal wieder darüber nachgedacht, wie man das ggf. auch anders lösen könnte, und dabei auch mal wieder so hilfreiche Dinge gelesen wie den "Trick der Woche" im Wiki. Da habe ich die von Otto123 angesprochene Lösung für "meine" DOIFs gefunden und werde die demnächst durch notify ersetzten.

Grund: DOIF ist sehr mächtig, hat aber extrem viele Optionen und widerspricht daher eigentlich meinem persönlichen Anspruch, die Dinge tendenziell eher einfach zu gestalten, also z.B. ein at zu verwenden, wenn es eine Schaltuhr sein soll oder eben ein notify, wenn auf Ereignisse zu reagieren ist. Der Umfang der DOIF-Threads spricht dazu Bände.

Meine Empfehlung daher: versuche lieber, das mit regEx und perl in den Griff zu bekommen. Kannst Du das nämlich mal, wirst Du eher die Ergebnisse haben, die Du erwartest und die Dinge reagieren auch bei Änderung der Optionen weiter so wie erwartet (habe ich bei DOIF den Verdacht, dass das anders ist).

Gruß, Beta-User
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: justme1968 am 15 November 2016, 13:15:06
um die verwirrung komplett zu zu machen werfe ich mal structure in den raum. das ist nämlich deutlich einfacher zu erweitern.
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: marvin78 am 15 November 2016, 13:18:47
Es gibt natürlich viele Alternativen. Aber der TE versucht wohl (hoffentlich) die Grundlagen zu verstehen. Die Reihenfolge von Events gehört dazu und das ist hier wohl das Problem.
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: CoolTux am 15 November 2016, 13:37:33
Zitat von: Otto123 am 15 November 2016, 11:53:13
Hallo Hifly,
Es läuft alles richtig, zum Zeitpunkt wo Du Schalter1 einschaltest ist Schalter 2 noch off, Wenn Du Schalter2 on schaltest ist die "Eule für das notify schon weggeflogen"  ;D

Wenn Du erst Schalter2 schaltest wird das notify funktionieren, aber das ist nicht was Du willst.
mySchalter.* { if ( Value("mySchalter1") eq "on" &&  Value("mySchalter2") eq "on") {fhem("set mylampe2 on")} }
Wird mit Deiner Schaltreihenfolge auch funktionieren. Ist aber etwas komisch gelöst.

Man könnte es auch so machen:
mySchalter1:on|mySchalter2:on { if ( Value("mySchalter1") eq "on" &&  Value("mySchalter2") eq "on") {fhem("set mylampe2 on")} }

Dann triggert das notify bei beiden Schaltern explizit auf on.
Wenn Du sie auch wieder ausschalten willst, wenn beide Schalter aus sind, wäre das eine Idee
mySchalter1:(on|off)|mySchalter2:(on|off) { if ( Value("mySchalter1") eq $EVENT &&  Value("mySchalter2") eq $EVENT) {fhem("set mylampe2 $EVENT")} }


Gruß Otto

mySchalter[1-2].(on|off) { if ( Value("mySchalter1") eq $EVENT &&  Value("mySchalter2") eq $EVENT) {fhem("set mylampe2 $EVENT")} }


Sollte auch gehen. Aber wie gesagt, es gibt Millionen Wege.
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: JensS am 15 November 2016, 14:02:33
 8) Man kann es auch so lösen:
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Otto123 am 15 November 2016, 15:33:00
Zitat von: CoolTux am 15 November 2016, 13:37:33
mySchalter[1-2].(on|off) { if ( Value("mySchalter1") eq $EVENT &&  Value("mySchalter2") eq $EVENT) {fhem("set mylampe2 $EVENT")} }


Sollte auch gehen. Aber wie gesagt, es gibt Millionen Wege.
Naja irgendwann kann ich das dann auch mal  ;)
Bei AUDI gab es da einen lustigen Begriff: KVP - Kontinuierlicher Verbesserungs Prozess.

Gruß Otto
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Ellert am 15 November 2016, 15:41:22
Zitat von: dirigent am 15 November 2016, 14:02:33
8) Man kann es auch so lösen:

Warum Leuchtet die Lampe, wenn die Schalter offen sind  ???
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Otto123 am 15 November 2016, 15:49:30
Zitat von: Ellert am 15 November 2016, 15:41:22
Warum Leuchtet die Lampe, wenn die Schalter offen sind  ???
Weil die Batterie fehlt  ;D
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Beta-User am 15 November 2016, 15:50:22
Zitat von: Ellert am 15 November 2016, 15:41:22
Warum Leuchtet die Lampe, wenn die Schalter offen sind  ???

oder es ist sowas wie der berüchtigte Fischer-Luft-Dübel oder ein DOIF-Kabel ;).

BTW: Wo ist das Popcorn?
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Damian am 15 November 2016, 16:25:07
Zitat von: CoolTux am 15 November 2016, 13:37:33
mySchalter[1-2].(on|off) { if ( Value("mySchalter1") eq $EVENT &&  Value("mySchalter2") eq $EVENT) {fhem("set mylampe2 $EVENT")} }


Sollte auch gehen. Aber wie gesagt, es gibt Millionen Wege.

Bis auf die Tatsache, dass hier die Ausschaltbedingung nicht das Gegenteil der Einschaltbedingung ist (also nicht das Gleiche wie das UND-Lampen-Bild). Aber da er nicht gesagt hat, wann die Lampe ausgehen soll, kann man hier munter weitere Vorschläge machen ;)
Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: Hifly am 16 November 2016, 00:32:08
Also erstmal vielen Dank für die ganzen Antworten.
Durch die ganzen Beispiele bin ich jetzt ein ganzes Stück weiter gekommen wie so ein notify tickt ;D
Das mit dem ausschalten war mir egal... Bei mir hat ja gar nichts geschaltet, und war eh nur zum Versändnis.

Allerdings funktioniert es jetzt, aber ich kann nicht nachvollziehen warum.
Nachdem ich ein Beispiel von euch kopiert und in mein notify eingefügt hatte (was auch funktioniert hatte), hat meines danach plötzlich auch funktioniert.  Keine Ahnung was da los war.
Auf jeden Fall gehts jetzt und ich habe trotzdem was dazu gelernt  :)


Titel: Antw:versuche UND-Verknüpfung zu verstehen...
Beitrag von: marvin78 am 16 November 2016, 06:50:50
Ich sage es dann nochmal: Es liegt an der Reihenfolge der Events. Ein notify reagiert nur auf ein EVENT und wenn dann der Status des anderen Schalters noch nicht den gewünschten hat, wird bei deinem Filter auch nichts geschaltet.