Guten Abend.
Ich möchte eine Warnung bei erhöhter radioaktiver Strahlung bekommen. Leider löst das DOIF immer aus und ich weiß nicht warum.
Aktuell ist mein DOIF deaktiviert, jedoch wenn es aktiviert ist, dann lösen die Werte StrahlungMG (0,078) und StrahlungAC (0,087) aus, obwohl diese unter 0,2 sind.
Wo ist mein Denkfehler?
Grüße Tim
Internals:
CFGFN
DEF ([StrahlungMG:wert:d] > 0,2 or [StrahlungAC:wert:d] > 0,2) ({NMA_send("Radioaktivität ab 0.6 ist stark und 0.09 ist üblich","Radioaktivität in MG beträgt ".ReadingsVal("StrahlungMG","wert","")." µSv/h und in AC ".ReadingsVal("StrahlungAC","wert","")." µSv/h",2,"Tim")})
NAME DI_RadioActivMG
NR 1684
NTFY_ORDER 50-DI_RadioActivMG
STATE disabled
TYPE DOIF
Readings:
2016-07-15 11:50:43 Device StrahlungMG
2016-07-15 11:50:44 cmd 1
2016-07-15 11:50:44 cmd_event StrahlungMG
2016-07-15 11:50:44 cmd_nr 1
2016-07-15 11:50:35 e_StrahlungAC_wert 0,087
2016-07-15 11:50:43 e_StrahlungMG_wert 0,078
2016-07-15 12:16:51 mode disabled
2016-07-15 12:16:51 state disabled
Condition:
0 ReadingValDoIf($hash,'StrahlungMG','wert','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) > 0,2 or ReadingValDoIf($hash,'StrahlungAC','wert','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) > 0,2
Devices:
0 StrahlungMG StrahlungAC
all StrahlungMG StrahlungAC
Do:
0:
0 {NMA_send("Radioaktivität ab 0.6 ist stark und 0.09 ist üblich","Radioaktivität in MG beträgt ".ReadingsVal("StrahlungMG","wert","")." µSv/h und in AC ".ReadingsVal("StrahlungAC","wert","")." µSv/h",2,"Tim")}
Helper:
event wert: 0,078
globalinit 1
last_timer 0
sleeptimer -1
timerdev StrahlungMG
timerevent wert: 0,078
triggerDev StrahlungMG
timerevents:
wert: 0,078
timereventsState:
wert: 0,078
triggerEvents:
wert: 0,078
triggerEventsState:
wert: 0,078
Internals:
Itimer:
Readings:
0 StrahlungMG:wert StrahlungAC:wert
all StrahlungMG:wert StrahlungAC:wert
Regexp:
0:
All:
State:
Trigger:
Attributes:
do always
room dummy
Es wird wohl am Komma liegen. Perl arbeitet mit dem amerikanischen Format. Also mit Punkt. Nur wenn ein Punkt da ist zählt es auch als mathematische Variable wo man mit mathematischen Operanden arbeiten kann. Also > oder <
Danke, Leon, für Deine Antwort.
Ich kann den Wert hinter > ohne Probleme mit einem Punkt statt einem Komma ändern. Aber dann passiert überhaupt nichts mehr.
Ich muss vermutlich den Wert von StrahlungMG und StrahlungAC irgendwie ändern.
Internals:
CFGFN
DEF ([StrahlungMG:wert:d] > 0.02 or [StrahlungAC:wert:d] > 0.02) ({NMA_send("Radioaktivität ab 0.6 ist stark und 0.09 ist üblich","Radioaktivität in MG beträgt ".ReadingsVal("StrahlungMG","wert","")." µSv/h und in AC ".ReadingsVal("StrahlungAC","wert","")." µSv/h",2,"Tim")})
NAME DI_RadioActivMG
NR 1684
NTFY_ORDER 50-DI_RadioActivMG
STATE initialized
TYPE DOIF
Readings:
2016-07-17 20:14:16 Device StrahlungMG
2016-07-17 20:13:52 cmd 0
2016-07-17 20:14:06 e_StrahlungAC_wert 0,086
2016-07-17 20:14:16 e_StrahlungMG_wert 0,082
2016-07-17 20:13:52 state initialized
Condition:
0 ReadingValDoIf($hash,'StrahlungMG','wert','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) > 0.02 or ReadingValDoIf($hash,'StrahlungAC','wert','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) > 0.02
Devices:
0 StrahlungMG StrahlungAC
all StrahlungMG StrahlungAC
Do:
0:
0 {NMA_send("Radioaktivität ab 0.6 ist stark und 0.09 ist üblich","Radioaktivität in MG beträgt ".ReadingsVal("StrahlungMG","wert","")." µSv/h und in AC ".ReadingsVal("StrahlungAC","wert","")." µSv/h",2,"Tim")}
1:
Helper:
event wert: 0,082
globalinit 1
last_timer 0
sleeptimer -1
triggerDev StrahlungMG
triggerEvents:
wert: 0,082
triggerEventsState:
wert: 0,082
Internals:
Itimer:
Readings:
0 StrahlungMG:wert StrahlungAC:wert
all StrahlungMG:wert StrahlungAC:wert
Regexp:
0:
All:
State:
Trigger:
Attributes:
do always
room dummy
Du müsstest den Strahlungswert auch umformatieren.
DOIF bietet diese eine Möglichkeit: http://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen (Ausgabeformatierung über Regex)
Hallo Ellert,
vielen Dank für deine Antwort.
Das habe ich auch gelesen und ich hatte gedacht, dass ich es umgesetzt hätte. Daher habe ich folgendes verwendet:
[StrahlungMG:wert:d] bzw. [StrahlungAC:wert:d]
scheint aber nicht richtig zu sein.
Grüße Tim
Zitat von: Timmy.m am 17 Juli 2016, 20:19:18
Danke, Leon, für Deine Antwort.
Ich kann den Wert hinter > ohne Probleme mit einem Punkt statt einem Komma ändern. Aber dann passiert überhaupt nichts mehr.
Ich muss vermutlich den Wert von StrahlungMG und StrahlungAC irgendwie ändern.
Internals:
CFGFN
DEF ([StrahlungMG:wert:d] > 0.02 or [StrahlungAC:wert:d] > 0.02) ({NMA_send("Radioaktivität ab 0.6 ist stark und 0.09 ist üblich","Radioaktivität in MG beträgt ".ReadingsVal("StrahlungMG","wert","")." µSv/h und in AC ".ReadingsVal("StrahlungAC","wert","")." µSv/h",2,"Tim")})
NAME DI_RadioActivMG
NR 1684
NTFY_ORDER 50-DI_RadioActivMG
STATE initialized
TYPE DOIF
Readings:
2016-07-17 20:14:16 Device StrahlungMG
2016-07-17 20:13:52 cmd 0
2016-07-17 20:14:06 e_StrahlungAC_wert 0,086
2016-07-17 20:14:16 e_StrahlungMG_wert 0,082
2016-07-17 20:13:52 state initialized
Condition:
0 ReadingValDoIf($hash,'StrahlungMG','wert','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) > 0.02 or ReadingValDoIf($hash,'StrahlungAC','wert','(-?\d+(\.\d+)?)','',AttrVal($hash->{NAME},'notexist',undef)) > 0.02
Devices:
0 StrahlungMG StrahlungAC
all StrahlungMG StrahlungAC
Do:
0:
0 {NMA_send("Radioaktivität ab 0.6 ist stark und 0.09 ist üblich","Radioaktivität in MG beträgt ".ReadingsVal("StrahlungMG","wert","")." µSv/h und in AC ".ReadingsVal("StrahlungAC","wert","")." µSv/h",2,"Tim")}
1:
Helper:
event wert: 0,082
globalinit 1
last_timer 0
sleeptimer -1
triggerDev StrahlungMG
triggerEvents:
wert: 0,082
triggerEventsState:
wert: 0,082
Internals:
Itimer:
Readings:
0 StrahlungMG:wert StrahlungAC:wert
all StrahlungMG:wert StrahlungAC:wert
Regexp:
0:
All:
State:
Trigger:
Attributes:
do always
room dummy
Dazu müssen auch die Strahlungswerte einen Punkt und nicht ein Komma haben.
Wenn du es nicht gewandelt bekommst, kannst du die Nachkommawerte ggf. als Zeichenketten vergleichen.
([StrahlungMG:wert:d] gt "0,02" or [StrahlungAC:wert:d] gt "0,02")
Allerdings funktioniert das nicht mehr, wenn du vor dem Komma unterschiedliche Stelligkeiten hast, denn es ist dann "10" kleiner als "2".
Gruß
Damian
Zitat von: Timmy.m am 17 Juli 2016, 20:26:43
Hallo Ellert,
vielen Dank für deine Antwort.
Das habe ich auch gelesen und ich hatte gedacht, dass ich es umgesetzt hätte. Daher habe ich folgendes verwendet:
[StrahlungMG:wert:d] bzw. [StrahlungAC:wert:d]
scheint aber nicht richtig zu sein.
Grüße Tim
Ungetestet, etwa so
[mydevice:myreading:"(.*),(.*)":"$1.$2"]
Klasse, Ellert.
Das hat auf Anhieb funktioniert. Vielen herzlichen Dank.
Ich hatte bereits begonnen, den Vorschlag von Damian umzusetzen, und den Wert vorher schon umzuformatieren.
DOIF ist ein wunderbares und mächtiges Tool.
Viele Grüße
Tim