Ankündigung

Einklappen
Keine Ankündigung bisher.

AttributeError: 'str' object has no attribute 'getLogger'

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

    AttributeError: 'str' object has no attribute 'getLogger'

    Hi,

    ich weiss da momentan wirklich nicht mehr weiter: Ich habe mir das Sample Plugin aus dem dev Ordner als Vorlage zum bauen meines Plugins genommen... aber irgendwie bekomme ich beim Starten immer nur im Logfile folgenden Fehler:

    Code:
    2017-12-03  22:28:48 INFO     Main         Loading '/usr/local/smarthomeng-dev/plugins/zwave/plugin.yaml' to 'OrderedDict'
    2017-12-03  22:28:48 INFO     Main         plugin 'zwave': Metadata paramlist = '['device']'
    2017-12-03  22:28:49 ERROR    Main         Plugin 'zwave' from section 'zwave' exception: 'str' object has no attribute 'getLogger'
    Traceback (most recent call last):
      File "/usr/local/smarthomeng-dev/lib/plugin.py", line 111, in __init__
        plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance, self.meta)
      File "/usr/local/smarthomeng-dev/lib/plugin.py", line 413, in __init__
        exec("self.plugin.__init__(smarthome{0}{1})".format("," if len(arglist) else "", argstring))
      File "<string>", line 1, in <module>
      File "/usr/local/smarthomeng-dev/plugins/zwave/__init__.py", line 71, in __init__
        self.logger = logging.getLogger(__name__)   # get a unique logger for the plugin and provide it internally
    AttributeError: 'str' object has no attribute 'getLogger'
    aber der manuelle Test findet keinen Fehler:
    Code:
    root@zentrale:/usr/local/smarthome-dev# python3
    Python 3.5.2 (default, Nov 23 2017, 16:37:01)
    [GCC 5.4.0 20160609] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import plugins.zwave
    >>>
    Viel geändert habe ich noch nicht einmal...

    Jemand eine Idee?
    Zuletzt geändert von TCr82; 03.12.2017, 22:59.

    #2
    ok.. ich habe gerade gesehen, dass ich die Vorlage wohl aus dem aktuellen master (nicht developer) genommen habe... da da ja noch für den Konstruktor "*args, **kwargs" verwendet wurde... aber an dem "self.logger = logging.getLogger(__name__)" hat sich ja nichts geändert?! Ist ja auch noch in den aktuellen Plugins genau so...

    EDIT: ok, ich habe den Fehler weg, nachdem ich einfach nochmal mit der aktuellen Vorlage angefangen habe und meine Änderungen übertragen habe.. Bin mir nicht sicher, aber ich denke es kam von dem
    Code:
    import logging
    was am Anfang von der alten Vorlage stand.
    Zuletzt geändert von TCr82; 03.12.2017, 23:02.

    Kommentar


      #3
      Ich schließe aus Deinen Postings, Du entwickelst unter dem develop Branch.

      Die kommende Version bietet diverse neue Möglichkeiten. Die Sample Plugins sind deshalb grundlegend überarbeitet. Ich bin mir nicht sicher, ob die Sample Plugins im master 100%ig richtig waren. Ich habe für den Develop Branch gerade heute einen Cross Check gemacht und das Backend Plugin auf die Struktur des Sample_Plugins_mit_WebIf umgestellt. Das Sample sollte also richtig sein und (für die kommende Version von shNG) funktionieren.

      Wenn Du mit dem Sample oder den neuen Features Probleme hast, sag bescheid.
      Viele Grüße
      Martin

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

      Kommentar


        #4
        hi, also ich melde mich gerade nochmal zu dem Thema. Denn es will einfach nicht!
        Mein Plugin loggt gar nichts....
        Dachte mir zuletzt, dass ja self.logger im Sample gar nicht initiiert wird. Aber sobald ich das rein nehme, bekomme ich wieder den Fehler wie schon am Anfang geschrieben... irgendwie ist der Wurm drin?!

        Was ist denn nun richtig? Und warum gibt es bei anderen Plugins aus dem Developer bei gleichem Aufruf keinen Fehler?

        EDIT:

        ok, eben geht mir ein Licht auf

        Code:
        def __init__(self, sh, device='/dev/ttyUSB0', config_path='/etc/openzwave/', logging='false', logfile='OZW.log', loglevel='Info'):
        Meine Variable heist leider auch logging... das muss es dann wohl sein

        Bleibt mir nichts anderes als diese Umzubenennen?
        Zuletzt geändert von TCr82; 04.12.2017, 21:48.

        Kommentar


          #5
          Nein, Dir bleibt nicht übrig (falls Du rückwärts kompatibel sein willst.

          Wenn Du auf shNG v1.4 hin programmierst, kannst Du in der Init die Parameter anders abfragen:

          Code:
              def __init__(self, sh, *args, **kwargs):
                  """
                  Initalizes the plugin.
                  """
                  self.logger = logging.getLogger(__name__)
          
                  # get the parameters for the plugin (as defined in metadata plugin.yaml):
                  #   self.param1 = self.get_parameter_value('param1')
                  self.logging = self.get_parameter_value('logging')
          Damit solltest Du dem Namenskonflikt aus dem Weg gehen.

          Du musst beachten:
          - dass das nur funktioniert, wenn der Parameter in den Metadaten (plugin.yaml im Plugin Verzeichnis) definiert ist.
          - self.get_parameter_value() liefert bereits den Datentyp zurück, der in den Metadaten definiert wurde, also nicht immer einen String (wie über die def __init__() Zeile)
          Viele Grüße
          Martin

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

          Kommentar


            #6
            TCr82 Bist Du auch auf Gitter unterwegs?

            Ansonsten kennst Du evtl den Link zur Entwickler Doku für das kommende Release noch nicht. Die Doku ist unter https://www.smarthomeng.de/dev/developer/ zu finden.
            Zuletzt geändert von Msinn; 05.12.2017, 00:28. Grund: Ter der Entwicklerdoku für v1.4 hinzugefügt
            Viele Grüße
            Martin

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

            Kommentar


              #7
              Zitat von Msinn Beitrag anzeigen
              TCr82 Bist Du auch auf Gitter unterwegs?.
              Was ist Gitter? Meinst du github?

              Danke für den Link, den kann ich sicher gebrauchen.

              Obwohl mein Plugin schon soweit funktioniert... bin aber noch am Optimieren/Aufräumen.
              Und das mit dem Webinterface habe ich noch nicht eingebaut.

              Kommentar


                #8
                Nein ich meinte Die Chat Platform Gitter (https://gitter.im/smarthomeNG/smarthome). Dort gibt es auch einen Kanal für die smartVISU.

                Das Webinterface ist ja auch keine Pflicht. Bei einigen Plugins kann es jedoch bei der Konfiguration oder der Fehlersuche helfen. Besonders, da Aktuelle Plugins nicht mehr Standalone gestartet werden können, was einige Autoren dazu genutzt haben, zu konfigurierende HW auszulesen.
                Viele Grüße
                Martin

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

                Kommentar

                Lädt...
                X