Ankündigung

Einklappen
Keine Ankündigung bisher.

relative Items in Logik umwandeln

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

    relative Items in Logik umwandeln

    Damit komme ich an das Item, um es zu bearbeiten.

    Code:
     
     sh.return_item('erdgeschoss.flur')
    Allerdings frage ich mich, wie das mit relativen items funktioniert. Auf diesem Wege zumindest nicht. Gibt es einen anderen Weg? Das hier geht nicht:

    Code:
     
     sh.return_item('...flur')
    Klingt auch erst mal logisch, weil ja die Basis fehlt. Allerdings gibt es evtl. die Möglichkeit über ein vorhandenes Item zu gehen? So z.B.

    Code:
     
     myItem.return_item('...flur')

    #2
    Hi,

    da muss ich Dich wieder auf die Doku hinweisen
    Code:
    myItem.return_parent().return_parent().flur
    Gruß, Waldemar

    Kommentar


      #3
      Zitat von mumpf Beitrag anzeigen
      Hi,

      da muss ich Dich wieder auf die Doku hinweisen
      Code:
      myItem.return_parent().return_parent().flur
      Gruß, Waldemar
      Nein, das ist ja nicht die Lösung, die ich wollte. Ich weiß ja bei der Übergabe nicht, ob das item parent ist oder nicht. Ich hole mir aus der Logik nur den Pfad, also habe hier "...flur". Es könte aber genauso gut sein "OG.Flur" oder auch "...ZimmerX" oder "....ZimmerX".

      Hintergrund ist der, dass ich mittels item.conf() mir den Pfad zum "Ziel-Item" hole und diesen möchte ich umwandeln, um das gwünschte Item zu beschreiben.

      Kommentar


        #4
        Der von Dir angegebene Befehl

        Code:
         
          sh.return_item('...flur')
        Macht überhaupt keinen Sinn.

        Wozu soll die Angabe denn relativ sein? Um eine relative Angabe zu nutzen, muss es ein Item geben, auf welches sich die relative Angabe bezieht. Das gigt es hier nicht.


        Viele Grüße
        Martin

        There is no cloud. It's only someone else's computer.

        Kommentar


          #5
          Zitat von Msinn Beitrag anzeigen
          sh.return_item('...flur')Macht überhaupt keinen Sinn.
          Zitat von Cannon Beitrag anzeigen
          myItem.return_item('...flur')
          Naja nach der letzten Methode hier schon. Vielleicht stelle ich die Frage auch einfach falsch. Hier mal ein Beispiel:

          Code:
          EG:
              Wohnen:
                  DALI:
                      Decke:
                          WW:
                              externerTaster:
                                  type: bool
                                  knx_dpt: 1
                                  knx_send: 5/5/0
                                  knx_listen: 5/5/0
                                  knx_init: 5/5/0
                                  enforce_updates: yes
                                  visu_acl: rw
                                  doppelklick_item: ...doppelklick
                              doppelklick:
                                  type: bool
                                  enforce_updates: yes
                                  visu_acl: rw
          In dem Beispiel könnte Doppelklick auch ganz woanders sein ... die Frage ist, wie ich das "...doppelclick" in der Logik auflöse?

          Kommentar


            #6
            Zitat von Cannon Beitrag anzeigen
            In dem Beispiel könnte Doppelklick auch ganz woanders sein ...
            Dein Beispiel ist falsch! ...doppelklick wäre EG.Wohnen.DALI.Decke.doppelklick und nicht EG.Wohnen.DALI.Decke.externerTaster.doppelklick. Nur damit wir über das gleiche reden.

            Ansonsten stimmt einfach das, was ich oben geschrieben habe: Jeder Punkt ist ein return_parent(), ausser dem ersten bzw. letzten, der ist ein self(). Der Algorithmus ist somit einfach (ich kann nur python nicht so aus dem ff, dass ich es ohne probieren runterschreiben kann):
            • path = relativer Pfad aus dem Attribut = ...doppelklick
            • item = das Item, in dem das Attribut (doppelclick_item) mit dem relativen Pfad steht = EG.Wohnen.DALI.Decke.WW.externerTaster
            • wenn path mit einem "." beginnt, entferne den ersten "." aus path
            • solange path mit einem "." beginnt:
              • item = item.return_parent()
              • entferne den ersten "." aus path
            • path = item.id() + "." + path.
            • relative_item = sh.return_item(path)
            Ein python-Profi wird das wahrscheinlich in einer Zeile schreiben können , aber so sollte es auch funktionieren.

            Gruß, Waldemar

            Kommentar


              #7
              Zitat von mumpf Beitrag anzeigen
              Dein Beispiel ist falsch!
              Aktuell ist es ja EG.Wohnen.DALI.Decke.WW.doppelklick, damit wir auch hier nicht über was anderes reden. Beide aufgeführten Beispiele sind ja nicht richtig.

              Aber um auf die eigentliche Frage zurückzukommen. Es gibt also folglich keine Methode, die mir genau das automatisch umsetzt? Also aus relativen Pfaden die items extrahiert?

              Es geht nur auf dem manuellen Weg. Also beginnend vom "Trigger-Item", also da wo "doppelklick_item" definiert ist die Pfade manuell zu durchlaufen. Schlimm wenn dann noch irgendwo ein shelf drin steht. Dann wäre das ein Verbesserungsvorschlag für kommende Versionen. :-)

              So geht das ohne relative Items:

              Code:
              tSource = trigger['source']
              tItem = sh.return_item(tSource)
              dItemName = tItem.conf['doppelklick']
              dItem = sh.return_item(dItemName)
              Und so wäre es toll mit relativen Items:

              Code:
              tSource = trigger['source']
              tItem = sh.return_item(tSource)
              dItemName = tItem.conf['doppelklick']
              [B]dItem = tItem.return_item(dItemName)[/B]
              Wie gesagt, alles unter der Annahme, dass mir nicht bekannt ist, ob es ein relatives Item ist oder nicht, dass muss ich auch nicht wissen in der Logik, denke ich. Ich will ja nur das Item haben.

              Kommentar


                #8
                Zitat von Cannon Beitrag anzeigen
                Aber um auf die eigentliche Frage zurückzukommen. Es gibt also folglich keine Methode, die mir genau das automatisch umsetzt? Also aus relativen Pfaden die items extrahiert?
                Was soll er denn aus

                Code:
                 sh.return_item('...flur')
                extrahieren. Da es keinen Bezug gibt, wo das Item flur im Item-Tree liegt, wass soll den sh.return_item() zurückliefern?

                Und die von Dir angeführte Item Methode

                Code:
                 myItem.return_item('...flur')
                gibt es nicht.

                Es gibt eine Methode das Problem zu lösen. Dazu empfehle ich Dir einen Blick in die Developer Doku.

                Viele Grüße
                Martin

                There is no cloud. It's only someone else's computer.

                Kommentar

                Lädt...
                X