-
Notifications
You must be signed in to change notification settings - Fork 6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Shading erweitern für Dachfenster #42
Comments
Ich danke Dir. Ich werde es mir in den kommenden Wochen einmal genauer anschauen. |
Freut mich. Wenn du Fragen hast, sag einfach Bescheid. Ich muss allerdings einen kleinen Schönheitsfehler in meinen Ausführungen korrigieren: |
Hallo, sorry, ich hatte Deine Antwort im Forum übersehen... Die Idee ist, es wird sowohl der Sonneneinfall als Vektor beschrieben, als auch der Rollo-Fahrweg. Damit kann man dann den Winkel der beiden Vektoren berechnen. Damit und mit den Infos wie groß der Fensterausschnitt, sowie eventuelle Mauervorsprünge oder Aufbauten sind, läßt sich relativ exakt ausrechnen, wie weit der Rollo fahren muß, um das Fenster in der gewünschten Weise zu beschatten. Würde mich sehr freuen, wenn Du das irgendwie in das Modul integrieren könntest! Wenn Du irgendwelche Fragen hast, sag Bescheid!
|
Hallo, Jetzt habe ich den Code in eine Excel Tabelle übertragen um herauszufinden ob das bei meiner Loxone Steuerung auch funktionieren würde. Es schaut schon ziemlich gut aus. Beste Grüße |
Also vorab, die Logik ist nicht 100% perfekt, denn es gibt wahrscheinlich immer Sonder- und Grenzfälle, in denen es nicht (mehr) perfekt funktioniert. Aber ich habe versucht einige Besonderheiten zu berücksichtigen. Dafür sind u.a. die beiden Parameter Aufbau und Tiefe gedacht: Aufbau = Alles, was "über" (= im 90°-Winkel zur Fensterfläche) "hoch" steht. Bei Dachfenstern ist das z.B. der Rollladenkasten. Wenn die Sonne fast parallel zur Dachfläche scheint, bewirkt der Rollokoasten einen Schatten, der effektiv die Dachneigung erhöht. D.h. die Sonne muss höher stehen als ohne, um ins Fenster zu scheinen. Bei senkrechten Fenstern kann das aber auch ein Mauervorsprung über dem Fenster sein, im Extremfall z.B. ein Balkon über dem Fenster. All das bewirkt, dass der Rollladen bei einem anderen Sonnenwinkel reagieren muss, als bei einem "nackten" Fenster. Tiefe = Bei mir sind die Rollläden 100% Lichtundurchlässig. D.h. wenn sie zu sind, muss ich das Licht einschalten. Das fühlt sich natürlich im Hochsommer am helligen Tag ziemlich blöd an, weshalb ich möchte, dass der Rolladen die Sonne nicht zu 100% abschattet, sondern zuläßt, dass die Sonne etwas in die Fensterlaibung nach innen scheint und damit das Zimmer noch etwas beleuchtet. Dabei muss man natürlich abwägen zwischen Hitze versus Licht. Der Parameter "Tiefe" steht dabei für das Maß in "cm", bis zu der die Sonne von der Fensterfläche nach innen kommen darf. Bei 20 cm z.B. sollte die Sonne noch 20 cm "rein" scheinen. Hoffe, das hilft... Edit: |
@linuzer Ich habe ein Problem in dem Skript identifiziert, was bei flachen Dachfenstern zu extremen Abweichungen führt. Zwar wird die Ausrichtung des Fensters für die Berechnung des Winkels berücksichtigt, aber nicht für Berechnung der Öffnung. Zur Veranschaulichung habe ich hier eine Skizze des Fehlers: |
Hey, wie schon im Forum kurz andiskutiert, würde ich mich sehr freuen, wenn die Beschattungssteuerung so geändert würde, dass auch Dachfenster ideal beschattet werden können.
Als kurze Erklärung: Nur mit festen Grenzen für Azimuth/Elevation kommt man bei der Beschattung Dachfenstern leider nicht weit.
Beispiel:
Dachfenster zeigt nach Norden (ASC_Shading_Pos = 0). Sonne steht voll im Süden (azimuth=180). Sonne steht bei Elevation 60°, Dachneigung wäre 30°. Obwohl die Sonne auf der gegenüberliegenden Seite steht, würde sie dennoch ins Fenster scheinen (mit einem Einfallswinkel von 30°). Das wird leider derzeit nicht erfasst.
Meine Idee, wie ich sie bisher (wohl gemerkt schlecht programmiert) in meinen myUtils umgesetzt habe:
Zusätzlich zum bisherigen Vorgehen müsste für jedes Fenster neben ASC_Shading_Pos die Neigung des Fensters zur Horizontalen angegeben werden (bei einem Wandfenster also per default 90°).
Danach wird das Fenster und der Sonnenstand als 3 dimensionaler Vektor dargestellt und der tatsächliche Einfallwinkel berechnet: ("sonnenstand" ein einfaches twilight Device)
my $sun_az_grad = ReadingsVal("sonnenstand","azimuth",0) ;
my $sun_el_grad = ReadingsVal("sonnenstand","elevation",0) ;
my $sun_az_rad = $sun_az_grad * 3.14 / 180 ;
my $sun_el_rad = $sun_el_grad * 3.14 / 180 ;
my $x_sun = sin($sun_az_rad) * cos($sun_el_rad) ;
my $y_sun = cos($sun_az_rad) * cos($sun_el_rad) ;
my $z_sun = sin($sun_el_rad) ;
$ausrichtung_az = $grenzen[0] / 180 * 3.14 ; #### entspricht ASC_Shading_Pos
$ausrichtung_el = $grenzen[1] / 180 * 3.14 ; #### entspricht der Dachneigung
$x_fenster = sin($ausrichtung_az) * cos($ausrichtung_el) ;
$y_fenster = cos($ausrichtung_az) * cos($ausrichtung_el) ;
$z_fenster = sin($ausrichtung_el) ;
$schnittwinkel = max ( 0, ( asin ( $x_fenster * $x_sun + $y_fenster * $y_sun + $z_fenster * $z_sun ) ) * 180 / 3.14 ) ;
Der tatsächlich berechnete Schnittwinkel könnte dann mit einem Maximal-Schnittwinkel verglichen werden (bei mir z.B. 15°) und wenn der überschritten wird, soll beschattet werden.
Funktioniert bei mir seit 2 Jahren tadellos (auch für Wandfenster). Aber die vielen DOIFs und myUtils sind nicht halb so schick wie dein ASC-Modul :-)
PS: Die festen Grenzen (Shading_Angle, MinMaxElevation) sollten dennoch bleiben und weiterhin abgefragt werden um beispielsweise Beschattung durch nahe stehende Bäume/Häuser mitzunehmen.
The text was updated successfully, but these errors were encountered: