Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Error/Bug
    4. [Gelöst] Protokoll connection closed: Error: read ECONNRESET

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [Gelöst] Protokoll connection closed: Error: read ECONNRESET

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      TomComm27 last edited by TomComm27

      Systemdata Bitte Ausfüllen
      Hardwaresystem: Pi4
      Arbeitsspeicher: 4GB
      Festplattenart: micro SD
      Betriebssystem: Raspberry Pi OS
      Node-Version: 10.x.x
      Nodejs-Version: 18.16.1
      NPM-Version: 9.5.1
      Installationsart: Skript
      Image genutzt:
      Ort/Name der Imagedatei: ---

      Hallo,

      ist wahrscheinlich nur eine Kleinlichkeit aber ich würde gerne mein System sauber haben.
      Ich habe mir vor mehreren Monaten ein Script auf einen Raspberry Zero W zum Smart Meter auslesen eingerichtet.
      Von diesem werden die Daten per MQTT an meinen ioBroker gesendet/geholt.

      Zum Problem:
      Es kommen Sekündlich immer diese Einträge im Protokoll. Muss ich hier noch etwas beim MQTT Adapter umstellen?

      2023-07-13 12:25:30.956  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243930956_9859
      2023-07-13 12:25:35.829  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:25:35.836  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243935835_7864
      2023-07-13 12:25:40.847  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:25:40.853  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243940852_5599
      2023-07-13 12:25:45.902  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:25:45.908  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243945907_1062
      2023-07-13 12:25:50.844  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:25:50.850  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243950849_2809
      2023-07-13 12:25:55.878  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:25:55.884  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243955883_6450
      2023-07-13 12:26:00.872  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:26:00.878  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243960877_1310
      2023-07-13 12:26:05.819  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:26:05.829  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243965828_3859
      2023-07-13 12:26:10.861  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:26:10.867  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243970866_5753
      2023-07-13 12:26:15.873  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:26:15.879  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243975878_7525
      2023-07-13 12:26:20.831  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:26:20.838  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243980837_9664
      2023-07-13 12:26:25.838  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:26:25.845  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243985843_9629
      2023-07-13 12:26:30.946  - info: mqtt.0 (1127) Client [SmartMeter] connection closed: Error: read ECONNRESET
      2023-07-13 12:26:30.972  - info: mqtt.0 (1127) Client [SmartMeter] connected with secret 1689243990972_1685
      

      Danke!

      fg Thomas

      T 1 Reply Last reply Reply Quote 0
      • T
        TomComm27 @TomComm27 last edited by

        Hier noch das Skript, dass auf dem Raspberry Pi Zero W (der direkt per Kabel mit dem Smartmeter verbunden ist) ausgeführt wird.

        from gurux_dlms.GXByteBuffer import GXByteBuffer
        import serial
        import time
        from cryptography.hazmat.primitives.ciphers.aead import AESGCM
        from binascii import unhexlify
        import sys
        import string
        import paho.mqtt.client as mqtt
        from gurux_dlms.GXDLMSTranslator import GXDLMSTranslator
        from gurux_dlms.GXDLMSTranslatorMessage import GXDLMSTranslatorMessage
        from bs4 import BeautifulSoup
        
        # EVN Schlüssel eingeben zB. "36C66639E48A8CA4D6BC8B282A793BBB"
        evn_schluessel = "meinEVNKey"
        
        #MQTT Verwenden (True | False)
        useMQTT = True
        
        #MQTT Broker IP adresse Eingeben ohne Port!
        mqttBroker = "192.168.178.100"
        mqttuser ="Tom"
        mqttpasswort = "meinPasswort"
        #Aktuelle Werte auf Console ausgeben (True | False)
        printValue = False
        
        #Comport Config/Init
        comport = "/dev/ttyUSB0"
        
        
        #MQTT Init
        if useMQTT:
            try:
                client = mqtt.Client("SmartMeter")
                client.username_pw_set(mqttuser, mqttpasswort)
                client.connect(mqttBroker, port=1883)
            except:
                print("Die Ip Adresse des Brokers ist falsch!")
                sys.exit()
        
        
        
        tr = GXDLMSTranslator()
        tr.blockCipherKey = GXByteBuffer(evn_schluessel)
        tr.comments = True
        ser = serial.Serial( port=comport,
                 baudrate=2400,
                 bytesize=serial.EIGHTBITS,
                 parity=serial.PARITY_NONE,
        )
        
        
        while 1:
            daten = ser.read(size=282).hex()
            print(daten)
        
            msg = GXDLMSTranslatorMessage()
            msg.message = GXByteBuffer(daten)
            xml = ""
            pdu = GXByteBuffer()
            tr.completePdu = True
            while tr.findNextFrame(msg, pdu):
                pdu.clear()
                xml += tr.messageToXml(msg)
        
            soup = BeautifulSoup(xml, 'lxml')
        
            results_32 = soup.find_all('uint32')
            results_16 = soup.find_all('uint16')
            #print(results_16)
        
            #Wirkenergie A+ in Wattstunden
            WirkenergieP = int(str(results_32)[16:16+8],16)
        
            #Wirkenergie A- in Wattstunden
            WirkenergieN = int(str(results_32)[52:52+8],16)
        
        
            #Momentanleistung P+ in Watt
            MomentanleistungP = int(str(results_32)[88:88+8],16)
        
            #Momentanleistung P- in Watt
            MomentanleistungN = int(str(results_32)[124:124+8],16)
        
            #Spannung L1 in Volt
            SpannungL1 = int(str(results_16)[16:20],16)/10
        
            #Spannung L2 in Volt
            SpannungL2 = int(str(results_16)[48:52],16)/10
        
            #Spannung L3 in Volt
            SpannungL3 = int(str(results_16)[80:84],16)/10
        
        
        
            #Strom L1 in Ampere
            StromL1 = int(str(results_16)[112:116],16)/100
        
            #Strom L2 in Ampere
            StromL2 = int(str(results_16)[144:148],16)/100
        
            #Strom L3 in Ampere
            StromL3 = int(str(results_16)[176:180],16)/100
        
        
            #Leistungsfaktor
            Leistungsfaktor = int(str(results_16)[208:212],16)/1000
        
        
        
            if printValue:
                print('Wirkenergie+: ' + str(WirkenergieP))
                print('Wirkenergie: ' + str(WirkenergieN))
                print('MomentanleistungP+: ' + str(MomentanleistungP))
                print('MomentanleistungP-: ' + str(MomentanleistungN))
                print('Spannung L1: ' + str(SpannungL1))
                print('Spannung L2: ' + str(SpannungL2))
                print('Spannung L3: ' + str(SpannungL3))
                print('Strom L1: ' + str(StromL1))
                print('Strom L2: ' + str(StromL2))
                print('Strom L3: ' + str(StromL3))
                print('Leistungsfaktor: ' + str(Leistungsfaktor))
                print('Momentanleistung: ' + str(MomentanleistungP-MomentanleistungN))
                print()
                print()
        
        
            #MQTT
            if useMQTT:
                connected = False
                while not connected:
                    try:
                        client.reconnect()
                        connected = True
                    except:
                        print("Lost Connection to MQTT...Trying to reconnect in 2 Seconds")
                        time.sleep(2)
        
                client.publish("Smartmeter/WirkenergieP", WirkenergieP)
                client.publish("Smartmeter/WirkenergieN", WirkenergieN)
                client.publish("Smartmeter/MomentanleistungP", MomentanleistungP)
                client.publish("Smartmeter/MomentanleistungN", MomentanleistungN)
                client.publish("Smartmeter/Momentanleistung", MomentanleistungP - MomentanleistungN)
                client.publish("Smartmeter/SpannungL1", SpannungL1)
                client.publish("Smartmeter/SpannungL2", SpannungL2)
                client.publish("Smartmeter/SpannungL3", SpannungL3)
                client.publish("Smartmeter/StromL1", StromL1)
                client.publish("Smartmeter/StromL2", StromL2)
                client.publish("Smartmeter/StromL3", StromL3)
                client.publish("Smartmeter/Leistungsfaktor", Leistungsfaktor)
            #except BaseException as err:
            #   print("Fehler beim Synchronisieren. Programm bitte ein weiteres mal Starten.")
            #   print()
            #   print("Fehler: ", format(err))
        
            #   sys.exit()
        

        Mit diesem Skript werden Informationen vom SmartMeter abgegriffen/übermittelt und
        per MQTT an meinen ioBroker (auf einen anderen Raspberry Pi 4) gesendet!
        Vielleicht hilft das weiter?

        T 1 Reply Last reply Reply Quote 0
        • T
          TomComm27 @TomComm27 last edited by

          @tomcomm27

          Hat keiner eine Idee oder ist dies so ein Spezialfall?

          Thomas Braun 1 Reply Last reply Reply Quote 0
          • Thomas Braun
            Thomas Braun Most Active @TomComm27 last edited by

            @tomcomm27

            CONNRESET ist üblicherweise Netzwerktrouble. Die Kiste kann nicht erreicht werden.

            T 1 Reply Last reply Reply Quote 0
            • T
              TomComm27 @Thomas Braun last edited by

              @thomas-braun

              Könnte es auch sein, dass das durch das von mir angehängte Skript "verursacht" wird. Sozusagen die Message vom Smartmeter habe ich bekommen und jetzt beende ich die Verbindung!?

              Ich bin kein Python Profi aber mir wäre in dem Skript nichts aufgefallen was auf eine einprogrammierte Beendigung hindeutet🤔

              Hättest du eine Idee wo ich die Fehlersuche fortsetzen sollte?

              T 1 Reply Last reply Reply Quote 0
              • T
                TomComm27 @TomComm27 last edited by

                @tomcomm27
                Guten Morgen, gibt es hier keine weiteren Ideen wie ich diese unnötigen MQTT Nachrichten weg bekomme?

                Marc Berg 1 Reply Last reply Reply Quote 0
                • Marc Berg
                  Marc Berg Most Active @TomComm27 last edited by Marc Berg

                  @tomcomm27 sagte in Protokoll connection closed: Error: read ECONNRESET

                  gibt es hier keine weiteren Ideen wie ich diese unnötigen MQTT Nachrichten weg bekomme?

                  Die Meldungen kommen daher (wie du schon richtig vermutet hast), dass dein Skript nach jedem Senden die Verbindung hart beendet. Aber es sind nur „Info“ Meldungen. Wenn du das Loglevel auf mindestens „warn“ herunterschraubst, erscheinen die Meldungen nicht mehr im Log.

                  Edit: Alternativ könntest du ja zum Schluss ein „client.disconnect()“ absetzen, damit die Verbindung sauber beendet wird.

                  1 Reply Last reply Reply Quote 0
                  • T
                    TomComm27 last edited by

                    @marc-berg

                    Hallo Marc,

                    danke für deinen Antwort! Ich habe von einer andere Seite den Tipp bekommen mit

                    client.loop_start()
                    

                    oder

                    client.loop_forever()
                    

                    statt dem gesamten Code:

                    connected = False
                          while not connected:
                              try:
                                  client.reconnect()
                                  connected = True
                              except:
                                  print("Lost Connection to MQTT...Trying to reconnect in 2 Seconds")
                                  time.sleep(2)
                    

                    zu verwenden. Dies hat zum Ziel geführt damit die Verbindung nicht immer abbricht und ich keine Hinweise mehr im Protokoll bekomme.
                    Diese zwei Möglichkeiten sollten auch einen automatischen Reconnect schaffen!

                    fg Thomas

                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    885
                    Online

                    31.8k
                    Users

                    80.0k
                    Topics

                    1.3m
                    Posts

                    3
                    8
                    670
                    Loading More Posts
                    • Oldest to Newest
                    • Newest to Oldest
                    • Most Votes
                    Reply
                    • Reply as topic
                    Log in to reply
                    Community
                    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                    The ioBroker Community 2014-2023
                    logo