FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: M.Piet am 18 März 2024, 14:12:37

Titel: [ERLEDIGT] DOIF: Wert für zeit X überschnitten
Beitrag von: M.Piet am 18 März 2024, 14:12:37
Moin,

ich möchte erreichen:
Eine Telegram bekommen, wenn die Abgastemperatur "test_Temp" für 5 Minuten über 300°C ist. Ebenso eine Nachricht, wenn "test_temp" wieder unter 300°C ist.

Einen Dummy bauen, der auf ON gesetzt wird, wenn die Temperatur auf 300C° oder höher ist,
Dann einen Watchdog gebaut, der den eben genannten Dummy für 5 Minuten triggert, und mir dann die Nachricht sendet.
Dann ein Notify, was mit direkt eine Nachricht schickt, wenn die Temperatur wieder unter 300°C fällt.

Ich frage mich grad, ob das auch ein wenig smarter mit einem DOIF geht. Kann man bei einem einzelnen DOIF ein Schwellwert (<300°C) und eine Zeit (5 Minuten) kombinieren?

Danke schön. :)
Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: rabehd am 18 März 2024, 14:53:38
Schwellwert triggert und im Zweig wird mit wait 5 min warten.
Wait wird abgebrochen, wenn der Trigger nicht mehr gültig ist.
Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: Per am 18 März 2024, 14:56:37
DOIF ([sensor] > 300) ()
(send telegram high)
DOELSEIF ([$SELF:cmd_seqnr] == 2 and [sensor] < 300)(send telegram low)

attr wait 0,300:0
Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: M.Piet am 18 März 2024, 15:27:11
Oh, ich wusste, dass ich zu kompliziert gedacht habe. :)
Ich danke euch. Werde ich testen. :)
Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: M.Piet am 19 März 2024, 11:47:43
Zitat von: Per am 18 März 2024, 14:56:37DOIF ([sensor] > 300) ()
(send telegram high)
DOELSEIF ([$SELF:cmd_seqnr] == 2 and [sensor] < 300)(send telegram low)

attr wait 0,300:0

Ich habe dein Beispiel mit einem Dummy zum testen umgesetzt.

Ich habe 2 Probleme, die ich nicht lösen kann:

Steigt der Wert über 300, wird sofort (und ohne Verzögerung) die Nachricht geschickt. Die Nachricht soll ja nur gesendet werden, wenn nach 5 Minuten der Wert höher als 300 ist.
Das DOELSEIF greift nicht, wenn der Wert wieder unter 300 fällt.

Danke für deine Hilfe. :)

Internals:
  CFGFN     
  DEF        ([TestDummy2:state] > 300) (set TelegramBot message @123456 TEST HIGH) DOELSEIF ([$SELF:cmd_seqnr] == 2 and [TestDummy2:state] < 300)(set TelegramBot message @123456 TEST LOW)
  FUUID      65f96cdf-f33f-8a41-328e-eb6ea7b381a1d973
  MODEL      FHEM
  NAME      Temperaturwarnung_DOIF_Telegram
  NOTIFYDEV  Temperaturwarnung_DOIF_Telegram,TestDummy2,global
  NR        487
  NTFY_ORDER 50-Temperaturwarnung_DOIF_Telegram
  STATE      initialized
  TYPE      DOIF
  VERSION    27740 2023-07-10 09:31:11
  eventCount 1
  READINGS:
    2024-03-19 11:45:52  cmd            0
    2024-03-19 11:45:52  mode            enabled
    2024-03-19 11:45:52  state          initialized
  Regex:
    accu:
    bar:
    barAvg:
    collect:
    cond:
      Temperaturwarnung_DOIF_Telegram:
        1:
          cmd_seqnr  ^Temperaturwarnung_DOIF_Telegram$:^cmd_seqnr:
      TestDummy2:
        0:
          state      ^TestDummy2$:^state:
        1:
          state      ^TestDummy2$:^state:
  attr:
    wait:
      0:
        0
        300
      1:
        0
  condition:
    0          ::ReadingValDoIf($hash,'TestDummy2','state') > 300
    1          ::ReadingValDoIf($hash,'Temperaturwarnung_DOIF_Telegram','cmd_seqnr') == 2 and ::ReadingValDoIf($hash,'TestDummy2','state') < 300
  do:
    0:
      0          set TelegramBot message @123456 TEST HIGH
    1:
      0          set TelegramBot message @123456 TEST LOW
    2:
  helper:
    NOTIFYDEV  Temperaturwarnung_DOIF_Telegram,TestDummy2,global
    globalinit 1
    last_timer 0
    sleeptimer -1
  readings:
    all        TestDummy2:state Temperaturwarnung_DOIF_Telegram:cmd_seqnr
  uiState:
  uiTable:
Attributes:
  room      Dummy
  wait      0,300:0



Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: rabehd am 19 März 2024, 12:50:34
Zitat von: M.Piet am 19 März 2024, 11:47:43Steigt der Wert über 300, wird sofort (und ohne Verzögerung) die Nachricht geschickt.
Klar, weil Du nicht alles kopiert hast oder nicht nachgedacht hast.
Deine Definition arbeitet korrekt.
Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: Per am 19 März 2024, 13:05:59
Wait muss 300,0:0 sein, hatte ich falsch.
Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: rabehd am 19 März 2024, 13:22:37
Zitat von: Per am 19 März 2024, 13:05:59Wait muss 300,0:0 sein, hatte ich falsch.
Bei ihm 300:0
Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: M.Piet am 19 März 2024, 13:23:50
Zitat von: Per am 19 März 2024, 13:05:59Wait muss 300,0:0 sein, hatte ich falsch.
Ahhh. Danke. Nun geht es. Jetzt ergibt die Doku zu Wait auch einen Sinn für mich.

Aber mein zweites Problem habe ich noch.
Der DOELSEIF greif nicht, wenn der Wert unter 300 geht. Der DOIF bleibt bei "cmd_1" und welchelt nicht zu "cmd_2"
DOELSEIF ([$SELF:cmd_seqnr] == 2 and [TestDummy2:state] < 300)(set TelegramBot message @123456 TEST LOW)
Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: rabehd am 19 März 2024, 15:15:50
Zitat von: M.Piet am 19 März 2024, 13:23:50[$SELF:cmd_seqnr] == 2
Da ich damit hier nichts anfangen kann, würde ich hier eine Ursache vermuten.
Mein Lösungsversuch wäre ohne das.
Titel: Aw: DOIF: Wert für zeit X überschnitten
Beitrag von: M.Piet am 04 April 2024, 13:12:37
Hallo Zusammen,

ich habe es letztendlich dank eurer Hilfe hinbekommen. Es funktioniert genauso wie es soll.

Schwellwert: 300
Zeit: 120

([DS18B20_DBDE84000003:cleanTemp] > 300) (set TelegramBot message @1234 Achtung! Abgastemperatur Holzvergaser zu hoch! Aktueller Wert [DS18B20_DBDE84000003:cleanTemp]°C) DOELSEIF ([DS18B20_DBDE84000003:cleanTemp] < 300) (set TelegramBot message @1234 Abgastemperatur Holzvergaser wieder normal)

Attr wait=120:0
Titel: Aw: [ERLEDIGT] DOIF: Wert für zeit X überschnitten
Beitrag von: holle75 am 11 April 2024, 21:42:04
Oh, @M.Piet, rein Interessehalber: welchen Holzvergaser hast du und wie zufrieden bist du mit ihm?