FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: lammy am 11 Dezember 2018, 10:12:49

Titel: DOIF mit mehreren "AND" Bedingungen
Beitrag von: lammy am 11 Dezember 2018, 10:12:49
Hi Leute,

ich bin am Verzweifeln, ich möchte gerne mehrere AND Abfragen in eine DOIF Bedingung rein schmeißen.
Anbei mein Beispiel was ich vorhabe. Leider wirft die Bedingung immer CMD4 anstelle von CMD1 aus obwohl die Werte die in dem DOIF Gerät angezeigt werden für CMD1 sprechen.
(([harmony_wohnzimmer:currentActivity] eq "Filme gucken") and (([wettersta_helligkeit__lux:lux] gt 1500) and ([wettersta_sonnenstand_elevation:state] le 20)))
  (set zentral_rollo_tv value 100)
  (set fassadenstg_1_8_automatik_funktion_sperren_freigeben on)
  (set zentral_beleucht_wohn.esszimmer off)
  (set bewegung_eg.wohnzimmer_block.praesenz_sperren.freigeben sperren)
DOELSEIF ([harmony_wohnzimmer:currentActivity] eq "Filme gucken" or [harmony_wohnzimmer:currentActivity] eq "Fernsehen")
  (set zentral_beleucht_wohn.esszimmer off)
  (set bewegung_eg.wohnzimmer_block.praesenz_sperren.freigeben sperren)
DOELSEIF ([harmony_wohnzimmer:currentActivity] eq "stopping Filme gucken" or [harmony_wohnzimmer:currentActivity] eq "stopping Musik hoeren" or [harmony_wohnzimmer:currentActivity] eq "stopping Fernsehen")
  (set bewegung_eg.wohnzimmer_block.praesenz_sperren.freigeben freigeben)
DOELSE
  ({
  })


Wenn ich den CMD1 Befehl um ein AND verkürze klappt alles wunderbar :(

Ich hoffe Ihr könnt mir helfen.
Titel: Antw:DOIF mit mehreren "AND" Bedingungen
Beitrag von: l2r am 11 Dezember 2018, 10:23:22
hi,

probier mal das Attribut checkall aus:

https://fhem.de/commandref_DE.html#DOIF_checkall (https://fhem.de/commandref_DE.html#DOIF_checkall)


Gruß Michael
Titel: Antw:DOIF mit mehreren "AND" Bedingungen
Beitrag von: CBSnake am 11 Dezember 2018, 10:27:45
Hi,

warum die vielen Klammern?



(
[harmony_wohnzimmer:currentActivity] eq "Filme gucken"
and [wettersta_helligkeit__lux:lux] gt 1500
and [wettersta_sonnenstand_elevation:state] le 20
)
  (set zentral_rollo_tv value 100)
  (set fassadenstg_1_8_automatik_funktion_sperren_freigeben on)
  (set zentral_beleucht_wohn.esszimmer off)
  (set bewegung_eg.wohnzimmer_block.praesenz_sperren.freigeben sperren)
DOELSEIF ([harmony_wohnzimmer:currentActivity] eq "Filme gucken" or [harmony_wohnzimmer:currentActivity] eq "Fernsehen")
  (set zentral_beleucht_wohn.esszimmer off)
  (set bewegung_eg.wohnzimmer_block.praesenz_sperren.freigeben sperren)
DOELSEIF ([harmony_wohnzimmer:currentActivity] eq "stopping Filme gucken" or [harmony_wohnzimmer:currentActivity] eq "stopping Musik hoeren" or [harmony_wohnzimmer:currentActivity] eq "stopping Fernsehen")
  (set bewegung_eg.wohnzimmer_block.praesenz_sperren.freigeben freigeben)
DOELSE
  ({
  })



bei reinen AND nutze ich keine Klammern und es klappt wie es soll

Grüße
Achim
Titel: Antw:DOIF mit mehreren "AND" Bedingungen
Beitrag von: Ellert am 11 Dezember 2018, 11:16:34
Zitat von: lammy am 11 Dezember 2018, 10:12:49
Leider wirft die Bedingung immer CMD4 anstelle von CMD1 aus obwohl die Werte die in dem DOIF Gerät angezeigt werden für CMD1 sprechen.
Du solltest die richtigen Operatoren für Zeichenkettenvergleiche und numerische Vergleiche verwenden, https://commandref.fhem.de/commandref_DE.html#DOIF_Ereignissteuerung
Sonst gibts unerwartete Ergebnisse, probier mal {99 gt 100} in der Befehlszeile.
Titel: Antw:DOIF mit mehreren "AND" Bedingungen
Beitrag von: lammy am 11 Dezember 2018, 11:28:58
Die Veränderung der Klammer hat es gebracht :-) Das war ja einfach!

Herzlichen Dank für die Hilfe.

VG
Titel: Antw:DOIF mit mehreren "AND" Bedingungen
Beitrag von: KernSani am 11 Dezember 2018, 21:41:54
Schön, dass es klappt. Themen bitte nicht schliessen, sondern [Gelöst] oder ähnliches vor's subject des ersten Post :-)
Titel: Antw:DOIF mit mehreren "AND" Bedingungen
Beitrag von: Damian am 11 Dezember 2018, 22:31:35
Zahlen dringend mit <,> vergleichen nicht mit lt bzw. gt. Das funktioniert z. B. nicht: 99 gt 100 ist, wie Ellert schon angedeutet hat, wahr. Das hat etwas mit lexikografischer Reihenfolge (wie im Telefonbuch) zu tun, denn die Zeichenkette "100" ist kleiner als "99".