Ankündigung

Einklappen
Keine Ankündigung bisher.

self.get_parameter_value('username') übergibt leere Variable

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

    self.get_parameter_value('username') übergibt leere Variable

    Hallo zusammen,

    ich probiere mich an mein erstes selbst kreiertes plugin, welches die Aufgabe hat meinen Wechselrichter auszulesen.

    Nun scheitere ich aber tatsächlich bereits beim einlesen der Parameter zur Konfiguration des Plugins. Ich habe mir andere plugin Beispiele angeschaut und habe mich auch an diese Dokumentation gehalten https://www.smarthomeng.de/user/entw...n5minutes.html. Daher war ich der Meinung das dies mit
    Code:
    self.get_parameter_value('param')
    gehen sollte.

    Leider erhalte ich aber beim neustarten folgende Fehlermeldung im log
    https://knx-user-forum.de/core/image...EAAAICRAEAOw==


    Weiss jemand von Euch warum ich eine leere Variable übergebe anstatt das konfigurierte string aus der etc/plugin.yaml Datei?

    etc/plugin.yaml

    Code:
    e3dc:
        class_name: e3dc
        class_path: plugins.e3dc
        TCP_IP: xxx.xxx.x.xxx
        username: xxxxx.xxx@xxx.xx
        password: xxxxxx
        RSCP_key: xxxxxxxxxxxxx
    e3dc/__init__.py

    Code:
    import logging
    import json
    from lib.model.smartplugin import SmartPlugin
    from e3dc import E3DC
    from datetime import datetime
    
    class e3dc(SmartPlugin):
        PLUGIN_VERSION = "1.0.0"
        ALLOW_MULTIINSTANCE = False
        
        def __init__(self, sh):
            """
            Initializes the plugin. The parameters describe for this method are pulled from the entry in plugin.conf.
    
            :param sh:  The instance of the smarthome object, save it for later references
            
            :param TCP_IP:             IP or host name of E3/DC Hauskraftwerk
            :param username:           Login name of user to enter the E3/DC portal
            :param password:           Password for the E3/DC portal
            :param RSCP_key:           RSCP password to connect directly with the E3/DC device
            :param cycle:              Update cycle in seconds
            """
            self._sh = sh
            self.logger = logging.getLogger(__name__)
            
            USERID = self.get_parameter_value('username')
            PASSWORD = self.get_parameter_value('password')
            IP = self.get_parameter_value('TCP_IP')
            KEY = self.get_parameter_value('RSCP_key')
            
            
            with open(self.get_plugin_dir() + '/e3dc_config.json') as f:
                CONFIG = json.load(f)
            
            self.static_items = []
            
            try:
                self._e3dc = E3DC(E3DC.CONNECT_LOCAL, username=USERID, password = PASSWORD, ipAddress = IP, key = KEY, configuration = CONFIG)
                self._e3dc_system_info = self._e3dc.get_system_info()
            except KeyError as e:
                self.logger.critical("Plugin {}: Coul not connect with your E3DC device, error: {} plugin".format(self.get_shortname(),e))
    e3dc/plugin.yaml

    Code:
    # meta data for the plugin
    plugin:
        # Global plugin attributes
        type: interface                # plugin type (gateway, interface, protocol, system, web)
        description:
            de: 'Anbindung von E3/DC S10 Hauskraftwerk Geraeten'
            en: 'integration of E3/DC devices'
        maintainer: brunosa3
        tester: unknown              # Who tests this plugin?
        state: develop                  # change to ready when done with development
        keywords: E3DC hauskraftwerk geraete
        documentation: not yet        # url of documentation (wiki) page
        support: https://knx-user-forum.de/forum/supportforen/not_set_yet
    
        version: 1.0.0                  # Plugin version
        sh_minversion: 1.8              # minimum shNG version to use this plugin
        # sh_maxversion:                # maximum shNG version to use this plugin (leave empty if latest)
        multi_instance: False           # plugin supports multi instance
        restartable: True
        classname: e3dc         # class containing the plugin
    
    parameters:
        # Definition of parameters to be configured in etc/plugin.yaml
        TCP_IP:
            type: ip
            default: 127.0.0.1
            description:
                de: 'e3dc Hostname oder IP Adresse'
                en: 'e3dc hostname or ip address'
    
        username:
            type: str
            default: ''
            description:
                de: 'Benutzername'
                en: 'username'
    
        password:
            type: str
            default: ''
            hide: True
            description:
                de: 'Passwort'
                en: 'password'
        RSCP_key:
            type: str
            default: 'abc123'
            description:
                de: 'Benutzername'
                en: 'username'
        cycle:
            type: int
            default: 300
            description:
                de: '(optional) Zeit zwischen zwei Updateläufen. Default ist 300 Sekunden.'
                en: '(optional) Timeperiod between two update cycles. Default is 300 seconds.'
    
    
    item_attributes:
        # Definition of item attributes defined by this plugin
        e3dc_item:
            type: str
            description:
                de: >
                en: >
                    
    
        e3dc_key:
            type: str
            description:
                de: >
                en: >
                    
    
        e3dc_value:
            type: str
            description:
                de: >
                en: >
                    
    
    
    
    item_structs: NONE
    
    logic_parameters: NONE
    
    plugin_functions: NONE

    #2
    Hallo,

    glaube der Link auf dein Log geht nicht. Ist jedenfalls bei mir so

    Kommentar


      #3
      Guten Morgen android

      Danke für den Hinweis. Ehrlich gesagt war es gar nicht meine Absicht den log einem Link zu hinterlegen. Ich habe lediglich ein screenshot der entsprechenden Fehlermeldung eingefügt, dabei muss der Link automatisch generiert worden sein.

      Ich hoffe man kann den Screenshot dennoch sehen wenn nicht hier nochmal in anderer Form
      Code:
      2022-08-31 10:04:02 WARNING lib.smarthome.main -------------------- SmartHomeNG restarting, initiated by admin interface --------------------
      2022-08-31 10:04:42 WARNING lib.smarthome.main -------------------- Init SmartHomeNG 1.8.2.master (5c3f6d20) --------------------
      2022-08-31 10:04:42 WARNING lib.smarthome.main Running in Python interpreter 'v3.8.6 final', from directory /usr/local/smarthome
      2022-08-31 10:04:42 WARNING lib.smarthome.main - on Linux-5.10.17-v7+-armv7l-with-glibc2.28 (pid=12813)
      2022-08-31 10:04:43 WARNING lib.smarthome.main - Nutze Feiertage für Land 'DE', Provinz 'BW', 1 benutzerdefinierte(r) Feiertag(e) definiert
      2022-08-31 10:05:00 ERROR lib.shyaml YAML-file load error in /usr/local/smarthome/plugins/e3dc/plugin.yaml:
      'utf-8' codec can't decode byte 0xfc in position 2119: invalid start byte
      2022-08-31 10:05:01 ERROR lib.plugin Plugin 'e3dc' from section 'e3dc' exception: 'NoneType' object has no attribute 'encode'
      > Traceback (most recent call last):
      > File "/usr/local/smarthome/lib/plugin.py", line 161, in __init__
      > plugin_thread = PluginWrapper(smarthome, plugin, classname, classpath, args, instance, self.meta, self._configfile)
      > File "/usr/local/smarthome/lib/plugin.py", line 628, in __init__
      > exec("self.plugin.__init__(smarthome{0}{1})".forma t("," if len(arglist) else "", argstring))
      > File "<string>", line 1, in <module>
      > File "/usr/local/smarthome/plugins/e3dc/__init__.py", line 58, in __init__
      > self._e3dc = E3DC(E3DC.CONNECT_LOCAL, username=USERID, password = PASSWORD, ipAddress = IP, key = KEY, configuration = CONFIG)
      > File "/home/smarthome/.local/lib/python3.8/site-packages/e3dc/_e3dc.py", line 125, in __init__
      > self.rscp = E3DC_RSCP_local(self.username, self.password, self.ip, self.key)
      > File "/home/smarthome/.local/lib/python3.8/site-packages/e3dc/_e3dc_rscp_local.py", line 46, in __init__
      > self.username = username.encode("utf-8")

      Kommentar


        #4
        Nein, konnte man nicht sehen. Ich vermute der Fehler ist, dass die Plugin-yaml Datei nicht gelesen werden kann:

        2022-08-31 10:05:00 ERROR lib.shyaml YAML-file load error in /usr/local/smarthome/plugins/e3dc/plugin.yaml:
        'utf-8' codec can't decode byte 0xfc in position 2119: invalid start byte

        Kommentar


          #5

          ups - da hab ich wohl den Wald vor lauter Bäumen nicht mehr gesehen
          Vielen Dank für Deine rasche Antwort und Deinen aufmerksamen Blick

          ich verstehe nicht ganz wie ich das verursacht habe und wie ich das Skript wieder in utf-8 bekomme.

          Hast Du eine Idee android ?
          Zuletzt geändert von brunosa3; 31.08.2022, 10:56.

          Kommentar


            #6
            Mit welchem Editor hast Du die Datei bearbeitet?
            Viele Grüße
            Martin

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

            Kommentar


              #7
              Hallo Msinn ,

              in diesem Versuch (der Zeit geschuldet) war ich ein bisschen exotisch unterwegs. Ich habe das Template als Vorlage von hier https://www.smarthomeng.de/user/entw...n5minutes.html im terminal via nano kopiert und dann mit MobaTextEditor editiert.

              Normal verwende ich Visual Studio Code oder Sublime Text.

              Meinst Du das ist durch das kopieren in nano geschehen?

              Kommentar


                #8
                MobaTextEditor hat bei mir in der mobilen version auch schon für ärger gesorgt.

                Notepad++ kann sowas relativ gut beheben. Für visual studio code steht evtl. da was: https://docs.microsoft.com/de-de/pow...powershell-7.2

                Kommentar


                  #9
                  Wenn du eh schon SublimeText benutzt, dann ist das auch eine gute Wahl.

                  Kommentar


                    #10
                    so hab es endlich hinbekommen - ich weiss zwar nicht wie es genau geschehen ist aber ich konnte es mit VS Code lösen.

                    Vielen Dank android Msinn & Morg für Eure Hilfe . Bin vorgestern fast durchgedreht

                    So jetzt kann es aber endlich ans testen meines ersten Plugins gehen

                    Kommentar

                    Lädt...
                    X