Ankündigung

Einklappen
Keine Ankündigung bisher.

Item-Tree einlesen

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

    Item-Tree einlesen

    Hallo,
    ich möchte einen gesamten Item-Tree auslesen. Stelle mich da aber irgendwie zu oder an das mitd er Rekursion hinzubekommen. Hat jemand sowas schon gemacht und kann mir da einen Hinweis geben?

    Code:
    item_path = 'Zentral.Energie.Photovoltaik'
    item_list = []
    
    item = items.return_item(item_path)
    for child in item.return_children():
        item_list.append(child)
        for subchild in child.return_children():
            item_list.append(subchild)
    Ich müsste das subchild irgndwie mehrfach durchlaufen, bis es nichts mehr gibt. Aber wie mache ich das?
    Zuletzt geändert von Cannon; 08.11.2023, 21:45.

    #2
    Hi @Cannon,

    versuchs mal so :

    Code:
    #!/usr/bin/env python3
    # item_list.py
    
    item_path = 'Zentral.Energie.Photovoltaik'
    item_list = []
    
    def getChilds(actItem , item_list):
      for child in actItem.return_children():
        item_list.append(child.path())
        if (child.return_children() != None):
          getChilds(child,item_list)
          
    item = sh.items.return_item(item_path)
    getChilds(item,item_list)
    #print(str(item_list))
    Viele Grüße
    Andre

    Kommentar


      #3
      Zitat von AndreK Beitrag anzeigen
      versuchs mal so :
      Hallo Andre, danke dir!

      So gehts jetzt:

      Code:
      item_path = 'Zentral.Energie.Photovoltaik'
      item_list = []
      
      def getChilds(actItem, item_list):
          for child in actItem.return_children():
              item_list.append(child)
              if (child.return_children() != None):
                  getChilds(child, item_list)
      
      item = items.return_item(item_path)
      getChilds(item, item_list)
      Wenn das also mal jemand in einer Logik braucht.

      Kommentar


        #4
        Ich wüsste jetzt nicht, wieso ich den gesamten Item-Baum durchlaufen sollte...

        Wenn ich spezielle Attribute suche, geht das einfacher mit find_items(), siehe https://smarthomeng.github.io/smarth.../methoden.html

        Kommentar


          #5
          Zitat von Morg Beitrag anzeigen
          Ich wüsste jetzt nicht, wieso ich den gesamten Item-Baum durchlaufen sollte...
          Brauche ich für eine plugin-Entwicklung. Mich interessiert welche Items innerhalb eines Item-Baums (struct) innerhalb einer bestimmten Zeit nicht geändert wurden. Wahrscheinlich wäre das auch mit

          Code:
          item_path = 'Zentral.Energie.Photovoltaik'
          
          for item in items.match_items('item_path '+'.*'):
              item_list.append(child)
          mögich oder? Wusste ich nur vorher nicht.

          Kommentar


            #6
            Regelmäßig durch den ganzen Tree zu iterieren ist nicht die beste Idee (es sei denn Du hast einen sehr schnellen Rechner.

            Dich interessieren sicherlich nur einige (viele) Items, aber nicht alle. Die kannst Du Dir in parse_item() merken. Im Zuge der Initialisierung wird parse_item() des Plugins mit jedem Item aufgerufen.

            Normalerweise definiert man in den Items die einen interessieren ein Attribut, um diese Items zu kennzeichnen und nicht auf die Einhaltung einer Namenskonvention für ein Item angewiesen zu sein.
            Zuletzt geändert von Msinn; 09.11.2023, 20:14.
            Viele Grüße
            Martin

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

            Kommentar


              #7
              Zitat von Msinn Beitrag anzeigen
              Dich interessieren sicherlich nur einige (viele) Items, aber nicht alle.
              Naja mich interessieren alle in dem angegebenen Item-Tree, die ich auch manuell mit einer Logik auswerte, also nicht regelmäßig. Das Ziel ist ein entsprechendes Attribut zu definieren, bei Items, die man nicht ständig aktualisieren muss. Also ich verfolge damit genau das Ziel wenig Overhead zu erzeugen. ;-)

              Kommentar

              Lädt...
              X