Ankündigung

Einklappen
Keine Ankündigung bisher.

Neue HA-Integration: Shadow Control

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

    starwarsfan Danke für deine Transparenz und Mühe die du da reinsteckst!

    P.S. hab gerade die RC11 installiert.. hast du auch geplant, dass man die Fahrzeit in der YAML mit übergeben kann?
    Zuletzt geändert von Evolution100; 01.01.2026, 17:55.

    Kommentar


      Hallo miteinander

      Zitat von Evolution100 Beitrag anzeigen
      starwarsfan Danke für deine Transparenz und Mühe die du da reinsteckst!
      Danke


      Zitat von Evolution100 Beitrag anzeigen
      ​P.S. hab gerade die RC11 installiert.. hast du auch geplant, dass man die Fahrzeit in der YAML mit übergeben kann?
      Das geht jetzt schon, muss nur noch in die Doku. Einfach den folgenden Eintrag zum yaml hinzufügen:

      Code:
      facade_max_movement_duration_static: <zeit-in-sekunden>
      Aber das ganze Auto-Lock-Handling hat's heftigst in sich! Ich habe heute schon wieder recht umfangreiche interne Umbauten gemacht, um das Locking in Griff zu bekommen. Ich bin mir nicht sicher, ob sich das überhaupt zu 100% sauber lösen lässt oder ob es dabei nicht immer einen gewissen Graubereich gibt.

      Wie auch immer, ich will versuchen, den nächsten RC zeitnah freizugeben und bitte um ausgiebige Tests. Details dann im entsprechenden Posting dazu.
      Kind regards,
      Yves

      Kommentar


        Die Spannung steigt gerade. Daumen drücken, dass es sich jetzt wie gewünscht verhält...

        Hier mal etwas Prosa, wie das jetzt funktoniert.
        • Via facade_max_movement_duration_static wird konfiguriert, wie lange das Verfahren des Behangs maximal dauert
        • Started eine SC-Instanz eine Positionierung, wird gleichzeitig ein Timer mit der Laufzeit aus facade_max_movement_duration_static gestartet
        • Kommen während der Laufzeit des Timers Positionsmeldungen des Behangs an der SC-Instanz an, werden diese "gemerkt" aber es erfolgt keine weitere Aktion
        • Ist der Timer abgelaufen, wird die letzte eingegangene Position mit der berechneten Position vergleichen
          • Sind die beiden Werte gleich: Alles gut, keine Sperre
          • Unterscheiden sich die Werte: SC-Instanz sperrt sich
        Damit wird der Fall abgedeckt, dass SC den Behang bspw. schliessen will und jemand stoppt diese Bewegung manuell.

        Aber es geht natürlich noch weiter:
        • Es geht eine Positionsmeldung an der SC-Instanz ein
        • Die Instanz prüft, ob der obige Timer läuft.
        • Ja, Timer läuft:
          • Position merken und keine weitere Aktion
        • Nein, Timer läuft nicht:
          • eingegangene Position mit der zuletzt berechneten Position vergleichen
            • Sind die beiden Werte gleich: Alles gut, keine Sperre
            • Unterscheiden sich die Werte: SC-Instanz sperrt sich​
        Der zweite Teil hier entspricht dem zweiten Teil von Variante 1 oben. Wichtig ist, dass die konfigurierte Fahrzeit auf jeden Fall die tatsächliche Fahrzeit abgedeckt. Damit erfolgt die Sperre der Instanz bei händischer Modifikation entweder sofort mit der Rückmeldung des Aktors (wenn der Timer gerade nicht läuft) oder spätestens nach dem Ablauf des Timers.

        IMHO sollten sich damit alle Varianten abbilden lassen oder? Was meint ihr? Habe ich etwas übersehen?
        Zuletzt geändert von starwarsfan; 02.01.2026, 16:48.
        Kind regards,
        Yves

        Kommentar


          Das klingt sehr gut.

          Ich hätte aber einen kleinen Verbesserungswunsch ggf. hast du das aber schon integriert... Wenn ein sperren durch einen manuellen Eingriff geschieht wäre es dann möglich einen sperrstatus von z.B 3 einzuführen so würde man auf Anhieb erkennen warum die Integration gesperrt ist und man könnte auch mit einer Automation darauf reagieren z.B manuelle aktionen nach 60 Minuten automatisch entspannen

          Kommentar


            Hallo Yves, es scheinen alle manuellen Fälle abgedeckt.
            Das Entsperren muss dann über eine eigene Automation laufen.
            Im einfachsten Fall 1x pro Tag, aber wann? Es wird dann ja sofort positioniert.

            Für (m)einen Fall sehe ich noch keine Verbesserung:

            Im Badezimmer sperre ich die Rollos, solange das Licht an ist.
            Damit wird verhindert, dass morgens die Rollos öffnen während jemand duscht.

            Abends macht das beim Lüften Probleme:
            1. Rollos auf
            2. Licht aus
            3. Rollos fahren zu, da beim Ausschalten des Lichts die Sperre aufgehoben und dadurch die Position neu berechnet wird.
            Wie kann ich die Automatik sperren, ohne beim aufheben eine Neupositionierung auszulösen?
            Es soll im Prinzip erst bei der nächsten Situationsveränderung eine Positionierung erfolgen (ala EDOMI SBC).



            Kommentar


              woda

              vielleicht würde der meine Automation an dieser Stelle weiterhelfen:

              Beim Öffnen des fensters, werde ich die Integration mit zwangsposition auf komplett auf. dadurch werde ich Jalousie auf und Die Integration sperrt sich mit Sperrcode 2 Wenn ich Das Fenster schließe, hebe ich die zwangssperre auf gehe also auf Sperrcode 0 und überlasse Der Integration das Fahren an die passende Stelle. Also nachts wieder komplett zu. das klappte der mit der 0.10 perfekt

              Kommentar


                Danke, so werde ich das wohl auch umsetzen.

                Kommentar


                  Hallo miteinander

                  Zitat von Evolution100 Beitrag anzeigen
                  Wenn ein sperren durch einen manuellen Eingriff geschieht wäre es dann möglich einen sperrstatus von z.B 3 einzuführen
                  Den Status gibt es schon, siehe hier und seit heute wird der auch korrekt ausgegeben.
                  Kind regards,
                  Yves

                  Kommentar


                    Hallo miteinander

                    Zitat von Evolution100 Beitrag anzeigen
                    vielleicht würde der meine Automation an dieser Stelle weiterhelfen:

                    Beim Öffnen des fensters, werde ich die Integration mit zwangsposition auf komplett auf
                    Zitat von woda Beitrag anzeigen
                    Danke, so werde ich das wohl auch umsetzen.
                    Nur zur Anregung kann ich ja auch noch meine Variante dazu geben.

                    Vor jeder SC-Instanz habe ich eine Automation dieser Art:

                    Code:
                    - id: 'fenster_buro_ost_behang_nach_offnungsstatus'
                      alias: 'Fenster Büro Ost Behang nach Öffnungsstatus'
                      triggers:
                        - trigger: state
                          entity_id:
                            - sensor.status_fenster_buro_ost
                      actions:
                        - variables:
                            input_value_shadow_height: "{{ states('input_number.shadow_max_height') | float(0) }}"
                            input_value_shadow_angle: "{{ states('input_number.shadow_max_angle') | float(0) }}"
                            input_value_dawn_height: "{{ states('input_number.dawn_max_height') | float(0) }}"
                            input_value_dawn_angle: "{{ states('input_number.dawn_max_angle') | float(0) }}"
                            fenster_status: "{{ states('sensor.status_fenster_buro_ost') }}"
                        - choose:
                            - conditions: "{{ fenster_status == 'Geschlossen' }}"
                              sequence:
                                # Shadow position
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_shadow_max_height_buro_ost
                                  data:
                                    value: "{{ input_value_shadow_height | round(0) }}"
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_shadow_max_angle_buro_ost
                                  data:
                                    value: "{{ input_value_shadow_angle | round(0) }}"
                                # Dawn position
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_dawn_max_height_buro_ost
                                  data:
                                    value: "{{ input_value_dawn_height | round(0) }}"
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_dawn_max_angle_buro_ost
                                  data:
                                    value: "{{ input_value_dawn_angle | round(0) }}"
                                - action: notify.send_message
                                  target:
                                    entity_id: notify.telegram_bot_1234_5678
                                  data:
                                    message: "Fenster Büro Ost geschlossen"
                            - conditions: "{{ fenster_status == 'Geöffnet' }}"
                              sequence:
                                # Shadow position
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_shadow_max_height_buro_ost
                                  data:
                                    value: "{{ input_value_shadow_height | round(0) }}"
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_shadow_max_angle_buro_ost
                                  data:
                                    value: "{{ input_value_shadow_angle | round(0) }}"
                                # Dawn position
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_dawn_max_height_buro_ost
                                  data:
                                    value: "{{ input_value_dawn_height | round(0) }}"
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_dawn_max_angle_buro_ost
                                  data:
                                    value: "{{ (input_value_dawn_angle * 0.8) | round(0) }}"
                                - action: notify.send_message
                                  target:
                                    entity_id: notify.telegram_bot_1234_5678
                                  data:
                                    message: "Fenster Büro Ost geöffnet"
                            - conditions: "{{ fenster_status == 'Gekippt' }}"
                              sequence:
                                # Shadow position
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_shadow_max_height_buro_ost
                                  data:
                                    value: "{{ input_value_shadow_height | round(0) }}"
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_shadow_max_angle_buro_ost
                                  data:
                                    value: "{{ input_value_shadow_angle | round(0) }}"
                                # Dawn position
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_dawn_max_height_buro_ost
                                  data:
                                    value: "{{ input_value_dawn_height | round(0) }}"
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_dawn_max_angle_buro_ost
                                  data:
                                    value: "{{ (input_value_dawn_angle * 0.8) | round(0) }}"
                                - action: notify.send_message
                                  target:
                                    entity_id: notify.telegram_bot_1234_5678
                                  data:
                                    message: "Fenster Büro Ost gekippt"
                            - conditions: []
                              sequence:
                                # Shadow position
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_shadow_max_height_buro_ost
                                  data:
                                    value: "{{ input_value_shadow_height | round(0) }}"
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_shadow_max_angle_buro_ost
                                  data:
                                    value: "{{ input_value_shadow_angle | round(0) }}"
                                # Dawn position
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_dawn_max_height_buro_ost
                                  data:
                                    value: "{{ input_value_dawn_height | round(0) }}"
                                - action: input_number.set_value
                                  target:
                                    entity_id: input_number.automation_dawn_max_angle_buro_ost
                                  data:
                                    value: "{{ input_value_dawn_angle | round(0) }}"
                                - action: notify.send_message
                                  target:
                                    entity_id: notify.telegram_bot_1234_5678
                                  data:
                                    message: "Fenster Büro Ost in unbekanntem Status"
                    ​
                    Damit wird in diesem Beispiel der Max-Winkel für die Dämmerung auf 80% geändert, wenn das Fenster geöffnet oder gekippt wird. Mit dieser Variante komme ich völlig ohne Sperren aus.

                    Davon gibt's natürlich noch andere Ausprägungen aber die Idee sollte klar sein.
                    Kind regards,
                    Yves

                    Kommentar


                      Hallo Wolfgang

                      Zitat von woda Beitrag anzeigen
                      Das Entsperren muss dann über eine eigene Automation laufen.
                      Im einfachsten Fall 1x pro Tag, aber wann? Es wird dann ja sofort positioniert.
                      Dass dann direkt positioniert wird, ist im Moment eine offene Frage. Ich habe so viel umgebaut in den letzten Tagen, das muss ich erst nochmal am lebenden Objekt prüfen. Ich habe den aktuellen Code seit heute Nachmittag bei mir im Haus installiert und bis jetzt hat das wie gewünscht funktioniert. Morgen früh wenn's hell wird, wird sich zeigen, ob das nun auch in die andere Richtung sauber läuft.

                      Was mich an der Stelle aber schonmal sehr freut ist, dass es nun auch endlich mit den automatisierten Tests voran geht. Ich konnte heute schonmal sämtliche Entity-Klassen auf eine Coverage von über 80% bringen. Wen's interessiert, Details siehe hier.

                      Stay tuned!
                      Zuletzt geändert von starwarsfan; 02.01.2026, 22:25.
                      Kind regards,
                      Yves

                      Kommentar


                        starwarsfan, ich wollte man anfragen, wie sich die Automation heute morgen geschlagen hat?

                        Einen Verbesserungswunsch hätte ich trotzdem nochmal.. (hatte ich schon mal vor langer Zeit eingebracht).
                        Wie kann ich aus dem Dashboard heraus die Integration sicher "ausschalten". Aktuell mach ich das bei den Geräten, dies kann ich aber ja nicht auf das Dashboard legen. Alternativ habe ich die Erweiterung spook schon eingerichtet, damit kann man Devices deaktivieren und das dann auch vom Dashboard aus. Nur nach dem Aktivieren, muss ich HA Neustarteten damit die SC Intgration wieder verfügbar ist. Oder gibts eine einfachere Alternative?

                        Kommentar


                          Hi

                          Zitat von Evolution100 Beitrag anzeigen
                          Einen Verbesserungswunsch hätte ich trotzdem nochmal.. (hatte ich schon mal vor langer Zeit eingebracht).
                          Wie kann ich aus dem Dashboard heraus die Integration sicher "ausschalten".
                          Wie damals schon geschrieben, gibt es jeweils separate Switches, um die Beschattungs- bzw. die Dämmerungssteuerung zu deaktivieren.
                          Kind regards,
                          Yves

                          Kommentar


                            Hallo miteinander

                            Soeben habe ich den RC12 freigegeben. Bei mir funktioniert jetzt das automatische Sperren, soweit wie ich es bis jetzt testen konnte. Das direkte Positionieren nach dem Entsperren konnte ich auch nicht mehr beobachten.

                            Was mir ziemlich Kopfzerbrechen bereitet hat und schlussendlich gar nichts mit der Integration zu tun hatte: Unbedingt darauf achten, dass die KNX-Konfiguration der Covers richtig ist! Das bezieht sich das insbesondere auf die Settings travelling_time_down und travelling_time_up. Diese Werte dürfen auf keinen Fall grösser sein, als das was unter max_movement_duration​ konfiguriert wurde, anderenfalls wird sich die Integration immer selbst sperren.

                            Der Vollständigkeit halber hier die Releasenotes der bis dato eingebauten Changes:
                            • Breaking change:
                              • Important: If you're using yaml configuration, you must rename the following options within your yaml files before updating to version 0.11.0 or higher!
                                • lock_integration_static -> lock_integration_manual
                                • lock_integration_with_position_static -> lock_integration_with_position_manual
                                • lock_height_static -> lock_height_manual
                                • lock_angle_static -> lock_angle_manual
                                • movement_restriction_height_static -> movement_restriction_height_manual
                                • movement_restriction_angle_static -> movement_restriction_angle_manual
                                • facade_neutral_pos_height_static -> facade_neutral_pos_height_manual
                                • facade_neutral_pos_angle_static -> facade_neutral_pos_angle_manual
                                • All options with _static suffix to _manual suffix within shadow configuration
                                • All options with _static suffix to _manual suffix within dawn configuration
                              • These renamed options are no longer configuration entries within ConfigFlow. They are now dynamically created as switch, number or select entities per Shadow Control instance and could be used either right on the instance detail view or directly within own automations. See README.md for naming of these entities.
                            • New additional entity enforce_positioning_manual with push button functionality to trigger recalculation and positioning of the shutter.
                            • Fix usage of default values if configuring a new instance via HA UI ConfigFlow.
                            • Use HA internal slugify functionality to sanitize instance names
                            • Enforcing of shutter positioning works now with configured external entity as well as a corresponding button on the instance view in parallel.
                            • Movement restriction handling for external entities refactored. The external entities could now use strings according to the used UI translation. Check Movement restriction height within README.md or the readme.md of your UI language for details.
                            • Fix shutter repositioning after release of lock with position
                            • Fix initialization after Home Assistant restart
                            • Fix ignored lock in case lock is active and shutter are modified manually
                            • Implement automatic instance lock in case shutters are modified manually
                            • New config option max_movement_duration​ to define duration from full closed to full open
                            Zuletzt geändert von starwarsfan; 03.01.2026, 16:46.
                            Kind regards,
                            Yves

                            Kommentar


                              Viele Dank,
                              die Version ist installiert und konfiguriert. Die Tests laufen....

                              Kommentar


                                Chaos...
                                nach einem HA Neustart fuhren die nicht gesperrten Rollos, trotz Dunkelheit nach oben. Beim Versuch die Rollos wieder zu schließen fuhren sie nach erreichen der unteren Endposition erneut nach oben. Danach haben sich die Automatiken wegen veränderter Position selbst gesperrt.

                                Ich muss jetzt mit den Tests aufhören, das gibt Stress.

                                Offtopic, wie ich das vermisse, da hatte ich Jahre lang Ruhe und volle Kontrolle:
                                Das war jeweils meine EDOMI Rollo-Automatisierung:​

                                image.png
                                Zuletzt geändert von woda; 04.01.2026, 08:16.

                                Kommentar

                                Lädt...
                                X