Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Shading erweitern für Dachfenster

Open
#42 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Stale
Tech stack
perl
Domain
backend

Research direction

Start by reading the existing shading logic around ASC_Shading_Pos, Shading_Angle, and MinMaxElevation. Compare its behavior with the twilight device's azimuth and elevation readings and the proposed window-orientation vectors in this issue. Done means roof windows and wall windows use the additional inclination and preserve the existing fixed-limit checks.

Written by the indexing model from the issue text.

Description

enhancement

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.

Dominant language
Perl
Stars
9
Forks
7
PR merge metrics
No merged PRs in 30d

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from fhem/AutoShuttersControl

All issues in fhem/AutoShuttersControl

Similar issues

More Perl issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.