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.
Was mir auffällt ist das zwischen dem mathematischen Operator und der Zahl kein Leerzeichen ist. Vielleicht hilft das schon.
Grüße
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.
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
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?
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
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
Vielen Dank Damian für Deine Unterstützung.
Das Thema hatte mich auch Interessiert. So geht das also.
Grüße
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.
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?