Seite 1 von 1

Vollautomatische 24h Jalousiesteuerung (Baustein 2: Berechnung Höhe)

Verfasst: So Okt 27, 2019 5:38 pm
von Robert_Mini
Hallo zusammen!

Ich möchte euch in diesem und weiteren Threads eine Lösung zur Steuerung der Jalousien vorstellen. Aufgrund meiner Erfahrungen mit dezentraler Logik auf Wetterstationen etc. habe ich nun die Steuerung komplett auf den TWS übertragen. Damit habe ich für mich eine (fast) perfekte Lösung geschaffen, die für viele andere auch funktionieren sollte.

Die Übersicht zu Hauptmerkmalen, Bausteinen und deren Zusammenspiel ist hier zu finden:
viewtopic.php?f=65&t=1564

Die Höhenberechnung liefert für den Automatikbetrieb die Sollhöhe, abhängig von Sommer/Winter und Innentemperatur.

Funktionsweise:
  • Im für Sommer kann eine fixe höhe zB 90% oder 100% parametriert werden. Damit wird eine maximale Beschattungswirkung erreicht (wenn die Bedingungen für Auto im Baustein 2 erfüllt sind).
  • Im Winter wird die Höhe proportional zu Überschreitung der Solltemperatur berechnet. Ich verwende dazu 10% pro 0,1°C (=> Delta_T 1°C für max. Beschattung) und 0,5°C Offset zur Temperatur des RTR.
    zB Solltemperatur 23°C, 0,5°C Offset => Bei 23,7°C wird 20% beschattet, bei 24,5% zu 100%.
Eingänge:
  • Winter: Winter = True, ggf. einfach am Eingang invertieren verwenden
  • T_Soll: Raumtemperatur Sollwert, ab dem beschattet werden soll. Damit nicht gleichzeitig geheizt und beschattet wird, sollte ein Offset verwendet werden (siehe unten)
  • T_Ist: Aktuelle Raumtemperatur zB als KNX-Objekt vom Raumtemperaturregler
  • Heizmodus: Aktueller Modus des Raumtemperaturreglers. 0=Heizen, 1=Kühlen. Solange an diesem Eingang 0 anliegt, wird nicht beschattet, da noch geheizt wird. Ist kein RTR vorhanden oder soll diese Verrieglung nicht verwendet werden, muss der Eingang als Parameter mit "True" gesetzt werden.
Parameter (optional auch über Eingang als Objekt):
  • Hoehe Sommer: Legt die Behanghöge im Sommermodus fest zB 90% oder 100%
  • Der Offset wird zur Solltemperatur addiert. Daher kann direkt der Sollwert des RTR als Sollwert verwendet werden.
  • Der Parameter Delta_T_Max gibt dT für 100% an, im obigen Beispiel 1°C
  • Der Parameter Step legt fest gibt dT für 100% an, im obigen Beispiel 1°C
  • Hoehe_Min / Hoehe_Max: beschränkt den Beschattungsbereich im Winter zB auf 20-80%, d.h. es wird erst ab Sollhöhe 20% ein Wert >0 gesendet, die max. Sollhöhe wird auf 80% beschränkt. Damit kann unter anderem eine mindest Helligkeit erhalten gesichert werden.
  • Step: Beschreibt die Höhendifferenz, ab der sofort der neue Wert für Sollhöhe gesendet wird.
  • Verzögerung: Gibt an, ab welcher Zeit ein neuer Wert gesendet wird, sofern nicht vorher Step überschritten wurde.
    Zusammen mit Step wird ein zu häufiges Verfahren der Jalousie verhindert.
Ausgänge:
  • Hoehe Soll: Aktueller Sollwert
  • Hoehe Last: Letzter gesendete Wert
  • Aktiv: Gibt bei Höhe > 0 den Wert true aus.
Bild

Code: Alles auswählen

/**===========================================================
HoeheSoll aus Temperatur für Winterbetrieb
Sommer fixe einstellbare Höhe
Step und Delay beim Senden
TODO: Step-Min
============================================================*/
{
    "Level":[
        ["$I_Winter","bool",false],
        ["$I_Heizmodus","bool",false],
        ["$I_Hoehe_Sommer","float",100.0],
		["$I_Temp_Soll","float",24.0],
	    ["$Temp_Soll","float",24.5],
        ["$I_Temp_Akt","float",25.0],
        ["$I_Delta_T_Max","float",25.5],
		["$I_Step","float",20.0],
		["$I_Delay","float",20.0],
		["$I_Hoehe_Max","float",100.0],
		["$I_Hoehe_Min","float",20.0],
        ["$Hoehe_Soll","float",0.0],
        ["$Hoehe_Soll_Lim","float",0.0],
        ["$Hoehe_Soll_Step","float",0.0],
        ["$Hoehe_Soll_OutLast","float",0.0],
        ["$Hoehe_Soll_Out","float",0.0],
        ["$Hoehe_Soll_Out1","float",0.0],
        ["$I_Offset","float",0.5],
        ["$Delta_T","float",0.0],
        ["$Delta_Hoehe","float",0.0],
        ["$Delta_Hoehe_Abs","float",0.0],
        ["$Delta_Hoehe_Select","float",0.0],	
        ["$Steigung","float",0.0],
        ["$Konst100","float",100.0],
        ["$Konst1","float",1.0],
        ["$Konst0","float",0.0],
        ["$Val_ok","bool",false],
        ["$Trigger","bool",false],
        ["$Aktiv","bool",false],		
        ["$SelectHoehe","bool",false],
        ["$SelectStep","bool",false],
        ["$Step","float",20.0]		
    ],
    "Module":[
      // Letzte Höhe zu Beginn merken
		["Polynomial", "$Konst1", "$Hoehe_Soll_OutLast",["$Konst0", "$Hoehe_Soll_Out"]],	
	  //Offset berücksichtigen
	    ["Polynomial", "$Konst1", "$Temp_Soll",["$I_Temp_Soll", "$I_Offset"]],	
      // Delta T zur Solltemperatur berechnen
        ["Polynomial", "$Konst1", "$Delta_T",["$I_Temp_Akt", "-$Temp_Soll"]],	
      // Umrechnung dT in 0-100% 
		["Ratio","$Konst100","$Steigung","$I_Delta_T_Max"],
        ["Polynomial", "$Delta_T", "$Hoehe_Soll",["$Konst0", "$Steigung"]],
      //Sollwert Hoehe auf Min/Max einschränken, wenn <Min => auf Null setzen.
		["Limiter","$Hoehe_Soll","$Hoehe_Soll_Lim","$Val_ok",["$I_Hoehe_Min", "$I_Hoehe_Max"]],
		["Comparator", "$I_Hoehe_Min", "$SelectHoehe", "$Hoehe_Soll"],
        ["Multiplexer",["$Konst0","$Hoehe_Soll_Lim"],"$Hoehe_Soll_Lim","-$SelectHoehe"],			
	  //Höhe berechen mit aktuellem Step-Wert
		["Step","$Hoehe_Soll_Lim","$Hoehe_Soll_Step",0,"$Step",0],
	  //Prüfen ob sich der Wert geändert hat (Änderung>Step) und Verzögerungszeit starten
	  //Re-trigger wenn Step überschritten wird (betragsmäßig)
		["Polynomial", "$Konst1", "$Delta_Hoehe",["$Hoehe_Soll_Step", "-$Hoehe_Soll_OutLast"]],	
		["Comparator" , "-$Delta_Hoehe" , "$Delta_Hoehe_Select" , "$Konst0"],		
		["Multiplexer",["$Delta_Hoehe","-$Delta_Hoehe"],"$Delta_Hoehe_Abs","$Delta_Hoehe_Select"],		
		["Comparator" , "$Delta_Hoehe_Abs" , "$Trigger" , "$Konst0"],   		
		["Monoflop","$Trigger",0,"$SelectStep","$I_Delay",3],
	  //Während Verzögerungszeit nur Wert übernehmen, wenn I_Step überschritten ist, danach sofort senden. 
		["Multiplexer",["$Konst0","$I_Step"],"$Step","$SelectStep"],
	  //Höhe berechen mit neuem Step-Wert, damit auch nach Ablauf des Timers die Hoehe neu berechnet wird
		["Step","$Hoehe_Soll_Lim","$Hoehe_Soll_Step",0,"$Step",0],
	  //Heizmodus aktiv
  		["Multiplexer",["$Konst0","$Hoehe_Soll_Step"],"$Hoehe_Soll_Out1","$I_Heizmodus"],	
      //Sommer/Winter
		["Multiplexer",["$I_Hoehe_Sommer","$Hoehe_Soll_Out1"],"$Hoehe_Soll_Out","$I_Winter"],
	  //T_Akt > Temp_Soll
	    ["Comparator" , "$Delta_T" , "$Aktiv" , "$Konst0"]
    ],
    "Input":[
        ["Winter","Winter bei Winter=true","$I_Winter","c"],
        ["Hoehe Sommer","Beschattungsposition im Sommer","$I_Hoehe_Sommer","c"],
	    ["T_Soll","Soll-temperatur","$I_Temp_Soll","c"], 
	    ["T_Offset","Offset zu T-Soll, wenn T-Soll der Heizung-Solltemperatur entspricht","$I_Offset","c"], 	    
        ["T_Ist","Ist-Temperatur","$I_Temp_Akt","c"],
		["Heizmodus","Heizung aktiv, d.h. Reglersollwert sind schon Kühlbetrieb","$I_Heizmodus","c"],
 	    ["Hoehe_Min","Min. Beschattungsposition","$I_Hoehe_Min","c"],
 	    ["Hoehe_Max","Max. Beschattungsposition","$I_Hoehe_Max","c"],
 	    ["Delta_T_max","max. deltaT für Höhe 100%","$I_Delta_T_Max","c"],		
   	    ["Step","Position bei der sofort gesendet wird","$I_Step","c"],
        ["Verzögerung","Verzögerungszeit, aber der auch kleinere Höhendifferenzen gesendet werden","$I_Delay","c"]     	    	      
    ],
    "Output":[
        ["Hoehe Soll","Sollhöhe aus Temperaturdifferenz","$Hoehe_Soll_Out","c"],
        ["Hoehe Last","Letzte Höhe","$Hoehe_Soll_OutLast","c"],
        ["Aktiv","Beschattung aktiv, da T>Tsoll","$Aktiv","c"]
    ]
}
/**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.*/
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: Vollautomatische 24h Jalousiesteuerung (Baustein 2: Berechnung Höhe)

Verfasst: Do Feb 27, 2020 6:06 pm
von markusrohr
Guten Tag Robert,

wieder einmal mehr besten Dank für Deine Custom Logiken.

ich mache wieder einmal einen Anlauf um die Jalousiesteuerung umzusetzen. Bei mir erscheinen Debug Ausgänge wenn ich diese Custom Logik kopiere. Stammt der Code von einer älteren Version?
Freundliche Grüsse
Markus Rohr

Re: Vollautomatische 24h Jalousiesteuerung (Baustein 2: Berechnung Höhe)

Verfasst: Do Feb 27, 2020 9:44 pm
von Robert_Mini
Hallo Markus!

Danke für deine Rückfrage.
In der Tat habe ich den Baustein nicht mehr aktualisiert bzw. die Debug-Ausgänge behalten.

Ich habe den Code+Bild ausgetauscht!
Es gibt nun zusätzlich einen Ausgang "Aktiv", der bei einer Höhe >0 den Wert true ausgibt.

lg
Robert

Re: Vollautomatische 24h Jalousiesteuerung (Baustein 2: Berechnung Höhe)

Verfasst: So Jan 31, 2021 4:05 pm
von Piranha
Hallo Robert,

eine Frage was macht der Heizmodus im Vergleich zu Sommer/Winter-Umschaltung? Geht leider nicht aus der Beschreibung hervor.

LG

Alex

Re: Vollautomatische 24h Jalousiesteuerung (Baustein 2: Berechnung Höhe)

Verfasst: So Jan 31, 2021 5:33 pm
von Robert_Mini
Hallo Alex!

Danke für die Rückfrage, hatte ich tatsächlich vergessen.
Ich hab's im Eingangsposting ergänzt.

Sag Bescheid, ob es verständlich beschrieben ist und ACHTUNG: nur bei "True" wird auch der berechnet Wert ausgegen.

lg
Robert

Re: Vollautomatische 24h Jalousiesteuerung (Baustein 2: Berechnung Höhe)

Verfasst: Sa Jul 17, 2021 3:32 pm
von markusrohr
Hallo Robert,

eine eher akademische Frage: wenn ich den Logikbaustein 2 richtig verstehe sendet dieser im Sommer immer die Sollhöhe Sommer (I_Hoehe_Sommer) unabhängig davon ob eine "Übertemperatur" im Raum herrscht oder nicht. Wäre es nicht konsequenter den Ausgang "Hoehe_Soll" im Sommer mit dem "neuen" Ausgang "Aktiv" zu verknüpfen so dass nur bei einem "Delta_T" > 0 der Wert 255 gesendet wird und sonst der Wert =

Ich bin mir bewusst, dass dies in den folgenden Bausteinen aufgefangen wird.

lg Markus

Re: Vollautomatische 24h Jalousiesteuerung (Baustein 2: Berechnung Höhe)

Verfasst: Sa Jul 17, 2021 11:56 pm
von Robert_Mini
Hallo Markus!

Da muss ich dir recht geben. Trifft zwar praktisch nie zu, aber beo so schlechten Sommertagen wie aktuell könnte das schon schlagend werden.
Bisher wollte ich dann aber auch schon für die nächsten heißen Tage ein paar Zehntel-Grad hinüber retten...

Lg
Robert

Re: Vollautomatische 24h Jalousiesteuerung (Baustein 2: Berechnung Höhe)

Verfasst: Mo Sep 26, 2022 10:31 pm
von martin
Hallo Robert,

nachdem der Winterbetrieb nun wieder aktiv ist, hab ich mir das zu häufige Verfahren der Raffstoren aufgrund der Differenztemperatur nochmal genauer angeschaut.
Bei mir kommt die Ist-Temperatur alle 5 Minuten auf den Eingang des Baustein 2 . Auflösung sind 2 Nachkommastellen, d.h. in der Regel wird dadurch der Baustein bei jedem Eingangssignal alle 5 Minuten ausgeführt. Die Verzögerungszeit habe ich auf 30 Minuten parametriert. Innerhalb dieser 30 Minuten wird keine aktualisierte Sollhöhe gesendet. Nach Ablauf des Timers wird der aktuelle Sollwert gesendet. Dieser Sollwert, der durch Ablauf des Timers gesendet wird startet jedoch den Timer nicht erneut. Dieser Neustart des Timers erfolgt erst bei der nächsten Ausführung des Bausteins, d.h. wenn ein weiteres Temperatursignal ankommt. Damit kommen bei mir nach Ablauf des Timers oft zwei Raffstorebewegungen innerhalb von 5-10 Minuten. Auch hier hätte ich gerne die parametrierten 30 Minuten.

Kennst du das Problem bei dir auch und hast ggf. schon eine bessere Lösung?

Bei mir habe ich es jetzt erstmal so gelöst, dass ich den im Eingangspost noch enthaltenen comperator mit float Ausgang auf bool geändert habe, siehe
viewtopic.php?f=95&t=3573&p=39781#p39781

und, dass ich eine Zeile eingefügt habe die die Änderungen an der Ist-Temperatur nur über 0,1K berücksichtigt. Solange die Änderung der Eingangstemperatur unterhalb der 0,1K innerhalb des 5-minuten Signalzyklus bleibt, funktioniert der 30Minuten-Timer dann wieder.

Code: Alles auswählen

/**===========================================================
HoeheSoll aus Temperatur für Winterbetrieb
Sommer fixe einstellbare Höhe
Step und Delay beim Senden
TODO: Step-Min

Ergänzung 2022-09-26 für hochauflösende Eingangstemperatur
============================================================*/
{
    "Level":[
        ["$I_Winter","bool",false],
        ["$I_Heizmodus","bool",false],
        ["$I_Hoehe_Sommer","float",100.0],
		["$I_Temp_Soll","float",24.0],
	    ["$Temp_Soll","float",24.5],
        ["$I_Temp_Akt","float",25.0],
        ["$I_Delta_T_Max","float",25.5],
		["$I_Step","float",20.0],
		["$I_Delay","float",20.0],
		["$I_Hoehe_Max","float",100.0],
		["$I_Hoehe_Min","float",20.0],
        ["$Hoehe_Soll","float",0.0],
        ["$Hoehe_Soll_Lim","float",0.0],
        ["$Hoehe_Soll_Step","float",0.0],
        ["$Hoehe_Soll_OutLast","float",0.0],
        ["$Hoehe_Soll_Out","float",0.0],
        ["$Hoehe_Soll_Out1","float",0.0],
        ["$I_Offset","float",0.5],
        ["$Delta_T","float",0.0],
        ["$Delta_Hoehe","float",0.0],
        ["$Delta_Hoehe_Abs","float",0.0],
        ["$Delta_Hoehe_Select","bool",false],	
        ["$Steigung","float",0.0],
        ["$Konst100","float",100.0],
        ["$Konst1","float",1.0],
        ["$Konst0","float",0.0],
        ["$Val_ok","bool",false],
        ["$Trigger","bool",false],
        ["$Aktiv","bool",false],		
        ["$SelectHoehe","bool",false],
        ["$SelectStep","bool",false],
        ["$Step","float",20.0],
        /* */
        //neu 2022-09-26
        ["$Temp_Smoothen_Step","float",0.1],
        ["$Temp_Akt_Smooth","float",20.0]
        /* */
    ],
    "Module":[
      // Letzte Höhe zu Beginn merken
		["Polynomial", "$Konst1", "$Hoehe_Soll_OutLast",["$Konst0", "$Hoehe_Soll_Out"]],	

	  //Offset berücksichtigen
	    ["Polynomial", "$Konst1", "$Temp_Soll",["$I_Temp_Soll", "$I_Offset"]],
	  /* */ 
	  //neu 2022-09-26 - zappelige Eingangstemperatur dämpfen als workaround, um zu häufiges Versenden nach Ablauf des Timers zu reduzieren
	    ["Step","$I_Temp_Akt","$Temp_Akt_Smooth",0,"$Temp_Smoothen_Step",0],
	  /* */   
      // Delta T zur Solltemperatur berechnen
        ["Polynomial", "$Konst1", "$Delta_T",["$Temp_Akt_Smooth", "-$Temp_Soll"]],	
      // Umrechnung dT in 0-100% 
		["Ratio","$Konst100","$Steigung","$I_Delta_T_Max"],
        ["Polynomial", "$Delta_T", "$Hoehe_Soll",["$Konst0", "$Steigung"]],
      //Sollwert Hoehe auf Min/Max einschränken, wenn <Min => auf Null setzen.
		["Limiter","$Hoehe_Soll","$Hoehe_Soll_Lim","$Val_ok",["$I_Hoehe_Min", "$I_Hoehe_Max"]],
		["Comparator", "$I_Hoehe_Min", "$SelectHoehe", "$Hoehe_Soll"],
        ["Multiplexer",["$Konst0","$Hoehe_Soll_Lim"],"$Hoehe_Soll_Lim","-$SelectHoehe"],			
	  //Höhe berechen mit aktuellem Step-Wert
		["Step","$Hoehe_Soll_Lim","$Hoehe_Soll_Step",0,"$Step",0],
	  //Prüfen ob sich der Wert geändert hat (Änderung>Step) und Verzögerungszeit starten
	  //Re-trigger wenn Step überschritten wird (betragsmäßig)
		["Polynomial", "$Konst1", "$Delta_Hoehe",["$Hoehe_Soll_Step", "-$Hoehe_Soll_OutLast"]],	
		["Comparator" , "-$Delta_Hoehe" , "$Delta_Hoehe_Select" , "$Konst0"],		
		["Multiplexer",["$Delta_Hoehe","-$Delta_Hoehe"],"$Delta_Hoehe_Abs","$Delta_Hoehe_Select"],		
		["Comparator" , "$Delta_Hoehe_Abs" , "$Trigger" , "$Konst0"],   		
		["Monoflop","$Trigger",0,"$SelectStep","$I_Delay",3],
	  //Während Verzögerungszeit nur Wert übernehmen, wenn I_Step überschritten ist, danach sofort senden. 
		["Multiplexer",["$Konst0","$I_Step"],"$Step","$SelectStep"],
	  //Höhe berechen mit neuem Step-Wert, damit auch nach Ablauf des Timers die Hoehe neu berechnet wird
		["Step","$Hoehe_Soll_Lim","$Hoehe_Soll_Step",0,"$Step",0],
	  //Heizmodus aktiv
  		["Multiplexer",["$Konst0","$Hoehe_Soll_Step"],"$Hoehe_Soll_Out1","$I_Heizmodus"],	
      //Sommer/Winter
		["Multiplexer",["$I_Hoehe_Sommer","$Hoehe_Soll_Out1"],"$Hoehe_Soll_Out","$I_Winter"],
	  //T_Akt > Temp_Soll
	    ["Comparator" , "$Delta_T" , "$Aktiv" , "$Konst0"]
    ],
    "Input":[
        ["Winter","Winter bei Winter=true","$I_Winter","c"],
        ["Hoehe Sommer","Beschattungsposition im Sommer","$I_Hoehe_Sommer","c"],
	    ["T_Soll","Soll-temperatur","$I_Temp_Soll","c"], 
	    ["T_Offset","Offset zu T-Soll, wenn T-Soll der Heizung-Solltemperatur entspricht","$I_Offset","c"], 	    
        ["T_Ist","Ist-Temperatur","$I_Temp_Akt","c"],
		["Heizmodus","Heizung aktiv, d.h. Reglersollwert sind schon Kühlbetrieb","$I_Heizmodus","c"],
 	    ["Hoehe_Min","Min. Beschattungsposition","$I_Hoehe_Min","c"],
 	    ["Hoehe_Max","Max. Beschattungsposition","$I_Hoehe_Max","c"],
 	    ["Delta_T_max","max. deltaT für Höhe 100%","$I_Delta_T_Max","c"],		
   	    ["Step","Position bei der sofort gesendet wird","$I_Step","c"],
        ["Verzögerung","Verzögerungszeit, aber der auch kleinere Höhendifferenzen gesendet werden","$I_Delay","c"]     	    	      
    ],
    "Output":[
        ["Hoehe Soll","Sollhöhe aus Temperaturdifferenz","$Hoehe_Soll_Out","c"],
        ["Hoehe Last","Letzte Höhe","$Hoehe_Soll_OutLast","c"],
        ["Aktiv","Beschattung aktiv, da T>Tsoll","$Aktiv","c"]
    ]
}
/**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: Vollautomatische 24h Jalousiesteuerung (Baustein 2: Berechnung Höhe)

Verfasst: Sa Dez 17, 2022 10:32 pm
von Robert_Mini
Hallo @martin !

Ich habe gerade gesehen, dass ich das bei einem anderen Raum schon gefixt habe. Lösung ist in dem Fall so umgesetzt, dass im Spezialfall ablaufender Timer ein Monoflop gestartet wird, das nach 1sec die Logik nochmal triggert und damit auch der zuletzt abgelaufene Timer wieder zu laufen beginnt.
Das Thema float beim comperator kommt nicht vor, hab ich grad geprüft.

Deinen Workaround hab ich jetzt nicht drinnen (da ja nicht notwendig), sollte aber noch rein, da er dem To-Do "Step-Min" entspricht!

Danke und lg
Robert

Code: Alles auswählen

/**===========================================================
HoeheSoll aus Temperatur für Winterbetrieb
Sommer fixe einstellbare Höhe
Step und Delay beim Senden
TODO: Step-Min
============================================================*/
{
    "Level":[
        ["$I_Winter","bool",false],
        ["$I_Heizmodus","bool",false],
        ["$I_Hoehe_Sommer","float",100.0],
		["$I_Temp_Soll","float",24.0],
	    ["$Temp_Soll","float",24.5],
        ["$I_Temp_Akt","float",25.0],
        ["$I_Delta_T_Max","float",25.5],
		["$I_Step","float",20.0],
		["$I_Delay","float",20.0],
		["$I_Hoehe_Max","float",100.0],
		["$I_Hoehe_Min","float",20.0],
		["$I_Offset","float",0.5],
        ["$Hoehe_Soll","integer",0],
        ["$Hoehe_Soll_Lim","integer",0],
        ["$Hoehe_Soll_Step","integer",0],
        ["$Hoehe_Soll_StepB","integer",0],
        ["$Hoehe_Soll_OutLast","integer",0],
        ["$Hoehe_Soll_Out","integer",0],
        ["$Hoehe_Soll_Out1","integer",0],
        ["$Delta_T","float",0.0],
        ["$Delta_Hoehe","integer",0],
        ["$Delta_HoeheLim","integer",0],
        ["$Delta_Timer","float",0.0],
        ["$Steigung","float",0.0],
        ["$Konst100","float",100.0],
        ["$Konst1","float",1.0],
        ["$Konst0","float",0.0],
        ["$KonstTrue","bool",true],
        ["$Val_ok","bool",false],
        ["$Val_Small","bool",false],
        ["$Val_Large1","bool",false],
        ["$Val_Large2","bool",false],
        ["$Val_Large","bool",false],
        ["$Val_Null","bool",false],
        ["$Trigger_Small","bool",false],
        ["$Trigger_Ende","bool",false],
        ["$Toggle","bool",false],
        ["$Aktiv","bool",false],		
        ["$SelectHoehe","bool",false],
        ["$Timer_Aktiv","bool",true],
        ["$Timer_Large","bool",false],
        ["$Timer_Small","bool",false],
        ["$Timer_Small_Last","bool",false],
        ["$Timer_ReTrigger","bool",false],
        ["$Step","float",20.0],
        ["$StepSmall","float",10.0],
        ["$StepLim","float",20.0],
        ["$Delay_ReTrigger","float",1.0]
    ],
    "Module":[
	  //Offset berücksichtigen
	    ["Polynomial", "$Konst1", "$Temp_Soll",["$I_Temp_Soll", "$I_Offset"]],	
      // Delta T zur Solltemperatur berechnen
        ["Polynomial", "$Konst1", "$Delta_T",["$I_Temp_Akt", "-$Temp_Soll"]],	
      // Umrechnung dT in 0-100% 
		["Ratio","$Konst100","$Steigung","$I_Delta_T_Max"],
        ["Polynomial", "$Delta_T", "$Hoehe_Soll",["$Konst0", "$Steigung"]],
      //Sollwert Hoehe auf Min/Max einschränken, wenn <Min => auf Null setzen.
		["Limiter","$Hoehe_Soll","$Hoehe_Soll_Lim","$Val_ok",["$I_Hoehe_Min", "$I_Hoehe_Max"]],
		["Comparator", "$I_Hoehe_Min", "$SelectHoehe", "$Hoehe_Soll"],
        ["Multiplexer",["$Konst0","$Hoehe_Soll_Lim"],"$Hoehe_Soll_Lim","-$SelectHoehe"],			
	  //Höhe berechen mit Minimum-Step-Wert
		["Step","$Hoehe_Soll_Lim","$Hoehe_Soll_Step",0,"$StepSmall",0],
	  
	  //Prüfen ob sich der Wert geändert hat (Änderung>Step) und Verzögerungszeit starten
	  //Re-trigger wenn Step überschritten wird (betragsmäßig)
	  
	  // Differenz zur letzten gesendeten Höhe	
		["Polynomial", "$Konst1", "$Delta_Hoehe",["$Hoehe_Soll_Step", "-$Hoehe_Soll_OutLast"]],	
		// Prüfe ob > 0
		["Limiter","$Delta_Hoehe","$Delta_HoeheLim","$Val_Null",["$Konst0", "$Konst0"]],
		["Limiter","$Delta_Hoehe","$Delta_HoeheLim","$Val_Large1",["-$I_Hoehe_Max", "-$I_Step"]],
		["Limiter","$Delta_Hoehe","$Delta_HoeheLim","$Val_Large2",["$I_Step","$I_Hoehe_Max"]],
	  //Große vs. kleine Änderung ermitteln
	    ["Or" , ["$Val_Large1" , "$Val_Large2"], "$Val_Large"],
	    ["And" , ["-$Val_Large" , "-$Val_Null"], "$Val_Small"],
	  //Wert übernehmen und Timer starten / re-triggern bei großer Änderung
	    ["Monoflop","$Val_Large",0,"$Timer_Large","$I_Delay",1],
	    ["Latch","$Hoehe_Soll_Step","$Hoehe_Soll_StepB","$Val_Large",0],
      //Prüfen ob StepSmall anliegt und Timer_Large oder beide Timer_Small abgelaufen sind
        ["And" , ["$Val_Small","-$Timer_Large","-$Timer_Small"], "$Trigger_Small"],
        ["Latch","$Hoehe_Soll_Step","$Hoehe_Soll_StepB","$Trigger_Small",0],
      
      //Timer starten
        ["Latch","$Timer_Small","$Timer_Small_Last","$KonstTrue",0],
        ["Monoflop","$Trigger_Small","$Val_Large","$Timer_Small","$I_Delay",2],
    
        // Wenn Timer_A_Vor <> Timer_A => Timer hat sich geändert
        // Wenn Small_Step = True => Senden und Logik re-triggern
        // Wenn Small_Step = False => nichts machen
        ["Limiter","$Timer_Small_Last","$Delta_Timer","-$Trigger_Ende",["$Timer_Small","$Timer_Small"]],
        
        ["Monoflop","$Trigger_Ende","$Val_Large","$Timer_ReTrigger","$Delay_ReTrigger",2],
        
	  //Heizmodus aktiv
  		["Multiplexer",["$Konst0","$Hoehe_Soll_StepB"],"$Hoehe_Soll_Out1","-$I_Heizmodus"],	
      //Sommer/Winter
		["Multiplexer",["$I_Hoehe_Sommer","$Hoehe_Soll_Out1"],"$Hoehe_Soll_Out","$I_Winter"],
		 //Beim neuen Aufruf letzten Wert merken
      	["Latch","$Hoehe_Soll_Out","$Hoehe_Soll_OutLast","$KonstTrue",0]
    ],
    "Input":[
        ["Winter","Winter bei Winter=true","$I_Winter","c"],
        ["Hoehe Sommer","Beschattungsposition im Sommer","$I_Hoehe_Sommer","c"],
	    ["T_Soll","Soll-temperatur","$I_Temp_Soll","c"], 
	    ["T_Offset","Offset zu T-Soll, wenn T-Soll der Heizung-Solltemperatur entspricht","$I_Offset","c"], 	    
        ["T_Ist","Ist-Temperatur","$I_Temp_Akt","c"],
		["Heizmodus","Heizung aktiv, d.h. Reglersollwert sind schon Kühlbetrieb","$I_Heizmodus","c"],
 	    ["Hoehe_Min","Min. Beschattungsposition","$I_Hoehe_Min","c"],
 	    ["Hoehe_Max","Max. Beschattungsposition","$I_Hoehe_Max","c"],
 	    ["Delta_T_max","max. deltaT für Höhe 100%","$I_Delta_T_Max","c"],		
   	    ["Step","Position bei der sofort gesendet wird","$I_Step","c"],
        ["Verzögerung","Verzögerungszeit, aber der auch kleinere Höhendifferenzen gesendet werden","$I_Delay","c"]     	    	      
    ],
    "Output":[
        ["Hoehe Soll","Sollhöhe aus Temperaturdifferenz","$Hoehe_Soll_Out","c"],
        ["Hoehe Last","Letzte Höhe","$Hoehe_Soll_OutLast","c"],
		["Debug Timer Large","","$Timer_Large","a"],
		["Debug Timer Small","","$Timer_Small","a"],
		["Debug Timer Re-Trigger","","$Timer_ReTrigger","a"],
		["Debug Delta_Hoehe","","$Delta_Hoehe","a"],
		["Debug Val_Large","","$Val_Large","a"],
		["Debug Val_Small","","$Val_Small","a"]
    ]
}