Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. [gelöst] Socket Problem - uncaught exception bei connect

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

[gelöst] Socket Problem - uncaught exception bei connect

Geplant Angeheftet Gesperrt Verschoben JavaScript
2 Beiträge 1 Kommentatoren 132 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • GaspodeG Offline
    GaspodeG Offline
    Gaspode
    schrieb am zuletzt editiert von Gaspode
    #1

    Hallo zusammen,
    ich möchte in einem Event getriggerten JavaScript einen String an einen Server schicken. Das funktioniert auch, solange der Server, an den der String geschickt wird, verfügbar ist. Ist er nicht verfügbar, kommt es nach kurzer Zeit zu einer Excetion und der komplette Scripting Adapter startet neu. Kann mir jemand helfen, wie ich diese Exception fangen bzw. vermeiden kann? Schonmal vielen Dank!
    Gruß
    Alexi

    Hier das Script:

    var net = require('net');
    
    on({ id: /^sonoff.0.*.POWER|^sonoff.0.*.ENERGY_Power/, change: 'ne' },
        function (obj)
        {
            var client = new net.Socket();
            log(obj.id + ": " + obj.state.val);
            client.connect(47222, '192.168.5.66', function() {
                log('Connected');
                client.write(obj.id + ": " + obj.state.val+"#");
                log('Written');
            });
            
            client.on('data', function(data) {
                log('Received: ' + data);
                client.destroy(); // kill client after server's response
            });
    
            client.on('close', function() {
                log('Connection closed');
            });
    
            client.on('timeout', function() {
                log('Connection timeout');
                client.destroy(); // kill client after timeout
            });
        });
    

    und hier der Log:

    host.my_host	2020-04-19 09:52:59.250	info	Restart adapter system.adapter.javascript.0 because enabled
    host.my_host	2020-04-19 09:52:59.250	info	instance system.adapter.javascript.0 terminated with code 0 (NO_ERROR)
    host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: port: 47222 }
    host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: address: '192.168.5.66',
    host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: syscall: 'connect',
    host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: code: 'ETIMEDOUT',
    host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: errno: 'ETIMEDOUT',
    host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
    host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: { Error: connect ETIMEDOUT 192.168.5.66:47222
    javascript.0	2020-04-19 09:52:58.681	info	(1080) Terminated (NO_ERROR): Without reason
    javascript.0	2020-04-19 09:52:58.681	info	(1080) terminating
    javascript.0	2020-04-19 09:52:58.666	info	(1080) script.js.Test.Test: Connection closed
    javascript.0	2020-04-19 09:52:58.661	info	(1080) Stop script script.js.common.Script_n
    [...]
    javascript.0	2020-04-19 09:52:58.653	info	(1080) Stop script script.js.common.Script_2
    javascript.0	2020-04-19 09:52:58.653	info	(1080) Stop script script.js.common.Script_1
    javascript.0	2020-04-19 09:52:58.653	error	(1080) Error: connect ETIMEDOUT 192.168.5.66:47222 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
    javascript.0	2020-04-19 09:52:58.653	error	(1080) uncaught exception: connect ETIMEDOUT 192.168.5.66:47222
    javascript.0	2020-04-19 09:56:46.377	info	(6952) script.js.Test.Test: sonoff.0.Steckdose1.ENERGY_Power: 0
    javascript.0	2020-04-19 09:56:36.393	info	(6952) script.js.Test.Test: sonoff.0.Steckdose1.ENERGY_Power: 1
    
    
    GaspodeG 1 Antwort Letzte Antwort
    0
    • GaspodeG Gaspode

      Hallo zusammen,
      ich möchte in einem Event getriggerten JavaScript einen String an einen Server schicken. Das funktioniert auch, solange der Server, an den der String geschickt wird, verfügbar ist. Ist er nicht verfügbar, kommt es nach kurzer Zeit zu einer Excetion und der komplette Scripting Adapter startet neu. Kann mir jemand helfen, wie ich diese Exception fangen bzw. vermeiden kann? Schonmal vielen Dank!
      Gruß
      Alexi

      Hier das Script:

      var net = require('net');
      
      on({ id: /^sonoff.0.*.POWER|^sonoff.0.*.ENERGY_Power/, change: 'ne' },
          function (obj)
          {
              var client = new net.Socket();
              log(obj.id + ": " + obj.state.val);
              client.connect(47222, '192.168.5.66', function() {
                  log('Connected');
                  client.write(obj.id + ": " + obj.state.val+"#");
                  log('Written');
              });
              
              client.on('data', function(data) {
                  log('Received: ' + data);
                  client.destroy(); // kill client after server's response
              });
      
              client.on('close', function() {
                  log('Connection closed');
              });
      
              client.on('timeout', function() {
                  log('Connection timeout');
                  client.destroy(); // kill client after timeout
              });
          });
      

      und hier der Log:

      host.my_host	2020-04-19 09:52:59.250	info	Restart adapter system.adapter.javascript.0 because enabled
      host.my_host	2020-04-19 09:52:59.250	info	instance system.adapter.javascript.0 terminated with code 0 (NO_ERROR)
      host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: port: 47222 }
      host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: address: '192.168.5.66',
      host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: syscall: 'connect',
      host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: code: 'ETIMEDOUT',
      host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: errno: 'ETIMEDOUT',
      host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
      host.my_host	2020-04-19 09:52:59.249	error	Caught by controller[0]: { Error: connect ETIMEDOUT 192.168.5.66:47222
      javascript.0	2020-04-19 09:52:58.681	info	(1080) Terminated (NO_ERROR): Without reason
      javascript.0	2020-04-19 09:52:58.681	info	(1080) terminating
      javascript.0	2020-04-19 09:52:58.666	info	(1080) script.js.Test.Test: Connection closed
      javascript.0	2020-04-19 09:52:58.661	info	(1080) Stop script script.js.common.Script_n
      [...]
      javascript.0	2020-04-19 09:52:58.653	info	(1080) Stop script script.js.common.Script_2
      javascript.0	2020-04-19 09:52:58.653	info	(1080) Stop script script.js.common.Script_1
      javascript.0	2020-04-19 09:52:58.653	error	(1080) Error: connect ETIMEDOUT 192.168.5.66:47222 at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)
      javascript.0	2020-04-19 09:52:58.653	error	(1080) uncaught exception: connect ETIMEDOUT 192.168.5.66:47222
      javascript.0	2020-04-19 09:56:46.377	info	(6952) script.js.Test.Test: sonoff.0.Steckdose1.ENERGY_Power: 0
      javascript.0	2020-04-19 09:56:36.393	info	(6952) script.js.Test.Test: sonoff.0.Steckdose1.ENERGY_Power: 1
      
      
      GaspodeG Offline
      GaspodeG Offline
      Gaspode
      schrieb am zuletzt editiert von
      #2

      Ich antworte mir mal selbst.
      Nachdem ich gestern schon eine Weile nach einer Lösung gesucht hatte, ist mir jetzt klar geworden, was man tun muss.
      Nach dem Erstellen des Sockets muss einfach explizit eine Timeout Funktion angegeben werden. Zweckmäßigerweise kann man einfach destroy des Socket selbst angeben, also:

              var client = new net.Socket();
              client.setTimeout(5000, () => client.destroy());
      
      1 Antwort Letzte Antwort
      0
      Antworten
      • In einem neuen Thema antworten
      Anmelden zum Antworten
      • Älteste zuerst
      • Neuste zuerst
      • Meiste Stimmen


      Support us

      ioBroker
      Community Adapters
      Donate

      393

      Online

      32.5k

      Benutzer

      81.7k

      Themen

      1.3m

      Beiträge
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
      ioBroker Community 2014-2025
      logo
      • Anmelden

      • Du hast noch kein Konto? Registrieren

      • Anmelden oder registrieren, um zu suchen
      • Erster Beitrag
        Letzter Beitrag
      0
      • Home
      • Aktuell
      • Tags
      • Ungelesen 0
      • Kategorien
      • Unreplied
      • Beliebt
      • GitHub
      • Docu
      • Hilfe