versuche UND-Verknüpfung zu verstehen...

Begonnen von Hifly, 15 November 2016, 09:55:36

Vorheriges Thema - Nächstes Thema

Hifly

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




marvin78

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?

Hifly

Oder ist klar, ich möchte definitiv ein UND!
Ja beide schalter sind an und mylampe2 bleibt aus

marvin78

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

Hifly

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  :)



marvin78

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.

JensS

Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Benni

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.

Otto123

#8
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

#9
...sorry, Doppelpost :-X
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Hifly

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?


Damian

#11
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Beta-User

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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

justme1968

um die verwirrung komplett zu zu machen werfe ich mal structure in den raum. das ist nämlich deutlich einfacher zu erweitern.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

marvin78

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.