Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. ioBroker Allgemein
  4. Vergleich Solarprognosen Solarwetter und brightsky

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.9k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.3k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.5k

Vergleich Solarprognosen Solarwetter und brightsky

Geplant Angeheftet Gesperrt Verschoben ioBroker Allgemein
234 Beiträge 7 Kommentatoren 10.7k Aufrufe 10 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • HomoranH Homoran

    @ticaki wenn man die heutige Sonnenscheinverteilung bei mir sieht
    Screenshot_20250909-210217_Firefox.jpg
    hat heute wahrscheinlich die diffuse Strahlung das meiste gebracht :joy:

    K Offline
    K Offline
    klassisch
    Most Active
    schrieb am zuletzt editiert von
    #31

    @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

    @ticaki wenn man die heutige Sonnenscheinverteilung bei mir sieht hat heute wahrscheinlich die diffuse Strahlung das meiste gebracht :joy:

    An solchen Tagen ist die Fahrweise einfach. Ich habe heute auch alles selbst gebraucht.

    HomoranH 1 Antwort Letzte Antwort
    0
    • K klassisch

      @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

      @ticaki wenn man die heutige Sonnenscheinverteilung bei mir sieht hat heute wahrscheinlich die diffuse Strahlung das meiste gebracht :joy:

      An solchen Tagen ist die Fahrweise einfach. Ich habe heute auch alles selbst gebraucht.

      HomoranH Nicht stören
      HomoranH Nicht stören
      Homoran
      Global Moderator Administrators
      schrieb am zuletzt editiert von
      #32

      @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

      Ich habe heute auch alles selbst gebraucht.

      "Meine Batterie ist alle"
      (Bis auf die Reserve für Blackout)

      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

      K 1 Antwort Letzte Antwort
      0
      • HomoranH Homoran

        @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

        Ich habe heute auch alles selbst gebraucht.

        "Meine Batterie ist alle"
        (Bis auf die Reserve für Blackout)

        K Offline
        K Offline
        klassisch
        Most Active
        schrieb am zuletzt editiert von
        #33

        @homoran Heute wird es interessant. Morgennebel, der auch in der DWD App erkennbar ist. Es fehlen also am Morgen 1 bis 2 Stunden Sonne. Dennoch sagt das Skript einen relativ guten Jahresertrag voraus, der es auf Platz 131 in 2025 schaffen würde. Mal schauen was passiert. Wahrscheinlich muß ich den Wirkungsgrad noch ein paar Prozentpunkte pauschal runter nehmen.

        HomoranH 1 Antwort Letzte Antwort
        0
        • K klassisch

          @homoran Heute wird es interessant. Morgennebel, der auch in der DWD App erkennbar ist. Es fehlen also am Morgen 1 bis 2 Stunden Sonne. Dennoch sagt das Skript einen relativ guten Jahresertrag voraus, der es auf Platz 131 in 2025 schaffen würde. Mal schauen was passiert. Wahrscheinlich muß ich den Wirkungsgrad noch ein paar Prozentpunkte pauschal runter nehmen.

          HomoranH Nicht stören
          HomoranH Nicht stören
          Homoran
          Global Moderator Administrators
          schrieb am zuletzt editiert von
          #34

          @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

          Heute wird es interessant

          ja!

          der estimate passt heute zu meiner Faktorisierung.
          Screenshot_20250910-085705_Firefox.jpg

          ich muss mich irgendwann :tm: mal mit den stündlichen Werten beschäftigen

          kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

          Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

          der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

          T 1 Antwort Letzte Antwort
          0
          • HomoranH Homoran

            @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

            Heute wird es interessant

            ja!

            der estimate passt heute zu meiner Faktorisierung.
            Screenshot_20250910-085705_Firefox.jpg

            ich muss mich irgendwann :tm: mal mit den stündlichen Werten beschäftigen

            T Nicht stören
            T Nicht stören
            ticaki
            schrieb am zuletzt editiert von
            #35

            @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

            ich muss mich irgendwann :tm: mal mit den stündlichen Werten beschäftigen

            hm von X kenne ich da das soon ™ - du wast da nicht mal aktiv vor jahrzehnten? :)

            Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

            Spenden

            HomoranH 1 Antwort Letzte Antwort
            0
            • T ticaki

              @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

              ich muss mich irgendwann :tm: mal mit den stündlichen Werten beschäftigen

              hm von X kenne ich da das soon ™ - du wast da nicht mal aktiv vor jahrzehnten? :)

              HomoranH Nicht stören
              HomoranH Nicht stören
              Homoran
              Global Moderator Administrators
              schrieb am zuletzt editiert von
              #36

              @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

              du wast da nicht mal aktiv vor jahrzehnten?

              never! keine unsoziale Medien!

              kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

              Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

              der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

              T 1 Antwort Letzte Antwort
              0
              • HomoranH Homoran

                @ticaki wenn man die heutige Sonnenscheinverteilung bei mir sieht
                Screenshot_20250909-210217_Firefox.jpg
                hat heute wahrscheinlich die diffuse Strahlung das meiste gebracht :joy:

                K Offline
                K Offline
                klassisch
                Most Active
                schrieb am zuletzt editiert von
                #37

                [OT]
                @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                Screenshot_20250909-210217_Firefox.jpg

                Wie erzeugst Du den underlay, also die hellgraue Parabel? Das muß doch auch dynamisch sein. Wäre hier auch vorteilhaft. Dann könnte man sehen, wie zutreffend die stündliche Prognose startet.

                HomoranH 1 Antwort Letzte Antwort
                0
                • HomoranH Homoran

                  @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                  du wast da nicht mal aktiv vor jahrzehnten?

                  never! keine unsoziale Medien!

                  T Nicht stören
                  T Nicht stören
                  ticaki
                  schrieb am zuletzt editiert von
                  #38

                  @homoran
                  vor Jahrzehnte war X nicht vermurks sondern ne Weltraumhandelssimulation von Egosoft :)

                  Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                  Spenden

                  1 Antwort Letzte Antwort
                  1
                  • K klassisch

                    [OT]
                    @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                    Screenshot_20250909-210217_Firefox.jpg

                    Wie erzeugst Du den underlay, also die hellgraue Parabel? Das muß doch auch dynamisch sein. Wäre hier auch vorteilhaft. Dann könnte man sehen, wie zutreffend die stündliche Prognose startet.

                    HomoranH Nicht stören
                    HomoranH Nicht stören
                    Homoran
                    Global Moderator Administrators
                    schrieb am zuletzt editiert von Homoran
                    #39

                    @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                    Wie erzeugst Du den underlay, also die hellgraue Parabel?

                    Das ist eine empirisch ermittelte Parabel. Jetzt im Bereich Equinoktium passt sie ganz gut, zur Sommersonnenwende noch nicht.
                    Schlimmer wurde das Ganze als ich versuchte noch die Temperatur einfließen zu lassen.
                    Da ich (noch) nicht wirklich die Paneltemperatur zur Verfügung habe, arbeite ich mit der Lufttemperatur.
                    Bei reichlich Wind sind die Panels wegen doppellagiger Hinterlüftung aber anscheinend deutlich kühler.

                    Der neue Sensor liegt bereit. will ich im Herbst unter zwei Panels kleben.

                    Ich seh mal ob ich das Teilblockly sinnvoll hier hereinbekomme

                    EDIT:
                    ist das lesbar?
                    Screenshot_20250910-124217_Firefox.jpg

                    kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                    Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                    der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                    K 1 Antwort Letzte Antwort
                    0
                    • HomoranH Homoran

                      @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                      Wie erzeugst Du den underlay, also die hellgraue Parabel?

                      Das ist eine empirisch ermittelte Parabel. Jetzt im Bereich Equinoktium passt sie ganz gut, zur Sommersonnenwende noch nicht.
                      Schlimmer wurde das Ganze als ich versuchte noch die Temperatur einfließen zu lassen.
                      Da ich (noch) nicht wirklich die Paneltemperatur zur Verfügung habe, arbeite ich mit der Lufttemperatur.
                      Bei reichlich Wind sind die Panels wegen doppellagiger Hinterlüftung aber anscheinend deutlich kühler.

                      Der neue Sensor liegt bereit. will ich im Herbst unter zwei Panels kleben.

                      Ich seh mal ob ich das Teilblockly sinnvoll hier hereinbekomme

                      EDIT:
                      ist das lesbar?
                      Screenshot_20250910-124217_Firefox.jpg

                      K Offline
                      K Offline
                      klassisch
                      Most Active
                      schrieb am zuletzt editiert von
                      #40

                      [OT]
                      @homoran Wow, mit Temperaturabhängigkeit! Das sieht etwas nach @Homoran schen Perfektionismus aus.
                      So viel Aufwand, werde ich nicht spendieren. Wenn ich schon Wetter höre, geht mein Fehlerband gleich ganz weit auf.
                      Aber von vorne: Hat diese underlay Kurve einen eigenen Datenpunkt mit einer Sequenz von ts und data, die morgens für history erzeugt wird und dann von flot mit angezeigt wird?

                      HomoranH 1 Antwort Letzte Antwort
                      0
                      • K klassisch

                        [OT]
                        @homoran Wow, mit Temperaturabhängigkeit! Das sieht etwas nach @Homoran schen Perfektionismus aus.
                        So viel Aufwand, werde ich nicht spendieren. Wenn ich schon Wetter höre, geht mein Fehlerband gleich ganz weit auf.
                        Aber von vorne: Hat diese underlay Kurve einen eigenen Datenpunkt mit einer Sequenz von ts und data, die morgens für history erzeugt wird und dann von flot mit angezeigt wird?

                        HomoranH Nicht stören
                        HomoranH Nicht stören
                        Homoran
                        Global Moderator Administrators
                        schrieb am zuletzt editiert von Homoran
                        #41

                        @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                        Hat diese underlay Kurve einen eigenen Datenpunkt

                        ja!

                        @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                        mit einer Sequenz von ts und data, die morgens für history erzeugt wird

                        nein, das kann ich nicht.

                        Die wird live erzeugt (Temperatur und Wind [fehlt noch] kenne ich außerdem morgens noch nicht)

                        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                        T 1 Antwort Letzte Antwort
                        0
                        • HomoranH Homoran

                          @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                          Hat diese underlay Kurve einen eigenen Datenpunkt

                          ja!

                          @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                          mit einer Sequenz von ts und data, die morgens für history erzeugt wird

                          nein, das kann ich nicht.

                          Die wird live erzeugt (Temperatur und Wind [fehlt noch] kenne ich außerdem morgens noch nicht)

                          T Nicht stören
                          T Nicht stören
                          ticaki
                          schrieb am zuletzt editiert von
                          #42

                          @homoran
                          dafür gibts einen Wetteradapter die sagen dir was für temperaturen du erwarten kannst und wind ist da auch :P

                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                          Spenden

                          HomoranH 1 Antwort Letzte Antwort
                          1
                          • T ticaki

                            @homoran
                            dafür gibts einen Wetteradapter die sagen dir was für temperaturen du erwarten kannst und wind ist da auch :P

                            HomoranH Nicht stören
                            HomoranH Nicht stören
                            Homoran
                            Global Moderator Administrators
                            schrieb am zuletzt editiert von Homoran
                            #43

                            @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                            dafür gibts einen Wetteradapter

                            • ist die Quelle vertrauenswürdig? :joy:
                            • das Skript ist uralt

                            kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                            Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                            der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                            K 1 Antwort Letzte Antwort
                            0
                            • HomoranH Homoran

                              @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                              dafür gibts einen Wetteradapter

                              • ist die Quelle vertrauenswürdig? :joy:
                              • das Skript ist uralt
                              K Offline
                              K Offline
                              klassisch
                              Most Active
                              schrieb am zuletzt editiert von
                              #44

                              @homoran brightsky hat Temperaturen und Wind in den stündlichen Datenpunkten.

                              HomoranH 1 Antwort Letzte Antwort
                              0
                              • K klassisch

                                @homoran brightsky hat Temperaturen und Wind in den stündlichen Datenpunkten.

                                HomoranH Nicht stören
                                HomoranH Nicht stören
                                Homoran
                                Global Moderator Administrators
                                schrieb am zuletzt editiert von
                                #45

                                @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                @homoran brightsky hat Temperaturen und Wind in den stündlichen Datenpunkten.

                                wie gesagt habe ich mich
                                a) noch nicht mit den stündlichen Werten beschäftigt
                                b) gab es brightsky vor 4 Jahren noch nicht ( https://forum.iobroker.net/post/592093 )
                                c) wollte ich es "eigentlich" einfacher halten, als in dem verlinkten Thread
                                ...bis der

                                @klassisch sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                @Homoran schen Perfektionismus

                                zuschlug.
                                Da würde die Paneltemperatur sinnvoll sein

                                @homoran sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                Der neue Sensor liegt bereit. will ich im Herbst unter zwei Panels kleben.

                                Außentemperatur und Wind wären da eh nur Hilfsdaten.

                                Ich muss mal sehen, wann ich wieder mehr Zeit hab

                                kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                1 Antwort Letzte Antwort
                                0
                                • T ticaki

                                  @homoran
                                  Bei mir war es auch recht dicht dran. Hier ist aber ein L Dach und ich habe Abschattungen in der Formel ignoriert

                                  HomoranH Nicht stören
                                  HomoranH Nicht stören
                                  Homoran
                                  Global Moderator Administrators
                                  schrieb am zuletzt editiert von
                                  #46

                                  @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                  Bei mir war es auch recht dicht dran.

                                  noch ein upvote geht leider nicht
                                  Screenshot_20250910-195028_Firefox.jpg
                                  Faktorisiert, realer Wert und dein estimate

                                  :+1:

                                  kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                  Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                  der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                  T 1 Antwort Letzte Antwort
                                  0
                                  • HomoranH Homoran

                                    @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                    Bei mir war es auch recht dicht dran.

                                    noch ein upvote geht leider nicht
                                    Screenshot_20250910-195028_Firefox.jpg
                                    Faktorisiert, realer Wert und dein estimate

                                    :+1:

                                    T Nicht stören
                                    T Nicht stören
                                    ticaki
                                    schrieb am zuletzt editiert von ticaki
                                    #47

                                    @homoran

                                    Soll ich das mit der Solarberechung als Feature fürs latest aufnehmen oder taugt es nix? Meine Solaranlage wird durchs L Dach im Sommer ab 19:00 komplett abgeschattet, das einzurechnen ist mir zuviel :) Daher kann ich das schlecht bewerten.

                                    Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                    Spenden

                                    HomoranH 2 Antworten Letzte Antwort
                                    0
                                    • T ticaki

                                      @homoran

                                      Soll ich das mit der Solarberechung als Feature fürs latest aufnehmen oder taugt es nix? Meine Solaranlage wird durchs L Dach im Sommer ab 19:00 komplett abgeschattet, das einzurechnen ist mir zuviel :) Daher kann ich das schlecht bewerten.

                                      HomoranH Nicht stören
                                      HomoranH Nicht stören
                                      Homoran
                                      Global Moderator Administrators
                                      schrieb am zuletzt editiert von
                                      #48

                                      @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                      @homoran

                                      Soll ich das mit der Solarberechung als Feature fürs latest aufnehmen oder taugt es nix?

                                      Also....
                                      es taugt!
                                      es passt zumindest sehr gut zu meiner Faktorisierung.

                                      Screenshot_20250915-081321_Firefox.jpg
                                      lila ist dein Estimate.

                                      kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                      Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                      der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                      1 Antwort Letzte Antwort
                                      0
                                      • T ticaki

                                        @homoran

                                        Soll ich das mit der Solarberechung als Feature fürs latest aufnehmen oder taugt es nix? Meine Solaranlage wird durchs L Dach im Sommer ab 19:00 komplett abgeschattet, das einzurechnen ist mir zuviel :) Daher kann ich das schlecht bewerten.

                                        HomoranH Nicht stören
                                        HomoranH Nicht stören
                                        Homoran
                                        Global Moderator Administrators
                                        schrieb am zuletzt editiert von
                                        #49

                                        @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                        Meine Solaranlage wird durchs L Dach im Sommer ab 19:00 komplett abgeschattet, das einzurechnen ist mir zuviel Daher kann ich das schlecht bewerten.

                                        du hast editiert :grin: !?
                                        Das mit möglichem Optimierungspotential hatte ich wieder gelöscht.

                                        hab da zwar ne Idee, aber keine Zeit und kein Wissen über deinen Algorithmus

                                        kein Support per PN! - Fragen im Forum stellen - es gibt fast nichts, was nicht auch für andere interessant ist.

                                        Benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.

                                        der Installationsfixer: curl -fsL https://iobroker.net/fix.sh | bash -

                                        T 1 Antwort Letzte Antwort
                                        0
                                        • HomoranH Homoran

                                          @ticaki sagte in Vergleich Solarprognosen Solarwetter und brightsky:

                                          Meine Solaranlage wird durchs L Dach im Sommer ab 19:00 komplett abgeschattet, das einzurechnen ist mir zuviel Daher kann ich das schlecht bewerten.

                                          du hast editiert :grin: !?
                                          Das mit möglichem Optimierungspotential hatte ich wieder gelöscht.

                                          hab da zwar ne Idee, aber keine Zeit und kein Wissen über deinen Algorithmus

                                          T Nicht stören
                                          T Nicht stören
                                          ticaki
                                          schrieb am zuletzt editiert von ticaki
                                          #50

                                          @homoran
                                          Ja, wollte das mit dem L Dach klarstellen - damit muß ich dann ne Strahlenverfolgung machen was dann irgendwie so endet - das kann ich ja für mich in nem Skript machen zum rumspielen, aber in einem adapter - wow bis das getestet ist vergeht ja ein Jahr :D und dann will jemand bäume eingeben können ^^

                                          Falls jemand will - Berechnung ob Sonnenstrahlen durch ein Fenster eine definierte Fläche treffen :rolling_on_the_floor_laughing:

                                          function init() {
                                              // === AB HIER: deine States, Fenster/Ziel definieren & aufrufen ===
                                              const altState = '0_userdata.0.sonstiges.sun.altitude';
                                              const aziState = '0_userdata.0.sonstiges.sun.azimuth';
                                          
                                              const windows: {name:string, window: {center: Vec3, width: number, height: number, facadeAzDeg: number, normalElevationDeg: number}, target: TargetSpec}[] = [
                                              {
                                                  name: 'Schlafzimmer',
                                                  window: {
                                                      center:[0, 0, 1], 
                                                      width:1.0, 
                                                      height: 0.60, /*Azimut*/ 
                                                      facadeAzDeg:270, /*Neigung*/ 
                                                      normalElevationDeg:0
                                                  },  // Western, senkrecht
                                                  target: {
                                                      kind: 'wall',
                                                      distance: .1,
                                                      width: 2,
                                                      height:2,
                                                      lateral: 0,
                                                      zCenter: 1
                                                  },                  // Ost-ausgerichtete Wandfläche
                                              }
                                              ];
                                          
                                              const az = Number(getState(aziState).val);
                                              const alt = Number(getState(altState).val);
                                              const win = makeWindowRect(windows[0].window)
                                              const hits = sunlightHitsSurface(az, alt, win, ( buildTargetFromSpec(win, windows[0].target)))
                                              console.log(`Hits surface? ${hits ? "YES" : "NO"} (az=${az}°, alt=${alt}°)`);
                                          }
                                          // Konfigende
                                          // === Vektormathe & Utils (ganz nach oben) ===
                                          type Vec3 = [number, number, number];
                                          type Vec2 = [number, number];
                                          
                                          const add = (a: Vec3, b: Vec3): Vec3 => [a[0]+b[0], a[1]+b[1], a[2]+b[2]];
                                          const sub = (a: Vec3, b: Vec3): Vec3 => [a[0]-b[0], a[1]-b[1], a[2]-b[2]];
                                          const dot = (a: Vec3, b: Vec3): number => a[0]*b[0] + a[1]*b[1] + a[2]*b[2];
                                          const mul = (a: Vec3, s: number): Vec3 => [a[0]*s, a[1]*s, a[2]*s];
                                          const norm = (a: Vec3): Vec3 => {
                                            const l = Math.hypot(a[0], a[1], a[2]) || 1; return [a[0]/l, a[1]/l, a[2]/l];
                                          };
                                          const cross = (a: Vec3, b: Vec3): Vec3 => [
                                            a[1]*b[2]-a[2]*b[1],
                                            a[2]*b[0]-a[0]*b[2],
                                            a[0]*b[1]-a[1]*b[0],
                                          ];
                                          const deg2rad = (d: number) => (d * Math.PI) / 180;
                                          
                                          // === Geometrietyp ===
                                          interface Rect3D {
                                            center: Vec3;
                                            normal: Vec3;
                                            right: Vec3;
                                            up: Vec3;
                                            halfWidth: number;
                                            halfHeight: number;
                                          }
                                          
                                          // === Orientierungen/Factorys ===
                                          function makeOrientationFromAzEl(azDeg: number, elDeg: number) {
                                            const az = deg2rad(azDeg), el = deg2rad(elDeg);
                                            const normal: Vec3 = norm([ Math.sin(az)*Math.cos(el), Math.cos(az)*Math.cos(el), Math.sin(el) ]);
                                            const worldUp: Vec3 = [0,0,1];
                                            let right = cross(worldUp, normal);
                                            if (Math.hypot(right[0], right[1], right[2]) < 1e-8) right = cross([0,1,0], normal);
                                            right = norm(right);
                                            const up = norm(cross(normal, right));
                                            return { normal, right, up };
                                          }
                                          
                                          function makeWindowRect(val:{center: Vec3, width: number, height: number, facadeAzDeg: number, normalElevationDeg: number}): Rect3D {
                                            const { normal, right, up } = makeOrientationFromAzEl(val.facadeAzDeg, val.normalElevationDeg);
                                            return { center:val.center, normal, right, up, halfWidth: val.width/2, halfHeight: val.height/2 };
                                          }
                                          
                                          function makeWallRect(center: Vec3, width: number, height: number, facingAzDeg: number): Rect3D {
                                            const { normal, right, up } = makeOrientationFromAzEl(facingAzDeg, 0);
                                            return { center, normal, right, up, halfWidth: width/2, halfHeight: height/2 };
                                          }
                                          
                                          // === Kernfunktionen für die Flächenprüfung ===
                                          function rectCorners(r: Rect3D): Vec3[] {
                                            const u = norm(r.right), v = norm(r.up);
                                            const dx = mul(u, r.halfWidth), dy = mul(v, r.halfHeight);
                                            return [
                                              add(add(r.center, dx), dy),
                                              add(sub(r.center, dx), dy),
                                              sub(sub(r.center, dx), dy),
                                              sub(add(r.center, dx), dy),
                                            ];
                                          }
                                          
                                          function sunDirIncoming(azDeg: number, altDeg: number): Vec3 {
                                            const az = deg2rad(azDeg), alt = deg2rad(altDeg);
                                            const toSun: Vec3 = [ Math.sin(az)*Math.cos(alt), Math.cos(az)*Math.cos(alt), Math.sin(alt) ];
                                            return norm(mul(toSun, -1));
                                          }
                                          
                                          function projectAlongDirToPlane(P: Vec3, d: Vec3, planeNormal: Vec3, planePoint: Vec3): Vec3 | null {
                                            const n = norm(planeNormal);
                                            const denom = dot(n, d);
                                            if (Math.abs(denom) < 1e-9) return null;
                                            const t = dot(n, sub(planePoint, P)) / denom;
                                            if (t <= 0) return null;
                                            return add(P, mul(d, t));
                                          }
                                          
                                          function toPlane2D(P: Vec3, origin: Vec3, u: Vec3, v: Vec3): Vec2 {
                                            const rel = sub(P, origin);
                                            return [dot(rel, u), dot(rel, v)];
                                          }
                                          
                                          function polygonsOverlap2D(A: Vec2[], B: Vec2[]): boolean {
                                            const axes: Vec2[] = [];
                                            const edges = (poly: Vec2[]) => poly.map((p, i) => {
                                              const q = poly[(i+1)%poly.length]; return [q[0]-p[0], q[1]-p[1]] as Vec2;
                                            });
                                            const addAxes = (poly: Vec2[]) => {
                                              for (const e of edges(poly)) {
                                                const n: Vec2 = [-e[1], e[0]];
                                                const len = Math.hypot(n[0], n[1]) || 1;
                                                axes.push([n[0]/len, n[1]/len]);
                                              }
                                            };
                                            addAxes(A); addAxes(B);
                                          
                                            const proj = (poly: Vec2[], axis: Vec2) => {
                                              let min = Infinity, max = -Infinity;
                                              for (const p of poly) {
                                                const s = p[0]*axis[0] + p[1]*axis[1];
                                                if (s < min) min = s; if (s > max) max = s;
                                              }
                                              return {min, max};
                                            };
                                          
                                            for (const axis of axes) {
                                              const a = proj(A, axis), b = proj(B, axis);
                                              if (a.max < b.min - 1e-9 || b.max < a.min - 1e-9) return false;
                                            }
                                            return true;
                                          }
                                          
                                          function sunlightHitsSurface(sunAzDeg: number, sunAltDeg: number, windowRect: Rect3D, targetRect: Rect3D): boolean {
                                            const d = sunDirIncoming(sunAzDeg, sunAltDeg);
                                            if (dot(d, norm(windowRect.normal)) >= 0) return false; // muss nach innen zeigen
                                          
                                            const winCorners = rectCorners(windowRect);
                                            const proj: Vec3[] = [];
                                            for (const w of winCorners) {
                                              const hit = projectAlongDirToPlane(w, d, targetRect.normal, targetRect.center);
                                              if (hit) proj.push(hit);
                                            }
                                            if (proj.length < 3) return false;
                                          
                                            const tgtCorners = rectCorners(targetRect);
                                            const U = norm(targetRect.right), V = norm(targetRect.up);
                                            const proj2D = proj.map(p => toPlane2D(p, targetRect.center, U, V));
                                            const tgt2D  = tgtCorners.map(p => toPlane2D(p, targetRect.center, U, V));
                                            return polygonsOverlap2D(proj2D, tgt2D);
                                          }
                                          /**
                                           * Erzeugt eine Innen-WAND parallel zum Fenster:
                                           * - Abstand INS ZIMMER entlang (−window.normal)
                                           * - Wand-Normale zeigt ZUM FENSTER (== +window.normal)
                                           * - right/up werden vom Fenster übernommen
                                           */
                                          function makeInteriorWallFromWindow(
                                            windowRect: Rect3D,
                                            distance: number,   // Abstand ins Zimmer (m)
                                            width: number,      // Breite (entlang window.right)
                                            height: number,     // Höhe (entlang window.up)
                                            lateral = 0,        // seitlicher Versatz entlang window.right (m)
                                            zCenter = 0         // vertikaler Versatz des Wandmittelpunkts entlang window.up (m)
                                          ): Rect3D {
                                            const n = norm(windowRect.normal); // außen
                                            const r = norm(windowRect.right);
                                            const u = norm(windowRect.up);
                                          
                                            const center: Vec3 = add(
                                              add(
                                                add(windowRect.center, mul(n, -distance)), // ins Zimmer
                                                mul(r, lateral)                            // seitlich
                                              ),
                                              mul(u, zCenter)                               // vertikal
                                            );
                                          
                                            return {
                                              center,
                                              normal: n,   // Blick zurück zum Fenster
                                              right:  r,
                                              up:     u,
                                              halfWidth:  width / 2,
                                              halfHeight: height / 2,
                                            };
                                          }
                                          
                                          /**
                                           * Erzeugt eine HORIZONTALE Fläche (Boden/Tisch) relativ zum Fenster:
                                           * - Ebene ist horizontal (Normal = Welt +Z)
                                           * - center liegt distance ins Zimmer (−normal), plus lateral entlang window.right, plus absolute Höhe zWorld
                                           * - right wird aus Fenster-right auf die Horizontalebene projiziert (mit Fallback)
                                           */
                                          function makeHorizontalFromWindow(
                                            windowRect: Rect3D,
                                            distance: number,   // Abstand ins Zimmer (m)
                                            width: number,      // Ausdehnung quer (m)
                                            depth: number,      // Ausdehnung in „Tiefe“ (m)
                                            lateral = 0,        // seitlicher Versatz entlang window.right (m)
                                            zWorld = 0,         // absolute Welt-Höhe der Fläche (m)
                                            yawDeg = 0          // Drehung in der Ebene (um +Z), 0°: right ~ projiziertes Fenster-right
                                          ): Rect3D {
                                            const n = norm(windowRect.normal);
                                            const r = norm(windowRect.right);
                                          
                                            // center: vom Fensterzentrum distance nach innen, lateral nach rechts, dann z auf zWorld setzen
                                            let center = add(add(windowRect.center, mul(n, -distance)), mul(r, lateral));
                                            center = [center[0], center[1], zWorld];
                                          
                                            // Horizontalbasis: projiziere Fenster-right auf Ebene z=konstant
                                            let rightH: Vec3 = [r[0], r[1], 0];
                                            const len = Math.hypot(rightH[0], rightH[1]);
                                            if (len < 1e-8) {
                                              // Fallback: n (Fensternormale) um 90° in XY drehen
                                              // (−ny, nx) ist rechtwinklig in XY
                                              rightH = [-n[1], n[0], 0];
                                            } else {
                                              rightH = [rightH[0] / len, rightH[1] / len, 0];
                                            }
                                          
                                            // yaw in der Horizontalebene anwenden
                                            const yaw = (yawDeg * Math.PI) / 180;
                                            const cos = Math.cos(yaw), sin = Math.sin(yaw);
                                            const right: Vec3 = [ rightH[0]*cos - rightH[1]*sin, rightH[0]*sin + rightH[1]*cos, 0 ];
                                            const up:    Vec3 = [ -right[1], right[0], 0 ]; // 90° gedreht, bleibt in XY
                                          
                                            return {
                                              center,
                                              normal: [0, 0, 1],   // horizontal
                                              right:  right,
                                              up:     up,
                                              halfWidth:  width / 2,
                                              halfHeight: depth / 2,
                                            };
                                          }
                                          /** Wand-Spezifikation (parallel zum Fenster, ins Zimmer versetzt) */
                                          interface TargetWall {
                                            kind: 'wall';
                                            /** Abstand ins Zimmer (Meter, entlang -window.normal) */
                                            distance: number;
                                            /** Breite der Wand (entlang window.right, Meter) */
                                            width: number;
                                            /** Höhe der Wand (entlang window.up, Meter) */
                                            height: number;
                                            /** optional: seitlicher Versatz (Meter) entlang window.right */
                                            lateral?: number;
                                            /** optional: vertikale Verschiebung (Meter relativ zum Fensterzentrum) */
                                            zCenter?: number;
                                          }
                                          
                                          /** Horizontale Fläche (Boden, Tisch, Regalbrett …) */
                                          interface TargetFloor {
                                            kind: 'floor';
                                            /** Abstand ins Zimmer (Meter, entlang -window.normal) */
                                            distance: number;
                                            /** Ausdehnung quer (Meter, entlang window.right) */
                                            width: number;
                                            /** Ausdehnung in die Tiefe (Meter, entlang Innenrichtung) */
                                            depth: number;
                                            /** optional: seitlicher Versatz (Meter) entlang window.right */
                                            lateral?: number;
                                            /** optionale absolute Welt-Höhe (z-Koordinate des Mittelpunkts, Meter) */
                                            zWorld?: number;
                                            /** optionale Drehung in der Horizontalebene (0°=Fenster-right, Grad) */
                                            yawDeg?: number;
                                          }
                                          
                                          type TargetSpec = TargetWall | TargetFloor;
                                          
                                          /** Hilfswert: relative z-Lage (zCenter) aus absoluter Welt-Höhe berechnen */
                                          function relZFromWorld(windowRect: Rect3D, zWorld: number): number {
                                            return zWorld - windowRect.center[2];
                                          }
                                          
                                          /**
                                           * Baut aus einer JSON-Spezifikation (TargetWall/TargetFloor) ein fertiges Rechteck (Rect3D).
                                           */
                                          function buildTargetFromSpec(windowRect: Rect3D, spec: TargetSpec): Rect3D {
                                            if (spec.kind === 'wall') {
                                              return makeInteriorWallFromWindow(
                                                windowRect,
                                                spec.distance,
                                                spec.width,
                                                spec.height,
                                                spec.lateral ?? 0,
                                                spec.zCenter ?? 0
                                              );
                                            } else {
                                              return makeHorizontalFromWindow(
                                                windowRect,
                                                spec.distance,
                                                spec.width,
                                                spec.depth,
                                                spec.lateral ?? 0,
                                                spec.zWorld ?? 0,
                                                spec.yawDeg ?? 0
                                              );
                                            }
                                          }
                                          
                                          init();
                                          

                                          EDIT- und mache EDITS wieder drunter sonst haut mich homoran ^^
                                          Das ist ein TS-Skript - leicht getestet scheint aber zu funktionieren, habs dann wieder vergessen. Aktuell wird ergebnis ins log geschrieben

                                          Weather-Warnings Espresense NSPanel-Lovelace-ui Tagesschau

                                          Spenden

                                          HomoranH 1 Antwort Letzte Antwort
                                          1
                                          Antworten
                                          • In einem neuen Thema antworten
                                          Anmelden zum Antworten
                                          • Älteste zuerst
                                          • Neuste zuerst
                                          • Meiste Stimmen


                                          Support us

                                          ioBroker
                                          Community Adapters
                                          Donate
                                          FAQ Cloud / IOT
                                          HowTo: Node.js-Update
                                          HowTo: Backup/Restore
                                          Downloads
                                          BLOG

                                          783

                                          Online

                                          32.4k

                                          Benutzer

                                          81.6k

                                          Themen

                                          1.3m

                                          Beiträge
                                          Community
                                          Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                                          ioBroker Community 2014-2025
                                          logo
                                          • Anmelden

                                          • Du hast noch kein Konto? Registrieren

                                          • Anmelden oder registrieren, um zu suchen
                                          • Erster Beitrag
                                            Letzter Beitrag
                                          0
                                          • Home
                                          • Aktuell
                                          • Tags
                                          • Ungelesen 0
                                          • Kategorien
                                          • Unreplied
                                          • Beliebt
                                          • GitHub
                                          • Docu
                                          • Hilfe