Ankündigung

Einklappen
Keine Ankündigung bisher.

Import eines eigenen Moduls in eine Logik

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

    Import eines eigenen Moduls in eine Logik

    Hallo zusammen,
    ich möchte mir gerne für meine Logiken ein Modul schreiben und die darin enthaltenen Funktionen dann immer in meinen Logiken verwenden. Kann mir einer sagen, wie das geht? Aktuell habe ich folgenden Ansatz. Alles im Ordner "logics".

    module_Messages.py
    Code:
    #!/usr/bin/env python
    # -*- coding: iso-8859-1 -*-
    # Imports
    import telepot
    
    # Bot Objekt mit dem API Key anlegen
    botApiKey = 'API KEY'
    botChatIdAll = 12345 # CHAT ID von der Gruppe
    bot = telepot.Bot(botApiKey)
    
    def sendMessage(type, textmessage):
        bot.sendMessage(botChatIdAll, '{} [{}]'.format(textmessage, type))
        sh.messagesystem(type, messagetext)
    Der Aufruf im Skript sieht dann folgedermaßen aus. Hier importiere ich dann mein Modul und will darüber die Funktion aufrufen.

    Logik, die getriggert wird zu einem Zeotpunkt oder auf ein Item
    Code:
    #!/usr/bin/env python
    # -*- coding: iso-8859-1 -*-
    # Imports
    import module_Messages
    
    messagetext = 'Gartentörchen geschlossen.'
    module_Messages.sendMessage('INFO', messagetext)
    Dann erhalte ich jedoch eine Fehlermeldung
    Exception: No module named 'module_Messages'

    Geht das überhaupt? Wo liegt mein Fehler?

    #2
    Wo legst Du denn die module_Messages.py Datei ab? Wenn sie auch im logics Verzeichnis liegt, sollte das import Statement
    Code:
    import logics.module_Messages 
         
     logics.module_Messages.sendMessage('INFO', messagetext)
    oder
    Code:
    import logics.module_Messages as module_Messages 
         
     module_Messages.sendMessage('INFO', messagetext)
    lauten.
    Viele Grüße
    Martin

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

    Kommentar


      #3
      Du kannst auch sowas machen wenn die eigenen Pakete sonstwo liegen:
      Code:
      # Import custom modules
      mylib = '/path/to/my/custom/lib'
      if not mylib in sys.path:
          sys.path.insert(0, mylib)
      import module_from_mylib

      Kommentar


        #4
        Hey super, vielen Dank euch!
        Nun läuft das wunderbar und ich kann besser modularisieren.

        Kommentar


          #5
          Zu früh gefreut. In meinem Submodul wird dann wiederum "sh." nicht erkannt.
          Woran könnte das nun wieder liegen?

          Das "sh.messagesystem(type, messagetext)" aus meinem ersten Post kann er nicht asuführen. Ich erhalte den Fehler:
          Code:
          2016-06-07 21:55:01 ERROR    Rxx_Cyclic_01_Minute Logic: Rxx_Cyclic_01_Minute, File: /usr/local/smarthome/logics/module_Messages.py, Line: 30, Method: sendMessage, Exception: name 'sh' is not defined
          Traceback (most recent call last):
            File "/usr/local/smarthome/lib/scheduler.py", line 327, in _task
              exec(obj.bytecode)
            File "/usr/local/smarthome/logics/logic_Rxx_Cyclic_01_Minute.py", line 22, in <module>
              messages.sendMessage('INFO', messagetext)
            File "/usr/local/smarthome/logics/module_Messages.py", line 30, in sendMessage
              sh.messagesystem(type, messagetext)
          NameError: name 'sh' is not defined
          Die Zeile mit dem "bot." wird noch ordnungsgemäß ausgeführt.

          Gruß
          loeserman

          Kommentar


            #6
            Zitat von loeserman Beitrag anzeigen
            Zu früh gefreut. In meinem Submodul wird dann wiederum "sh." nicht erkannt.
            Woran könnte das nun wieder liegen?
            Das "sh" Objekt liegt nicht im globalen Namensraum von dem Modul, daher ist ein Zugriff darauf nicht möglich. Gegenwärtig ist die API von Logics, Plugins noch nicht so wirklich sauber. Als Workaround kann man das sh Objekt einfach einer Funktion als Parameter in dem Modul mit auf den Weg geben, dann ist es dort auch im lokalen Namensraum vorhanden.

            Kommentar


              #7
              Perfekt. Das klappt underbar. Habe sh einfach mit übergeben. Danke betzs

              Kommentar

              Lädt...
              X