DOIF mit Verständnisproblem -> warum funktioniert die Ausführung nicht?

Begonnen von TommiH, 15 Oktober 2017, 22:05:05

Vorheriges Thema - Nächstes Thema

TommiH

Hai Zusammen,

ich habe eine Frage zu einem Test-Notify, warum geht Folgendes einwandfrei:

([MasterKind1] eq "aktiviert" and [MasterKind2] eq "aktiviert") (set AZ_x1 on; set AZ_x2 on) DOELSE  (set AZ_x1 off, set AZ_x2 off)

aber das hier

([MasterKind1] eq "aktiviert" and [MasterKind2] eq "aktiviert") (set AZ_x1,AZ_x2 on) DOELSE  (set AZ_x1,AZ_x2 off)

geht nicht? Laut Wiki sollte das doch so funktionieren, oder habe ich da etwas falsch verstanden?

LG
Tommi

herrmannj

- Bitte kompletten code posten, erklären was passieren soll, sagen was passiert, welche Aktoren beteiligt.
- Fehlermeldungen im log suchen und hier posten.

ABER: DOIF und notify sind was unterschiedliches ! Beide benutzen unterschiedlichen Syntax

Otto123

Hallo Tommi,

das ist sicher alles, aber kein notify.
Kannst Du bitte anstatt Fragmente ein list von deinem Gerät posten.


hermannj war schneller  8)

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

TommiH

Mist - eigene Regel gebrochen - keine Fragen nach 22 Uhr ;)

Es ist kein notify sondern ein DOIF - aber ich dachte die Syntax set A on;set B on entspricht set A,B on gilt generell.


define n_t DOIF ([MasterKind1] eq "aktiviert" and [MasterKind2] eq "aktiviert")
(set AZ.xx on)
DOELSE
(set AZ.xx off)


Ich übe nur ein bisschen mit der Syntax. Also geht hier nur für beide der SET-Befehl, getrennt mit ;

Es geht einfach darum, das 2 Dummy-Schalter (ON/OFF) - MasterKind1/MasterKind2 beide aktiv sein müssen, damit ein Schaltvorgang durchgeführt wird - ich will einen Masterschalter einbauen, damit Befehle nur ausgeführt werden, wenn auch dieser auf aktiviert steht (z.B. automatischer Rolladen morgens hoch oder LichtWecker zu bestimmter Zeit an) - wenn MasterKind1 auf inaktiv steht, dann wird nicht geweckt/der Rolladen hochgezogen.
Das war die ursprüngliche Idee und in dem Zusammenhang wollte ich 2 Aktoren zusammen auf ON schalten - das schlug in der verkürzten Form fehl.
So verständlicher?
Wie geschrieben, in der 'langen' Version geht es ja wie gedacht, ich habe nur aus dem 'Erste Schritte in FHEM' noch das im Kopf gehabt:


1. set <device1>,<device2> on
Eine alternative Schreibweise dafür ist
2. set <device1> on; set <device2> on


Version 2 geht, Version 1 anscheinend nicht.

Tommi


Otto123

Hallo Tommi,

ja DOIF ist da etwas "eigen". Es gilt in jedem Falle die Doku (commandref) im Allgemeinen und Besonderen für DOIF.

Beim DOIF ist das Komma der Trenner für komplette Kommandos, im Allgemeinen ist das Komma der Trenner zwischen Geräten innerhalb eines Kommandos.
Also überall -> set D1 on;set D2 on (in der DEF und nicht im define! Im define zwei semikolons -> set D1 on;;set D2 on
  oder -> set D1,D2 on
Im DOIF -> (set D1 on,set D2 on) oder ((set D1,D2 on)) - die Klammern sind wichtig!

Ich finde es auch blöd. :-X aber es wird seinen Grund haben.

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

TommiH

Hallo Otto,

ha - funktioniert - danke für die Aufklärung :) Okay, ich sage ja immer, Programmieren ist nicht wirklich schwierig, aber die teilweise etwas krude Syntax (bei allen Programmiersprachen) bringt einen immer wieder zum Stolpern.

Noch eine Frage:
Wenn ich mit dem ersten Taster eines 6-er Tasters den DeckenlichtDimmer zwischen 3 verschiedenen Stati hin und herschalten möchte, dann hätte ich nun gedacht, dass es so in etwa gehen müsste, aber das klappt nicht. Liege ich da völlig daneben oder ist der Weg der richtige?


define dimmi
DOIF (.*SI_PB6_Btn_01.trigger:.Short.* and [SI_DeckenlichtDi:level] = 80) (set SI_DeckenlichtDi 15)
DOELSEIF ([SI_DeckenlichtDi:level] = 30) (set SI_DeckenlichtDi 80)
DOELSEIF ([SI_DeckenlichtDi:level] = 15) (set SI_DeckenlichtDi 30)
DOELSE (set SI_DeckenlichtDi 15)


LG
Tommi

Pfriemler

edit:

geht weiter in diesem Thread.
"Änd're nie in fhem.cfg, denn das tut hier allen weh!" *** Wheezy@Raspi(3), HMWLAN+HMUART, CUL868(SlowRF) für FHT+KS+FS20, miniCUL433, Rademacher DuoFern *** "... kaum macht man es richtig, funktioniert es ..."