DOIF mit mehreren "AND" Bedingungen

Begonnen von lammy, 11 Dezember 2018, 10:12:49

Vorheriges Thema - Nächstes Thema

lammy

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.

l2r

Wissen ist Macht.
Ich weiß nix.
Macht nix.

CBSnake

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
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

Ellert

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.

lammy

Die Veränderung der Klammer hat es gebracht :-) Das war ja einfach!

Herzlichen Dank für die Hilfe.

VG

KernSani

Schön, dass es klappt. Themen bitte nicht schliessen, sondern [Gelöst] oder ähnliches vor's subject des ersten Post :-)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Damian

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