FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Timmy.m am 17 Juli 2016, 20:02:39

Titel: [gelöst] DOIF löst immer aus, nur warum
Beitrag von: Timmy.m am 17 Juli 2016, 20:02:39
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
Titel: Antw:DOIF löst immer aus, nur warum
Beitrag von: CoolTux am 17 Juli 2016, 20:08:55
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 <
Titel: Antw:DOIF löst immer aus, nur warum
Beitrag 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
Titel: Antw:DOIF löst immer aus, nur warum
Beitrag von: Ellert am 17 Juli 2016, 20:22:47
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)
Titel: Antw:DOIF löst immer aus, nur warum
Beitrag 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
Titel: Antw:DOIF löst immer aus, nur warum
Beitrag von: Damian am 17 Juli 2016, 20:34:10
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
Titel: Antw:DOIF löst immer aus, nur warum
Beitrag von: Ellert am 17 Juli 2016, 20:36:54
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"]
Titel: Antw:DOIF löst immer aus, nur warum
Beitrag von: Timmy.m am 17 Juli 2016, 20:55:51
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