Ankündigung

Einklappen

Hinweis

Die Forenregeln wurden überarbeitet (Stand 7.11.22). Sie sind ab sofort verbindlich. Wir bitten um Beachtung.
Mehr anzeigen
Weniger anzeigen

SmarthomeNG verliert Verbindung zu KNX Bus- wie prüfen?

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

    SmarthomeNG verliert Verbindung zu KNX Bus- wie prüfen?

    Liebes Forum,

    Ich suche nach einer Idee, wie ich am besten analysieren kann, warum meine SmarthomeNG Installation in letzter Zeit "unmotiviert" keine Telegramme mehr empfängt. Die Installation läuft bereits einige Jahre, vorher ohne Probleme. Vor einem halben Jahr bin ich von Raspberry Pi auf einen eigenen kleinen Server umgestiegen.

    Ich arbeite mit KNXD am gleichen Rechner wie die SmarthomeNG installation. Man sieht in der VISU, dass irgendwann keine Aktualisierung mehr auf die Items mehr passiert. Ich kann im Shngadmin sehen, dass tatsächlich die Items nicht aktualisiert sind.

    Sobald ich den "Core" neustarte (über die Admin UI), bekomme ich sofort wieder Daten und meine Visu aktualisiert sich. Es dauert aber manchmal nur Stunden, bis dass wieder aus ist.

    In den Logs sind keine Fehler, die ich zuordnen könnte. Habt ihre eine Idee zum Problem oder einen Vorschlag, wie man da tiefer reinsteigen könnte, um die Ursache zu finden?

    Vielen Dank!
    LG Thomas

    #2
    Welche Version vom SHNG nutzt Du denn? Die aktuelle 1.9.2 oder was älteres?

    Kommentar


      #3
      Ich laufe auf: v1.9.1-master, also nicht ganz aktuell.​

      Kommentar


        #4
        Ich würde das zunächst auf die aktuelle Version umstellen und dann noch mal beobachten. Es gibt eigentlich einen reconnect des Plugins wenn die Verbindung mal beendet wird.

        Kommentar


          #5
          Zitat von bmx Beitrag anzeigen
          Ich würde das zunächst auf die aktuelle Version umstellen und dann noch mal beobachten. Es gibt eigentlich einen reconnect des Plugins wenn die Verbindung mal beendet wird.
          ...der aber erst in der letzten Master-Version gefixt wurde

          Kommentar


            #6
            Ansonsten kannst Du Dir natürlich eine Logik einrichten die SHNG bei Bedarf neu startet. Ich hatte mal folgende Logik im Einsatz:

            Code:
            #!/usr/bin/env python3
            # funktion_neustart_bei_knx_problem.py
            
            # it is not a good practice to use exit() within logics
            # however a good idea is to create a custom exception and raise it to exit the logic.
            # the same way can also be used to catch other exceptions either known or unknown
            #
            # already defined objects:
            # logic     a referece to this logic here currently executing
            #           e.g. logic.logger.debug()
            #                logic.scheduler.trigger()
            # shtime    e.g. shtime.now() current time
            #
            class LeaveLogic(Exception): pass  # declare a label
            
            """
            Aktuelle Zeit aufrufen und Differenz zu knx last_action bilden
            Wenn Differenz groesser als waittime Sekunden dann sh.restart()
            
            """
            
            from datetime import datetime
            
            waittime = 2 * 60
            try:
                status = sh.shng_status['code']
                if status != 20:
                    logic.logger.debug('Logik ignoriert, SmartHomeNG läuft noch nicht (Status={}'.format(status))
                    raise LeaveLogic()
            
                by = trigger.get('by', '')
                source = trigger.get('source', '')
                dest = trigger.get('dest', '')
                value = trigger.get('value', '')
            
                jetzt = sh.now()
                heute = jetzt.date()
            
                last_action = sh.knx.get_stats_last_action()
                is_connected = sh.knx._client.connected()
                
                dateTimeDifference = jetzt - last_action
            
                if dateTimeDifference.total_seconds() > waittime:
                    if heute.weekday() == 6 and heute.month == 3 and 25 <= heute.day <= 31 and 2 < jetzt.hour < 4:
                        msg = "Heute ist der letzte Sonntag im März -> Zeit wurde um 2:00 auf 3:00 Uhr vorgestellt"
                        sh.telegram.msg_broadcast(msg)
                        logger.error(msg)
                    else:
                        msg = f"Zeitdifferenz zur letzten KNX Aktion: {dateTimeDifference} war größer als {waittime} Sekunden, Verbindungsstatus: {'verbunden' if is_connected else 'getrennt'} ==> starte SHNG neu!"
                        sh.telegram.msg_broadcast(msg)
                        logger.error(msg)
                        #sh.restart()
            
            except LeaveLogic:  # where to goto
                pass
            
            except Exception as e:
                logger.error("Es ist ein Fehler '{}' aufgetreten".format(e))
            Das # vor sh.restart() musst Du natürlich entfernen und die Logik geht auch davon aus das Du das Plugin knx als knx benannt hast sowie telegram eingerichtet hast. Das kannst Du dann evtl. auch einfach rauslöschen.
            Mittlerweile ist auch LeaveLogic integriert worden, ich weiß allerdings nicht, ob es im 1.9.2 master schon drin war oder nicht. Das wäre noch Verbesserungspotential auf Deiner Seite :-)

            Kommentar


              #7
              Hallo,

              ich musste die Logik so erweiten, da ich gar keine Telegramme bekam:
              Code:
              #!/usr/bin/env python3
              # funktion_neustart_bei_knx_problem.py
              
              # it is not a good practice to use exit() within logics
              # however a good idea is to create a custom exception and raise it to exit the logic.
              # the same way can also be used to catch other exceptions either known or unknown
              #
              # already defined objects:
              # logic     a referece to this logic here currently executing
              #           e.g. logic.logger.debug()
              #                logic.scheduler.trigger()
              # shtime    e.g. shtime.now() current time
              #
              class LeaveLogic(Exception): pass  # declare a label
              
              """
              Aktuelle Zeit aufrufen und Differenz zu knx last_action bilden
              Wenn Differenz groesser als waittime Sekunden dann sh.restart()
              
              """
              
              from datetime import datetime
              
              waittime = 2 * 60
              try:
                  status = sh.shng_status['code']
                  if status != 20:
                      logic.logger.debug('Logik ignoriert, SmartHomeNG läuft noch nicht (Status={}'.format(status))
                      raise LeaveLogic()
              
                  by = trigger.get('by', '')
                  source = trigger.get('source', '')
                  dest = trigger.get('dest', '')
                  value = trigger.get('value', '')
              
                  jetzt = sh.now()
                  heute = jetzt.date()
              
                  last_action = sh.knx.get_stats_last_action()
                  is_connected = sh.knx._client.connected()
                  
                  if last_action is not None:
                      dateTimeDifference = jetzt - last_action
              
                      if dateTimeDifference.total_seconds() > waittime:
                          if heute.weekday() == 6 and heute.month == 3 and 25 <= heute.day <= 31 and 2 < jetzt.hour < 4:
                              msg = "Heute ist der letzte Sonntag im März -> Zeit wurde um 2:00 auf 3:00 Uhr vorgestellt"
                              sh.telegram.msg_broadcast(msg)
                              logger.error(msg)
                          else:
                              msg = f"Zeitdifferenz zur letzten KNX Aktion: {dateTimeDifference} war größer als {waittime} Sekunden, Verbindungsstatus: {'verbunden' if is_connected else 'getrennt'} ==> starte SHNG neu!"
                              sh.telegram.msg_broadcast(msg)
                              logger.error(msg)
                              sh.restart()
                  else:
                      msg = f"Bisher keine Telegramme. Verbindungsstatus: {'verbunden' if is_connected else 'getrennt'} ==> starte SHNG neu!"
                      sh.telegram.msg_broadcast(msg)
                      logger.error(msg)
                      sh.restart()
              
              except LeaveLogic:  # where to goto
                  pass
              
              except Exception as e:
                  logger.error("Es ist ein Fehler '{}' aufgetreten".format(e))​
              Gruß,
              Hendrik

              Kommentar


                #8
                Vielen Dank für die guten Tipps!

                Ich habe die Version aktualisiert, seither (rund 3 Wochen) läuft das System stabil. Case Closed. 😁

                Kommentar


                  #9
                  Noch einmal ein Update für jene mit Probleme mit der KNX Anbindung oder KNXD:

                  Das Update war leider doch nicht des Rätsels Lösung: die letzten 2 Tage gab es wieder Probleme. Neustart von SmarthomeNG manuell hat nicht geholfen, dann hab ich den ganzen Server (inkl. KNXD) neu gestartet => hat auch nicht geholfen (!). Dabei sind die Fehlermeldungen (seit letzter Version?):

                  2022-11-18 06:03:18 WARNING lib.network (plugins.knx_127.0.0.1:6720) connection closed by peer

                  schon recht eindeutig gewesen.

                  Jetzt hab ich mal den Ethernet Stecker bei meinem Weinzierl IP Interface 730 gezogen (Power over Ethernet), und wieder hineingesteckt => und damit hat dann die Anbindung wieder geklappt.

                  Vielleicht ist jetzt nach rund 10 Jahren das IP Interface am eingehen... Ich werd mir das noch mal ansehen, aber wenn das weiterhin die Lösung bei Problemen ist, wirds getauscht.

                  Kommentar


                    #10
                    Hallo,

                    ich hatte das Problem auch mit dem 730.
                    Wieviele Tunnel unterstützt deins?

                    Gruß,
                    Hendrik

                    Kommentar


                      #11
                      Ehrlich gesagt weiss ich das nicht. Es sollte mehrere Unterstützen, dazu hab ich aber in meinen Unterlagen dazu nichts gefunden...

                      Kommentar


                        #12
                        Dann such Mal weiter.
                        In der Anleitung steht, wie man die mehreren Tunnel aktivieren kann.
                        Probier das mal aus.
                        Ich denke, du hast das gleiche Problem, wie ich. Mein Interface kann nur einen Tunnel und ich denke das ist einfach zu Situationen kommt, wo der eine Tunnel noch verwendet wird bzw. Das Interface denkt, dass dieser noch verwendet wird und dann scheitert die neue Verbindung.
                        Zuletzt geändert von henfri; 22.11.2022, 22:42.

                        Kommentar

                        Lädt...
                        X