FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: FHEMAN am 25 Oktober 2021, 19:22:55

Titel: Anwendung von DOIF Threshold
Beitrag von: FHEMAN am 25 Oktober 2021, 19:22:55
Hi, in der Commandref las ich von der Möglichkeit des Thresholds über folgendes Beispiel:
[sensor:temperature] < [$SELF:desired]-1Da ich gerade ein merkwürdiges Verhalten habe möchte ich kurz fragen, ob folgende beiden Bedingungen gleichermaßen funktionieren als Threshold:
[$SELF:maxInnenTemp]-0.5 > 23.5
23.5 < [$SELF:maxInnenTemp]-0.5
maxInnenTemp ist ein DOIF_Reading

Grüße
Ronny
Titel: Antw:Anwendung von DOIF Threshold
Beitrag von: Otto123 am 25 Oktober 2021, 19:38:26
Hallo Ronny,

schwierig zu verstehen was gemeint ist, es ist besser "in ganzen Sätzen" zu sprechen - sprich: poste einfach den Code den Du probiert hast:
Beispiel: meine Temperatur(Zweipunkt)regelung, wo ich Sollwert und Hysterese per drop down auch einstellen kann. SensorWG ist ein Tempearturfühler im Raum, SD1 die Schaltsteckdose für den elektrischen Heizlüfter. Der Status der Schaltsteckdose ist mit in der Bedingung, falls einer die Dose per Hand betätigt hat.
defmod di_temperatur_WG DOIF ([SensorWG:temperature]>([$SELF:desired]+[$SELF:hysterese]/2) and [?SD1:state] ne "off") \
(set SD1 off) \
DOELSEIF ([SensorWG:temperature]<([$SELF:desired]-[$SELF:hysterese]/2) and [?SD1:state] ne "on") \
(set SD1 on)
attr di_temperatur_WG cmdState off|on
attr di_temperatur_WG readingList desired,hysterese
attr di_temperatur_WG room Wintergarten
attr di_temperatur_WG setList desired:8,10,12,15 hysterese:1,2,5
attr di_temperatur_WG webCmd desired:hysterese

Vielleicht erkennst Du Dein (ich vermute nur) Problem :) -> Hysterese einmal plus und einmal minus - nicht zweimal minus :)

Gruß Otto
Titel: Antw:Anwendung von DOIF Threshold
Beitrag von: FHEMAN am 25 Oktober 2021, 19:50:54
Hi Otto,
ich vermute, mein Beispiel würde eher verwirren.
Mein eigentliche Frage ist, ob ich den Hysterese-Zusatz grundsätzlich hinter einem Reading zufügen kann, auch wenn als nächstes der Vergleichsoperator folgt.
Bei meinen Versuchen vorhin waren die Auswertungen unterschiedlich. Ich hatte das Gefühl, es wurde einfach der Hysteres-Wert abgezogen, ohne darauf zu warten, dass der eigentliche Wert erreicht wird.

 
Titel: Antw:Anwendung von DOIF Threshold
Beitrag von: FHEMAN am 25 Oktober 2021, 19:53:09
Vielleicht erkennst Du Dein (ich vermute nur) Problem :) -> Hysterese einmal plus und einmal minus - nicht zweimal minus :)

Gruß Otto
Ich stehe auf dem Schlauch..  :D hilfst Du mir bitte, was meinst Du mit zweimal minus?

So sieht meine Bedingung aktuell aus:
([?$SELF:HeizungTemp] != 20 and ([TempDiffSen.01:Sonne] == 1 or 23.5 < [$SELF:maxInnenTemp]-0.5) and not [$SELF:cloudyToday])

Und anstelle
23.5 < [$SELF:maxInnenTemp]-0.5
würde ich lieber
[$SELF:maxInnenTemp]-0.5 > 23.5
schreiben, weil ich das besser lesen kann. Und da habe ich aber ein anderes Ergebnis bekommen. Ich kann es notfalls ja auch mal mit Dummys nachbauen und analysieren.
Titel: Antw:Anwendung von DOIF Threshold
Beitrag von: Otto123 am 25 Oktober 2021, 20:17:25
Das ist ja mein Problem: Du schreibst zwei Zeilen und ich vermute es sind zwei Bedinungen in jeweils einem anderen Zweig. Du siehst an meinem Beispiel wie es sein muss bei einem Zweipunkregler (Threshold).
Du meinst aber so oder so schreiben: es ist egal: er rechnet und vergleicht dann: https://perldoc.perl.org/perlop#Operator-Precedence-and-Associativity

Ich überblicke auf die Schnelle nicht was sich ändern sollte, aber im Zweifel: mach Klammern drum ;)
Titel: Antw:Anwendung von DOIF Threshold
Beitrag von: FHEMAN am 25 Oktober 2021, 23:52:22
Mir geht's rein um die Doif Syntax zur Hysterese. Dein Vorschlag mit den Klammern sollte aber sicher Abhilfe schaffen, einfach wie wirkungsvoll.
Ich bin da im Doif immer vorsichtig unterwegs wegen der diversen Möglichkeiten und Auswirkungen.
Titel: Antw:Anwendung von DOIF Threshold
Beitrag von: Otto123 am 26 Oktober 2021, 00:20:59
Ich will noch mal unterstreichen: Die Hysterese kommt dadurch, dass Du sie in zwei alternativen Zweigen mit umgekehrten Vorzeichen einsetzt! Siehe mein Beispiel.
Es ist aus meiner Sicht kein DOIF Syntax, es ist zum einen Perl und zum anderen Logik:
Ich will einen bestimmten Sollwert erreichen und die Schaltfrequenz verringern: Das geschieht in dem ich bei dem Sollwert minus Hysterese einschalte und bei dem Sollwert plus Hysterese wieder ausschalte.

Der Hinweis/Beispiel in der Doku von DOIF bezieht sich auf das FHEM Modul THRESHOLD, welches genau für diese Aufgabe gebaut wurde!
Titel: Antw:Anwendung von DOIF Threshold
Beitrag von: Damian am 26 Oktober 2021, 10:05:27
Das Beispiel https://fhem.de/commandref_DE.html#DOIF_Weitere_Anwendungsbeispiele zum Schwellenschalter (Threshold) ist angelehnt an der programmierten Funktionsweise des Moduls THRESHOLD.

Dort wurde programmiert: Ausschaltzeitpunkt: Maximaler Wert=Soll-Wert, Einschaltzeitpunkt: Minimaler Wert=Sollwert - Hysterese

Threshold wird häufig bei Fußbodenheizung zum Schalten der Stellantriebe genutzt. Das war bei mir der Auslöser für die Entwicklung des THRESHOLD-Moduls.

Bei der Fußbodenheizung wird oft der Sollwert aufgrund der Trägheit übersteuert, daher hatte ich im THRESHOLD-Modul Abschaltzeitpunkt=Sollwert definiert und nicht Abschaltzeitpunkt=Sollwert + Hysterese/2