DOIF mit Temperaturwerten triggert nicht

Begonnen von jensdipo, 05 Mai 2019, 18:23:50

Vorheriges Thema - Nächstes Thema

jensdipo

Hallo Zusammen,
hänge schon seit einiger Zeit im Forum und versuche ein DOIF mit dem Modul Stellmotor zu kombinieren.
habe jetzt schon einiges ausprobiert, aber das DOIF triggert nicht bei einer Temperaturänderung.
hier schon mal das DOIF:
Internals:
   CFGFN     
   DEF        ([DS18B20_FF7387831603:temperature] <28 and [Stellmotor:position] <97 and [Temp.Puffer] eq "low")
   (set Stellmotor {([Stellmotor:position]+2)})
DOELSEIF ([DS18B20_FF7387831603:temperature] >30 and [Stellmotor:position] >3 and [Temp.Puffer] eq "low")
   (set Stellmotor {([Stellmotor:position]-2)})
   FUUID      5ccf0ad0-f33f-9a41-a654-e72cab805bac6d0f
   MODEL      FHEM
   NAME       Ventil1.Steuerung
   NR         1196
   NTFY_ORDER 50-DI_MischerCommands
   STATE      initialized
   TYPE       DOIF
   VERSION    19303 2019-05-01 08:47:16
   READINGS:
     2019-05-05 18:13:09   Device          DS18B20_FF7387831603
     2019-05-05 18:11:57   cmd             0
     2019-05-05 18:13:09   e_DS18B20_FF7387831603_temperature 21
     2019-05-05 18:11:57   mode            enabled
     2019-05-05 18:11:57   state           initialized
   Regex:
     accu:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'DS18B20_FF7387831603','temperature') <28 and ::ReadingValDoIf($hash,'Stellmotor','position') <97 and ::InternalDoIf($hash,'Temp.Puffer','STATE') eq "low"
     1          ::ReadingValDoIf($hash,'DS18B20_FF7387831603','temperature') >30 and ::ReadingValDoIf($hash,'Stellmotor','position') >3 and ::InternalDoIf($hash,'Temp.Puffer','STATE') eq "low"
   devices:
     0           DS18B20_FF7387831603 Stellmotor Temp.Puffer
     1           DS18B20_FF7387831603 Stellmotor Temp.Puffer
     all         DS18B20_FF7387831603 Stellmotor Temp.Puffer
   do:
     0:
       0          set Stellmotor {([Stellmotor:position]+2)}
     1:
       0          set Stellmotor {([Stellmotor:position]-2)}
     2:
   helper:
     event      temperature: 21,alarm: 1
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev DS18B20_FF7387831603
     triggerEvents:
       temperature: 21
       alarm: 1
     triggerEventsState:
       temperature: 21
       alarm: 1
   internals:
     0           Temp.Puffer:STATE
     1           Temp.Puffer:STATE
     all         Temp.Puffer:STATE
   itimer:
   readings:
     0           DS18B20_FF7387831603:temperature Stellmotor:position
     1           DS18B20_FF7387831603:temperature Stellmotor:position
     all         DS18B20_FF7387831603:temperature Stellmotor:position
   trigger:
   uiState:
   uiTable:
Attributes:
   room       Stellmotor

Oder verstehe ich das Vielleicht falsch und das DOIF kann nicht auf die Temperaturwerte reagieren.
Das DS18B20 ist so eingerichtet das es alle 20 Sekunden einen Wert liefert, aber wie gesagt das DOIF reagiert darauf nicht.
Der Temp.Puffer ist bei mir ein Dummy:
Internals:
   FUUID      5cced9c6-f33f-9a41-a699-c11ad3da1b2ebc43
   NAME       Temp.Puffer
   NR         30
   STATE      high
   TYPE       dummy
   READINGS:
     2019-05-05 17:28:07   state           high
Attributes:
   room       Stellmotor
   webCmd     high:low

Wenn ich im DOIF "do always" einstelle schiebt er den Wert im Stellmotor auch nach oben oder unten, nur halt in sekunden schritten.
Ich würde aber gerne nur bei einem Event des Temperatursensors den Wert um 2 nach oben oder unten verschieben.
Vielleicht kann mir da jemand einen Tipp geben.
MFG
Jens

Damian

Ich würde sagen, dass der Trigger vom Temperatursensor ankommt, aber der Rest der jeweiligen Bedingung nicht wahr ist.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

jensdipo

#2
Hy Damian,
im Prinzip stimmt der Rest, wenn ich das Attribut "do always" aktiviere Funktioniert es ja.
Nur halt das er diese Abfrage dann im Sekundentakt macht und den Zähler sofort hoch und runter zählt.
Oder verstehe ich das Falsch?!
Ich habe allerdings auch schon mal folgendes probiert:

DOIF ([DS18B20_FF7387831603:temperature] <28 (set Temp.Puffer low)
DOELSE (set Temp.Puffer high)

Funktioniert leider auch nicht.
MFG
Jens

amenomade

Laut deinem ersten Post war aber Temp.puffer seit 17:28 Uhr auf "high" => keine Bedingung wahr

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jensdipo

Sorry habe auch seit dem nichts mehr getestet.
Das letzte was ich noch probiert habe war das mit do always.
Daher kann es sein das ich den nicht wieder zurück auf low gestellt habe.
MFG
Jens

jensdipo

Sorry nochmal,
habe gerade festgestellt das der Trigger funktioniert, allerdings nur wenn die 28 unterschritten oder 30 überschritten werden.
Was ich bezwecken wollte war das bei jeder Temperaturänderung die sich unter 28 Grad bewegt, jedesmal das DOIF auslöst.
D.h. wenn die Temperatur 10 mal hintereinander unter 28 Grad gemessen wird er dann auch 10 mal das DOIF durchläuft.
Somit sollte er dann auch 10 mal den Wert des Stellmotors um 2 nach oben setzen.
Das DOIF setzt den Wert aber nur einmal noch oben.
Würde das mit einem DOIF überhaupt Funktionieren?
MFG
Jens

amenomade

ZitatWas ich bezwecken wollte war das bei jeder Temperaturänderung die sich unter 28 Grad bewegt, jedesmal das DOIF auslös
Dann musst Du doch do always setzen. Aber dann wahrscheinlich die andere Konditionen nicht triggernd machen (mit "?" vor dem Devicename). Siehe https://fhem.de/commandref_DE.html#DOIF_Zeitintervalle_Readings_und_Status_ohne_Trigger
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

jensdipo

Super Danke,
habe hundert mal gelesen konnte es aber nicht zusammenbingen.
Dadurch das Stellmotor:position auch im Trigger mit drin war aggierte das DOIF sofort, habe es mit ? herausgenommen.
Vielen Dank für die Hilfe
MFG
Jens