Vereinfacht gesagt: Der Beschattungsbaustein ermittelt die Behanghöhen, unterstützende Logik dazu wird von diesem Baustein kommen.
Funktional geht es um folgendes:
- Erkennung ob Sonne oder keine Sonne, um die Beschattung gezielter steuern zu können
- Umfassende Logik zur Steuerung des Hitzeschutzes
- Ausgang für geglätte Helligkeit, zur Versorgung der Beschattungsbausteine, mit einstellbarem Sendezyklus, damit nicht jede Helligkeitsänderung des Wettersensors alle Beschattungsbausteine unnötig triggert.
u.v.m
- Anpassung des Umschaltgrenzwerts per ext. Parameter (Schaltschwelle kann angepasst werden)
- Abfangen Division durch Null, falls die Sensoren tatsächlichen 0 Lux liefern (würde den Baustein abbrechen lassen)
- Implementierung einer Hysterese
- Ausgang für ungeglätteten maximalen Helligkeitswert
- Ausgang für träge und flinke Ausgabe der Sonnenerkennung
- Eingang zum setzen einer mindest Helligkeit zur Sonnenerkennung
- Mindest Helligkeit deaktiviert auch Hitzeschutz
- Eingang zum Deaktivieren der Sonnenerkennung (maximale Helligkeitswerte werden weiterhin gesendet)
- Es sind standardmäßig bereits die 2 mindestens benötigten Helligkeitseingänge angelegt
Code: Alles auswählen
{
"Level":[
["$Stat_Min","float",0],
["$Stat_Max","float",0],
["$ConstEins","integer",1],
["$ConstHundert","integer",100],
["$ConstTrue","bool",true],
["$MinLux","float",0],
["$MaxLux","float",0],
["$MaxLuxOut","float",0],
["$Div_Quotient_short","float",0],
["$Div_Quotient_long","float",0],
["$Threshold_baseline","float",0.38],
["$Threshold","float",0],
["$P_Threshold_Adjust","integer",0],
["$Threshold_Adjust","float",0.0],
["$Threshold_Hysteresis","float",0],
["$Sunshine_long","bool",false],
["$Sunshine_short","bool",false],
["$Result_long","bool",false],
["$Holddownsun","bool",false],
["$Holddownlux","bool",false],
["$MinCResult","bool",false],
["$MaxCResult","bool",false],
["$Heat_result","bool",false],
["$Holddown_result","bool",false],
["$WaitTimesun","integer",1],
["$LowpassPar","integer",60],
["$P_WaitTimelux","integer",10],
["$P_Hysteresis","float",0.04],
["$P_Darkness_limit_max","float",5000],
["$P_Darkness_limit_min","float",999],
["$P_Filtertime","integer",600],
["$O_Heat","bool",false],
["$O_Sun_long","bool",false],
["$O_Outlux","float",0],
["$O_Result_short","bool",false],
["$I_Rain","bool",false],
["$I_Heat","bool",false],
["$I_SunDis","bool",false],
["$I_Helligkeit","float",0],
["$VAR<I_Helligkeit!>","float",0],
["$VAR<I_HitzeAlmOR?>","bool",false],
["$VAR<I_HitzeAlmAND?>","bool",false],
["$VAR<Inhibit?>","bool",false]
],
"Module":[
["Break",["$VAR<Inhibit?>"]],
["Statistic",["$I_Helligkeit","$VAR<I_Helligkeit!>"],"$Stat_Min","$Stat_Max",0,0],
["Multiplexer",["$ConstEins","$Stat_Min"],"$Stat_Min","$Stat_Min"], //Abfangen Division durch 0 bei Sensorwert 0
["Lowpass","$Stat_Max","$MaxLux","$LowpassPar"], //Glättung Maximalwerte Helligkeit vor Berechnung
["Lowpass","$Stat_Min","$MinLux","$LowpassPar"], //Glättung Minimalwerte Helligkeit vor Berechnung
["Ratio","$MinLux","$Div_Quotient_long","$MaxLux"], //Für langsam reagierenden Ausgang
["Ratio","$Stat_Min","$Div_Quotient_short","$Stat_Max"], //Für schnell reagierenden Ausgang
["Ratio","$P_Threshold_Adjust","$Threshold_Adjust","$ConstHundert"],
["Polynomial","$ConstEins","$Threshold",["$Threshold_baseline","-$Threshold_Adjust"]],
["Polynomial","$ConstEins","$Threshold_Hysteresis",["$Threshold","-$P_Hysteresis"]],
["Comparator","$Div_Quotient_long","-$Sunshine_long",["$Threshold_Hysteresis","$Threshold"]],
["Comparator","$Div_Quotient_short","-$Sunshine_short",["$Threshold_Hysteresis","$Threshold"]],
["Comparator","$MinLux","$MinCResult","$P_Darkness_limit_min"], //Keine Ausgabe Sonnenschein bei zu geringer Helligkeit
["Comparator","$MaxLux","$MaxCResult","$P_Darkness_limit_max"],
["And",["$Sunshine_long","$MaxCResult","$MinCResult","-$I_Rain"],"$Result_long"],
["And",["$Sunshine_short","$MaxCResult","$MinCResult","-$I_Rain"],"$O_Result_short"],
["Or",["$O_Result_short","$I_SunDis"],"$O_Result_short"], //Sperre Sonnenerkennung
["Lowpass","$Stat_Max","$MaxLuxOut","$P_Filtertime"], //Filter für Summenausgang maximale Helligkeit
["Monoflop","$ConstTrue","-$ConstTrue","$Holddownsun","$WaitTimesun",1],
["Monoflop","$ConstTrue","-$ConstTrue","$Holddownlux","$P_WaitTimelux",0],
["Multiplexer",["$Result_long","$Holddown_result"],"$Holddown_result","$Holddownsun"],
["Multiplexer",["$MaxLuxOut","$O_Outlux"],"$O_Outlux","$Holddownlux"],
["Or",["$Holddown_result","$I_SunDis"],"$O_Sun_long"], //Sperre Sonnenerkennung
["And",["$I_Heat","-$I_Rain","$MaxCResult","$VAR<I_HitzeAlmAND?>"],"$Heat_result"], //Ende-Bedingungen Hitzeschutz
["Or",["$Heat_result","$VAR<I_HitzeAlmOR?>"],"$O_Heat"]
],
"Input":[
["Sektor 0","Eingang Helligkeitssensor (Lux)","$I_Helligkeit","c"], //Erster immer benötigter Sektor (mind. 2)
["Sektor","Eingang Helligkeitssensor (Lux)","$VAR<I_Helligkeit!>","c"], //Dynamisches ergänzen weiterer Sektoren, 1 weiterer Sektor auf jeden Fall
["MinimumLux","Mindesthelligkeit zur Erkennung Sonnenschein und deaktivierung Hitzeschutz (empf. 5000)","$P_Darkness_limit_max","c"],
["SchwelleMod","Anpassung Schaltschwelle","$P_Threshold_Adjust","c"],
["Verzoegerung","Verzoegerung in s, bis neue Helligkeit gesendet wird","$P_WaitTimelux","c"],
["Filterzeit","Lowpass Zeitkonstante zur Glättung der Helligkeit des Ausgangs","$P_Filtertime","c"],
["Regensensor","Eingang für Regensensor (Eingang = True)","$I_Rain","c"],
["Hitzealarm","Eingang für Hitzealarm (Eingang = True)","$I_Heat","c"],
["Hitzealarm(UND)"," Weiterer Eingang für Hitzealarm (Eingang = True), log. UND verknüpft","$VAR<I_HitzeAlmAND?>","c"],
["Hitzealarm(ODER)"," Weiterer Eingang für Hitzealarm (Eingang = True), log. ODER verknüpft","$VAR<I_HitzeAlmOR?>","c"],
["SonneSperre","Sperren der Sonnenerkennung (Sperre = True)","$I_SunDis","c"],
["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
],
"Output":[
["MaxLux(gefiltert)","Ausgang für geglätteten max. Helligkeitswert aller Eingänge","$O_Outlux","c"],
["MaxLux(raw)","Ausgang für ungeglätteten max. Helligkeitswert aller Eingänge","$Stat_Max","c"],
["Hitzeschutz","Hitzeschutz der Beschattung aktivieren","$O_Heat","c"],
["SonneLang","Erkennung Sonnenschein, langsame Reaktionszeit (Bei Sonnenscheint = True)","$O_Sun_long","c"],
["SonneKurz","Erkennung Sonnenschein, schnelle Reaktionszeit (Bei Sonnenscheint = True)","$O_Result_short","c"]
]
}
- Der Baustein benötigt mindestens 2 Helligkeitswerte aus sich nicht überlappenden Sektoren
- Es können beliebig viele Helligkeitssensoren zugeführt werden
- Es können beliebig viele Hitzeschutzalarme zugeführt werden (Und/Oder verknüpft)
- Die Filterzeit sollte auf etwa 600s eingestellt werden (wirkt sich auf "MaxHelligkeit" aus)
- Das Umschalten Sonne/keine Sonne des Ausgangs "SonneLang" benötigt etwa 2 Minuten
- Das Umschalten Sonne/keine Sonne des Ausgangs "SonneKurz" benötigt einige Sekunden
- Die einstellbare Verzögerung dient dem Zweck, nicht bei bei jedem neuen Trigger durch geringfügig geänderte Helligkeiten, nachgelagerte Logiken ebenfalls sofort zu triggern (bspw. alle Beschattungsbausteine durch geringfügige Helligkeitsänderungen an einem der Sensoren)
- Bei gesetzter Sperre werden die beiden Sonnen-Ausgänge auf "True" gesetzt
- Die Mindesthelligkeit der Sonnenerkennung kann nun eingestellt werden. Sinnvolle Werte hängen stark von den Helligkeitssensoren ab. Ich empfehle 5000 Lux
- Die Schaltschwelle kann bei Bedarf über den Eingang "SchwelleMod" verändert/verschoben werden (ganzzahlige Werte -10...+10). Positive Werte bedeuten es ist mehr Sonne nötig, um zu schalten.
- Der Ausgang "Hitzeschutz" steuert den Hitzeschutzeingang des Beschattungsausgangs. Hitzeschutz wird beendet bei Regen und wenn "MinimumLux" unterschritten wurde.