Autor Thema: Anwendung von DOIF Threshold  (Gelesen 411 mal)

Offline FHEMAN

  • Sr. Member
  • ****
  • Beiträge: 689
Anwendung von DOIF Threshold
« 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
NUC7i5 | PROXMOX | FHEM 5.9 | 2 HMLAND | HM | UMTS | LMS | HIFIBERRY | DOORBIRD | KM200 | HUE | ECHO | MILIGHT | LUFTDATENINFO | MQTT | INDEGO | ROBOROCK

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19661
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Anwendung von DOIF Threshold
« Antwort #1 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
« Letzte Änderung: 25 Oktober 2021, 19:43:27 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline FHEMAN

  • Sr. Member
  • ****
  • Beiträge: 689
Antw:Anwendung von DOIF Threshold
« Antwort #2 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.

 
NUC7i5 | PROXMOX | FHEM 5.9 | 2 HMLAND | HM | UMTS | LMS | HIFIBERRY | DOORBIRD | KM200 | HUE | ECHO | MILIGHT | LUFTDATENINFO | MQTT | INDEGO | ROBOROCK

Offline FHEMAN

  • Sr. Member
  • ****
  • Beiträge: 689
Antw:Anwendung von DOIF Threshold
« Antwort #3 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.
« Letzte Änderung: 25 Oktober 2021, 19:58:05 von FHEMAN »
NUC7i5 | PROXMOX | FHEM 5.9 | 2 HMLAND | HM | UMTS | LMS | HIFIBERRY | DOORBIRD | KM200 | HUE | ECHO | MILIGHT | LUFTDATENINFO | MQTT | INDEGO | ROBOROCK

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19661
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Anwendung von DOIF Threshold
« Antwort #4 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 ;)
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline FHEMAN

  • Sr. Member
  • ****
  • Beiträge: 689
Antw:Anwendung von DOIF Threshold
« Antwort #5 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.
NUC7i5 | PROXMOX | FHEM 5.9 | 2 HMLAND | HM | UMTS | LMS | HIFIBERRY | DOORBIRD | KM200 | HUE | ECHO | MILIGHT | LUFTDATENINFO | MQTT | INDEGO | ROBOROCK

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19661
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Anwendung von DOIF Threshold
« Antwort #6 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!
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266
Informativ Informativ x 1 Liste anzeigen

Offline Damian

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 8791
Antw:Anwendung von DOIF Threshold
« Antwort #7 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
« Letzte Änderung: 26 Oktober 2021, 10:07:40 von Damian »
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF
Informativ Informativ x 1 Liste anzeigen