Ankündigung

Einklappen
Keine Ankündigung bisher.

watch_item dynamisch aktualisieren? ODER watch_item per Attribut selektieren

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

    watch_item dynamisch aktualisieren? ODER watch_item per Attribut selektieren

    Hi!

    In diesem Thread https://knx-user-forum.de/smarthome-...achdimmen.html wird schon über verschiedene Lösungen für die Nachtbeleuchtung diskutiert. Von allgemeinen Interesse könnte aber sein (und ich habe es in der Doku nicht gefunden), ob man die Liste der "watch_item" dynamisch aktualisieren (also neue items hinzufügen bzw. löschen) kann.

    Sinn: Ich habe überall in meiner Item-Struktur Einträge, die ein Attribut "night_brightness" haben. Nur diese möchte ich gegebenenfalls überwachen (watch_item). Ich möchte in der Logik nicht bei jedem Trigger erst nachgucken, ob das Attribut vorhanden ist.

    - Plugin hört auf ein spezielles item (Aktivierung)
    - wenn item true, dann werden per list = sh.find_items('night_brightness') alle passenden items selektiert.
    - per setattr(logic,'watch_item',list) die watch_item aktualisiert
    - wenn Aktivierungsitem false, dann alle bis auf Aktivierungsitem aus der Liste entfernen.

    Funktioniert das? Wird die Logik dann zuverlässig getriggert? Oder wird watch_item nur beim initialisieren einmal eingelesen?

    Alternativ:
    Eine Logik mit einem watch_item, die eine andere Logik ein- und ausschaltet. Dann wäre es aber eben toll, wenn man in der Logik-Config nicht nur Wildcards für das Selektieren verwenden könnte, sondern dass auch noch abhängig von dem Vorhandensein eines Attributs machen könnte, ähnlich eben "find_items". Kann man evtl. in der Config ein "watch_item = sh.find_items('night_brightness')" benutzen/einbauen?

    Grüße
    Robert

    #2
    Hallo Robert,

    beide Möglichkeiten haben ihre Berechtigung... sowohl watch_items in der Logik zu verändern als auch Items mit bestimmten Attributen als watch_items zu verwenden.

    von mir daher +1 für beide Features
    Mit freundlichen Grüßen
    Niko Will

    Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
    - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

    Kommentar


      #3
      Mein Blick ins GIT sagt:

      Code:
                  # item hook
                  if hasattr(logic, 'watch_item'):
                      if isinstance(logic.watch_item, str):
                          logic.watch_item = [logic.watch_item]
                      items = []
                      for entry in logic.watch_item:
                          items += self._sh.match_items(entry)
                      for item in items:
                          item.add_logic_trigger(logic)
      Für ersteres könnte man out-of-the-box "add_logic_trigger" verwenden, zumal man ja mit sh.find_item direkt eine Liste der Objekte erhält (und nicht ihren Stringnamen, wie er hier erst konvertiert wird). Allerdings fehlt dann ein "remove_logic_trigger" in der Item-Class.

      Für letzteres müsste die oben stehende Verarbeitung modifiziert werden. Bevor man versucht, per "str" zu unterschieden, ob es eine Liste von Objekten oder ein Ausdruck ist, könnte man wohl eher ein zusätzliches Attribut "watch_item_eval" oder so einführen, in dem man dann durchaus auch komplexere Selektoren bauen könnte!?

      Meinungen? (insbesondere natürlich Marcus)

      Grüße
      Robert

      Kommentar


        #4
        Hallo Robert,

        Änderungen, insbesondere an Abhängigkeiten, während der Laufzeit versuche ich zu vermeiden.
        Ich denke dabei an die Dokumentation, die Komplexität und den Support.

        Das man watch_items von der Config abhängig macht kann ich mir gut vorstellen. Das sollte sauber und auch schnell implementiert sein - aber erst nach dem Release.
        Vorschläge für den Attribute-Namen? watch_items_with_conf ist ein bisserl lang.

        Bis bald

        Marcus

        Kommentar


          #5
          Hi Marcus,

          naja, Änderung während der Laufzeit machen auch flexibel. ;-)

          Das es sich hier dann langsam um "Poweruser"-Features handelt ist klar.

          Tatsächlich könnte man eben mit dynamischen watch_items die Rechenlast senken, weil so nur die Sachen getriggert werden die sich momentan (aufgrund ihres internen Zustands) für das Item interessieren.

          watch_item_eval:

          Da würde ich wirklich mich freuen wenn man das als "watch_item_eval" machen würde, und ich einen kompletten Ausdruck angeben könnte, der dann mit einem try ausgewertet wird und eine fertig iterierbare Liste von Items zurückgibt. Damit können Poweruser dann alle Eventualitäten erschlagen. Ich kann mir da vorstellen, dass man nämlich auch durchaus "alle Items die auf light enden und als Attribut "night_brightness haben" selektieren will. Das wäre dann
          Code:
          watch_item_eval = sh.match_items('*.lights').union(sh.find_items('night_brightness'))
          Grüße
          Robert

          Kommentar


            #6
            Das sieht doch mal nice aus und lässt sich in etwa gleich dokumentieren wie eval bei Items.
            Mit freundlichen Grüßen
            Niko Will

            Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
            - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

            Kommentar


              #7
              Hallo,

              Robert und ich haben auf https://github.com/mknx/smarthome/pull/17 ein bisschen diskutiert.

              Wie würdet Ihr ein Attribut für eine logic nennen die auf Items mit einem speziellen Attribut reagieren soll?

              watch_item = attribute=foo
              watch_item_attribute = foo
              watch_attribute = foo
              watch_item_with_attribute = foo
              ...


              Bis bald

              Marcus

              Kommentar


                #8
                Favorit ist watch_item_with_attribute, da man anhand des Namens erkennt, was gemeint ist. Aber irgendwie ist das auch sehr lang...
                Mit freundlichen Grüßen
                Niko Will

                Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                Kommentar


                  #9
                  AW: watch_item dynamisch aktualisieren? ODER watch_item per Attribut selektieren

                  watch_attribute

                  Da das Item das Attribut (oder andersrum) inkludiert ist das kurz und logisch.

                  Baustelle 2.0
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    #10
                    watch_item dynamisch aktualisieren? ODER watch_item per Attribut selektieren

                    Aber auch da hört es sich so an als ob auf die Änderung des Attributs reagiert werden würde.
                    Mit freundlichen Grüßen
                    Niko Will

                    Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                    - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                    Kommentar


                      #11
                      Hallo,

                      es hilft wirklich ab und zu manche Dinge noch mal zu überdenken.

                      Ich denke ich habe eine gute Möglichkeit gefunden.

                      watch_item = *.Licht:nacht_dimmen, *:anderes_attribut

                      Verständlich?

                      Ich kann das aber erst nach meinem Urlaub implementieren.

                      Bis bald

                      Marcus

                      Kommentar


                        #12
                        Zitat von mknx Beitrag anzeigen
                        Ich kann das aber erst nach meinem Urlaub implementieren.
                        wobei...

                        Kommentar


                          #13
                          Zitat von mknx Beitrag anzeigen
                          watch_item = *.Licht:nacht_dimmen, *:anderes_attribut
                          ok, ist in github develop.

                          Bis bald

                          Marcus

                          Kommentar


                            #14
                            watch_item dynamisch aktualisieren? ODER watch_item per Attribut selektieren

                            Das sieht doch super aus... bin froh, dass du nochmal drüber nach gedacht hast DANKE
                            Mit freundlichen Grüßen
                            Niko Will

                            Logiken und Schnittstelle zu anderen Systemen: smarthome.py - Visualisierung: smartVISU
                            - Gira TS3 - iPhone & iPad - Mobotix T24 - ekey - Denon 2313 - Russound C5 (RIO over TCP Plugin) -

                            Kommentar


                              #15
                              Gute Lösung!

                              Kommentar

                              Lädt...
                              X