Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS 19000145 - Beschattungssteuerung-NG

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

    Hallo Yves,

    ok das passt nun so zu meinen Beobachtungen und erklärt das aktuelle Verhalten.

    Zitat von starwarsfan Beitrag anzeigen
    Ein mögliche Lösung wäre, explizit bei Reaktivierung des Beschattungs- oder Dämmerungsmodus ein sofortiges Neupositionieren des Behangs auszulösen. Allerdings stellt sich dann die Frage, wer Vorrang hat: E1 oder E40 bzw. E1 oder E60! Das ist relevant, da der Trigger E1 den Behang auf die Werte aus der letzten Positionierung fährt, also nicht explizit die Position neu errechnet.
    Grundsätzlich ist mein Verständnis beim eventbasierten System: E1 und E40/E60 können doch eh nie genau gleichzeitig geändert werden sondern nur nacheinander... Für mich ist das daher kein Problem bzgl. Vorrang solange man eh immer nur auf einen "refresh" reagiert. Der User bzw. die Logik hat es damit eigentlich selbst in der Hand was er macht, das letzte Event gewinnt halt.

    Und: Warum berechnest Du nicht einfach auch bei E1 die Position neu? Sollte ja dann dasselbe Ergebnis rauskommen falls sich an den Eingängen nichts geändert hat bzw. wenn sich an anderen Eingängen was (ggf. auch bewusst durch eine andere Vorschalt-Logik!) geändert hat sollten die aktuellen Eingänge doch auch berücksichtigt sein.

    Damit wäre E1 / E40/60 auch gleich zu handeln: Alle lösen Neupositionsberechnung direkt aus nur das Schreiben auf die Ausgänge wäre unterschiedlich.

    Ich würde folgendes Verhalten in den Raum schmeissen:
    - E1 löst komplette Berechnung aus und schreibt immer die Ausgänge. Ob hier nun die Timer berücksichtigt werden oder nicht wäre für mich offen (ich wäre eigentlich für sofortiges schreiben ohne Timer...)
    - E2 löst komplette Berechnung aus und schreibt nur bei Änderung ggü. Vorgängerwert die Ausgänge (so hab ich das aus der Hilfe interpretiert, ist aber ja noch nicht implementiert, so wie ich Deine Antwort interpretiere wäre das aber nahe am heutigen E1 Verhalten)
    - E40/60 refresh mit 1 löst Berechnung aus und schreibt immer direkt ohne Timer auf die Ausgänge (analog zum Verhalten E40/60=0 wie es in RC3 schon funktioniert)




    Gruß
    Andi

    Kommentar


      Hi Andi,

      joa, so in etwa schwebt mir das auch vor. Das Problem ist im Moment jedoch, dass es relevant ist, an welchem Punkt in der State-Machine der Trigger erfolgt, welcher sofort gesetzt werden soll. Also ohne Timer. Da braucht es jeweils noch dedizierte Abbruchbedingungen, da die State-Machine sonst in keinem Status einen Timer verwendet und schlagartig durch alle Status hindurchrauscht. Und das kann es ja nicht sein, es sollte schon nur im jeweils gerade aktiven Status sofort reagiert werden, der Rest dann aber normal weiterlaufen.

      Aber wie immer: Ich bin dran...
      Kind regards,
      Yves

      Kommentar


        super, dann warte ich mal ab. Es hat sich ja immer sehr gelohnt und Du hast immer tolle Lösungen im Code gefunden, ich dachte nur ich versuche zumindest bei den "Anforderungen" zu helfen, manchmal hilft ja da auch eine weitere Meinung.
        Gruß
        Andi

        Kommentar


          Zitat von starwarsfan Beitrag anzeigen
          (...) In Daten und Wahrheit hat sich die Höhe nicht geändert aber das kann der Baustein nicht wissen. Danach wird dann vom Aktor der Winkel angefahren und erst damit besteht wieder der erwartete Zustand.

          Evtl. lässt sich das mit einem SBC verhindern, mit dem Baustein selbst wird es aber vermutlich nicht funktionieren.
          Hi Yves,
          kurzes Zwischenfazit: mit den SBCs klappt es jetzt! Baustein fährt nach Re-Aktivierung wieder in die vorherige Position ohne zusätzliches Schließen der Lamellen.

          Gestern habe ich ein anderes Verhalten bemerkt: die automatische Deaktivierung bei manuellem Verstellen der Raffstoren hat nicht in jedem Behang-Status funktioniert (aktuell sind sie OPEN (0), da funktioniert es prima). Leider weiß ich nicht mehr genau, welcher Status es war, müsste aber einer der Status mit Timer gewesen sein (ich vermute "3"). Ich weiß, eine recht ungenaue Beschreibung. Ich liefere noch ein Beispiel, sobald ich wieder über einen solchen Fall stolpere, wollte es nur schonmal durchgeben.



          Gruß,
          Matthias

          Kommentar


            Hi Matthias

            Zitat von baumhaus123 Beitrag anzeigen
            kurzes Zwischenfazit: mit den SBCs klappt es jetzt! Baustein fährt nach Re-Aktivierung wieder in die vorherige Position ohne zusätzliches Schließen der Lamellen.
            Super, freut mich zu hören.


            Zitat von baumhaus123 Beitrag anzeigen
            die automatische Deaktivierung bei manuellem Verstellen der Raffstoren hat nicht in jedem Behang-Status funktioniert
            Ich vermute, die Verstellung war nicht gross genug. Der Baustein rechnet intern mit einer gewissen Toleranz (Höhe +/- 8%, Winkel +/- 5%). Wenn die Verstellung in diesem Range bleibt, wird sich der Baustein nicht abschalten. Mglw. sollten diese beiden Werte auch noch konfigurierbar sein...
            Kind regards,
            Yves

            Kommentar


              Zitat von starwarsfan Beitrag anzeigen
              Mglw. sollten diese beiden Werte auch noch konfigurierbar sein...
              ja, das wäre sehr schön. Ich passe diese Werte jedesmal händisch an, da bei mir sonst ständig der LBS deaktiviert wird.

              Gruß
              Andi

              Kommentar


                Zitat von baumhaus123 Beitrag anzeigen
                Gestern habe ich ein anderes Verhalten bemerkt: die automatische Deaktivierung bei manuellem Verstellen der Raffstoren hat nicht in jedem Behang-Status funktioniert (aktuell sind sie OPEN (0), da funktioniert es prima). Leider weiß ich nicht mehr genau, welcher Status es war, müsste aber einer der Status mit Timer gewesen sein (ich vermute "3").
                das passt zu meinen Beobachtungen, daß in Zuständen in denen ein Timer aktiv ist, der LBS quasi "tot" (z.B. auch nicht auf neue Trigger reagiert) ist und erst nach Ablauf des Timers wieder reagiert. Ich wollte mir das jetzt auch mal am Wochenende genauer ansehen, vmtl. liegt es aber daran daß bei laufendem Timer der LBS erstmal hart bis zum Ablauf des Timers wartet.

                Gruß
                Andi

                Kommentar


                  Hallo Yves,

                  ich denke das "tot" sein bei Timern liegt direkt im Hauptfunktionsteil, dort wird nur bei $doTheWork = true die Berechnung weiter getriggert.

                  Durch die

                  else if (LB_LBSID_isTimerFinished())

                  Anweisung in Zeile 505 kommt es gar nicht zur Abfrage der eigentlichen Trigger und $doTheWork wird auch immer false bleiben.

                  Einzig der E1 Trigger oder eine Änderung an E13 könnten somit während eines laufenden Timers mit $doTheWork = true zu Berechnungen im LBS führen.
                  Gruß
                  Andi

                  Kommentar


                    N'abend miteinander,

                    sodele, die 3.0.RC4 ist online:
                    • Handling der Trigger-Eingaenge E1, E12, E40 und E60 komplett neu implementiert, allfaellig bereits laufende Timer werden nun ignoriert
                    • Schwellwerte fuer automatische LBS-Deaktivierung sind nun via E16/E17 konfigurierbar
                    Viel Spass und her mit dem Feedback!
                    Kind regards,
                    Yves

                    Kommentar


                      Hallo Yves,

                      danke fürs erneute Update! Pünktlich zum WE kann nun wieder fleissig getestet werden und das Wetter scheint auch sonnig zu werden...

                      Ich glaube nach kurzem Codedifferenz ansehen aber trotzdem dass das

                      else if (LB_LBSID_isTimerFinished())

                      in der Hauptfunktion noch auf einer zu hohen Ebene ist, da damit während eines Timers z.B. auch Änderungen an der Helligkeit, Azimut, etc. auch komplett ignoriert werden. Gerade Helligkeitsänderungen sollten doch aber während eines Timers ausgewertet werden, dazu sind ja die Timer da. Sprich wenn eine dunkle Wolke für ein paar Sekunden verdunkelt wird ein Timer zum Öffnen gestartet, wenn aber die Wolke innerhalb des Timers wieder weg ist soll trotzdem im Beschattungszustand geblieben werden und der Timer beendet werden. Im Moment läuft ein einmal getriggerter Timer immer hart durch und führt zwangsläufig zu einem Zustandswechsel.

                      Wenn ich mir den Code in der Statemachine ansehe prüfst Du dort doch auch eigentlich überall nochmals explizit per Funktionsaufruf isTimerFinished () separat ab bevor wirklich ein Zustand gewechselt wird. Könnte damit die Abfrage in der Hauptfunktion nicht entfallen?
                      Gruß
                      Andi

                      Kommentar


                        Hi Andi

                        Zitat von tger977 Beitrag anzeigen
                        danke fürs erneute Update! Pünktlich zum WE kann nun wieder fleissig getestet werden und das Wetter scheint auch sonnig zu werden...
                        So ist der Plan...


                        Zitat von tger977 Beitrag anzeigen
                        in der Hauptfunktion noch auf einer zu hohen Ebene ist, da damit während eines Timers z.B. auch Änderungen an der Helligkeit, Azimut, etc. auch komplett ignoriert werden. Gerade Helligkeitsänderungen sollten doch aber während eines Timers ausgewertet werden, dazu sind ja die Timer da.
                        Bzgl. Azimut etc. muss ich mal drüber nachdenken aber bzgl. Helligkeit will ich das eben genau nicht haben! Wenn das so wäre, dann bekommt man damit bei wechselhaftem Wetter ein ständiges auf und ab des Behangs. Das hatte ich schon und erst mit den Timern war das dann endlich brauchbar in Griff zu bekommen.

                        Du kannst ja die Zeile

                        Code:
                        } else if (LB_LBSID_isTimerFinished()) {
                        durch

                        Code:
                        } else
                        ersetzen, am Ende des Blocks die nun überzählige schliessende geschweifte Klammer entfernen und schauen, wie sich der Baustein verhält. Ich werd's auch mal testen, weiss nur nicht, ob ich an diesem Wochenende dazu komme...
                        Kind regards,
                        Yves

                        Kommentar


                          Code ist geändert und wird so mal getestet (die geschweiften Klammern hab ich aber drin behalten...)

                          bin mal gespannt auf morgen und werde berichten.
                          Gruß
                          Andi

                          Kommentar


                            Das kann aber nicht funktionieren, da mit obiger Änderung eine öffnende geschweifte Klammer entfällt. Damit musst Du die dazugehörende schliessende Klammer auch entfernen!
                            Kind regards,
                            Yves

                            Kommentar


                              ich meinte der ganze else Pfad gehört doch in geschweifte Klammern.

                              Code:
                              } else  {
                                          if (!LB_LBSID_isLBSActive($E)) {
                                              return;
                                          }
                                          if (LB_LBSID_isPositionChangedExternally($E)) {
                                              return;
                                          }
                                          if (LB_LBSID_isLBSLocked($E)) {
                                              return;
                                          }
                                          if ($E[$GLOBALS["LB_LBSID_INPUT_Brightness"]]['refresh'] == 1
                                              || $E[$GLOBALS["LB_LBSID_INPUT_BrightnessDawn"]]['refresh'] == 1
                                              || $E[$GLOBALS["LB_LBSID_INPUT_Elevation"]]['refresh'] == 1
                                              || $E[$GLOBALS["LB_LBSID_INPUT_Azimut"]]['refresh'] == 1
                                          ) {
                                              LB_LBSID_debug(true, "===== === = Timer finished and trigger input refreshed, starting LBS = === ===");
                                              $doTheWork = true;
                                          } elseif (!LB_LBSID_isOutputSet()) {
                                              LB_LBSID_debug(true, "===== === = Timer finished and outputs not set, starting LBS = === ===========");
                                              $doTheWork = true;
                                          }
                                      }
                              Gruß
                              Andi

                              Kommentar


                                Hallo Yves,

                                Nachdem nun der Baustein mit der Codeänderung von oben sich mehrfach komisch verhielt (habe keinerlei Reaktion mehr hinbekommen und im Log kam nur immer die Meldung daß der Baustein deaktiviert sei, an A8 bekam ich auch partout keine 1 mehr hin...) habe ich nun auf Deine Originalversion RC4 zurückgedreht.

                                Aber auch hier habe ich ähnliche Probleme wieder. Nach einem Projekt neu aktivieren bekomme ich an A8 gar keine Ausgabe mehr, der Baustein arbeitet aber mit der Beschattungsautomatik soweit korrekt und gibt an den anderen Ausgängen auch plausible Werte raus:

                                RC4_A8-Problem.PNG

                                ich habe an einer anderen Jalousie auch länger rumgespielt und da war es dann irgendwann soweit daß an A8 nur noch eine 0 anlag und keinerlei Ausgänge mehr geschrieben wurden, egal welche Trigger ich auch gesetzt habe (E1, E5-11, E40, E60):
                                (Unterschied zu Bild oben ist A8 mit 0 obwohl E11 = 1 und E1 auch mehrfach auf 1 gesetzt wurde, die Ausgänge sind alle noch von der letzten korrekten Berechnung und ändern sich dann nicht mehr)

                                RC4_A8-Problem.PNG
                                Angehängte Dateien
                                Gruß
                                Andi

                                Kommentar

                                Lädt...
                                X