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.
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
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
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.
Die Veränderung der Klammer hat es gebracht :-) Das war ja einfach!
Herzlichen Dank für die Hilfe.
VG
Schön, dass es klappt. Themen bitte nicht schliessen, sondern [Gelöst] oder ähnliches vor's subject des ersten Post :-)
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".