Hauptmenü

Anwendung von DOIF Threshold

Begonnen von FHEMAN, 25 Oktober 2021, 19:22:55

Vorheriges Thema - Nächstes Thema

FHEMAN

Hi, in der Commandref las ich von der Möglichkeit des Thresholds über folgendes Beispiel:
[sensor:temperature] < [$SELF:desired]-1
Da 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
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Otto123

#1
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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

FHEMAN

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.

NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

FHEMAN

#3
Zitat von: Otto123 am 25 Oktober 2021, 19:38:26
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.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Otto123

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 ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

FHEMAN

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.
NUC7i5 | PROXMOX | FHEM 6.2 | 1 HMLAND | 2 UART | HM | LMS | HIFIBERRY | DOORBIRD | BLINK | BUDERUS | HUE | ALEXA | MILIGHT | LUFTDATENINFO | MQTT| ZIGBEE2MQTT | INDEGO | ROBOROCK | SMA | APC | OPENWB

Otto123

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!
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Damian

#7
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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF