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

Baustein zur Erkennung von Sonnenschein, 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

Baustein zur Erkennung von Sonnenschein, aktuell: V1.0

#1

Beitrag von Dragonos2000 »

Da nachgefragt wurde hier ein Bausteincode, um zu erkennen, ob die Sonne scheint. Ich werde hier immer die aktuelle Version posten, inhaltliche Diskussionen bitte in einem separaten Thread, daher ist hier für Beiträge gesperrt.

Zeit für die nächste Version :)

Changelog seit V0.8
  • 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
  • Eingang zum Deaktivieren der Sonnenerkennung (maximale Helligkeitswerte werden weiterhin gesendet)
  • Es sind standardmäßig bereits die 2 mindestens benötigten Helligkeitseingänge angelegt
########### V1.0 ###########

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],		
		["$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_Sun_long","bool",false],
		["$O_Outlux","float",0],
		["$O_Result_short","bool",false],
		["$I_SunDis","bool",false],
		["$I_Helligkeit","float",0],
		["$VAR<I_Helligkeit!>","float",0],
		["$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"],"$Result_long"],
		["And",["$Sunshine_short","$MaxCResult","$MinCResult"],"$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
	],
	"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 (ca. +/- 10, positive Werte bedeuten mehr Sonne um zu schalten)","$P_Threshold_Adjust","c"],
		["Verzoegerung","Verzoegerung in s, bis neue Helligkeit gesendet wird (empf. 60s)","$P_WaitTimelux","c"],
		["Filterzeit","Lowpass Zeitkonstante zur Glättung der Helligkeit des Ausgangs (empf. 600s)","$P_Filtertime","c"],
		["SonneSperre","Sperren der Sonnenerkennung (Gesperrt = True); MaxLux wird weiterhin gesendet","$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"],
		["SonneLang","Sonne scheint, langsame Reaktionszeit (Bei Sonnenschein = True)","$O_Sun_long","c"],
		["SonneKurz","Sonne scheint, schnelle Reaktionszeit (Bei Sonnenschein = 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
  • Das Umschalten Sonne/keine Sonne (lang) benötigt etwa 2 Minuten
  • 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.
Zuletzt geändert von Dragonos2000 am Do Sep 26, 2019 11:47 pm, insgesamt 14-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 »

Backlog für die nächsten Releases:
  1. Ausgang für den geglätteten maximalen Helligkeitswert aller Eingänge
  2. Zusätzlicher Ausgang für verzögertes Schalten Sonne/keine Sonne (-> separater Zusatzbaustein für Beschattung)
  3. Geändertes Sendeverhalten (Ausgangskonfiguration nicht "on Timer")
  4. Einstellbarer Schwellwert für Mindesthelligkeit, bevor "keine Sonne" ausgegeben wird
  5. Logik für optimierte Steuerung Hitzeschutz für Beschattungsbaustein (-> separater Zusatzbaustein für Beschattung)
Zuletzt geändert von Dragonos2000 am Sa Sep 07, 2019 7:32 pm, insgesamt 5-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

#3

Beitrag von Dragonos2000 »

Der Code ist experimentell.

########### V0.7 ###########

Code: Alles auswählen

{
    "Level":[
		["$Stat_Min","float",0],
		["$Stat_Max","float",0],
                ["$Stat_Mean","float",0],
		["$Stat_Median","float",0],
		["$Div_Quotient","float",0],
		["$Lim_Min","float",0.35],
		["$Darkness_limit","float",0],
		["$Sunshine","bool",false],
		["$TooDark","bool",false],
		["$Out","bool",false],
		["$ConstTrue","bool",true],
		["$WaitTime","float",1],
		["$VAR<Helligkeit!>","float",0],
		["$VAR<Inhibit?>","bool",false]
    ],
    "Module":[
                ["Break",["$VAR<Inhibit?>"]],
		["Monoflop","$ConstTrue","-$ConstTrue",0,"$WaitTime",1],
                ["Statistic",["$VAR<Helligkeit!>"],"$Stat_Min","$Stat_Max","$Stat_Mean","$Stat_Median"],
                ["Ratio","$Stat_Min","$Div_Quotient","$Stat_Max"],
		["Comparator","$Div_Quotient","-$Sunshine","$Lim_Min"],
		["Comparator","$Div_Quotient","$TooDark","$Darkness_limit"],
		["And",["$Sunshine","$TooDark"],"$Out"]
    ],
    "Input":[
                ["Helligkeit","Sensorwert","$VAR<Helligkeit!>","c"],
		["Wartezeit","Wartezeit nach Eingang des ersten Triggers bevor Ergebnis gesendet wird","$WaitTime","c"],
                ["Inhibit","INHIBIT","$VAR<Inhibit?>","u"]
    ],
    "Output":[
                ["Debug","Debug Ausgang (entfällt zu einem späteren Zeitpunkt)","$Div_Quotient","t"],
		["Sonne","Sonne scheint","$Out","t"]
    ]
}
Beschreibung
  • Der Baustein benötigt mindestens 2 Helligkeitswerte aus sich nicht überlappenden Sektoren
  • Es können beliebig viele Helligkeitssensoren zugeführt werden
  • Das Umschalten Sonne/keine Sonne erfolgt ohne Verzögerung
  • Der Ausgang "Debug" hat keine funktionale Bedeutung, dient nur mir zur Ermittlung der besten Werte
  • Der Ausgang "Sonne" muss so konfiguriert sein, dass er nur "on Timer" sendet (Option "T")
Die Verzögerung dient dem Zweck ein Umschalten des Ausgangs zu verhindern, solange nicht alle Werte aktualisiert wurden. Bei meiner Wetterstation kommen bspw. die Werte nacheinander innerhalb etwa 1s. Das hat dann mitunter zu falschem kurzzeitigem Umschalten geführt, weil neue mit alten Werten verglichen wurden. Im nächsten Baustein ist das etwas anders gelöst.
Zuletzt geändert von Dragonos2000 am Sa Sep 07, 2019 7:45 pm, insgesamt 1-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

#4

Beitrag von Dragonos2000 »

Da nachgefragt wurde hier ein Bausteincode, um zu erkennen, ob die Sonne scheint. Ich werde hier immer die aktuelle Version posten, inhaltliche Diskussionen bitte in einem separaten Thread, daher ist hier für Beiträge gesperrt.

Zeit für ein Update :)

Changelog
  • Gezieltes durchschalten des Ausgangs (Ausgang muss nicht auf "on Timer" umgestellt werden)
  • Intern verarbeitete Helligkeitswerte sind geglättet
  • Ausgang für geglätteten max. Helligkeitswert
Der Code ist noch experimentell!

########### V0.8 ###########

Code: Alles auswählen

{
	"Level":[
		["$Stat_Min","float",0],
		["$Stat_Max","float",0],
		["$ConstZero","float",0],
		["$ConstTrue","bool",true],
		["$MinLux","float",0],
		["$MaxLux","float",0],
		["$MaxLuxOut","float",0],
		["$Div_Quotient_long","float",0],
		["$Lim_Min","float",0.35],
		["$Darkness_limit","float",1000],
		["$Sunshine","bool",false],
		["$Result","bool",false],
		["$Holddownsun","bool",false],
		["$Holddownlux","bool",false],
		["$LowpassPar","integer",60],
		["$MinCResult","bool",false],
		["$MaxCResult","bool",false],
		["$O_Lux","float",0],
		["$O_Sun","bool",false],
		["$P_WaitTimesun","float",1],
		["$P_WaitTimelux","float",10],
		["$P_Filtertime","integer",600],
		["$VAR<I_Helligkeit!>","float",0],
		["$VAR<Inhibit?>","bool",false]
	],
	"Module":[
		["Break",["$VAR<Inhibit?>"]],
		["Monoflop","$ConstTrue","-$ConstTrue","$Holddownsun","$P_WaitTimesun",1],
		["Monoflop","$ConstTrue","-$ConstTrue","$Holddownlux","$P_WaitTimelux",0],
		["Statistic",["$VAR<I_Helligkeit!>"],"$Stat_Min","$Stat_Max",0,0],
		["Lowpass","$Stat_Max","$MaxLux","$LowpassPar"],
		["Lowpass","$Stat_Min","$MinLux","$LowpassPar"],
		["Ratio","$MinLux","$Div_Quotient_long","$MaxLux"],
		["Comparator","$Div_Quotient_long","-$Sunshine","$Lim_Min"],
		["Comparator","$MinLux","$MinCResult","$ConstZero"],
		["Comparator","$MaxLux","$MaxCResult","$Darkness_limit"],
		["And",["$Sunshine","$MaxCResult","$MinCResult"],"$Result"],
		["Lowpass","$Stat_Max","$MaxLuxOut","$P_Filtertime"],
		["Multiplexer",["$Result","$O_Sun"],"$O_Sun","$Holddownsun"],
		["Multiplexer",["$MaxLuxOut","$O_Lux"],"$O_Lux","$Holddownlux"]
	],
	"Input":[
		["Helligkeit","Sensorwert","$VAR<I_Helligkeit!>","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"],
		["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","$O_Lux","c"],
		["Sonne","Erkennung Sonnenschein","$O_Sun","c"]
	]
}
Beschreibung
  • Der Baustein benötigt mindestens 2 Helligkeitswerte aus sich nicht überlappenden Sektoren
  • Es können beliebig viele Helligkeitssensoren zugeführt werden
  • Das Umschalten Sonne/keine Sonne benötigt etwa 2 Minuten
  • 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 "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“