Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlerhafte Einrückung in einem Item wirft Exception in 1.9.3

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

    Fehlerhafte Einrückung in einem Item wirft Exception in 1.9.3

    Ich habe mit der neuen Version leider ein Bug im Log:

    Code:
    2022-11-24  19:01:11 ERROR    modules.websocket   smartVISU_protocol_v4 exception: Client RYZEN.fritz.box (192.168.1.10:59376), shngAdmin v0.6.0, Firefox 107 - received 1005 (no status code [internal]); then sent 1005 (no status code [internal])
    2022-11-24  19:01:17 ERROR    shpypi.get_releasedata Method shpypi.get_releasedata exception: 'NoneType' object has no attribute 'split'
    > Traceback (most recent call last):
    >   File "/usr/local/smarthome/lib/scheduler.py", line 657, in _task
    >     obj()
    >   File "/usr/local/smarthome/lib/shpypi.py", line 751, in lookup_pypi_releasedata
    >     self.check_package_version_data(package)
    >   File "/usr/local/smarthome/lib/shpypi.py", line 769, in check_package_version_data
    >     max_met = self._compare_versions(inst_vers, max, '<=')
    >   File "/usr/local/smarthome/lib/shpypi.py", line 1025, in _compare_versions
    >     v2 = self._version_to_list(vers2)
    >   File "/usr/local/smarthome/lib/shpypi.py", line 1049, in _version_to_list
    >     vsplit = vers.split('.')
    > AttributeError: 'NoneType' object has no attribute 'split'​
    Hat wohl auch irgendwas mit dem Admin-Interface zu tun. Es ist mitunter auch sehr langsam beim laden.

    #2
    Hast Du Plugins im Einsatz, die nicht aus dem plugins Repo kommen?

    Das hat nichts mit dem Admin Interface zu tun. Beim Versuch die Versionsnummer eines Packages aufzuteilen, findet die Routine keinen Punkt in der Versionsnummer.
    Viele Grüße
    Martin

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

    Kommentar


      #3
      Zitat von Msinn Beitrag anzeigen
      Hast Du Plugins im Einsatz, die nicht aus dem plugins Repo kommen?
      Danke für den Hinweis. Problem ist gefunden. Ich hatte einen Fehler in einem Item (Telegram Plugin). Das war auch schon das Problem. Aber du sucht man sich ja irre, ist ja ganz woanders.

      Kommentar


        #4
        Zitat von Msinn Beitrag anzeigen
        Hast Du Plugins im Einsatz, die nicht aus dem plugins Repo kommen?
        Ich komme nochmal darauf zurück, da ich den Fehler wieder. Und wieder war es eine fehlerhafte Einrückung in einem Item. Könnte man das nicht abfangen und den Fehler entsprechend so ermitteln, dass man zumindest weiß, wo man suchen soll?

        Kommentar


          #5
          Das kann man nicht umfassend abfangen. Die Einrückungsfehler, die als solche sicher erkennbar sind, werden vom ruamel.yaml Package bereits erkannt. Aber das Package kann nicht immer erkennen, ob eine Einrückung gewollt oder ein Fehler ist. Erkannte Strukturfehler in YAML Dateien werden als WARNINGS geloggt.
          Zuletzt geändert von bmx; 01.12.2022, 13:38. Grund: Diskussion aus 1.9.3 ausgegliedert in eigenen Thread
          Viele Grüße
          Martin

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

          Kommentar


            #6
            Ich muss da noch mal drauf zurückkommen. Offensichtlich hat das mit einer Einrückung nichts zu tun. Ich erhalte Die Fehlermeldung mal immer wieder nach einen Neustart. Vermutlich ist das Problem ein anderes und vermutlich tritt das nicht nach jedem Neustart auf. Hier noch mal ein Auszug:

            Code:
            2023-01-13  09:34:24 ERROR    plugins.avm         fritzbox_7490@: MonitoringService: TypeError while handling Callmonitor response: 'NoneType' object is not callable
            2023-01-13  09:51:38 ERROR    plugins.avm         fritzbox_7490@: MonitoringService: TypeError while handling Callmonitor response: 'NoneType' object is not callable
            2023-01-13  09:59:38 ERROR    modules.websocket   smartVISU_protocol_v4 exception: Client RYZEN.fritz.box (192.168.1.10:51753), shngAdmin v0.6.0, Firefox 108 - received 1005 (no status code [internal]); then sent 1005 (no status code [internal])
            2023-01-13  09:59:49 ERROR    shpypi.get_releasedata Method shpypi.get_releasedata exception: 'NoneType' object has no attribute 'split'
            > Traceback (most recent call last):
            >   File "/usr/local/smarthome/lib/scheduler.py", line 657, in _task
            >     obj()
            >   File "/usr/local/smarthome/lib/shpypi.py", line 751, in lookup_pypi_releasedata
            >     self.check_package_version_data(package)
            >   File "/usr/local/smarthome/lib/shpypi.py", line 769, in check_package_version_data
            >     max_met = self._compare_versions(inst_vers, max, '<=')
            >   File "/usr/local/smarthome/lib/shpypi.py", line 1025, in _compare_versions
            >     v2 = self._version_to_list(vers2)
            >   File "/usr/local/smarthome/lib/shpypi.py", line 1049, in _version_to_list
            >     vsplit = vers.split('.')
            > AttributeError: 'NoneType' object has no attribute 'split'
            2023-01-13  10:00:22 NOTICE   lib.smarthome       --------------------   Init SmartHomeNG v1.9.3-master (aa143b82a)   --------------------​
            Ich habe mal extra ein bisschen mehr mit aufgenommen. Aber so richtig weiß ich nicht, wo ich suchen soll.

            Kommentar


              #7
              Dann noch mal zurück zu meiner ersten Frage (weiter oben): Hast Du Plugins im Einsatz, die nicht aus dem plugins Repo kommen?

              Zusätzlich die Frage: Hast Du irgendwelche "eher exotische" Python Packages installiert?

              Um dem Thema näher zu kommen: Könntest Du in der Datei lib.shpypi folgende Code Zeilen (750-751):
              Code:
                          # check if installed version is ok and recent
                          self.check_package_version_data(package)
              ​
              durch folgende ersetzen:

              Code:
                          # check if installed version is ok and recent
                          try:
                              self.check_package_version_data(package)
                          except Exception as e:
                              self.logger.exception(f"lookup_pypi_releasedata: Package {package} - Exception: {e}")
              ​
              Viele Grüße
              Martin

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

              Kommentar


                #8
                Zitat von Msinn Beitrag anzeigen
                Dann noch mal zurück zu meiner ersten Frage (weiter oben): Hast Du Plugins im Einsatz, die nicht aus dem plugins Repo kommen?

                Zusätzlich die Frage: Hast Du irgendwelche "eher exotische" Python Packages installiert?
                Die Frage ist schwer zu beantworten, weil ja zum einen immer wieder andere packages (für weitere Plugins) benötigt werden und man dann auch nicht mehr weiß, was jetzt besonders exotisch ist. Sonst habe ich, soweit ich mich erinnere, lediglich sdp_squeezebox mit drin. Aber sicher bin ich da nicht.

                Zitat von Msinn Beitrag anzeigen
                Um dem Thema näher zu kommen: Könntest Du in der Datei lib.shpypi folgende Code Zeilen (750-751):
                Mache ich - gleich getestet:

                Code:
                2023-01-13  12:47:01 ERROR    lib.shpypi          lookup_pypi_releasedata: Package {'name': 'pymodbus', 'vers_installed': '3.0.2', 'is_required': False, 'is_required_for_plugins': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '3', 'sort': '3pymodbus', 'vers_req_min': '*', 'vers_req_max': None, 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '3.0.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pymodbus'} - Exception: 'NoneType' object has no attribute 'split'
                So wie ich das sehe, ist da was in den requirements falsch?

                Kommentar


                  #9
                  • Kannst Du die Code Änderung bitte machen, wie ich sie gepostet hatte (self.logger.exception) und nicht self.logger.error?

                    Die Zeilennummern haben sich gegenüber Deinem ersten Post geändert und ich wollte bei der Problemsuche nicht auch noch Zeilennummern-Aritmetik machen.
                  • Kannst Du mal in der requirements/all.txt nachschauen welche bei Dir konfigurierten Plugins pymodbus nutzen?

                    In der all.txt steht
                    Code:
                    	# plugin 'modbus_tcp'
                    	# plugin 'pluggit'
                    	# plugin 'trovis557x'
                    	# plugin 'sma_mb'
                    	# plugin 'kostalmodbus'
                    	# plugin 'ksemmodbus'
                    	# plugin 'sma_mb'
                    	pymodbus>=2.3.0
                    	​
                    Bei Dir konfigurierte Plugins haben im Kommentar ein configured am Anfang stehen.
                  • Kannst Du mir auch noch sagen, welche pymodbus Version bei Dir installiert ist?
                  Zuletzt geändert von Msinn; 13.01.2023, 13:16. Grund: Nachtrag: Frage nach der pymodbus Version
                  Viele Grüße
                  Martin

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

                  Kommentar


                    #10
                    Zitat von Msinn Beitrag anzeigen
                    • Bei Dir konfigurierte Plugins haben im Kommentar ein configured am Anfang stehen.
                    • Kannst Du mir auch noch sagen, welche pymodbus Version bei Dir installiert ist?
                    Ich fange mal hier. Da ist einiges nicht so, wie es sein sollte, vermute ich:

                    Code:
                    # plugin 'modbus_tcp'
                    # plugin 'trovis557x'
                    # plugin 'ksemmodbus'
                    # plugin 'kostalmodbus'
                    # plugin 'sma_mb'
                    pymodbus>=2.3.0
                    
                    # plugin 'pluggit'
                    pymodbus==2.5.3;python_version<"3.8"
                    
                    # plugin 'pluggit'
                    pymodbus>=3.0.2;python_version>="3.8"
                    
                    # plugin 'helios_tcp'
                    pymodbus3>=1.0.0​pymodbus>=3.0.2;python_version>="3.8"​
                    1. Installiert ist pymodubs Version 3.02.
                    2. Das Plugin 'pluggit'ist konfiguriert, wird nur nicht als "configured" angezeigt.
                    3. Andere Modbus-Sachen nutze ich derzeit nicht.

                    Zitat von Msinn Beitrag anzeigen
                    Kannst Du die Code Änderung bitte machen, wie ich sie gepostet hatte (self.logger.exception) und nicht self.logger.error?
                    Habe ich genau so gemacht, einfach nur mit Copy & Paste. Hier die ganze Funktion nach deinem Patch:

                    Code:
                        def lookup_pypi_releasedata(self, pypi_available=True):
                            self.logger.debug("lookup_pypi_releasedata: pypi_available={}".format(pypi_available))
                            for package in self.package_list:
                                if (package['is_required'] == True) or True:
                                    if pypi_available :
                                        self.get_package_releases_data(package)
                                        #scheduler.add(self, name, obj, prio=3, cron=None, cycle=None, value=None, offset=None, next=None, from_smartplugin=False):
                                        #self._sh.scheduler.add(self._itemname_prefix + self._path, self, cron=self._crontab, cycle=cycle)
                                    else:
                                        self.logger.warning("get_packagelist ({}): PyPI nicht erreichbar".format(package))
                                        if package['pypi_version'] == '':
                                            package['pypi_version'] = '--'
                                        package['pypi_version_not_available_msg'] = 'PyPI nicht erreichbar'
                    
                                # check if installed version is ok and recent
                                #self.check_package_version_data(package)
                                try:
                                    self.check_package_version_data(package)
                                except Exception as e:
                                    self.logger.exception(f"lookup_pypi_releasedata: Package {package} - Exception: {e}")
                            return

                    Ich schreibe mal den gesamten Log-Teil hier rein:

                    Code:
                    2023-01-13  12:47:01 ERROR    lib.shpypi          lookup_pypi_releasedata: Package {'name': 'pymodbus', 'vers_installed': '3.0.2', 'is_required': False, 'is_required_for_plugins': True, 'is_required_for_testsuite': False, 'is_required_for_docbuild': False, 'required_group': '3', 'sort': '3pymodbus', 'vers_req_min': '*', 'vers_req_max': None, 'vers_req_msg': '', 'vers_req_source': '', 'vers_ok': False, 'vers_recent': False, 'pypi_version': '3.0.2', 'pypi_version_ok': True, 'pypi_version_not_available_msg': '', 'pypi_doc_url': 'https://pypi.org/pypi/pymodbus'} - Exception: 'NoneType' object has no attribute 'split'
                    > Traceback (most recent call last):
                    >   File "/usr/local/smarthome/lib/shpypi.py", line 753, in lookup_pypi_releasedata
                    >     self.check_package_version_data(package)
                    >   File "/usr/local/smarthome/lib/shpypi.py", line 773, in check_package_version_data
                    >     max_met = self._compare_versions(inst_vers, max, '<=')
                    >   File "/usr/local/smarthome/lib/shpypi.py", line 1029, in _compare_versions
                    >     v2 = self._version_to_list(vers2)
                    >   File "/usr/local/smarthome/lib/shpypi.py", line 1053, in _version_to_list
                    >     vsplit = vers.split('.')
                    > AttributeError: 'NoneType' object has no attribute 'split'
                    Was auch imme rmal kommt ist das hier. Damit kann das aber nichts zu tun haben?

                    Code:
                    2023-01-13  13:24:43 ERROR    plugins.avm         fritzbox_7490@: MonitoringService: TypeError while handling Callmonitor response: 'NoneType' object is not callable
                    2023-01-13  13:25:31 ERROR    plugins.avm         fritzbox_7490@: MonitoringService: TypeError while handling Callmonitor response: 'NoneType' object is not callable
                    ​

                    Kommentar


                      #11
                      Zitat von Cannon Beitrag anzeigen
                      Was auch imme rmal kommt ist das hier. Damit kann das aber nichts zu tun haben?
                      Kann es sein, dass die Fritzbox auf Abfrage der Monitoringservice "nur" einen Fehlercode sendet, so dass der Inhalt der Rückmeldung "None" ist. "None" kann dann nicht weiterverarbeitet, daher der Fehler.
                      Der Fehler wird in Zeile 422 des Plugins abgefangen.

                      Wie gesagt, Auslöser ist eine "nicht erwartete" Antwort der Fritzbox. Welche Firmware hast Du installiert?

                      Kommentar


                        #12
                        Zu
                        Code:
                        # plugin 'modbus_tcp'
                        # plugin 'trovis557x'
                        # plugin 'ksemmodbus'
                        # plugin 'kostalmodbus'
                        # plugin 'sma_mb'
                        pymodbus>=2.3.0
                        fällt mir auf: sind diese Plugins eigentlich alle pymodbus 3.x kompatibel?

                        Bei pluggit ist eine (syntaktisch) richtige Einschränkung gesetzt:

                        Code:
                        # plugin 'pluggit'
                        pymodbus==2.5.3;python_version<"3.8"
                        
                        # plugin 'pluggit'
                        pymodbus>=3.0.2;python_version>="3.8"
                        Je nach Python Version wird eine unterschiedliche minimale pymodbus Version benötigt. (Ich vermute, dass müsste man bei den weiter oben aufgeführten Plugins auch so machen.

                        Dass beim pluggit Plugin das configured fehlt, ist wohl der geteilten complexeren Requirement Definition geschuldet.

                        Ein Problem sehe ich hier:

                        Code:
                        # plugin 'helios_tcp'
                        pymodbus3>=1.0.0​pymodbus>=3.0.2;python_version>="3.8"​
                        Diese Angabe ist syntaktisch falsch.

                        Auf github steht da übrigens:
                        Code:
                        pymodbus3 >= 1.0.0
                        ​
                        Für das pluggit Plugin steht auf github übrigens:
                        Code:
                        pymodbus>=1.4.0
                        und nicht, wie aus der requirements/all.txt hervorgeht
                        Code:
                        pymodbus==2.5.3;python_version<"3.8"
                        pymodbus>=3.0.2;python_version>="3.8"
                        ​
                        Viele Grüße
                        Martin

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

                        Kommentar


                          #13
                          Zitat von Msinn Beitrag anzeigen
                          Je nach Python Version wird eine unterschiedliche minimale pymodbus Version benötigt. (Ich vermute, dass müsste man bei den weiter oben aufgeführten Plugins auch so machen.
                          Das ist richtig. Ich hatte die plugins zwar alle für die beide mosbus-Versionen gefixt. Nicht aber die requirements. Das müsste ich dann mal nachholen. Bzw. kannst du die requirements einfach aus der pluggit verwenden, also einfach rüber kopieren? Zusätzliche, andere requirements gibt es in keinen der plugins.

                          Zitat von Msinn Beitrag anzeigen
                          Ein Problem sehe ich hier:

                          War leider ein Copy&Paste-Fehler. Entschuldigung. So ist es richtig drin:

                          Code:
                          # plugin 'modbus_tcp'
                          # plugin 'trovis557x'
                          # plugin 'ksemmodbus'
                          # plugin 'kostalmodbus'
                          # plugin 'sma_mb'
                          pymodbus>=2.3.0
                          
                          # plugin 'pluggit'
                          pymodbus==2.5.3;python_version<"3.8"
                          
                          # plugin 'pluggit'
                          pymodbus>=3.0.2;python_version>="3.8"
                          
                          # plugin 'helios_tcp'
                          pymodbus3>=1.0.0

                          Kommentar

                          Lädt...
                          X