Ankündigung

Einklappen
Keine Ankündigung bisher.

Wie komme ich an Attribute vom Item dran?

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

    [callidomus] Wie komme ich an Attribute vom Item dran?

    Hi,
    will gerade eine Logik schreiben für die 433MHZ Schnittstelle geht schon fast alles ich weiss nur nicht wie ich an die Attribute adress_433 und channel_433 des Items rankomme. Das muss doch über das trigger.by gehen über das komme ich ja auch an den Item Wert. Nur wie ich an die Atribute eines ITems rankomme habe ich nix in der Doku gefunden.

    Code:
    logger = logging.getLogger('')
    
    host = "192.168.102.7" # IP of Adruino
    port = 8888 # Port where the Arduino is listening
    
    adress = 11011 #attribut adress_433
    channel =  00010 #attribut channel_433
    value = int(trigger.by)
    
    data = "{0},{1},{2}".format(adress, channel, value) 
    
    cd.nw.udp( host, port, data)
    logger.debug( "Sending udp to host: {0}, port: {1}, data: {2}".format(host,port,data))
    Viele Grüsse
    Jürgen

    #2
    Hi Jürgen,

    ich glaube mit den Zeilen
    Code:
    adress = 11011 #attribut adress_433
    channel = 00010 #attribut channel_433
    bekommst du ein Problem.

    Sollten die nicht besser:
    Code:
    adress = "11011" #attribut adress_433
    channel = "00010" #attribut channel_433
    heißen?

    Grüße
    Thorsten

    Kommentar


      #3
      Thorsten, das sind die Zeilen die durch die Atribute der Items geändert werden sollen. Und beide Schreibweisen funktionieren.

      Code:
      >>> b=11111
      >>> print(b)
      11111
      Viele Grüsse
      Jürgen

      Kommentar


        #4
        Hallo Jürgen,

        für Logiken, die von Items getriggert werden sollen und bei denen Du die Werte von dem Item oder dessen Attributen haben willst, solltest Du immer so anfangen:

        Code:
        if trigger.by == 'Item':
            sourceitem = cd.return_item(trigger.source)
        (im Deinem Beispiel ist value nicht der Wert des Items, sondern der typ des callers)

        Dann kannst Du mit
        Code:
            value = sourceitem()
        auf den Wert des Items zugreifen, mit
        Code:
            sourceitem(newValue)
        das Item setzen und mit
        Code:
            attrvalue = sourceitem.conf['attributname']
        auf einen Attributwert zugreifen.

        Gruß, Waldemar
        OpenKNX www.openknx.de

        Kommentar


          #5
          Phyton ist echt schwer zu verstehn!.

          Waldemar ich glaub dir das das stimmt aber warum hat dann das den Wert des Items zurückgeliefert. Der Code hat genau so funktioniert Also 0 und 1 zurückgeliefert als ich das ITem mit der CLI geändert habe.
          Code:
          value = int(trigger.by)
          und in der Doku steht
          • trigger.by: Liefert den Auslöser der Logik. Plugin, Logik, Item, … z.B. das KNX Plugin
          der Auslöser ist das Item wenn das stimmt was du schreibst kommt da ein String wo "Item" drin steht zurück.

          Kommentar


            #6
            Hallo Jürgen,

            wenn die Logik über eine Item-Änderung getriggert wurde, dann steht in trigger.value der Wert des Items.
            In trigger.caller, bislang trigger.by, steht der Itempfad.

            Das Item kannst Du also mit:

            Code:
            item = cd.return_item(trigger.caller)
            In testing, von gerade eben, kommt man über attr an die Attribute. Vorher nur über .conf.

            Code:
            item.attr('MeinAttribut')
            Steht auch in der aktualisierten Doku: https://docs.callidomus.com/de/Logiken/


            Zitat von heckmannju Beitrag anzeigen
            Phyton ist echt schwer zu verstehn!
            Was für eine Sprache ist einfacher zu verstehen?

            Bis bald

            Marcus

            Kommentar


              #7
              Zitat von callidomus Beitrag anzeigen
              Was für eine Sprache ist einfacher zu verstehen?
              Eigentlich jede typisierte Sprache wo mir ein Compiler auf die Finger klopft wenn was falsch ist...

              kannst du das Phänoman erklären mit
              value = int(trigger.by)
              das hier 0 und 1 rauskommen mit einem Bool item.
              Zuletzt geändert von heckmannju; 29.07.2016, 10:17.

              Kommentar


                #8
                Hi Marcus,

                gibt es trigger.by noch? Und auch item.conf? Oder muss ich alle meine Logiken ändern? Ist nicht schlimm, ich hab glücklicherweise noch nicht viele Logiken, ich wollte nur wissen, ob nach dem nächsten Update irgendwas nicht läuft.

                Gruß, Waldemar
                OpenKNX www.openknx.de

                Kommentar


                  #9
                  Hallo,

                  es gibt beide noch. Ich möchte Sie nur los werden, deswegen erwähnt die Doku sie nicht mehr.
                  Vor dem Entfernen gibt es aber noch einmal eine Warnung.


                  Bis bald

                  Marcus

                  Kommentar


                    #10
                    Zitat von callidomus Beitrag anzeigen
                    es gibt beide noch. Ich möchte Sie nur los werden, deswegen erwähnt die Doku sie nicht mehr.
                    trigger.by steht aber noch in der Doku

                    Kommentar


                      #11
                      Hi Marcus,

                      danke, so habe ich das auch gedacht/erwartet. Ich werde dann man nach dem nächsten Update auf die neue Syntax umstellen.

                      Gruß, Waldemar
                      OpenKNX www.openknx.de

                      Kommentar


                        #12
                        Zitat von heckmannju Beitrag anzeigen

                        trigger.by steht aber noch in der Doku
                        Hi Jürgen,

                        wo denn? Ich habe eben noch mal geschaut und nur trigger.caller gefunden.

                        Gruß, Waldemar
                        OpenKNX www.openknx.de

                        Kommentar


                          #13
                          Halo,

                          es gab ein Update der Doku, passiert von Zeit zu Zeit. :-)

                          Bis bald

                          Marcus

                          Kommentar


                            #14
                            Hi Marcus,

                            vielleicht würde bei der Doku der zu erwartende Rückgabe-Typ helfen.


                            trigger.caller: string - liefert den Auslöser der Logik (Item, Logik...)
                            würde nicht implizieren, dass da ein Objekt zurückkommt.

                            Und ein
                            item.parent(): Item - Liefert den Vater des Items
                            macht klar, dass da wirklich ein Item-Objekt zurückkommt.

                            Oder Du beschreibst es im Text expliziter
                            trigger.caller - liefert den Typ des Auslösers als String ("Item", "Logik", ...)
                            Nur ein Vorschlag, mir hat es in der bisherigen Variante gereicht, aber ich guck im Zweifelsfall auch in Deinen Sourcen nach, was gemeint ist.

                            Gruß, Waldemar
                            OpenKNX www.openknx.de

                            Kommentar


                              #15
                              Zitat von mumpf Beitrag anzeigen
                              wo denn? Ich habe eben noch mal geschaut und nur trigger.caller gefunden.
                              na hier..

                              capture.PNG

                              Kommentar

                              Lädt...
                              X