Hauptmenü

Wertebereich Vergleich DOIF

Begonnen von Matthias-56, 28 September 2025, 13:17:48

Vorheriges Thema - Nächstes Thema

Matthias-56

Hallo, in einem DOIF Module steht folgender Vergleich: (["powerMeter:power:"] < 1.0) (set dyEcoFlow_up on)
Dieses funktioniert nur für Vergleichswerte  >/= 1.1 , nicht aber für kleinere Werte.
Sobald ich 1.0 oder kleinere Werte eintrage, funktioniert es nicht mehr, auch nicht mit ganzen Zahlen.
Ich möchte auch negative Werte benutzen, also z.B. (["powerMeter:power:"] < -1.0). In diesem Fall wird (set dyEcoFlow_up on) nicht ausgeführt.
Gibt es dafür eine Erklärung?

Vielen Dank!


defmod diEcoFlowControl DOIF (["powerMeter:power:"] < 1.0) (set dyEcoFlow_up on)
attr diEcoFlowControl addStateEvent 1
attr diEcoFlowControl do always
attr diEcoFlowControl room EcoFlow

setstate diEcoFlowControl initialized
setstate diEcoFlowControl 2025-09-28 13:08:40 Device powerMeter
setstate diEcoFlowControl 2025-09-28 12:57:00 cmd 0
setstate diEcoFlowControl 2025-09-28 12:57:00 mode enabled
setstate diEcoFlowControl 2025-09-28 12:57:00 state initialized
efine diEcoFlowControl DOIF (["powerMeter:power:"] < 1.0) (set dyEcoFlow_up on)
attr diEcoFlowControl addStateEvent 1
attr diEcoFlowControl do always
attr diEcoFlowControl room
#  CFGFN     
#  DEF        (["powerMeter:power:"] < 1.0) (set dyEcoFlow_up on)
#  FUUID      68d8ece6-f33f-907d-75ce-8f6e52f532b7e93f
#  MODEL      FHEM
#  NAME      diEcoFlowControl
#  NOTIFYDEV  .*(powerMeter).*,global
#  NR        270
#  NTFY_ORDER 50-diEcoFlowControl
#  STATE      initialized
#  TYPE      DOIF
#  VERSION    29460 2024-12-29 20:25:48
#  eventCount 110
#  READINGS:
#    2025-09-28 13:02:18  Device          powerMeter
#    2025-09-28 12:57:00  cmd            0
#    2025-09-28 12:57:00  mode            enabled
#    2025-09-28 12:57:00  state          initialized
#  Regex:
#    accu:
#    bar:
#    barAvg:
#    collect:
#    cond:
#      :
#        0:
#          "powerMeter:power:" powerMeter:power:
#  attr:
#    cmdState:
#    wait:
#    waitdel:
#  condition:
#    0          ::EventDoIf('powerMeter',$hash,'power:',0) < 1.0
#  do:
#    0:
#      0          set dyEcoFlow_up on
#    1:
#  helper:
#    NOTIFYDEV  .*(powerMeter).*,global
#    event      power: -472.194781873793
#    globalinit 1
#    last_timer 0
#    sleeptimer -1
#    triggerDev powerMeter
#    triggerEvents:
#      power: -472.194781873793
#      current_L1: 2.25
#      current_L3: 0.57
#      voltage_L1: 236.6
#      voltage_L2: 240.5
#      voltage_L3: 237.6
#      power_L2: 37
#      power_L3: 20
#    triggerEventsState:
#      power: -472.194781873793
#      current_L1: 2.25
#      current_L3: 0.57
#      voltage_L1: 236.6
#      voltage_L2: 240.5
#      voltage_L3: 237.6
#      power_L2: 37
#      power_L3: 20
#  hmccu:
#  internals:
#  readings:
#  trigger:
#  uiState:
#  uiTable:
#
setstate diEcoFlowControl initialized
setstate diEcoFlowControl 2025-09-28 13:02:18 Device powerMeter
setstate diEcoFlowControl 2025-09-28 12:57:00 cmd 0
setstate diEcoFlowControl 2025-09-28 12:57:00 mode enabled
setstate diEcoFlowControl 2025-09-28 12:57:00 state initialized

passibe

Wieso triggerst du mit diesen Anführungszeichen? (Ich glaube, das ist dann regex?)
Mach einfach ganz normal:([powerMeter:power] < 1.0) (set dyEcoFlow_up on)Dann funktioniert das, auch mit negativen Werten in der Bedingung.

Per

Du triggerst auf den Event, nicht auf den Wert. Möchtest du beides, brauchst du einen Vorgabewert:
(["powerMeter:power:",0] < 1.0)

Matthias-56

Danke, das war die Ursache.
Ich hatte irgendwo aus den Dokumentationen etwas Passendes herauskopiert und angepasst.
Leider waren dort Anführungszeichen enthalten.