Ankündigung

Einklappen
Keine Ankündigung bisher.

Items in Funktionen benutzen?

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

    Items in Funktionen benutzen?

    Ich bräuchte noch einmal etwas Hilfe....

    Wie kann ich in einer Logik, in der ich eine Funktion habe, auf Items in der funktion zugreifen?
    Und, wie kann ich Variablen aus einer Funktion in einer Logik global für die Logik nutzbar machen?


    VERSUCH:
    Code:
    def test1():
        sh.EG.Raum7.Steckdosen.tvled(0)
        logger.info('funktion ausfgeführt')
        
    test1()
    LÖSUNG:
    Code:
    setval = False
    def test1(sh):
        sh.EG.Raum7.Steckdosen.tvled(0)
        logger.info('funktion ausfgeführt')
        return True
        
    setval = test1(sh)
    logger.info(str(setval))
    Zuletzt geändert von schuma; 01.01.2019, 18:14.

    #2
    Nein.

    Aber bitte beachten: Logiken liegen nicht im globalen Namnesraum von Python. Wenn Du z.B. Variablen direkt in der Logik definierst, kannst Du aus Funktionen in der Logik nicht darauf zugreifen. Du musst sie als Parameter der Funktion mit übergeben oder Du musst die Variablen in einem anderen Namensraum definieren (siehe hierzu "persistente Variablen in Logiken" in der Doku).

    Viele Grüße
    Martin

    Stay away from negative people. They have a problem for every solution.

    Kommentar


      #3
      Zitat von Msinn Beitrag anzeigen
      Nein.
      Ok, aber mit dem Beispiel oben hatte ich es versucht und das hat nicht geklappt.
      Fehlermeldung war „sh nicht bekannt“

      Kommentar


        #4
        Zitat von schuma Beitrag anzeigen
        Fehlermeldung war „sh nicht bekannt“
        Hi Schuma,

        vor dem Problem stand ich auch schon :-) ich gehe mal davon aus die Fehlermeldung sh. not defined bekommst du wenn du die Funktion in der python Shell testen möchtest und nicht in SHNG ausführst. In der Shell ist sh. nicht definiert.

        In SHNG sollte es dann aber laufen.

        Viele Grüße
        Jannis

        Kommentar


          #5
          Hallo Jannis, leider nein. Das Beispiel oben ist praktisch der gesamte Inhalt einer Testlogik

          Kommentar


            #6
            Wie lautete der genaue Log Eintrag mit der Fehlermeldung?
            Viele Grüße
            Martin

            Stay away from negative people. They have a problem for every solution.

            Kommentar


              #7
              Zitat von Msinn Beitrag anzeigen
              Wie lautete der genaue Log Eintrag mit der Fehlermeldung?
              Die Meldung aus dem Log:
              Code:
              2018-12-31  12:39:35 ERROR    logics.test3 Logic: logics.test3, File: /usr/local/smarthome/logics/test3.py, Line: 4, Method: test1, Exception: name 'sh' is not defined
              Traceback (most recent call last):
                File "/usr/local/smarthome/lib/scheduler.py", line 493, in _task
                  exec(obj.bytecode)
                File "/usr/local/smarthome/logics/test3.py", line 7, in <module>
                  test1()
                File "/usr/local/smarthome/logics/test3.py", line 4, in test1
                  sh.EG.Raum7.Steckdosen.tvled(0)
              NameError: name 'sh' is not defined

              Kommentar


                #8
                Hatte so ein Problem auch letztens.
                liegt an der Funktion iirc.
                Such Mal nach meinem User Namen und HSV

                Gruß,
                Hendrik

                Kommentar


                  #9
                  Zitat von henfri Beitrag anzeigen
                  Such Mal nach meinem User Namen und HSV
                  Sorry, Ich kann unter henfri und hsv nicht finden.

                  Kommentar


                    #10
                    Ich schon:
                    https://knx-user-forum.de/search?sea...%7D&btnSubmit=

                    Erster Treffer:
                    https://knx-user-forum.de/forum/supp...tioniert-nicht

                    Weiß aber nicht, ob es zusammenhängt.

                    Gruß,
                    Hendrik

                    Kommentar


                      #11
                      ok, das klingt aber gut...
                      Jetzt müsste ich nur wissen aus was ich sh importieren müsste.

                      Also:
                      import xy as sh

                      ???

                      Kommentar


                        #12
                        Ich muss raten:

                        Code:
                        def test1(sh):
                             sh.EG.Raum7.Steckdosen.tvled(0)
                             logger.info('funktion ausfgeführt')    
                        
                         test1(sh)
                        oder:
                        Code:
                        sh.EG.Raum7.Steckdosen.tvled(0)
                        logger.info('funktion ausfgeführt')
                        (also einfach die Funktion weglassen)

                        Gruß,
                        Hendrik
                        Zuletzt geändert von henfri; 31.12.2018, 14:27.

                        Kommentar


                          #13
                          Zitat von henfri Beitrag anzeigen
                          (also einfach die Funktion weglassen)
                          Neee, die Herausforderung ist ja gerade das in einer Funktion zu machen.
                          Wenn das dann klappt kann ich mit der eigentlichen Logik weitermachen.

                          Kommentar


                            #14
                            Dann halt die erste Variante

                            Kommentar


                              #15
                              Zitat von henfri Beitrag anzeigen
                              Dann halt die erste Variante
                              Oh, hatte irgenwie übersehen...
                              So funktioert es auf jeden Fall!

                              Vielen Dank, dann kann es weiter gehen.

                              Kommentar

                              Lädt...
                              X