FHEM Forum

FHEM => Automatisierung => Thema gestartet von: hmtec99 am 19 September 2015, 14:22:25

Titel: notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 14:22:25
Hallo Leute, habe schon einige Zeit in Fehlersuche und Studium Commandref investiert (falls jemand schon beim Titel genervt ist) - Forenanfragen stelle
ich immer gaaanz am Schluß!

Hintergrund: Ein umgebauter LaCrosse Sensor (LaCrosse_0C) reagiert auf Wasseranstieg bzw. Wasserkontakt im Grundrohr (funktioniert soweit siehe
Log) und soll daraufhin über ein Notify (ndWS_GR) einen Dummy (dWS_GR) setzen.

Problem: Dummy wird nicht gesetzt - siehe Screenshots. Ich gehe davon aus das das Notify schon nicht funktioniert (manuelles Triggern des Dummys
funktioniert).
Titel: Antw:notify setzt dummy nicht
Beitrag von: igami am 19 September 2015, 14:31:02
Welche Abschnitte der Commandref hast du denn studiert?

Grüße
Igami
Du benutzt in deiner IF Abfrage die gleiche regexp wie für das notify, anstatt das Reading auszulesen. Das erste Beispiel in der Commandref zu IF ist ziemlich genau das was du vor hast
Edit: Die regexp von deinem notify löst auch nicht aus, da fehlt das .*.
Titel: Antw:notify setzt dummy nicht
Beitrag von: justme1968 am 19 September 2015, 14:32:43
wie soll denn dein notify matchen wenn du dort temperature angibst aber dein device T: (vermutlich state) events produziert.

gruss
  andre

du würdest jedem helfen wenn du keine screenshots sondern text in einem code block postest.
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 14:33:18
Notify / Dummy / IF und alles was ich unter Google gefunden habe (was leider nicht immer zielführend ist.)
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 14:44:34
Habe den Eventlog - Screenshot durch das Log des Sensors ersetzt -> auf welche Meldungen reagiert den das Notify grundsätzlich?
(Meldungen im Eventlog unterscheiden sich von denen im Log)

Log - 2015-09-19_14:25:59 LaCrosse_0C temperature: 31.9
Eventlog - 2015-09-19 14:43:08.982 LaCrosse LaCrosse_0C T: 31.8
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 15:23:45
Wieso sind dann diese Ausdrücke (in diesem Fall temperature) im RegExp Wizard auswählbar (wäre das dann nicht sinnlos?)

Ist den die DEF grundsätzlich richtig?

LaCrosse_0C:temperature IF ([LaCrosse_0C:temperature:.*] > 28.0) (set dWS_GR Alarm)) ELSE (set dWS_GR OK)

bzw.

define ndWS_GR notify LaCrosse_0C:temperature IF ([LaCrosse_0C:temperature:.*] > 28.0) (set dWS_GR Alarm)) ELSE (set dWS_GR OK)


Gäbe es einen Unterschied zwischen


LaCrosse_0C:temperature IF ([LaCrosse_0C:temperature:.*] > 28.0) (set dWS_GR Alarm)) ELSE (set dWS_GR OK)

oder

LaCrosse_0C:temperature IF ([LaCrosse_0C:temperature] > 28.0) (set dWS_GR Alarm)) ELSE (set dWS_GR OK)

oder

LaCrosse_0C:temperature:.* IF ([LaCrosse_0C:temperature:.*] > 28.0) (set dWS_GR Alarm)) ELSE (set dWS_GR OK)



Hier nochmal der Code von Notify / Dummy:

define ndWS_GR notify LaCrosse_0C:temperature IF ([LaCrosse_0C:temperature:.*] > 28.0) (set dWS_GR Alarm)) ELSE (set dWS_GR OK)

define dWS_GR dummy
attr dWS_GR alias Wasserstand Grundrohr
attr dWS_GR devStateIcon Alarm:r_c undefined:r_ho OK:r_o
attr dWS_GR room Alarm
Titel: Antw:notify setzt dummy nicht
Beitrag von: justme1968 am 19 September 2015, 15:25:46
du verwendest temperature. im editor sehr ich temperature:.* was dann auch richtig wäre.
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 15:34:29
das heißt, meine Konfiguration wäre soweit eigentlich korrekt ?
Titel: Antw:notify setzt dummy nicht
Beitrag von: justme1968 am 19 September 2015, 15:35:28
das heißt dein notify ist falsch
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 15:36:36
bin grad verwirrt. das heißt dann?
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 15:59:36
LaCrosse_0C:temperature:.* IF ([LaCrosse_0C:temperature:.*] > 28.0) (set dWS_GR Alarm)) ELSE (set dWS_GR OK)

wäre dann korrekt?

Im Lacrosse Modul gibt es kein GET - gibt einen universellen Befehl um den (letzten) State oder das (letzte) Reading eines Devices über die
Kommandobox (in Echtzeit) abzufragen (ohne sich durchzuklicken)?

Werden die Werte die ein Sensor zwischen event-on-change-reading bzw. event-on-update-reading (jeweils ohne Änderung) liefert von FHEM
ignoriert (oder nur nicht geloggt)?

event-min-interval state:600,battery:3600,temperature:300,humidity:300
event-on-change-reading state
event-on-update-reading .*
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 16:06:55
wenn ich

LaCrosse_0C:temperature IF ([LaCrosse_0C:temperature:.*] > 28.0) (set dWS_GR Alarm)) ELSE (set dWS_GR OK)

ändere in

LaCrosse_0C:temperature:.* IF ([LaCrosse_0C:temperature:.*] > 28.0) (set dWS_GR Alarm)) ELSE (set dWS_GR OK)

erhalte ich als Ergebnis im Log

2015.09.19 16:04:16.579 3: ndWS_GR return value: IF: unknown expression format: .*
Titel: Antw:notify setzt dummy nicht
Beitrag von: Thorsten Pferdekaemper am 19 September 2015, 16:07:38
Hi,
vielleicht ist es auch nur die Anzahl der Klammern. Ich zähle eine ")" mehr als "(".
...aber meine Augen sind auch nicht mehr das, was sie mal waren.
Gruß,
   Thorsten
Titel: Antw:notify setzt dummy nicht
Beitrag von: igami am 19 September 2015, 16:22:03
notify wertet das event aus, daher muss hinter das temperature ein .* weil das event ja noch weiter geht. mit [<device>:<reading>] erhälst du den Wert des Readings hier ist das .* falsch, ist auch das, was das IF als Fehler ausgibt.
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 16:33:39
und nun nochmal als ganzer Satz!  :D

define ndWS_GR notify LaCrosse_0C:temperature:.* IF ([LaCrosse_0C:temperature:.*] > 28.0) (set dWS_GR Alarm) ELSE (set dWS_GR OK)

richtig oder falsch? (und wenn falsch, wie richtig?)

Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 16:39:21
habe deine Antwort nochmal  langsam durchgelesen...

als genau andersrum, richtig?

define ndWS_GR notify LaCrosse_0C:temperature:.* IF ([LaCrosse_0C:temperature] > 28.0) (set dWS_GR Alarm) ELSE (set dWS_GR OK)
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 19 September 2015, 16:43:19
Ich flipp aus - es funzt (wenn auch nur mit Browser Reload) DANKE.  ;D
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 20 September 2015, 11:39:23
eine Frage hätte ich da noch...

ich habe nach dem gleichen Schema eine Batteriewarnung erstellt (für alle batteriebetriebenen Sensoren / Aktoren). Dabei habe ich eine Problem
mit den Wildcards. Geht das eventuell mit IF gar nicht oder wie muß das aussehen?

define ndBattery_Alarm notify .*:[Bb]attery.* IF ([.*:[Bb]attery] = "low") (set dBattery_Alarm low)

2015.09.20 11:31:40.196 3: ndBattery_Alarm return value: IF: unknown Device: .*
2015.09.20 11:31:40.192 4: ndBattery_Alarm exec IF ([.*:[Bb]attery] = "low") (set dBattery_Alarm low)

Edit: Habe das [Bb] entfernt, da meine Sensoren sowieso nur battery verwenden. Löst das Problem allerdings nicht.

Gibt es an der Stelle einen Platzhalter für das Device, um nicht für jedes Device eine notify zu definieren, das denselben dummy setzen soll
(egal welcher Sensor battery low sendet)?
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 20 September 2015, 12:33:26
noch was zum Wasserstandsmelder mit umgebauten Lacrosse (Technoline) Sensoren.

das (wirklich) funktionierende notify sieht dann so aus (das sich value und reading namentlich unterscheiden (liegt das am LaCrosse Modul?)).

define ndWS_GR notify LaCrosse_0C:T:.* IF ([LaCrosse_0C:temperature] > 28.0) (set dWS_GR Alarm) ELSE (set dWS_GR OK)

oder DEF

LaCrosse_0C:T:.* IF ([LaCrosse_0C:temperature] > 28.0) (set dWS_GR Alarm) ELSE (set dWS_GR OK)

Titel: Antw:notify setzt dummy nicht
Beitrag von: eppi am 20 September 2015, 12:37:57
Zitat von: hmtec99 am 20 September 2015, 11:39:23
eine Frage hätte ich da noch...

ich habe nach dem gleichen Schema eine Batteriewarnung erstellt (für alle batteriebetriebenen Sensoren / Aktoren). Dabei habe ich eine Problem
mit den Wildcards. Geht das eventuell mit IF gar nicht oder wie muß das aussehen?

define ndBattery_Alarm notify .*:[Bb]attery.* IF ([.*:[Bb]attery] = "low") (set dBattery_Alarm low)

2015.09.20 11:31:40.196 3: ndBattery_Alarm return value: IF: unknown Device: .*
2015.09.20 11:31:40.192 4: ndBattery_Alarm exec IF ([.*:[Bb]attery] = "low") (set dBattery_Alarm low)

Edit: Habe das [Bb] entfernt, da meine Sensoren sowieso nur battery verwenden. Löst das Problem allerdings nicht.

Gibt es an der Stelle einen Platzhalter für das Device, um nicht für jedes Device eine notify zu definieren, das denselben dummy setzen soll
(egal welcher Sensor battery low sendet)?
Schau mal im Wiki:http://www.fhemwiki.de/wiki/Batterieüberwachung (http://www.fhemwiki.de/wiki/Batterie%C3%BCberwachung)
Titel: Antw:notify setzt dummy nicht
Beitrag von: hmtec99 am 20 September 2015, 13:29:31
define n_batt_chk notify .*:battery.* { if ($EVENT !~ m/ok/) usw. (was bedeutet eigenlich m/ ?)

Habe ich bereits gelesen, die Frage ist ob das auch mit IF (fhem-Befehl) funktioniert.


define ndBattery_Alarm notify .*:battery.* IF ([.*:battery] = "low") (set dBattery_Alarm low)

Wie müßte der Platzhalter aussehen bzw. ist es überhaupt möglich an dieser Stelle einen Platzhalter zu definieren?

EDIT: Habe das ganze dahingehend geändert:

.*:battery:.* IF ([$NAME:battery] eq "low") (set dBattery_Alarm low)

damit scheint die Condition richtig zu sein, allerdings wird der Dummy nun immer gesetzt (auch bei z.B. trigger DeviceXY battery:OK) ?? :P
Titel: Antw:notify setzt dummy nicht
Beitrag von: stromer-12 am 20 September 2015, 19:46:08
Zitat von: hmtec99 am 20 September 2015, 13:29:31
.*:battery:.* IF ([$NAME:battery] eq "low") (set dBattery_Alarm low)

Warum erfasst du nicht gleich mit dem Trigger deine low Events:
.*:battery:.low set dBattery_Alarm low