Ankündigung

Einklappen
Keine Ankündigung bisher.

Beschattung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #46
    Hoi Michael

    Ich hab' für mich und meine Lamellenstoren herausgefunden, dass bei jeder Elevation grösser 45-50° mit waagrechten Lamellen eine ausreichende Beschattung erfolgt.
    Also hab' ich eine Variable el eingeführt, die nicht grösser 50 wird.
    el=0f32
    if elevation()>=50f32 and change(elevation()) then el=50f32 endif
    if elevation()<50f32 and change(elevation()) then el=elevation() endif
    [/CODE]
    Dann habe ich eine Geradenfunktion ersonnen:
    Code:
    lamelle=90-1.8*el (1.8 ist 90/50)
    Zuletzt erwartet mein Aktor einen Wert 0 bis 180.
    Daher hab' ich alles mal 2 genommen.
    Code:
    lamelle=2*(90-(1.8*el))
    Code:
    // Beschattung Suedfenster 90-270°
    :begin BeschattungSued(GAFreigabe, GAPosJal, GAPosLam, GALang, LaengeProz)
    :info $Beschattung eines Süd-Fensters$ \\
        $Gruppenadresse der Freigabe$ \\
        $Gruppenadresse der Position der Jalousie$ \\
        $Gruppenadresse der Position der Lamelle$ \\
        $Gruppenadresse der Jalousiefahrt$ \\
        $Länge des Behangs in Prozent$ \\
    :shortinfo $Beschattung eines Süd-Fensters$
    if GAFreigabe and (elevation()>2f32) and azimuth()>95f32 and azimuth()<265f32 then write(GAPosJal,LaengeProz) endif 
    if GAFreigabe and (elevation()>2f32) and !(azimuth()>95f32 and azimuth()<265f32) then write(GALang,AUS) endif
    if GAFreigabe and (elevation()<2f32) then write(GALang,AUS) endif 
    if GAFreigabe and (elevation()>2f32) and azimuth()>95f32 and azimuth()<265f32 and change(azimuth()) \\
    then write(GAPosLam,convert(2f32*(90f32-(1.8f32*el)),0u08)) endif 
    if GAFreigabe and (elevation()>2f32) and !(azimuth()>95f32 and azimuth()<265f32) then write(GAPosLam,1) endif 
    :end
    Bin gerade am Testen
    Grüsse Bodo
    Fragen gehören ins Forum, und nicht in mein Postfach;
    EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

    Kommentar


      #47
      Hallo Bodo.

      Wie sieht das denn mit den Verstellzeitpunkten aus?

      Ich stell mir das so vor, dass jedesmal, wenn die elevation berechnet wird, ein anderer Wert geliefert wird (da ja etwas (wenn auch nur wenig) Zeit vergangen ist). Wenn du diesen Wert nun umrechnest und dann zum Aktor sendest erhält dieser einen Wert <> voriger Wert. Somit muss er die Lamellen verstellen. Dreht dieser dann alle 10 sek. um 0,00001° die Lamellen zu? Oder ist da im Aktor noch eine Art Hysterese implementiert, damit dieses Verhalten nicht auftritt? Ansonsten könnte ich mir vorstellen, dass das für die Lebensdauer des Aktors bzw. des Motors nicht förderlich ist.
      Wenn das so ist, würde ich noch ein Round oder einen Cast auf eine ganze Zahl einbauen.

      lg
      neuli

      Kommentar


        #48
        Zitat von neuli Beitrag anzeigen
        Wie sieht das denn mit den Verstellzeitpunkten aus?
        Ich stell mir das so vor, dass jedesmal, wenn die elevation berechnet wird, ein anderer Wert geliefert wird (da ja etwas (wenn auch nur wenig) Zeit vergangen ist)
        Elevation wird alle 5 Min neu berechnet.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #49
          Genau, nicht mal alle 5 min. gibt es eine klitzekleine Verstellung, man hört es nicht einmal.
          Mir ist nur noch aufgefallen, dass bei Ende der Azimuth Winkel "Zuständigkeit" für die jeweilige Fassade, der Stor nicht von selbst hoch fährt.
          Ich muss daher noch die Änderung Azimuth Abfrage einbauen.
          Grüsse Bodo
          Fragen gehören ins Forum, und nicht in mein Postfach;
          EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

          Kommentar


            #50
            Hallo Bodo, du grosser Beschattungsspezialist,

            hats du auch eine Lösung für uns hier im Norden, wir brauchen das Gegenteil, wie kann man mit dem EibPC mehr Sonne einstellen??

            Aber für deine Lösung.
            Der schöne Niederrhein läßt Grüssen

            Andreas


            Alter Hof mit neuer Technik

            Kommentar


              #51
              manuelle Beschattung

              Hallo!

              Die automatische Beschattung läuft dank euch :-) schon mal ganz gut. Genaue Tests kann man halt im Moment nicht machen - regnet seit Tagen...

              Ich möchte nun auch eine manuelle Beschattung machen, mit einem Shifter rauf/stop/runter mit einem weiteren möchte ich die Lamellenstellung mit +/- einstellen. Optimal wäre 0%/20%/40%/60%/80%/100% und das auch anzeigen.

              Wie kann ich einen Überlauf verhindern? Weiters schaffe ich es nicht daß der Wert in % angezeigt wird.

              Code:
              // Beschattung Manuell
              if webbutton(80)==1 then write ("Esszimmer 21A1bc fahren-6/1/4",1b01) endif
              if webbutton(80)==2 then write ("Esszimmer 21A1bc Stop-6/1/5",1b01) endif
              if webbutton(80)==3 then write ("Esszimmer 21A1bc fahren-6/1/4",0b01) endif
              if stime(1) then read("Esszimmer 21A1bc STATUS-6/1/6") endif
              if stime(2) and "Esszimmer 21A1bc STATUS-6/1/6"==EIN then webdisplay (80,$ $,BLIND,STATE6,GREY) else webdisplay (80,$ $,BLIND,INACTIVE,GREY) endif
              ManLamelleEsszimmer=0u08
              if webbutton(81)==1 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then ManLamelleEsszimmer=ManLamelleEsszimmer+20; write ("Esszimmer 21A1bc Lamelle-6/1/25",ManLamelleEsszimmer); webdisplay (81,convert(ManLamelleEsszimmer/255*100, $  $c14) + $ %$c14,BLIND,INACTIVE,GREY) endif
              if webbutton(81)==3 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then ManLamelleEsszimmer=ManLamelleEsszimmer-20; write ("Esszimmer 21A1bc Lamelle-6/1/25",ManLamelleEsszimmer); webdisplay (81,convert(ManLamelleEsszimmer/255*100, $  $c14) + $ %$c14,BLIND,INACTIVE,GREY) endif
              Code:
              webdisplay (81,convert(ManLamelleEsszimmer/255*100, $  $c14) + $  %$c14,BLIND,INACTIVE,GREY)
              ...zeigt immer 0 an
              Code:
              webdisplay (81,convert(ManLamelleEsszimmer, $  $c14) + $  %$c14,BLIND,INACTIVE,GREY)
              ...zeigt den Byte Wert an

              Wäre toll wenn ihr mir da weiterhelfen könntet...
              EibPc im Privathaus

              Kommentar


                #52
                Zitat von hredl Beitrag anzeigen


                Code:
                webdisplay (81,convert(ManLamelleEsszimmer/255*100, $  $c14) + $  %$c14,BLIND,INACTIVE,GREY)
                ...zeigt immer 0 an


                Code:
                webdisplay (81,convert(ManLamelleEsszimmer, $  $c14) + $  %$c14,BLIND,INACTIVE,GREY)
                ...zeigt den Byte Wert an

                Wäre toll wenn ihr mir da weiterhelfen könntet...
                Hm. ManLamelleEsszimmer ist lt. Definition ein u08 mit Werten zwischen 0 und 255. Du führst eine Ganzzahldivision durch so daß Du nur bei 255 dann 1 rausbekommst und mit 100 multipliziert ergibt das dann 0 oder 100.

                Code:
                // Byte2Percent
                Byte = ManLamelleEsszimmer   // u08
                Percent = 0u08
                Helper = 0f16
                
                if change(Byte) then {
                    Helper = convert(Byte,0f16) *100f16 / 255f16;
                    Percent = convert( Helper, u08 )
                }
                
                webdisplay (81,convert(Percent, $$c14) + $   %$c14,BLIND,INACTIVE,GREY)
                Ich habe den Code nicht ausprobiert, aber er sollte anzeigen, was Du willst. Ich habe weiterhin den oberen Bereich so geschrieben, das Du bequem ein Makro draus machen kannst wenn Du willst. Natürlich kannst Du das ganze auch als

                Code:
                webdisplay (81,convert( convert ( convert(ManLamelleEsszimmer, 0f16) * 100f16 / 255f16, u08 ), $$c14) + $   %$c14,BLIND,INACTIVE,GREY)
                schreiben...

                Gruß,
                Bernd

                Kommentar


                  #53
                  danke

                  Hi

                  danke, funktioniert perfekt. vielen dank!

                  wie kann ich verhindern daß es bei - und + einen überlauf gibt? wenn ich im moment oft genug auf + (oder auch -) drücke überspringe ich 255 und bin wieder bei 0 - das ist unschön!

                  lg
                  hermann
                  EibPc im Privathaus

                  Kommentar


                    #54
                    Zitat von hredl Beitrag anzeigen
                    Code:
                    if webbutton(81)==1 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then ManLamelleEsszimmer=ManLamelleEsszimmer+20; write ("Esszimmer 21A1bc Lamelle-6/1/25",ManLamelleEsszimmer); webdisplay (81,convert(ManLamelleEsszimmer/255*100, $  $c14) + $ %$c14,BLIND,INACTIVE,GREY) endif
                    if webbutton(81)==3 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then ManLamelleEsszimmer=ManLamelleEsszimmer-20; write ("Esszimmer 21A1bc Lamelle-6/1/25",ManLamelleEsszimmer); webdisplay (81,convert(ManLamelleEsszimmer/255*100, $  $c14) + $ %$c14,BLIND,INACTIVE,GREY) endif
                    Ich würde noch etwas ändern:
                    Code:
                    if webbutton(81)==1 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then  ManLamelleEsszimmer=ManLamelleEsszimmer+20 endif
                    if webbutton(81)==3 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then  ManLamelleEsszimmer=ManLamelleEsszimmer-20 endif
                    Anzeige=INACTIVE
                    if "Esszimmer 21A1bc Lamelle-6/1/25">20% then Anzeige=STATE3 endif
                    if "Esszimmer 21A1bc Lamelle-6/1/25">40% then Anzeige=STATE4 endif
                    // ... usw siehe Doku Zustände  
                    if change(ManLamelleEsszimmer) write ("Esszimmer 21A1bc  Lamelle-6/1/25",ManLamelleEsszimmer) endif 
                    if change("Esszimmer 21A1bc Lamelle-6/1/25") then webdisplay  (81,convert(ManLamelleEsszimmer/255*100, $  $c14) + $  %$c14,BLIND,Anzeige,GREY) endif
                    Jetzt wird der Zustand immer angezeigt und der Code ist schöner wartbar (finde ich)
                    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                    Enertex Produkte kaufen

                    Kommentar


                      #55
                      Hi Herman,

                      Zitat von hredl Beitrag anzeigen
                      wie kann ich verhindern daß es bei - und + einen überlauf gibt? wenn ich im moment oft genug auf + (oder auch -) drücke überspringe ich 255 und bin wieder bei 0 - das ist unschön!
                      Ich würde das dann so erweitern

                      Code:
                      Gewuenscht_ManLamelle = 0s16
                      
                      if webbutton(81)==1 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then  Gewuenscht_ManLamelle =Gewuenscht_ManLamelle +20s16 endif
                      if webbutton(81)==3 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then  Gewuenscht_ManLamelle =Gewuenscht_ManLamelle -20s16 endif
                      
                      if change( Gewuenscht_ManLamelle ) and Gewuenscht_ManLamelle > 255 then ManLamelleEsszimmer = 255
                      if change( Gewuenscht_ManLamelle ) and Gewuenscht_ManLamelle < 0  then ManLamelleEsszimmer = 0
                      Also Hilfsvariable mit signed Integer (s16) einführen und bei Änderung kontrolliert weitergeben.

                      Gruß,
                      Bernd

                      Kommentar


                        #56
                        hi ihr beiden!

                        vielen dank!

                        hab noch ein paar kleinigkeiten angepasst:
                        Gewuenscht_ManLamelle muss man dann nämlich auch zurücksetzen, denn der zählt sonst weiter runter
                        Die Zustände hab ich herausgenommen da ich damit nur die Lamelle einstelle (drehe), da passts nicht :-)

                        so funktionierts nun:

                        Code:
                        // Beschattung Manuell
                        if webbutton(80)==1 then write ("Esszimmer 21A1bc fahren-6/1/4",1b01) endif
                        if webbutton(80)==2 then write ("Esszimmer 21A1bc Stop-6/1/5",1b01) endif
                        if webbutton(80)==3 then write ("Esszimmer 21A1bc fahren-6/1/4",0b01) endif
                        if stime(1) then read("Esszimmer 21A1bc STATUS-6/1/6") endif
                        if stime(2) and "Esszimmer 21A1bc STATUS-6/1/6"==EIN then webdisplay (80,$ $,BLIND,STATE6,GREY) else webdisplay (80,$ $,BLIND,INACTIVE,GREY) endif
                        ManLamelleEsszimmer=0u08
                        Gewuenscht_ManLamelle = 0s16
                        if webbutton(81)==1 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then  Gewuenscht_ManLamelle =Gewuenscht_ManLamelle +20s16 endif
                        if webbutton(81)==3 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS then  Gewuenscht_ManLamelle =Gewuenscht_ManLamelle -20s16 endif
                        if change( Gewuenscht_ManLamelle ) and Gewuenscht_ManLamelle > 255s16 then ManLamelleEsszimmer = 255; Gewuenscht_ManLamelle = 255s16 endif
                        if change( Gewuenscht_ManLamelle ) and Gewuenscht_ManLamelle < 0s16  then ManLamelleEsszimmer = 0; Gewuenscht_ManLamelle = 0s16  endif
                        if change(ManLamelleEsszimmer) then write ("Esszimmer 21A1bc Lamelle-6/1/25",ManLamelleEsszimmer) endif 
                        if change("Esszimmer 21A1bc Lamelle-6/1/25") then webdisplay (81,convert( convert ( convert(ManLamelleEsszimmer, 0f16) * 100f16 / 255f16, 0u08 ), $$c14) + $   %$c14,BLIND,INACTIVE,GREY) endif
                        wünsche noch einen schönen sonntag!

                        lg
                        hermann
                        EibPc im Privathaus

                        Kommentar


                          #57
                          Um den Überlauf zu verhindern:

                          Code:
                          if webbutton(81)==1 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS and ManLamelleEsszimmer=<80% then  ManLamelleEsszimmer=ManLamelleEsszimmer+20% endif
                          if webbutton(81)==3 and "Esszimmer 21A1bc STATUS-6/1/6"==AUS and ManLamelleEsszimmer>= 0% then  ManLamelleEsszimmer=ManLamelleEsszimmer-20% endif
                          Anzeige=INACTIVE
                          if "Esszimmer 21A1bc Lamelle-6/1/25">20% then Anzeige=STATE3 endif
                          if "Esszimmer 21A1bc Lamelle-6/1/25">40% then Anzeige=STATE4 endif
                          // ... usw siehe Doku Zustände  
                          if change(ManLamelleEsszimmer) write ("Esszimmer 21A1bc  Lamelle-6/1/25",ManLamelleEsszimmer) endif 
                          if change("Esszimmer 21A1bc Lamelle-6/1/25") then webdisplay  (81,convert(ManLamelleEsszimmer/255*100, $  $c14) + $  %$c14,BLIND,Anzeige,GREY) endif
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #58
                            Ich hab's gewusst!

                            Hoi Jungs

                            Das mit der Beschattung ist doch nicht ganz so trivial.

                            Einmal habe ich eine Grosse überdachte Terasse (schööön)
                            Da muss ich mit der Beschattung erst viel später anfangen, weil die Überdachung schon einen schönen Schatten wirft.

                            Das lässt sich mit AzimuthAnfangsWinkel und - AzimuthEndWinkel (Vorgabe pro Makro) einstellen.
                            Ich bin von Himmelsrichtungen O,SO,S,SW,W abgekommen und benutze nur noch ein Makro für alle Fenster und Türen.

                            Jetzt kommt's aber: Wenn die Sonne rechtwinkelig auf die Lamellen scheint, also ich meine Azimuth-mässig (bei gleicher Elevation) dann machen die Lamellen einen kürzeren Schatten als wenn die Sonne seitlich schräg drauf scheint.
                            Will sagen, eine optimale Stellung der Lamellen (meisste Sicht bei genauer Abschattung der Sonne) ist hauptsächlich natürlich von der Elevation abhängig, aber eben auch in geringerem Masse vom Azimuth.

                            Vielleicht eine kleine Winkelfunktion gefällig???
                            Grüsse Bodo
                            Fragen gehören ins Forum, und nicht in mein Postfach;
                            EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                            Kommentar


                              #59
                              Zitat von Bodo Beitrag anzeigen
                              Hoi Jungs
                              Jetzt kommt's aber: Wenn die Sonne rechtwinkelig auf die Lamellen scheint, also ich meine Azimuth-mässig (bei gleicher Elevation) dann machen die Lamellen einen kürzeren Schatten als wenn die Sonne seitlich schräg drauf scheint.
                              Hm, das kann ich mir ja mal im Urlaub durchdenken
                              Vielleicht eine kleine Winkelfunktion gefällig???
                              nun, die kann er ja alle der EibPC.
                              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                              Enertex Produkte kaufen

                              Kommentar


                                #60
                                ich habe seinerzeit wie in KNX-User-Forum - Beschattung mit dem Gira Homeserver
                                beschrieben die Winkel berechnet (ich hoffe mal, mich nicht gerirrt zu haben).

                                Das sollte doch eigentlich recht brauchbar sein und funktionieren. Schön wäre es, wenn wir die Makros so hinbekommen, dass es mit Himmelsrichtungen zumindest zu 95% gut geht..
                                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                                Enertex Produkte kaufen

                                Kommentar

                                Lädt...
                                X