Warum erfolgt hier eine Ansage, obwohl die Bedingung nicht erfüllt ist?

Begonnen von Invers, 28 Februar 2016, 00:51:33

Vorheriges Thema - Nächstes Thema

Invers

Irgendwie habe ich den Durchblick verloren und vom Lesen schon Augenkrebs.

Ich habe ein DOIF, welches testweise eine Ansage machen soll, wenn die Luftfeuchtigkeit unter 5 Prozent liegt. Die Ansage kommt aber, wenn die Bedingung nicht erfüllt ist.

(["^TMP_:humidity"] <5) (say Batterie leer) DOELSE ()

Die Thermometer beginnen alle mit TMP_
Ich bitte um einen kleinen Hinweis, damit ich das verstehen kann.

Hier noch listg
Internals:
   CFGFN
   DEF        (["^TMP_:humidity"] <5) (say Batterie leer) DOELSE ()
   NAME       DI_Batterie_Thermometer
   NR         370
   NTFY_ORDER 50-DI_Batterie_Thermometer
   STATE      initialized
   TYPE       DOIF
   Readings:
     2016-02-28 00:49:16   state           initialized
   Condition:
     0          EventDoIf('^TMP_',$hash,'humidity',0) <5
   Devices:
   Do:
     0:
       0          say Batterie leer
     1:
       0
   Helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   Itimer:
   Regexp:
     0:
       0          ^TMP_:humidity
     All:
       0          ^TMP_:humidity
   State:
   Timerfunc:
Attributes:
   do         always
   room       1


Besten Dank im Voraus.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

CoolTux

Was mir auffällt ist das zwischen dem mathematischen Operator und der Zahl kein Leerzeichen ist. Vielleicht hilft das schon.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Ellert

Mit ["^TMP_:humidity"] fragst Du nach einem Event, die Antwort liefert nur wahr oder falsch, daher führt der nachfolgende Vergleich "< 5" zu keinem sinnvollen Ergebnis.

CoolTux

In der Tat steht es auch so in der Commandref. Danke Dir Ellert für den guten Hinweis. Dachte man kann das auch auswerten. Wieder was gelernt.
Wird er wohl noch ein and ranhängen müssen mit der Abfrage.

Könnte es gehen wenn er die Abfrage auf den Event macht?


and $event < 5


Denn laut Doku

Zitat

In der Bedingung und im Ausführungsteil werden die Schlüsselwörter $DEVICE durch das aktuelle Device, $EVENT durch die passende Eventzeile, $EVENTS kommagetrennt durch alle Eventzeilen des Triggers ersetzt.

Entsprechend können Perl-Variablen in der DOIF-Bedingung ausgewertet werden, sie werden in Kleinbuchstaben geschrieben. Sie lauten: $device, $event, $events


Und vielleicht statt DOELSE ein attr doalways




Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Invers

Das do allways war schon gesetzt.
Ich habe nun eure Vorschläge probiert, aber das Ergebnis ist leider gleich. Der Vergleich schewint so auch nciht zu funktionieren, obwohl eure Erläterungen einleuchtend sind.
Hier noch einmal ein aktuelles List:
Internals:
   CFGFN
   DEF        (["^TMP_:humidity"] and $event < 50) (say Batterie leer)
   NAME       DI_Batterie_Thermometer
   NR         370
   NTFY_ORDER 50-DI_Batterie_Thermometer
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2016-02-28 09:10:50   Device          TMP_SZ
     2016-02-28 09:10:50   cmd_event       TMP_SZ
     2016-02-28 09:10:50   cmd_nr          1
     2016-02-28 09:10:50   matched_event_c1_1 humidity: 59.0
     2016-02-28 09:10:50   state           cmd_1
   Condition:
     0          EventDoIf('^TMP_',$hash,'humidity',0) and $event < 50
   Devices:
   Do:
     0:
       0          say Batterie leer
   Helper:
     event      humidity: 59.0
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   TMP_SZ
     timerevent humidity: 59.0
     triggerDev TMP_SZ
     timerevents:
       T: 17.5 H: 59.0
       humidity: 59.0
     triggerEvents:
       T: 17.5 H: 59.0
       humidity: 59.0
   Internals:
   Itimer:
   Readings:
   Regexp:
     0:
       0          ^TMP_:humidity
     All:
       0          ^TMP_:humidity
   State:
   Timerfunc:
   Trigger:
Attributes:
   do         always
   room       1


Habt ihr noch eine Idee?
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

CoolTux

Schau mal, da steht genau wie der event aus schaut. Matched Event humidity: 59.0
So kann man das also nicht auswerten. Schau mal das du was findest das nur Zählen beachtet werden oder Du das humidity beim prüfen von Event weg bekommst.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

Zitat von: CoolTux am 28 Februar 2016, 09:21:57
Schau mal, da steht genau wie der event aus schaut. Matched Event humidity: 59.0
So kann man das also nicht auswerten. Schau mal das du was findest das nur Zählen beachtet werden oder Du das humidity beim prüfen von Event weg bekommst.



Grüße

(["^TMP_:humidity"] and [$DEVICE:humidity] < 50) (say Batterie leer)

Gruß

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

CoolTux

Vielen Dank Damian für Deine Unterstützung.
Das Thema hatte mich auch Interessiert. So geht das also.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Invers

Danke, Damian.
Manchmal denke ich, ich sollte mir lieber Lego kaufen. :-)
Mein Trost ist, dass auch die Anderen nicht drauf gekommen sind. Da fühlt man sich nicht gleich ganz so dämlich. Lacht.

Damit der Computer mich nun nicht ununterbrochen vollquatscht, wenn eine Batterie leer ist, habe ich mal noch ein waitsame angefügt.

Meine TMP-Fühler können zwar ihren Batteriezustand melden, aber das tun sie nicht rechtzeitig. Die zeigen zuerst tagelang temperature -50 und humidity 0.1 an, bevor die Batteriemeldung kommt. Da ist das natürlich relativ sinnfrei.
Ich fange das Problem nun mit diesem DOIF ab, natürlich erst nach dem Einsetzen des richtigen Wertes 0.1.

Trotzdem danke ich natürlich ALLEN für die Unterstützung.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

CoolTux

Man lernt nie aus und immer dazu. Egal wie lange man das schon macht. Hihi.
Das wäre vielleicht ein gutes Beispiel für die Commandref, oder?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net