Seite 1 von 2

Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: Sa Nov 16, 2019 11:56 pm
von Matze76
Hallo zusammen,

bei diesem Baustein handelt es sich um eine Customlogik, mit der die Betriebsart (Komfort, Nacht/Eco, Frostschutz oder Standby) für einen Heizkreis/Raum/Stellantrieb aus diversen Eingangsbedingungen bestimmt wird und über den HVAC-Modus an das die Heizung regelnde Gerät übergeben werden kann.

Ich habe versucht, den Baustein möglichst generisch zu gestalten. Da ich aber keinen großen Überblick über die verschiedenen Systeme oder Anforderungen habe, ist er in dieser Version aber hauptsächlich auf meinen eigenen Anwendungsbereich zugeschnitten. Anregungen und Erweiterungswünsche nehme ich daher gerne entgegen!

Version:
1.0

Bild

Code:

Code: Alles auswählen

{
  "Input": [
    [
      "Winterbetrieb",
      "Im Sommerbetrieb (false) wird immer HVAC-Modus STANDBY (2) gesetzt",
      "$InWinterbetrieb",
      "c"
    ],
    [
      "Basis-HVAC-Modus (1 - 4)",
      "Wird im Winterbetrieb an den Ausgang übergeben, wenn alle anderen Bedingungen nicht erfüllt sind oder niedrigere Priorität haben (1= KOMFORT, 2 = STANDBY, 3 = NACHT/ECO, 4 = FROSTSCHUTZ)",
      "$InBasismodus",
      "c"
    ],
    [
      "Fenster offen",
      "Wenn Fenster oder Türen geöffnet sind, wird der HVAC-Modus STANDBY (2) übergeben",
      "$InFensterOffen",
      "c"
    ],
    [
      "Verzögerung Fenster [min]",
      "Verzögerung (in Minuten) bis das Schließen des Fensters den HVAC-Status wieder ändert",
      "$InFensterVerzoegerung",
      "c"
    ],
    [
      "Reise/Urlaub (-> STANDBY)",
      "true: abwesend / false: anwesend",
      "$InAbwStandby",
      "c"
    ],
    [
      "Nacht (-> NACHT/ECO)",
      "true: Nacht / false: Tag",
      "$InNacht",
      "c"
    ],
        [
      "-> STANDBY",
      "weiterer Eingang, der STANDBY auslöst",
      "$VAR<STANDBY?>",
      "c"
    ],
        [
      "-> NACHT/ECO",
      "weiterer Eingang, der NACHT/ECO auslöst",
      "$VAR<ECO?>",
      "c"
    ],
    [
      "-> FROSTSCHUTZ",
      "Eingang, der FROSTSCHUTZ auslöst",
      "$VAR<FROSTSCHUTZ?>",
      "c"
    ],
    [
      "Inhibit",
      "INHIBIT",
      "$VAR<Inhibit?>",
      "u"
    ]
  ],
  "Output": [
    [
      "HVAC-Modus",
      "HVAC-Modus (1= Komfort, 2 = Standby, 3 = Nacht/Eco, 4 = Frostschutz)",
      "$Out_HVAC",
      "c"
    ],
    [
      "Betriebsart Komfort",
      "TRUE bei Betriebsart Komfort",
      "$Out_Komfort",
      "c"
    ],
    [
      "Betriebsart Nacht/Eco",
      "TRUE bei Betriebsart Nacht/Eco",
      "$Out_Nacht",
      "c"
    ],
    [
      "Betriebsart Frostschutz",
      "TRUE bei Betriebsart Frostschutz",
      "$Out_Frostschutz",
      "c"
    ]
  ],
  "Module": [
    [
      "Break",
      [
        "$VAR<Inhibit?>"
      ]
    ],
    
    // Eingang "Basismodus" auf die Range der zulässigen HVAC-Status (1 - 4) prüfen (Wenn nicht bleibt $SetBasismodus auf dem Initialwert 1)
    ["Limiter","$InBasismodus","$SetBasismodus","$OutUnusedBool",["$OutValue_1", "$OutValue_4"]],
    
    // Wert am Eingang "Verzögerung Fenster" in Minuten umrechnen
    ["Polynomial", "$InFensterVerzoegerung", "$InFensterVerzoegerung_Sek",["$Konst_Null", "$Konst_Sekunden"]],
    
    // Ausschaltverzögerung nach Schließen des Fensters (Fenster offen-Eingang wechselt von TRUE auf FALSE)
    [ "Monoflop","$InFensterOffen","$InFensterOffen","$Delayed_ON","$InFensterVerzoegerung_Sek",4],  
    ["Or",["$Delayed_ON","$InFensterOffen"],"$InFensterOffen_Delayed"],
    
    // Standby auslösende Bedingungen zusammenfassen
    ["Or",["$VAR<STANDBY?>","$InFensterOffen_Delayed", "$InAbwStandby"],"$Lvl1_Standby"],
    
    // Nacht/Eco auslösende Bedingungen zusammenfassen
    ["Or",["$VAR<ECO?>","$InNacht"],"$Lvl1_Eco"],
 
    // Frostschutz auslösende Bedingungen zusammenfassen
    ["Or",["$VAR<FROSTSCHUTZ?>"],"$Lvl1_Frostschutz"],
 
    // zusammengefasste Eingänge in Binärwert umwandeln
    [
      "BinaryMultiplexer",
      [
        "$Lvl1_Standby",
        "$Lvl1_Eco",
        "$Lvl1_Frostschutz"
      ],
      "$InStat"
    ],
    
    // Steht der Basis-Modus auf 2 STANDBY ? -> dann $IsBasismodus2 = true
    ["Limiter","$SetBasismodus","$OutUnused","$IsBasismodus2",["$OutValue_2", "$OutValue_2"]],
    
    // Wenn Basis-Modus = 2 dann ist er immer vorrangig gegenüber Modus 3
    ["Multiplexer",["$OutValue_3","$OutValue_2"],"$OutValue2_3","$IsBasismodus2"],
    
    // Grundsätzlich zutreffenden Status aus der Kombination der zusammengefassten Eingänge bestimmen. Wenn keine Bedingung zutrifft dann auf den Basismodus setzen.
    // Priorität: Frostschutz -> Standby -> Nacht/Eco -> (Komfort - nur wenn das der Basis-Modus ist)
    ["Multiplexer",["$SetBasismodus","$OutValue_2","$OutValue2_3","$OutValue_2","$OutValue_4"],"$Lvl2_Mode","$InStat"],
    
    // Steht der Basis-Modus auf 4 FROSTSCHUTZ ? -> dann $IsBasismodus4 = true
    ["Limiter","$SetBasismodus","$OutUnused","$IsBasismodus4",["$OutValue_4", "$OutValue_4"]],
    
    // FROSTSCHUTZ hat höchste Priorität. Wenn dieser als Basismodus gesetzt ist kann er durch nichts übersteuert werden
    ["Multiplexer",["$Lvl2_Mode","$OutValue_4"],"$Lvl2_Mode","$IsBasismodus4"],
    
    // Im Sommerbetrieb immer Standby auf den Ausgang, sonst Ergebnis aus den Eingangsbedingungen.
    ["Multiplexer",["$OutValue_2","$Lvl2_Mode"],"$Out_HVAC","$InWinterbetrieb"],
    
    // Aus dem ausgehenden HVAC-Status auch die Ausgänge für einzelne Betriebsarten belegen
    ["Limiter","$Out_HVAC","$OutUnused","$Out_Komfort",["$OutValue_1", "$OutValue_1"]],
    ["Limiter","$Out_HVAC","$OutUnused","$Out_Nacht",["$OutValue_3", "$OutValue_3"]],
    ["Limiter","$Out_HVAC","$OutUnused","$Out_Frostschutz",["$OutValue_4", "$OutValue_4"]]
    
  ],
  "Level": [
    ["$InStat","integer",0],
    ["$Bit0","bool",false],
    ["$Bit1","bool",false],
    ["$Bit2","bool",false],
    ["$Bit3","bool",false],
    ["$InBasismodus","integer",1],
    ["$SetBasismodus","integer",1],["$InWinterbetrieb","bool",true],
    ["$InFensterOffen","bool",false],
    ["$InFensterOffen_Delayed","bool",false],
    ["$InFensterVerzoegerung","float",0.0],
    ["$InFensterVerzoegerung_Sek","float",0.0],
    ["$Delayed_ON","bool",false],
    ["$InNacht","bool",false],
    ["$InAbwStandby","bool",false],
    ["$VAR<STANDBY?>","bool",false],
    ["$VAR<ECO?>","bool",false],
    ["$VAR<FROSTSCHUTZ?>","bool",false],
    ["$Out_HVAC","integer",2],
    ["$Out_Komfort","bool",false],
    ["$Out_Nacht","bool",false],
    ["$Out_Frostschutz","bool",false],
    ["$OutValue_1","integer",1],
    ["$OutValue_2","integer",2],
    ["$OutValue_3","integer",3],
    ["$OutValue2_3","integer",3],
    ["$OutValue_4","integer",4],
    ["$OutUnused","integer",0],
    ["$OutUnusedBool","bool", false],
    ["$IsBasismodus2","bool",false],
    ["$IsBasismodus4","bool",false],
    ["$Lvl1_Standby","bool",false],
    ["$Lvl1_Eco","bool",false],
    ["$Lvl1_Frostschutz","bool",false],
    ["$Lvl2_Mode","integer",1],
    ["$Konst_Null","float",0.0],
    ["$Konst_Sekunden","float",60.0],
    ["$VAR<Inhibit?>","bool",false]
  ]
}
Ausgänge:
Der Ausgang „HVAC-Modus“ sendet einen Wert 1 – 4, der den jeweiligen HVAC-Modus repräsentiert:

1 = KOMFORT
2 = STANDBY
3 = NACHT/ECO
4 = FROSTSCHUTZ

In meinem Anwendungsfall (ich verwende die MDT Heizungsaktoren) ist dieser Ausgang mit einem KNX-Objekt verknüpft, dessen zugeordnete GA auf das Kommunikationsobjekt „Betriebsartvorwahl“ des Aktorkanals geht.

Hinweis: Der Timberwolf kennt den für den HVAC-Modus vorgesehenen DPT 20.102 noch nicht. Es kann stattdessen aber ein KNX-Objekt mit dem DPT 5.005 verwendet werden.

Als Alternative zum HVAC-Modus kann die Betriebsart auch einzeln über die drei weiteren Ausgänge (Betriebsart Komfort, Betriebsart Nacht/Eco, Betriebsart Frostschutz) gesteuert werden. Die Betriebsart Standby ergibt sich, wenn alle drei Ausgänge „false“ sind.

Eingänge:

Winterbetrieb (bool):
Sommerbetrieb (false) oder Winterbetrieb (true)

Basis-HVAC-Modus (integer):
Ein Wert zwischen 1 und 4, der den Basis-HVAC-Modus für den Raum/Heizkreis repräsentiert. Dieser gilt, wenn keine andere Eingangsbedingung mit höher priorisiertem Modus erfüllt ist.

Hier kann z. B. fest ein Parameter hinterlegt werden (z. B. 1 = KOMFORT). Natürlich ist es auch möglich, den Basismodus dynamisch über eine Verknüpfung des Eingangs zu bestimmen.

Fenster offen: (bool)
Ein geöffnetes Fenster (true) setzt grundsätzlich den HVAC-Modus STANDBY.

Verzögerung Fenster: (float)
Hier einen festen Parameter in Minuten hinterlegen ("0" setzen, wenn keine Verzögerung gewünscht wird).

Nachdem das Fenster geschlossen wurde (Fenster-Eingang wechselt von true auf false) bleibt der HVAC-Modus im STANDBY, bevor er wieder in einen anderen Modus (z. B. KOMFORT) umschaltet

Hintergrund: Ich nutze die Verzögerung für Räume mit Fußbodenheizung. Je nachdem wie viel kalte Luft der Temperatursensor durch das Lüften mitbekommen hat, würde der Aktor bei einem Hochsetzen der Betriebsart direkt nach dem Schließen des Fensters sofort die Ventile unnötig aufdrehen. Ich verzögere also die Zeit, bis sich die Raumlufttemperatur wieder normalisiert hat.

Reise/Urlaub:
Ist der Eingang „true“, wird ebenfalls grundsätzlich der HVAC-Modus 2 (STANDBY) gesetzt.

Nacht:
Ist der Eingang „true“, wird grundsätzlich der HVAC-Modus 3 (NACHT/ECO) gesetzt.

Weitere Eingänge:
Über das „+“-Zeichen besteht die Möglichkeit, beliebig viele weitere Eingänge hinzuzufügen, die entweder STANDBY, NACHT/ECO oder FROSTSCHUTZ setzen.

Diese sind jeweils gleichwertig mit anderen Eingängen, die den selben Modus steuern. Ein NACHT/ECO-Eingang funktioniert also genau so wie der Standard-„Nacht“-Eingang. Ich wollte nur erreichen, dass wenigstens die aus meiner Sicht gängigsten Eingänge standardmäßig vorhanden sind und sprechende Namen haben.

Priorität der Eingänge:
Die Priorität der Modi untereinander ist wie folgt festgelegt (von hoch nach niedrig):
FROSTSCHUTZ (4) → STANDBY (2)→ NACHT/ECO (3) → KOMFORT (1)

Dabei gilt:
  • Im Sommerbetrieb ist der Modus am Ausgang immer STANDBY (2)
  • Im Winterbetrieb: Der am Eingang Basis-HVAC-Modus anliegende Wert geht an den Ausgang, wenn keine andere Eingangsbedingung mit höher priorisiertem Modus erfüllt ist
  • Sind Eingangsbedingungen mit höherer Priorität als dem Basis-Modus erfüllt, wird der Modus mit der höchsten Priorität gesetzt.
Beispiel 1:
  • Als Basis-Modus ist KOMFORT (1) eingestellt. Keine anderen Bedingungen sind erfüllt → der HVAC-Ausgang erhält ebenfalls Modus 1.
  • Das Fenster wird geöffnet → Der HVAC-Ausgang wechselt auf STANDBY (2).
  • Die Nacht bricht herein und Eingang „Nacht“ wechselt auf „true“. Dieser Eingang löst grundsätzlich Modus NACHT/ECO (3) aus. Modus 3 wird aber nicht gesetzt, da STANDBY aufgrund des noch geöffneten Fensters eine höhere Priorität hat.
  • Das Fenster wird geschlossen. Nach Ablauf der Fenster-Verzögerungszeit wechselt der HVAC-Modus in den Status 3 (NACHT/ECO).
Beispiel 2:
  • Als Basis-Modus ist STANDBY (2) gesetzt.
  • Die Nacht bricht herein und Eingang „Nacht“ wechselt auf „true“. Dieser Eingang löst grundsätzlich Modus 3 (NACHT/ECO) aus. Da der Basis-Modus STANDBY jedoch eine höhere Priorität hat, bleibt der Ausgang in diesem Modus (sonst würde es ja hier zu einer „Nacht-Anhebung“ der Solltemperatur kommen).

Version 1.1
- Neuer Ausgang "Sperrobjekt", der bei geöffnetem Fenster (+ Verzögerungszeit) true ist.

Code: Alles auswählen

{
  "Input": [
    [
      "Winterbetrieb",
      "Im Sommerbetrieb (false) wird immer HVAC-Modus STANDBY (2) gesetzt",
      "$InWinterbetrieb",
      "c"
    ],
    [
      "Basis-HVAC-Modus (1 - 4)",
      "Wird im Winterbetrieb an den Ausgang übergeben, wenn alle anderen Bedingungen nicht erfüllt sind oder niedrigere Priorität haben (1= KOMFORT, 2 = STANDBY, 3 = NACHT/ECO, 4 = FROSTSCHUTZ)",
      "$InBasismodus",
      "c"
    ],
    [
      "Fenster offen",
      "Wenn Fenster oder Türen geöffnet sind, wird der HVAC-Modus STANDBY (2) übergeben",
      "$InFensterOffen",
      "c"
    ],
    [
      "Verzögerung Fenster [min]",
      "Verzögerung (in Minuten) bis das Schließen des Fensters den HVAC-Status wieder ändert",
      "$InFensterVerzoegerung",
      "c"
    ],
    [
      "Reise/Urlaub (-> STANDBY)",
      "true: abwesend / false: anwesend",
      "$InAbwStandby",
      "c"
    ],
    [
      "Nacht (-> NACHT/ECO)",
      "true: Nacht / false: Tag",
      "$InNacht",
      "c"
    ],
        [
      "-> STANDBY",
      "weiterer Eingang, der STANDBY auslöst",
      "$VAR<STANDBY?>",
      "c"
    ],
        [
      "-> NACHT/ECO",
      "weiterer Eingang, der NACHT/ECO auslöst",
      "$VAR<ECO?>",
      "c"
    ],
    [
      "-> FROSTSCHUTZ",
      "Eingang, der FROSTSCHUTZ auslöst",
      "$VAR<FROSTSCHUTZ?>",
      "c"
    ],
    [
      "Inhibit",
      "INHIBIT",
      "$VAR<Inhibit?>",
      "u"
    ]
  ],
  "Output": [
    [
      "HVAC-Modus",
      "HVAC-Modus (1= Komfort, 2 = Standby, 3 = Nacht/Eco, 4 = Frostschutz)",
      "$Out_HVAC",
      "c"
    ],
    [
      "Betriebsart Komfort",
      "Optional: TRUE bei Betriebsart Komfort",
      "$Out_Komfort",
      "c"
    ],
    [
      "Betriebsart Nacht/Eco",
      "Optional: TRUE bei Betriebsart Nacht/Eco",
      "$Out_Nacht",
      "c"
    ],
    [
      "Betriebsart Frostschutz",
      "Optional: TRUE bei Betriebsart Frostschutz",
      "$Out_Frostschutz",
      "c"
    ],
    [
      "Sperrobjekt",
      "Optional: Wird bei geöffnetem Fenster gesetzt, um bei Bedarf den Heizungsaktor zu sperren",
      "$Out_Sperrobjekt",
      "c"
    ]
  ],
  "Module": [
    [
      "Break",
      [
        "$VAR<Inhibit?>"
      ]
    ],
    
    // Eingang "Basismodus" auf die Range der zulässigen HVAC-Status (1 - 4) prüfen (Wenn nicht bleibt $SetBasismodus auf dem Initialwert 1)
    ["Limiter","$InBasismodus","$SetBasismodus","$OutUnusedBool",["$OutValue_1", "$OutValue_4"]],
    
    // Wert am Eingang "Verzögerung Fenster" in Minuten umrechnen
    ["Polynomial", "$InFensterVerzoegerung", "$InFensterVerzoegerung_Sek",["$Konst_Null", "$Konst_Sekunden"]],
    
    // Ausschaltverzögerung nach Schließen des Fensters (Fenster offen-Eingang wechselt von TRUE auf FALSE)
    [ "Monoflop","$InFensterOffen","$InFensterOffen","$Delayed_ON","$InFensterVerzoegerung_Sek",4],  
    ["Or",["$Delayed_ON","$InFensterOffen"],"$InFensterOffen_Delayed"],
    ["Multiplexer",["$InFensterOffen_Delayed"], "$Out_Sperrobjekt",0],
    
    // Standby auslösende Bedingungen zusammenfassen
    ["Or",["$VAR<STANDBY?>","$InFensterOffen_Delayed", "$InAbwStandby"],"$Lvl1_Standby"],
    
    // Nacht/Eco auslösende Bedingungen zusammenfassen
    ["Or",["$VAR<ECO?>","$InNacht"],"$Lvl1_Eco"],
 
    // Frostschutz auslösende Bedingungen zusammenfassen
    ["Or",["$VAR<FROSTSCHUTZ?>"],"$Lvl1_Frostschutz"],
 
    // zusammengefasste Eingänge in Binärwert umwandeln
    [
      "BinaryMultiplexer",
      [
        "$Lvl1_Standby",
        "$Lvl1_Eco",
        "$Lvl1_Frostschutz"
      ],
      "$InStat"
    ],
    
    // Steht der Basis-Modus auf 2 STANDBY ? -> dann $IsBasismodus2 = true
    ["Limiter","$SetBasismodus","$OutUnused","$IsBasismodus2",["$OutValue_2", "$OutValue_2"]],
    
    // Wenn Basis-Modus = 2 dann ist er immer vorrangig gegenüber Modus 3
    ["Multiplexer",["$OutValue_3","$OutValue_2"],"$OutValue2_3","$IsBasismodus2"],
    
    // Grundsätzlich zutreffenden Status aus der Kombination der zusammengefassten Eingänge bestimmen. Wenn keine Bedingung zutrifft dann auf den Basismodus setzen.
    // Priorität: Frostschutz -> Standby -> Nacht/Eco -> (Komfort - nur wenn das der Basis-Modus ist)
    ["Multiplexer",["$SetBasismodus","$OutValue_2","$OutValue2_3","$OutValue_2","$OutValue_4"],"$Lvl2_Mode","$InStat"],
    
    // Steht der Basis-Modus auf 4 FROSTSCHUTZ ? -> dann $IsBasismodus4 = true
    ["Limiter","$SetBasismodus","$OutUnused","$IsBasismodus4",["$OutValue_4", "$OutValue_4"]],
    
    // FROSTSCHUTZ hat höchste Priorität. Wenn dieser als Basismodus gesetzt ist kann er durch nichts übersteuert werden
    ["Multiplexer",["$Lvl2_Mode","$OutValue_4"],"$Lvl2_Mode","$IsBasismodus4"],
    
    // Im Sommerbetrieb immer Standby auf den Ausgang, sonst Ergebnis aus den Eingangsbedingungen.
    ["Multiplexer",["$OutValue_2","$Lvl2_Mode"],"$Out_HVAC","$InWinterbetrieb"],
    
    // Aus dem ausgehenden HVAC-Status auch die Ausgänge für einzelne Betriebsarten belegen
    ["Limiter","$Out_HVAC","$OutUnused","$Out_Komfort",["$OutValue_1", "$OutValue_1"]],
    ["Limiter","$Out_HVAC","$OutUnused","$Out_Nacht",["$OutValue_3", "$OutValue_3"]],
    ["Limiter","$Out_HVAC","$OutUnused","$Out_Frostschutz",["$OutValue_4", "$OutValue_4"]]
    
  ],
  "Level": [
    ["$InStat","integer",0],
    ["$Bit0","bool",false],
    ["$Bit1","bool",false],
    ["$Bit2","bool",false],
    ["$Bit3","bool",false],
    ["$InBasismodus","integer",1],
    ["$SetBasismodus","integer",1],["$InWinterbetrieb","bool",true],
    ["$InFensterOffen","bool",false],
    ["$InFensterOffen_Delayed","bool",false],
    ["$InFensterVerzoegerung","float",0.0],
    ["$InFensterVerzoegerung_Sek","float",0.0],
    ["$Delayed_ON","bool",false],
    ["$InNacht","bool",false],
    ["$InAbwStandby","bool",false],
    ["$VAR<STANDBY?>","bool",false],
    ["$VAR<ECO?>","bool",false],
    ["$VAR<FROSTSCHUTZ?>","bool",false],
    ["$Out_HVAC","integer",2],
    ["$Out_Komfort","bool",false],
    ["$Out_Nacht","bool",false],
    ["$Out_Frostschutz","bool",false],
    ["$Out_Sperrobjekt","bool",false],
    ["$OutValue_1","integer",1],
    ["$OutValue_2","integer",2],
    ["$OutValue_3","integer",3],
    ["$OutValue2_3","integer",3],
    ["$OutValue_4","integer",4],
    ["$OutUnused","integer",0],
    ["$OutUnusedBool","bool", false],
    ["$IsBasismodus2","bool",false],
    ["$IsBasismodus4","bool",false],
    ["$Lvl1_Standby","bool",false],
    ["$Lvl1_Eco","bool",false],
    ["$Lvl1_Frostschutz","bool",false],
    ["$Lvl2_Mode","integer",1],
    ["$Konst_Null","float",0.0],
    ["$Konst_Sekunden","float",60.0],
    ["$VAR<Inhibit?>","bool",false]
  ]
}
Nutzungsrechte:
Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäß der TOLL ("Timberwolf Open Logikblock License") die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.

Re: Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: So Nov 17, 2019 12:01 am
von Robert_Mini
Super Sache. Bin zwar nicht sicher, ob ich die Logik brauche, aber schöne Umsetzung und tolle Doku!

Danke dafür!!

Lg
Robert

EDIT: Hab mir erlaubt auch für diesen Thread das Neuheit-Tag zu setzen.

Re: Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: So Nov 17, 2019 11:01 am
von Gecks
Tolle Sache, könnte ich bei mir auch benutzen.
Danke dafür Matze76.

Re: Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: So Nov 17, 2019 10:44 pm
von markusrohr
Besten Dank, Matze76, wird im Lauf der Woche bei mir implementiert
Markus

Re: Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: Do Dez 26, 2019 2:57 pm
von Matze76
Hallo,

auf besonderen Wunsch (@Izeman ) habe ich einen Ausgang "Sperrobjekt" hinzugefügt. Dieser ist bei geöffnetem Fenster (+ Verzögerungszeit) unabhängig vom HVAC-Status true. Damit kann über das Sperrobjekt des Aktorkanals dieser bei geöffnetem Fenster gesperrt und damit ausgeschaltet werden (übersteuert dann STANDBY bzw. den höher priorisierten Status FROSTSCHUTZ).

Meinen Originalbeitrag kann ich nicht mehr ändern. Diese neue Version enthält aber keine weiteren Änderungen, so dass man mit V1.0 weiter arbeiten kann, wenn man diesen Anwendungsfall nicht benötigt.

Version 1.1
- Neuer Ausgang "Sperrobjekt", der bei geöffnetem Fenster (+ Verzögerungszeit) true ist.

Code: Alles auswählen

{
  "Input": [
    [
      "Winterbetrieb",
      "Im Sommerbetrieb (false) wird immer HVAC-Modus STANDBY (2) gesetzt",
      "$InWinterbetrieb",
      "c"
    ],
    [
      "Basis-HVAC-Modus (1 - 4)",
      "Wird im Winterbetrieb an den Ausgang übergeben, wenn alle anderen Bedingungen nicht erfüllt sind oder niedrigere Priorität haben (1= KOMFORT, 2 = STANDBY, 3 = NACHT/ECO, 4 = FROSTSCHUTZ)",
      "$InBasismodus",
      "c"
    ],
    [
      "Fenster offen",
      "Wenn Fenster oder Türen geöffnet sind, wird der HVAC-Modus STANDBY (2) übergeben",
      "$InFensterOffen",
      "c"
    ],
    [
      "Verzögerung Fenster [min]",
      "Verzögerung (in Minuten) bis das Schließen des Fensters den HVAC-Status wieder ändert",
      "$InFensterVerzoegerung",
      "c"
    ],
    [
      "Reise/Urlaub (-> STANDBY)",
      "true: abwesend / false: anwesend",
      "$InAbwStandby",
      "c"
    ],
    [
      "Nacht (-> NACHT/ECO)",
      "true: Nacht / false: Tag",
      "$InNacht",
      "c"
    ],
        [
      "-> STANDBY",
      "weiterer Eingang, der STANDBY auslöst",
      "$VAR<STANDBY?>",
      "c"
    ],
        [
      "-> NACHT/ECO",
      "weiterer Eingang, der NACHT/ECO auslöst",
      "$VAR<ECO?>",
      "c"
    ],
    [
      "-> FROSTSCHUTZ",
      "Eingang, der FROSTSCHUTZ auslöst",
      "$VAR<FROSTSCHUTZ?>",
      "c"
    ],
    [
      "Inhibit",
      "INHIBIT",
      "$VAR<Inhibit?>",
      "u"
    ]
  ],
  "Output": [
    [
      "HVAC-Modus",
      "HVAC-Modus (1= Komfort, 2 = Standby, 3 = Nacht/Eco, 4 = Frostschutz)",
      "$Out_HVAC",
      "c"
    ],
    [
      "Betriebsart Komfort",
      "Optional: TRUE bei Betriebsart Komfort",
      "$Out_Komfort",
      "c"
    ],
    [
      "Betriebsart Nacht/Eco",
      "Optional: TRUE bei Betriebsart Nacht/Eco",
      "$Out_Nacht",
      "c"
    ],
    [
      "Betriebsart Frostschutz",
      "Optional: TRUE bei Betriebsart Frostschutz",
      "$Out_Frostschutz",
      "c"
    ],
    [
      "Sperrobjekt",
      "Optional: Wird bei geöffnetem Fenster gesetzt, um bei Bedarf den Heizungsaktor zu sperren",
      "$Out_Sperrobjekt",
      "c"
    ]
  ],
  "Module": [
    [
      "Break",
      [
        "$VAR<Inhibit?>"
      ]
    ],
    
    // Eingang "Basismodus" auf die Range der zulässigen HVAC-Status (1 - 4) prüfen (Wenn nicht bleibt $SetBasismodus auf dem Initialwert 1)
    ["Limiter","$InBasismodus","$SetBasismodus","$OutUnusedBool",["$OutValue_1", "$OutValue_4"]],
    
    // Wert am Eingang "Verzögerung Fenster" in Minuten umrechnen
    ["Polynomial", "$InFensterVerzoegerung", "$InFensterVerzoegerung_Sek",["$Konst_Null", "$Konst_Sekunden"]],
    
    // Ausschaltverzögerung nach Schließen des Fensters (Fenster offen-Eingang wechselt von TRUE auf FALSE)
    [ "Monoflop","$InFensterOffen","$InFensterOffen","$Delayed_ON","$InFensterVerzoegerung_Sek",4],  
    ["Or",["$Delayed_ON","$InFensterOffen"],"$InFensterOffen_Delayed"],
    ["Multiplexer",["$InFensterOffen_Delayed"], "$Out_Sperrobjekt",0],
    
    // Standby auslösende Bedingungen zusammenfassen
    ["Or",["$VAR<STANDBY?>","$InFensterOffen_Delayed", "$InAbwStandby"],"$Lvl1_Standby"],
    
    // Nacht/Eco auslösende Bedingungen zusammenfassen
    ["Or",["$VAR<ECO?>","$InNacht"],"$Lvl1_Eco"],
 
    // Frostschutz auslösende Bedingungen zusammenfassen
    ["Or",["$VAR<FROSTSCHUTZ?>"],"$Lvl1_Frostschutz"],
 
    // zusammengefasste Eingänge in Binärwert umwandeln
    [
      "BinaryMultiplexer",
      [
        "$Lvl1_Standby",
        "$Lvl1_Eco",
        "$Lvl1_Frostschutz"
      ],
      "$InStat"
    ],
    
    // Steht der Basis-Modus auf 2 STANDBY ? -> dann $IsBasismodus2 = true
    ["Limiter","$SetBasismodus","$OutUnused","$IsBasismodus2",["$OutValue_2", "$OutValue_2"]],
    
    // Wenn Basis-Modus = 2 dann ist er immer vorrangig gegenüber Modus 3
    ["Multiplexer",["$OutValue_3","$OutValue_2"],"$OutValue2_3","$IsBasismodus2"],
    
    // Grundsätzlich zutreffenden Status aus der Kombination der zusammengefassten Eingänge bestimmen. Wenn keine Bedingung zutrifft dann auf den Basismodus setzen.
    // Priorität: Frostschutz -> Standby -> Nacht/Eco -> (Komfort - nur wenn das der Basis-Modus ist)
    ["Multiplexer",["$SetBasismodus","$OutValue_2","$OutValue2_3","$OutValue_2","$OutValue_4"],"$Lvl2_Mode","$InStat"],
    
    // Steht der Basis-Modus auf 4 FROSTSCHUTZ ? -> dann $IsBasismodus4 = true
    ["Limiter","$SetBasismodus","$OutUnused","$IsBasismodus4",["$OutValue_4", "$OutValue_4"]],
    
    // FROSTSCHUTZ hat höchste Priorität. Wenn dieser als Basismodus gesetzt ist kann er durch nichts übersteuert werden
    ["Multiplexer",["$Lvl2_Mode","$OutValue_4"],"$Lvl2_Mode","$IsBasismodus4"],
    
    // Im Sommerbetrieb immer Standby auf den Ausgang, sonst Ergebnis aus den Eingangsbedingungen.
    ["Multiplexer",["$OutValue_2","$Lvl2_Mode"],"$Out_HVAC","$InWinterbetrieb"],
    
    // Aus dem ausgehenden HVAC-Status auch die Ausgänge für einzelne Betriebsarten belegen
    ["Limiter","$Out_HVAC","$OutUnused","$Out_Komfort",["$OutValue_1", "$OutValue_1"]],
    ["Limiter","$Out_HVAC","$OutUnused","$Out_Nacht",["$OutValue_3", "$OutValue_3"]],
    ["Limiter","$Out_HVAC","$OutUnused","$Out_Frostschutz",["$OutValue_4", "$OutValue_4"]]
    
  ],
  "Level": [
    ["$InStat","integer",0],
    ["$Bit0","bool",false],
    ["$Bit1","bool",false],
    ["$Bit2","bool",false],
    ["$Bit3","bool",false],
    ["$InBasismodus","integer",1],
    ["$SetBasismodus","integer",1],["$InWinterbetrieb","bool",true],
    ["$InFensterOffen","bool",false],
    ["$InFensterOffen_Delayed","bool",false],
    ["$InFensterVerzoegerung","float",0.0],
    ["$InFensterVerzoegerung_Sek","float",0.0],
    ["$Delayed_ON","bool",false],
    ["$InNacht","bool",false],
    ["$InAbwStandby","bool",false],
    ["$VAR<STANDBY?>","bool",false],
    ["$VAR<ECO?>","bool",false],
    ["$VAR<FROSTSCHUTZ?>","bool",false],
    ["$Out_HVAC","integer",2],
    ["$Out_Komfort","bool",false],
    ["$Out_Nacht","bool",false],
    ["$Out_Frostschutz","bool",false],
    ["$Out_Sperrobjekt","bool",false],
    ["$OutValue_1","integer",1],
    ["$OutValue_2","integer",2],
    ["$OutValue_3","integer",3],
    ["$OutValue2_3","integer",3],
    ["$OutValue_4","integer",4],
    ["$OutUnused","integer",0],
    ["$OutUnusedBool","bool", false],
    ["$IsBasismodus2","bool",false],
    ["$IsBasismodus4","bool",false],
    ["$Lvl1_Standby","bool",false],
    ["$Lvl1_Eco","bool",false],
    ["$Lvl1_Frostschutz","bool",false],
    ["$Lvl2_Mode","integer",1],
    ["$Konst_Null","float",0.0],
    ["$Konst_Sekunden","float",60.0],
    ["$VAR<Inhibit?>","bool",false]
  ]
}

Re: Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: Do Dez 26, 2019 3:19 pm
von gbglace
Hab es mal oben mit unten an eingefügt.

Re: Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: Do Dez 26, 2019 6:02 pm
von Matze76
gbglace hat geschrieben: Do Dez 26, 2019 3:19 pm Hab es mal oben mit unten an eingefügt.
Danke!

Ist es möglich, einzelne Bereiche im Forum so einzustellen, dass der Autor seine Beiträge ohne zeitliche Einschränkung editieren kann?
Falls ja, fände ich das für den Bereich "Zusätzliche Logikbausteine" nicht schlecht, damit man selber den Startbeitrag mit aktueller Version und Anleitung up to date halten kann.

Re: Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: Do Dez 26, 2019 6:14 pm
von StefanW
Matze76 hat geschrieben: Do Dez 26, 2019 6:02 pmIst es möglich, einzelne Bereiche im Forum so einzustellen, dass der Autor seine Beiträge ohne zeitliche Einschränkung editieren kann?
Ja.

Matze76 hat geschrieben: Do Dez 26, 2019 6:02 pmFalls ja, fände ich das für den Bereich "Zusätzliche Logikbausteine" nicht schlecht, damit man selber den Startbeitrag mit aktueller Version und Anleitung up to date halten kann.
Hab ich eingestellt, also dass der Startbeitrag in diesem Unterforum auf Dauer vom Ersteller bearbeitet werden kann.

==> Bitte ausprobieren (ich weiß nicht, ob das auch für schon eingestellte Beiträge "nachträglich" gilt".

lg

Stefan

Re: Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: Do Dez 26, 2019 6:19 pm
von Matze76
Super, danke! Ja, scheint auch nachträglich zu gelten. Ich kann den Startbeitrag jetzt editieren.

Re: Betriebsart Heizung steuern (HVAC-Modus)

Verfasst: Do Dez 26, 2019 6:25 pm
von StefanW
Cool, freut mich. Kleine Wünsche werden sofort erfüllt. :lol: 8-)

lg

Stefan

PS. Kann ich für jedes Unterforum separat einstellen, wenn das sinnvoll auch in anderen Foren möglich ist, dann macht mir dort einen FR.