notify setzt dummy nicht

Begonnen von hmtec99, 19 September 2015, 14:22:25

Vorheriges Thema - Nächstes Thema

hmtec99

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).

igami

#1
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 .*.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

justme1968

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.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

hmtec99

Notify / Dummy / IF und alles was ich unter Google gefunden habe (was leider nicht immer zielführend ist.)

hmtec99

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

hmtec99

#5
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

justme1968

du verwendest temperature. im editor sehr ich temperature:.* was dann auch richtig wäre.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

hmtec99

das heißt, meine Konfiguration wäre soweit eigentlich korrekt ?

justme1968

das heißt dein notify ist falsch
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

hmtec99

bin grad verwirrt. das heißt dann?

hmtec99

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 .*

hmtec99

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: .*

Thorsten Pferdekaemper

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
FUIP

igami

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.
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

hmtec99

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?)


hmtec99

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)

hmtec99

Ich flipp aus - es funzt (wenn auch nur mit Browser Reload) DANKE.  ;D

hmtec99

#17
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)?

hmtec99

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)


eppi

#19
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

hmtec99

#20
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

stromer-12

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
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL