DOIF / THRESHOLD - Schaltreihenfolge, bzw. Priorität festlegen

Begonnen von Cybers, 20 April 2015, 12:44:33

Vorheriges Thema - Nächstes Thema

Cybers

Hallo,

Bei meiner Steuerung soll der Heizungsschalter bei beim Erreichen verschiedener Temperaturen ausgeschaltet werden. Dafür habe ich verschiedene THRESHOLD- und DOIF-Funktionen geschrieben. Jede für sich läft auch zuverlässig.

Jetzt möchte ich aber, daß die DOIF-Funktion "Heizung_Wettervorhersage" priorität vor den anderen hat und sich die Heizung nicht wieder einschaltet weil zum Beispiel die Außentemperatur wieder unter 15°C gesunken ist. Außerdem habe ich noch einen Dummy als "Heizung_Zentralschalter". Wenn der auf "Aus" steht soll keine der Funktionen die Heizung wieder einschalten können.

Ich habe folgenden THRESHOLD-, bzw. DOIF-Code:

define TH_outdoor THRESHOLD Temperatur_Aktuell:state:0:15

define TH_Heizung THRESHOLD Durchschnittstemperatur_Haus:state:1:Solltemperatur:solltemperatur OR TH_outdoor:state:off Heizungsschalter

define Heizung_Wettervorhersage DOIF ([07:30-20:00] and [Wetter:fc1_high_c] > 15) (set Heizungsschalter off) DOELSE (set Heizungsschalter on)

define Heizung_Zentralschalter dummy

Ich habe leider keine Lösung gefunden wie ich die verschiedenen Funktionen verknüpfen kann um das gewünschte zu erreichen.

Vielleicht kann mir hier einer helfen.

Gruß, Sascha
FHEM 6.3 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel

Damian

Zitat von: Cybers am 20 April 2015, 12:44:33
Hallo,

Bei meiner Steuerung soll der Heizungsschalter bei beim Erreichen verschiedener Temperaturen ausgeschaltet werden. Dafür habe ich verschiedene THRESHOLD- und DOIF-Funktionen geschrieben. Jede für sich läft auch zuverlässig.

Jetzt möchte ich aber, daß die DOIF-Funktion "Heizung_Wettervorhersage" priorität vor den anderen hat und sich die Heizung nicht wieder einschaltet weil zum Beispiel die Außentemperatur wieder unter 15°C gesunken ist. Außerdem habe ich noch einen Dummy als "Heizung_Zentralschalter". Wenn der auf "Aus" steht soll keine der Funktionen die Heizung wieder einschalten können.

Ich habe folgenden THRESHOLD-, bzw. DOIF-Code:

define TH_outdoor THRESHOLD Temperatur_Aktuell:state:0:15

define TH_Heizung THRESHOLD Durchschnittstemperatur_Haus:state:1:Solltemperatur:solltemperatur OR TH_outdoor:state:off Heizungsschalter

define Heizung_Wettervorhersage DOIF ([07:30-20:00] and [Wetter:fc1_high_c] > 15) (set Heizungsschalter off) DOELSE (set Heizungsschalter on)

define Heizung_Zentralschalter dummy

Ich habe leider keine Lösung gefunden wie ich die verschiedenen Funktionen verknüpfen kann um das gewünschte zu erreichen.

Vielleicht kann mir hier einer helfen.

Gruß, Sascha

Welches Modul, den gleichen Trigger zuerst bekommt, kann das jeweilige Modul selbst nicht beeinflussen, es wird zentral in der Hauptschleife in fhem.pl gesteuert. Wenn es bewusste Abhängigkeiten zwischen den Modulen geben soll, dann muss man das explizit angeben z. B. in DOIF den Zustand eines THRESHOLD-Moduls mit and oder or zusätzlich abfragen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Cybers

#2
das heißt, ich darf nicht das THRESHOLD-Modul schalten lassen, sondern nur das DOIF-Modul. Wie ich dann aber mein Threshold-Modul in die DOIF-Abfrage einbauen soll verstehe ich noch nicht so ganz.

wenn ich das Threshold-Modul so definiere (also "Heizungsschalter" ab Ende weg lasse, damit er nicht geschaltet wird):
define TH_Heizung THRESHOLD Durchschnittstemperatur_Haus:state:1:Solltemperatur:solltemperatur OR TH_outdoor:state:off

dann muß ich im DOIF vor "(set Heizungschalter off)" ein "or" auf mein Threshold-Modul einbauen. Quasi so:
define Heizung_Wettervorhersage DOIF ([07:30-20:00] and [Wetter:fc1_high_c] > 15) or ( [TH_Heizung] eq "off") (set Heizungsschalter off) DOELSE (set Heizungsschalter on)


Hier bekomme ich aber eine Fehlermeldung und komme nicht weiter.
FHEM 6.3 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel

Damian

Zitat von: Cybers am 21 April 2015, 13:58:32
das heißt, ich darf nicht das THRESHOLD-Modul schalten lassen, sondern nur das DOIF-Modul. Wie ich dann aber mein Threshold-Modul in die DOIF-Abfrage einbauen soll verstehe ich noch nicht so ganz.

wenn ich das Threshold-Modul so definiere (also "Heizungsschalter" ab Ende weg lasse, damit er nicht geschaltet wird):
define TH_Heizung THRESHOLD Durchschnittstemperatur_Haus:state:1:Solltemperatur:solltemperatur OR TH_outdoor:state:off

dann muß ich im DOIF vor "(set Heizungschalter off)" ein "or" auf mein Threshold-Modul einbauen. Quasi so:
define Heizung_Wettervorhersage DOIF ([07:30-20:00] and [Wetter:fc1_high_c] > 15) or ( [TH_Heizung] eq "off") (set Heizungsschalter off) DOELSE (set Heizungsschalter on)


Hier bekomme ich aber eine Fehlermeldung und komme nicht weiter.

Es geht hier bei dir in allen Fällen um den gleichen Heizungsschalter, dann würde ich alles über ein Modul steuern:

define Heizung_Wettervorhersage DOIF ([07:30-20:00] and [Wetter:fc1_high_c] > 15 or
[Temperatur_Aktuell]> 15 or
[Durchschnittstemperatur_Haus]>[Solltemperatur:solltemperatur])
    (set Heizungsschalter off)
DOELSE
    (set Heizungsschalter on)


Die Bedingung musst du evtl. noch für deine Bedürfnisse anpassen.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Cybers

Ich habe es jetzt so gemacht:

define Heizung_Routine DOIF (([?07:30-20:00] and [Wetter:fc1_high_c] > 15) or ([TH_Heizung] eq "off")) (set Heizungsschalter off) DOELSEIF ([Heizung_Zentralschalter] eq "on") (set Heizungsschalter on)
attr Heizung_Routine do always


Ausgeschaltet wird jetzt zuverlässig. Allerdings wird der Heizungsschalter jetzt nicht mehr an geschaltet (ja, "Heizung_Zentralschalter" steht auch auf "on"). Hast du da noch einen Tipp für mich?

Gruß, Sascha
FHEM 6.3 auf Raspberry PI 4 / Smartvisu
Eltako Serie 14: FAM14, FGW14-USB, FSB14, FSR14-4x, FSR14-2x, FDG14, FTS14-EM in Kombination mit Jung F50 24V Tastern
1-Wire Temperatursensoren
aus alter Zeit:
Gott sei Dank nur noch 3 Homematic Jalousie- & Schaltaktoren! Wer sich mit Funk auskennt, legt Kabel

Damian

Zitat von: Cybers am 24 April 2015, 08:43:41
Ich habe es jetzt so gemacht:

define Heizung_Routine DOIF (([?07:30-20:00] and [Wetter:fc1_high_c] > 15) or ([TH_Heizung] eq "off")) (set Heizungsschalter off) DOELSEIF ([Heizung_Zentralschalter] eq "on") (set Heizungsschalter on)
attr Heizung_Routine do always


Ausgeschaltet wird jetzt zuverlässig. Allerdings wird der Heizungsschalter jetzt nicht mehr an geschaltet (ja, "Heizung_Zentralschalter" steht auch auf "on"). Hast du da noch einen Tipp für mich?

Gruß, Sascha
Klar nicht, du hast ja keinen DOELSE-Fall. Der zweite DOELSEIF wird nur dann ausgeführt, wenn [Heizung_Zentralschalter] triggert.

du brauchst dann eher so etwas:

... DOELSE (IF ([Heizung_Zentralschalter] eq "on") (set Heizungsschalter on))



Ich hoffe, dass Wetter:fc1_high_c nicht allzu häufig sendet, mit do always, wird dann nämlich jedes mal geschaltet. do always ist hier also eher ungünstig.

Gruß

Damian
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF