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

    #16
    Hi Jürgen,

    ist aber die alte Doku. Ich bin über Marcus Link https://docs.callidomus.com/de/Logiken/ gegangen...

    Gruß, Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #17
      Zitat von mumpf Beitrag anzeigen
      Hi Marcus,
      vielleicht würde bei der Doku der zu erwartende Rückgabe-Typ helfen.
      Also mir würde das sehr helfen.

      Duck-Typing ist nich so mein Ding
      Zuletzt geändert von heckmannju; 29.07.2016, 12:06.

      Kommentar


        #18
        Zitat von callidomus Beitrag anzeigen
        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/




        Was für eine Sprache ist einfacher zu verstehen?

        Bis bald

        Marcus
        Bei mir scheint das attr noch nicht drin zu sein.

        2016-07-30 00:11:17 ERROR Send433 Logic: Send433, File: /data/callidomus/local/logics/Send433.py, Line: 8, Method: <module>, Exception: 'NoneType' object has no attribute 'attr'
        Traceback (most recent call last):
        File "/mfs/core/lib/scheduler.py", line 425, in _task
        exec(obj.bytecode, _globals)
        File "/data/callidomus/local/logics/Send433.py", line 8, in <module>
        adress = item.attr('adress_433') #"11011" #attribut adress_433
        AttributeError: 'NoneType' object has no attribute 'attr'

        Kommentar


          #19
          Hi Jürgen,

          bist Du auf testing? Hast Du callidomus.core update gemacht?
          Wie sieht Deine Source aus? Ohne source ist es schwer, Dir zu helfen...

          Gruß, Waldemar
          OpenKNX www.openknx.de

          Kommentar


            #20
            Zitat von mumpf Beitrag anzeigen
            Hi Jürgen,

            bist Du auf testing? Hast Du callidomus.core update gemacht
            Wie sieht Deine Source aus? Ohne source ist es schwer, Dir zu helfen...

            Gruß, Waldemar
            Hi Waldemar,
            Ja ich bin auf testing, ich habe den update gemacht.
            Die Zeile um die es geht steht in der Fehlermeldung.

            Hier mein update
            Code:
            2;callidomuscallidomus:/data/callidomus/local> core update
            /data/callidomus/branch/testing/rel-0100-20160100% of  918 kB 1459 kBps 00m00s
            callidomus:/data/callidomus/local> core restart
            Stopping cd_core.
            Waiting for PIDS: 30526.
            Starting cd_core.
            callidomus:/data/callidomus/local> 
            callidomus:/data/callidomus/local> date
            Sa 30 Jul 2016 08:54:19 CEST
            Die Fehlermeldung
            Code:
            2016-07-30 08:48:00 DEBUG    location.time Triggering location.time-code - caller: Scheduler source: None dest: None value: {'caller': 2016-07-30 08:56:18 ERROR    Send433      Logic: Send433, File: /data/callidomus/local/logics/Send433.py, Line: 8, Method: <module>, Exception: 'NoneType' object has no attribute 'attr'
            Traceback (most recent call last):
              File "/mfs/core/lib/scheduler.py", line 425, in _task
                exec(obj.bytecode, _globals)
              File "/data/callidomus/local/logics/Send433.py", line 8, in <module>
                adress = item.attr('adress_433') #"11011" #attribut adress_433
            AttributeError: 'NoneType' object has no attribute 'attr'
            2016-07-30 08:56:45 DEBUG    Main         Item haus.og.kind.voc = 610.88 via KNX 1.1.0 8/3/2
            der code
            Code:
            logger = logging.getLogger('')
            
            host = "192.168.102.7" # IP of Adruino
            port = 8888 # Port where the Arduino is listening
            
            item = cd.return_item(trigger.caller)
            
            adress = item.attr('adress_433') #"11011" #attribut adress_433
            channel =  item.attr('channel_433') #"00010" #attribut channel_433
            
            
            value = item()
            
            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))
            VG Juergen
            Zuletzt geändert von heckmannju; 30.07.2016, 08:01.

            Kommentar


              #21
              Guten morgen,
              deswegen wollte ich das coding.
              trigger.caller ist falsch (wie es auch vorher trigger.by war). Du musst trigger.source nehmen.
              Gruß Waldemar
              OpenKNX www.openknx.de

              Kommentar


                #22
                Hallo Jürgen,

                sorry, mein Fehler.

                Bis bald

                Marcus

                Kommentar


                  #23
                  Hi Marcus,

                  ist attr jetzt eine Funktion attr() oder ein Hash
                  attr[]? In der Doku sind es (), im changelog aber [].

                  Nur um weitere Meldungen diesbezüglich zu vermeiden.

                  Gruß Waldemar
                  OpenKNX www.openknx.de

                  Kommentar


                    #24
                    Hallo Waldemar,

                    dank für das Feedback, es ist ein Dictionary. Ist in der Doku gefixt.

                    Bis bald

                    Marcus

                    Kommentar


                      #25
                      Hi,

                      Nachdem ich mir die Objekte mal als String ausgebe wird es einwenig klarer.

                      Code:
                      logger.debug("trigger.caller: {}".format(trigger.caller))
                      logger.debug("trigger.value: {}".format( trigger.value))
                      logger.debug("trigger.dest: {}".format( trigger.dest))
                      logger.debug("trigger.by: {}".format( trigger.by))
                      logger.debug("trigger.source: {}".format( trigger.source))
                      
                      
                      2016-07-30 19:41:01 DEBUG    Send433      trigger.caller: Item
                      2016-07-30 19:41:01 DEBUG    Send433      trigger.value: False
                      2016-07-30 19:41:01 DEBUG    Send433      trigger.dest: None
                      2016-07-30 19:41:01 DEBUG    Send433      trigger.by: Item
                      2016-07-30 19:41:01 DEBUG    Send433      trigger.source: Steckdosen.D
                      Wozu ist Trigger Dest? In der beschreibung steht
                      • trigger.dest: Liefert das Ziel. z.B. die KNX GA
                      Aber wie kann man das beeinflussen? Im Falle der Steckdosen gebe ich das Ziel als Atribute im Item an. Kann man so ein Attribut denn auch als Ziel definieren?

                      Viele Grüsse
                      Jürgen

                      Kommentar


                        #26
                        Hi Jürgen,

                        den trigger kannst Du an der Stelle nicht beeinflussen, er liefert Dir ja Informationen. Den trigger erstellt ja der Sender.

                        Dein Coding war ja gut, ich hoffe, Du hast es inzwischen am laufen. Du musst wie gesagt aus trigger.caller nur trigger.source machen und bei den beiden attr statt runder Klammern () immer eckige [] verwenden.

                        Gruß, Waldemar
                        OpenKNX www.openknx.de

                        Kommentar


                          #27
                          Hi Waldemar,

                          ja das programm läuft nicht nur zicken jetzt die Steckdosen heute rum. Ich vermut mal das irgentwas den Funk stört da die über die Fernbedinung auch nicht mehr richtig funktionieren. ... die UDP Calls kommen jetzt beim Arduino an.

                          Code:
                          #Sender433.py
                          logger = logging.getLogger('')
                          
                          host = "192.168.102.7" # IP of Adruino
                          port = 8888 # Port where the Arduino is listening
                          
                          logger.debug("trigger.caller: {}".format(trigger.caller))
                          logger.debug("trigger.value: {}".format( trigger.value))
                          logger.debug("trigger.dest: {}".format( trigger.dest))
                          logger.debug("trigger.source: {}".format( trigger.source))
                          
                          item = cd.return_item(trigger.source)
                          value = int(item())
                          
                          adress = item.attr['adress_433']    #"11011" #attribut adress_433
                          channel =  item.attr['channel_433'] #"00010" #attribut channel_433
                          
                          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))
                          Nochmal zum trigger.dest mir ist noch immer nicht klar unter welchen umständen da eine GA oder irgentwas drin steht.
                          Zuletzt geändert von heckmannju; 30.07.2016, 22:48.

                          Kommentar


                            #28
                            Hallo Jürgen,

                            Zitat von heckmannju Beitrag anzeigen
                            Nochmal zum trigger.dest mir ist noch immer nicht klar unter welchen umständen da eine GA oder irgentwas drin steht.
                            eine GA steht nur drin, wenn man die Logik direkt an eine GA bindet. Das geht aber momentan nicht über die GUI.

                            Bis bald

                            Marcus

                            Kommentar


                              #29
                              Hi,
                              was gibt den die Methode cd.find_items(ATTRIBUT) zurück ist das eine Liste oder ein Dictionary? Wenn ich in meinem Beispiel ein print von dem Objekt mache kommt folgendes raus <generator object CallidomusCore.find_items at 0x80a19d620>
                              • cd.find_items(ATTRIBUT): liefert alle Items die das angegeben ATTRIBUT besitzen.
                                z.B. cd.find_items('Nachtlicht')
                              Was mir helfen würde ist ein kleines Beispiel was man den mit dem Rückgabewert machen muss um an die Items zu kommen. Eigentlich würde ich mir das zu jeder funktion/Methode wünschen. Das ist wenn ich mir die sonstigen Pyhton Lib beschreibungen ansehe auch durchaus üblich das zu machen.

                              Viele Grüsse
                              Jürgen

                              Kommentar


                                #30
                                Hi,
                                okay ich hab es jetzt selber rausbekommen.

                                Code:
                                for fenster in cd.find_items("isFenster"):
                                    logger.debug("{}: {}".format(fenster,fenster.attr['isFenster']))
                                Code:
                                2016-08-04 23:43:00 DEBUG Fenster haus.dg.studio.fenster_l: DG
                                2016-08-04 23:43:00 DEBUG Fenster haus.dg.studio.fenster_r: DG
                                2016-08-04 23:43:00 DEBUG Fenster haus.eg.bad.fenster: EG
                                2016-08-04 23:43:00 DEBUG Fenster haus.eg.gaderobe.fenster: EG
                                2016-08-04 23:43:00 DEBUG Fenster haus.eg.kueche.fenster: EG
                                2016-08-04 23:43:00 DEBUG Fenster haus.eg.wz.fenster_nachbar: EG
                                2016-08-04 23:43:00 DEBUG Fenster haus.eg.wz.fenster_sofa: EG
                                2016-08-04 23:43:00 DEBUG Fenster haus.eg.wz.fenster_terrasse: EG
                                2016-08-04 23:43:00 DEBUG Fenster haus.kg.buero.fenster: true
                                2016-08-04 23:43:00 DEBUG Fenster haus.kg.gast.fenster: true
                                2016-08-04 23:43:00 DEBUG Fenster haus.og.bad.fenster: OG
                                2016-08-04 23:43:00 DEBUG Fenster haus.og.eltern.nachbar.fenster: OG
                                2016-08-04 23:43:00 DEBUG Fenster haus.og.eltern.strasse.fenster: OG
                                2016-08-04 23:43:00 DEBUG Fenster haus.og.henry.fenster: OG
                                2016-08-04 23:43:00 DEBUG Fenster haus.og.kind.garten: OG
                                2016-08-04 23:43:00 DEBUG Fenster haus.og.kind.nachbar: OG
                                Gibt es auch eine Möglichkeit die Liste auf die Attribute mit einem bestimmten Attributwert einzugrenzen?

                                VG
                                Jürgen
                                Zuletzt geändert von heckmannju; 05.08.2016, 08:35.

                                Kommentar

                                Lädt...
                                X