[Gelöst] DOIF, unverständlich warum Bedingung nicht feuert

Begonnen von Ximeng, 08 Februar 2016, 11:13:09

Vorheriges Thema - Nächstes Thema

Ximeng

Hallo zusammen,

Ich beschäftige mich seit ein paar Wochen mit FHEM und habe nun ein Problem, an dem ich nicht weiterkomme.  Hoffentlich kann mir hier jemand helfen...

Ich habe eine DOIF Abfrage und aus irgend einem Grund feuert die erste DOIF nicht immer.
Stattdessen wird die DOELSE  Bedingung aufgerufen. Aufgrund der Feuchtigkeit Messwerte dürfte dies allerdings eigentlich nicht sein (siehe angehängte Push Nachricht in der die aktuellen Werte stehen).
Das Problem tritt interessanterweise  nicht immer jedoch mehrfach die Stunde auf.

Dies ist die Push Nachricht die ich bekomme. Eigentlich hätte ich erwartet, dass die erste Bedingung des DOIF erfüllt ist...
Unbekannter Zustand bei Analyse der Feuchtigkeit im Keller

Wetter Taupunkt = 6.1%
Buero H=58%  TP=10.9%
Mitte H=56%  TP=10.7%
Waschraum H=59%  TP=10.5%



Und hier ist meine DOIF
define KL_Humidity_Analysis DOIF (\
([KL_UmweltBuero:humidity] <= 60) &&\
([KL_UmweltKLMitte:humidity] <= 60) &&\
([KL_UmweltWaschraum:humidity] <= 60)\
)\
(\
set KL_Humidity Ok\
)\
DOELSEIF\
(\
(\
   ([KL_UmweltBuero:humidity] > 60) or\
   ([KL_UmweltKLMitte:humidity] > 60) or\
   ([KL_UmweltWaschraum:humidity] > 60)\
) && \
(\
   (([KL_UmweltBuero:dewpoint] - [Wetter:dewpoint]) < 3.0) &&\
   (([KL_UmweltKLMitte:dewpoint] - [Wetter:dewpoint]) < 3.0) &&\
   (([KL_UmweltWaschraum:dewpoint] - [Wetter:dewpoint]) < 3.0) \
)\
)\
(\
set KL_Humidity High\
)\
DOELSEIF\
(\
(\
   ([KL_UmweltBuero:humidity] > 60) or\
   ([KL_UmweltKLMitte:humidity] > 60) or\
   ([KL_UmweltWaschraum:humidity] > 60) \
) && \
(\
   (([KL_UmweltBuero:dewpoint] - [Wetter:dewpoint]) >= 3.0) or\
   (([KL_UmweltKLMitte:dewpoint] - [Wetter:dewpoint]) >= 3.0) or\
   (([KL_UmweltWaschraum:dewpoint] - [Wetter:dewpoint]) >= 3.0) \
)\
)\
(\
set KL_Humidity Ventilation\
)\
DOELSEIF\
(\
(\
   ([KL_UmweltBuero:humidity] >= 65) or\
   ([KL_UmweltKLMitte:humidity] >= 65) or\
   ([KL_UmweltWaschraum:humidity] >= 65)\
) &&\
(\
   (([KL_UmweltBuero:dewpoint] - [Wetter:dewpoint]) < 3.0) &&\
   (([KL_UmweltKLMitte:dewpoint] - [Wetter:dewpoint]) < 3.0) &&\
   (([KL_UmweltWaschraum:dewpoint] - [Wetter:dewpoint]) < 3.0) \
)\
)\
(\
set KL_Humidity ElectricDehydration\
)\
DOELSE\
(\
{\
  pushover("Unbekannter Zustand ...",\
     "Unbekannter Zustand bei Analyse der Feuchtigkeit im Keller \n\n".\
     "Wetter Taupunkt = ".ReadingsVal("Wetter","dewpoint","0")."% \n".\
     "Buero H=".ReadingsVal("KL_UmweltBuero","humidity","0")."%  TP=".ReadingsVal("KL_UmweltBuero","dewpoint","0")."%\n".\
     "Mitte H=".ReadingsVal("KL_UmweltKLMitte","humidity","0")."%  TP=".ReadingsVal("KL_UmweltKLMitte","dewpoint","0")."%\n".\
     "Waschraum H=".ReadingsVal("KL_UmweltWaschraum","humidity","0")."%  TP=".ReadingsVal("KL_UmweltWaschraum","dewpoint","0")."%\n",\
   "APP1");;;;\
}\
set KL_Humidity undefined;;\
)\


Vielen Dank für die Hilfe!

Ximeng


moonsorrox

am besten du verschiebst diesen Beitrag in das DOIF Untergeordnete Board
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

MartinMuc

Dein Problem ist das der Taupunkt überall als Trigger definiert ist nur im ersten Fall nicht, vermutlich hat der Taupunkt getriggert und dann fällt er unten durch.

Cubietruck mit CUL und HM USB

Ximeng

#4
Thx, genau das war die Ursache.
Allerdings verstehe ich die Logig des Verhaltens nicht ganz. Es müsste doch trotzdem die erste Bedingung erfüllt sein...

Danke und Gruß

Damian

Zitat von: Ximeng am 10 Februar 2016, 01:10:31
Thx, genau das war die Ursache.
Allerdings verstehe ich die Logig des Verhaltens nicht ganz. Es müsste doch trotzdem die erste Bedingung erfüllt sein...

Danke und Gruß

Auszug aus der Cammandref:

ZitatDie Angaben werden immer von links nach rechts abgearbeitet. Zu beachten ist, dass nur die Bedingungen überprüft werden, die zum ausgelösten Event das dazughörige Device bzw. die dazugehörige Triggerzeit beinhalten. Kommt ein Device in mehreren Bedingungen vor, so wird immer nur ein Kommando ausgeführt, und zwar das erste, für das die dazugehörige Bedingung in der abgearbeiteten Reihenfolge wahr ist.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Ximeng

Vielen Dank, das hatte ich irgendwie nicht so interpretiert...!

Ich habe nun einfach ein "([Wetter:dewpoint] < 100.0)" in die erste Bedingung eingebaut...

Gruß