UPGRADE IP 9 verfügbar!
Timberwolf VISU jetzt mit NEUEM Layout Editor
Freie Anordnung, Reihenfolge und Größe der Widgets - viele weitere Verbesserungen
Infos im Wiki: https://elabnet.atlassian.net/l/cp/06SeuHRJ

NEU! Insider & Leistungsmerkmale FÜR ALLE freigeschaltet
Damit kann nun jeder das Upgrade vornehmen und VISU & IFTTT testen. Alle Info hier: viewtopic.php?f=8&t=5074

Zusatzbaustein für Beschattung (Rolladen), aktuell V1.0

Hier stellen Foristen und Kunden Ihre EIGENEN Logikbausteine vor. Diese Logikbausteine stehen jedem im Rahmen der vom Autor eingeräumten / genannten Lizenz zur Verfügung.
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln
Gesperrt

Ersteller
Dragonos2000
Reactions:
Beiträge: 2181
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 481 Mal
Danksagung erhalten: 889 Mal

Zusatzbaustein für Beschattung (Rolladen), aktuell V1.0

#1

Beitrag von Dragonos2000 »

Ich habe damit begonnen, zum "Beschattungsbaustein für Rolladen" noch etwas Logik drumherum zu programmieren, die ich eigentlich nicht direkt in den Beschattungsbaustein integrieren möchte, da doch jeder seine eigenen Vorstellungen hat.
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
Changelog seit V0.1
  • 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"]
	]
}
Beschreibung
  • 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.
Zuletzt geändert von Dragonos2000 am Fr Sep 27, 2019 12:52 am, insgesamt 7-mal geändert.
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit

Ersteller
Dragonos2000
Reactions:
Beiträge: 2181
Registriert: So Aug 12, 2018 1:38 pm
Wohnort: Karlsruher Raum
Hat sich bedankt: 481 Mal
Danksagung erhalten: 889 Mal

#2

Beitrag von Dragonos2000 »

Ich habe damit begonnen, zum "Beschattungsbaustein für Rolladen" noch etwas Logik drumherum zu programmieren, die ich eigentlich nicht direkt in den Beschattungsbaustein integrieren möchte, da doch jeder seine eigenen Vorstellungen hat.
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
Im Moment ist das noch nicht für Livebetrieb!

Code: Alles auswählen

{
	"Level":[
		["$Stat_Min","float",0],
		["$Stat_Max","float",0],
		["$ConstZero","float",0],
		["$MinLux","float",0],
		["$MaxLux","float",0],
		["$O_MaxLuxOut","float",0],
		["$Div_Quotient_short","float",0],
		["$Div_Quotient_long","float",0],
		["$Lim_Min","float",0.35],
		["$Darkness_limit","float",1000],
		["$Sunshine_long","bool",false],
		["$Sunshine_short","bool",false],
		["$BrightnessOK","bool",false],
		["$O_Sun_long","bool",false],
		["$Outlux","float",0],
		["$Result_short","bool",false],
		["$Result_long","bool",false],
		["$Holddownsun","bool",false],
		["$Holddownlux","bool",false],
		["$ConstTrue","bool",true],
		["$MinCResult","bool",false],
		["$MaxCResult","bool",false],
		["$I_Rain","bool",false],
		["$I_Heat","bool",false],
		["$O_Heat","bool",false],
		["$WaitTimesun","float",1],
		["$WaitTimelux","float",10],
		["$LowpassPar","integer",60],
		["$I_Filtertime","integer",600],
		["$VAR<Helligkeit!>","float",0],
		["$VAR<Inhibit?>","bool",false]
	],
	"Module":[
		["Break",["$VAR<Inhibit?>"]],
		["Monoflop","$ConstTrue","-$ConstTrue","$Holddownsun","$WaitTimesun",1],
		["Monoflop","$ConstTrue","-$ConstTrue","$Holddownlux","$WaitTimelux",0],
		["Statistic",["$VAR<Helligkeit!>"],"$Stat_Min","$Stat_Max",0,0],
		["Lowpass","$Stat_Max","$MaxLux","$LowpassPar"],
		["Lowpass","$Stat_Min","$MinLux","$LowpassPar"],
		["Ratio","$MinLux","$Div_Quotient_long","$MaxLux"],
		["Ratio","$Stat_Min","$Div_Quotient_short","$Stat_Max"],
		["Comparator","$Div_Quotient_long","-$Sunshine_long","$Lim_Min"],
		["Comparator","$Div_Quotient_short","-$Sunshine_short","$Lim_Min"],
		["Comparator","$MinLux","$MinCResult","$ConstZero"],
		["Comparator","$MaxLux","$MaxCResult","$Darkness_limit"],
		["And",["$Sunshine_long","$MaxCResult","$MinCResult","-$I_Rain"],"$Result_long"],
		["And",["$Sunshine_short","$MaxCResult","$MinCResult","-$I_Rain"],"$Result_short"],
		["Lowpass","$Stat_Max","$O_MaxLuxOut","$I_Filtertime"],
		["Multiplexer",["$Result_long","$O_Sun_long"],"$O_Sun_long","$Holddownsun"],
		["Multiplexer",["$O_MaxLuxOut","$Outlux"],"$Outlux","$Holddownlux"],
		["And",["$I_Heat","-$I_Rain"],"$O_Heat"]
	],
	"Input":[
		["Helligkeit","Sensorwert","$VAR<Helligkeit!>","c"],
		["Verzoegerung","Verzoegerung in s, bis neue Helligkeit gesendet wird","$WaitTimelux","c"],
		["Filterzeit","Lowpass Zeitkonstante zur Glättung der Helligkeit des Ausgangs","$I_Filtertime","c"],
		["Regensensor","Eingang für Regensensor (Eingang = True)","$I_Rain","c"],
		["Hitzealarm","Eingang für Hitzealarm (Eingang = True)","$I_Heat","c"],
		["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
	],
	"Output":[
		["DebugOut1","Ausgang für Debugging","$Div_Quotient_long","c"],
		["MaxHelligkeit","Ausgang für geglätteten max. Helligkeitswert aller Eingänge","$Outlux","c"],
		["Hitzeschutz","Hitzeschutz der Beschattung aktivieren","$O_Heat","c"],
		["SonneLangzeit","Erkennung Sonnenschein, langsame Reaktionszeit","$O_Sun_long","c"],
		["SonneKurzzeit","Erkennung Sonnenschein, schnelle Reaktionszeit","$Result_short","c"]
	]
}
Beschreibung
  • Der Baustein benötigt mindestens 2 Helligkeitswerte aus sich nicht überlappenden Sektoren
  • Es können beliebig viele Helligkeitssensoren zugeführt werden
  • Die Filterzeit sollte auf etwa 600s eingestellt werden (wirkt sich auf "MaxHelligkeit" aus)
  • Das Umschalten Sonne/keine Sonne des Ausgangs "SonneLangzeit" benötigt etwa 2 Minuten
  • Das Umschalten Sonne/keine Sonne des Ausgangs "SonneKurzzeit" 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
  • Der Ausgang "Hitzeschutz" steuert den Hitzeschutzeingang des Beschattungsausgangs. Derzeit wird der Hitzeschutz beendet bei Regen.
  • Der Ausgang "Debug" hat keine funktionale Bedeutung, dient nur mir zur Ermittlung der besten Werte
Lg
Jochen
____________________________________________________________
TW 2600 #188
VPN offen, Zugriff jederzeit, Experimente jederzeit, Reboot jederzeit
Gesperrt

Zurück zu „Zusätzliche Logikbausteine“