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. Ports auf Online Verfügbarkeit prüfen wie ?

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.5k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    994

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Ports auf Online Verfügbarkeit prüfen wie ?

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
javascriptblockly
12 Beiträge 4 Kommentatoren 1.1k Aufrufe 4 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.
  • GarfonsoG Garfonso

    @pmunz
    Ping überwacht nicht Port 80.

    Du kannst doch einfach mit einem socket Verbinden. Also aus dem Kopf so ein Skript:

    const net = require('net');
    
    const ip = 192.168.0.1;
    const port = 443;
    
    const connection = net.createConnection({host: ip, port: port, timeout: 10000}, (err) => {
        if (err) {
            if (err.code === 'ECONNREFUSED') {
               //port ist zu
            } else if (err.code === 'ETIMEDOUT') {
               //gerät offline (oder firewall doof konfiguriert, dass sie nicht antwortet)
            }
        } else {
             //port ist offen
        }
        connection .destroy(); //wieder zu machen :-)
    });
    
    P Offline
    P Offline
    pmunz
    schrieb am zuletzt editiert von
    #3

    @Garfonso
    Hallo, sorry hab ich mich falsch ausgedrückt, ich meinte der " ping Adapter " kann nur port 80 pingen und prüfen ob verfügbar.
    vielen dank für deine info , ich werd des mal testen.
    Danke

    1 Antwort Letzte Antwort
    0
    • GarfonsoG Garfonso

      @pmunz
      Ping überwacht nicht Port 80.

      Du kannst doch einfach mit einem socket Verbinden. Also aus dem Kopf so ein Skript:

      const net = require('net');
      
      const ip = 192.168.0.1;
      const port = 443;
      
      const connection = net.createConnection({host: ip, port: port, timeout: 10000}, (err) => {
          if (err) {
              if (err.code === 'ECONNREFUSED') {
                 //port ist zu
              } else if (err.code === 'ETIMEDOUT') {
                 //gerät offline (oder firewall doof konfiguriert, dass sie nicht antwortet)
              }
          } else {
               //port ist offen
          }
          connection .destroy(); //wieder zu machen :-)
      });
      
      P Offline
      P Offline
      pmunz
      schrieb am zuletzt editiert von
      #4

      @Garfonso sagte in Ports auf Online Verfügbarkeit prüfen wie ?:

      onst net = require('net');

      hmm irgendwie bekomm ich da immer einen script fehler den ich aber mangels unwissenheil nicht finden kann:

      22:50:07.870 error javascript.0 (1203) script.js.Javascript.ping compile failed:
      at script.js.Javascript.ping:5

      GarfonsoG 1 Antwort Letzte Antwort
      0
      • P pmunz

        @Garfonso sagte in Ports auf Online Verfügbarkeit prüfen wie ?:

        onst net = require('net');

        hmm irgendwie bekomm ich da immer einen script fehler den ich aber mangels unwissenheil nicht finden kann:

        22:50:07.870 error javascript.0 (1203) script.js.Javascript.ping compile failed:
        at script.js.Javascript.ping:5

        GarfonsoG Offline
        GarfonsoG Offline
        Garfonso
        Developer
        schrieb am zuletzt editiert von
        #5

        @pmunz
        Ja, sorry, war, wie gesagt, "aus dem Kopf". Die IP muss natürlich in Anführungszeichen, also const ip = "192.168.0.1";

        Ultimativer Lovelace Leitfaden: https://forum.iobroker.net/topic/35937/der-ultimative-iobroker-lovelace-leitfaden-dokumentation

        Lovelace UI Beispiele: https://forum.iobroker.net/topic/35950/zeigt-her-eure-lovelace-visualisierung

        P 1 Antwort Letzte Antwort
        0
        • GarfonsoG Garfonso

          @pmunz
          Ja, sorry, war, wie gesagt, "aus dem Kopf". Die IP muss natürlich in Anführungszeichen, also const ip = "192.168.0.1";

          P Offline
          P Offline
          pmunz
          schrieb am zuletzt editiert von pmunz
          #6

          @Garfonso
          Hallo Garfonso,
          Danke ist ja kein problem ich bin dankbar für deine hilfe.
          Ja das mit den Anführungszeichen hätte ich auch als anfänger checken können , sorry.

          Jetzt tritt das problem auf das alle 10 sekunden auch andere Javascripts mitgezogen werden und einen reload machen und ich zb Telegram meldungen aus einem anderen script bekomme.
          das wird aber der fall sein wenn:
          solange ein Port Online ist zb.: 80 ist alles ok , ist dieser aber offline bricht die Instanz komplett ab und wird deaktiviert.

          Wo ist es mir den ersichtlich ob Online oder Offline ? ( true bei Online - false bei Offline ) unter Pbjekte / Javascript.
          Aber ich denke mal das "false" nicht kommt weil sich ja das Script / die Instanz beendet.
          Den Port 8090 hab ich nur eingetragen um zu sehen was passiert wenn der port nicht anspricht.

          Fehlermeldungen aus dem log :

          instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
          Caught by controller[0]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
          Caught by controller[0]: Error: connect ECONNREFUSED 10.10.80.25:8090
          (25987) uncaught exception: connect ECONNREFUSED 10.10.80.25:8090

          GarfonsoG 2 Antworten Letzte Antwort
          0
          • P pmunz

            Hallo,

            Gibt es vielleicht eine möglichkeit nicht nur IP-Adressen per ping port 80 zu überwachen sondern auch
            andere port`s wie zb.:
            port 443, 21, 22, 53, ....

            oder vielleicht sogar einen offiziellen oder GitHub Adapter der dies ermöglicht ?

            Spielchen wie snmp hab ich am laufen, fordert aber eingriff ins server system was ich für simple Online Status abfragen vermeiden möchte. ( Ausser Prio. Server )

            Vielen Dank

            ? Offline
            ? Offline
            Ein ehemaliger Benutzer
            schrieb am zuletzt editiert von
            #7

            @pmunz unter Linux in der Konsole macht man das normal mit nmap ...

            1 Antwort Letzte Antwort
            0
            • P pmunz

              @Garfonso
              Hallo Garfonso,
              Danke ist ja kein problem ich bin dankbar für deine hilfe.
              Ja das mit den Anführungszeichen hätte ich auch als anfänger checken können , sorry.

              Jetzt tritt das problem auf das alle 10 sekunden auch andere Javascripts mitgezogen werden und einen reload machen und ich zb Telegram meldungen aus einem anderen script bekomme.
              das wird aber der fall sein wenn:
              solange ein Port Online ist zb.: 80 ist alles ok , ist dieser aber offline bricht die Instanz komplett ab und wird deaktiviert.

              Wo ist es mir den ersichtlich ob Online oder Offline ? ( true bei Online - false bei Offline ) unter Pbjekte / Javascript.
              Aber ich denke mal das "false" nicht kommt weil sich ja das Script / die Instanz beendet.
              Den Port 8090 hab ich nur eingetragen um zu sehen was passiert wenn der port nicht anspricht.

              Fehlermeldungen aus dem log :

              instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
              Caught by controller[0]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
              Caught by controller[0]: Error: connect ECONNREFUSED 10.10.80.25:8090
              (25987) uncaught exception: connect ECONNREFUSED 10.10.80.25:8090

              GarfonsoG Offline
              GarfonsoG Offline
              Garfonso
              Developer
              schrieb am zuletzt editiert von Garfonso
              #8

              @pmunz

              komisch... das Problem hatte ich hier nicht. Also der Port war nie online?
              //Edit: Ok, auf der Konsole hatte ich das Problem nicht, da ging das mit dem Fehler abfangen so. Im Adapter hab ich dasselbe Problem. Spanned. Mal untersuchen. ;-)

              Eigentlich sollte das auch nicht passieren. Kannst du mir sagen, welche Version von js-controller und javascript Adapter du hast?

              Ultimativer Lovelace Leitfaden: https://forum.iobroker.net/topic/35937/der-ultimative-iobroker-lovelace-leitfaden-dokumentation

              Lovelace UI Beispiele: https://forum.iobroker.net/topic/35950/zeigt-her-eure-lovelace-visualisierung

              1 Antwort Letzte Antwort
              0
              • P pmunz

                @Garfonso
                Hallo Garfonso,
                Danke ist ja kein problem ich bin dankbar für deine hilfe.
                Ja das mit den Anführungszeichen hätte ich auch als anfänger checken können , sorry.

                Jetzt tritt das problem auf das alle 10 sekunden auch andere Javascripts mitgezogen werden und einen reload machen und ich zb Telegram meldungen aus einem anderen script bekomme.
                das wird aber der fall sein wenn:
                solange ein Port Online ist zb.: 80 ist alles ok , ist dieser aber offline bricht die Instanz komplett ab und wird deaktiviert.

                Wo ist es mir den ersichtlich ob Online oder Offline ? ( true bei Online - false bei Offline ) unter Pbjekte / Javascript.
                Aber ich denke mal das "false" nicht kommt weil sich ja das Script / die Instanz beendet.
                Den Port 8090 hab ich nur eingetragen um zu sehen was passiert wenn der port nicht anspricht.

                Fehlermeldungen aus dem log :

                instance system.adapter.javascript.0 terminated with code 1 (JS_CONTROLLER_STOPPED)
                Caught by controller[0]: at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1141:16)
                Caught by controller[0]: Error: connect ECONNREFUSED 10.10.80.25:8090
                (25987) uncaught exception: connect ECONNREFUSED 10.10.80.25:8090

                GarfonsoG Offline
                GarfonsoG Offline
                Garfonso
                Developer
                schrieb am zuletzt editiert von Garfonso
                #9

                @pmunz
                Ok, nachdem ich den Fehler auch sehen konnte, geht es nun so (mein ursprüngliches Skript war falsch):

                const net = require('net');
                
                const ip = "192.168.0.1";
                const port = 80;
                
                const connection = net.createConnection({host: ip, port: port, timeout: 10000});
                connection.on('ready', () => {
                    log("Port offen");
                    connection .destroy(); //wieder zu machen :-)
                });
                connection.on('error', (e) => {
                    log("Error: " + e.code);
                    if (e.code === 'ECONNREFUSED') {
                        log("Port zu");
                    } if (e.code === 'EHOSTUNREACH') {
                        log("Gerät offline 2");
                    } else {
                        log("Anderer Fehler, vermutlich Gerät nicht da?");
                    }
                    connection .destroy(); //wieder zu machen :-)
                });
                connection.on('timeout', () => {
                    log("Gerät offline");
                    connection .destroy(); //wieder zu machen :-)
                });
                

                Den "timout" Fall hatte ich bisher nicht. Könnte aber theoretisch auftreten. Ich hatte im Fall, dass es an der IP gar kein Gerät gab den "EHOSTUNREACH" fall. Am besten wäre für den Fall, dass das Gerät gar nicht da ist eine Funktion zu definieren und die aufzurufen (falls der Fall für dich überhaupt relevant ist).

                //Edit:
                achja, damit das sinnvoll ist, also ein Status überwacht wird oder so, müsstest du den ganzen "connection" Block noch regelmäßig aufrufen also mit setTimeout oder schedule oder sowas (keine Ahnung, was du genau vorhast.. ggf. kannst du auch aus einem anderen Skript heraus das Skript aktivieren und am Ende des Skripts es sich selber deaktivieren lassen, das mache ich hin und wieder).

                Ultimativer Lovelace Leitfaden: https://forum.iobroker.net/topic/35937/der-ultimative-iobroker-lovelace-leitfaden-dokumentation

                Lovelace UI Beispiele: https://forum.iobroker.net/topic/35950/zeigt-her-eure-lovelace-visualisierung

                P M 2 Antworten Letzte Antwort
                0
                • GarfonsoG Garfonso

                  @pmunz
                  Ok, nachdem ich den Fehler auch sehen konnte, geht es nun so (mein ursprüngliches Skript war falsch):

                  const net = require('net');
                  
                  const ip = "192.168.0.1";
                  const port = 80;
                  
                  const connection = net.createConnection({host: ip, port: port, timeout: 10000});
                  connection.on('ready', () => {
                      log("Port offen");
                      connection .destroy(); //wieder zu machen :-)
                  });
                  connection.on('error', (e) => {
                      log("Error: " + e.code);
                      if (e.code === 'ECONNREFUSED') {
                          log("Port zu");
                      } if (e.code === 'EHOSTUNREACH') {
                          log("Gerät offline 2");
                      } else {
                          log("Anderer Fehler, vermutlich Gerät nicht da?");
                      }
                      connection .destroy(); //wieder zu machen :-)
                  });
                  connection.on('timeout', () => {
                      log("Gerät offline");
                      connection .destroy(); //wieder zu machen :-)
                  });
                  

                  Den "timout" Fall hatte ich bisher nicht. Könnte aber theoretisch auftreten. Ich hatte im Fall, dass es an der IP gar kein Gerät gab den "EHOSTUNREACH" fall. Am besten wäre für den Fall, dass das Gerät gar nicht da ist eine Funktion zu definieren und die aufzurufen (falls der Fall für dich überhaupt relevant ist).

                  //Edit:
                  achja, damit das sinnvoll ist, also ein Status überwacht wird oder so, müsstest du den ganzen "connection" Block noch regelmäßig aufrufen also mit setTimeout oder schedule oder sowas (keine Ahnung, was du genau vorhast.. ggf. kannst du auch aus einem anderen Skript heraus das Skript aktivieren und am Ende des Skripts es sich selber deaktivieren lassen, das mache ich hin und wieder).

                  P Offline
                  P Offline
                  pmunz
                  schrieb am zuletzt editiert von
                  #10

                  @Garfonso
                  Hallo,
                  Ich habe mir vor Jahren ein PHP Scrip geschrieben das nichts anderes macht als Ports zu Pingen um zu sehen ob der Service läuft oder nicht, ich weis das ist nicht die perfekte lösung nur für die kleinen Devices extra einen snmp zu installiren ( am zu überwachenden Device ) macht keinen sinn.
                  Ich bin Jahrelang mit dem php script durch gekommen wollte es halt jetzt einfach in den iobroker übernehmen.
                  Vielen dank für deine Hilfe

                  GarfonsoG 1 Antwort Letzte Antwort
                  0
                  • P pmunz

                    @Garfonso
                    Hallo,
                    Ich habe mir vor Jahren ein PHP Scrip geschrieben das nichts anderes macht als Ports zu Pingen um zu sehen ob der Service läuft oder nicht, ich weis das ist nicht die perfekte lösung nur für die kleinen Devices extra einen snmp zu installiren ( am zu überwachenden Device ) macht keinen sinn.
                    Ich bin Jahrelang mit dem php script durch gekommen wollte es halt jetzt einfach in den iobroker übernehmen.
                    Vielen dank für deine Hilfe

                    GarfonsoG Offline
                    GarfonsoG Offline
                    Garfonso
                    Developer
                    schrieb am zuletzt editiert von
                    #11

                    @pmunz
                    Gerne. :-)
                    Du könntest auch mit exec das PHP Skript aus ioBroker raus aufrufen. Aber das ist ein gewisses Sicherheitsrisiko (weil man das Skript theoretisch austauschen könnte, je nach Berechtigungen).

                    Wenn du noch weitere Hilfe brauchst, frag ruhig.

                    Ultimativer Lovelace Leitfaden: https://forum.iobroker.net/topic/35937/der-ultimative-iobroker-lovelace-leitfaden-dokumentation

                    Lovelace UI Beispiele: https://forum.iobroker.net/topic/35950/zeigt-her-eure-lovelace-visualisierung

                    1 Antwort Letzte Antwort
                    0
                    • GarfonsoG Garfonso

                      @pmunz
                      Ok, nachdem ich den Fehler auch sehen konnte, geht es nun so (mein ursprüngliches Skript war falsch):

                      const net = require('net');
                      
                      const ip = "192.168.0.1";
                      const port = 80;
                      
                      const connection = net.createConnection({host: ip, port: port, timeout: 10000});
                      connection.on('ready', () => {
                          log("Port offen");
                          connection .destroy(); //wieder zu machen :-)
                      });
                      connection.on('error', (e) => {
                          log("Error: " + e.code);
                          if (e.code === 'ECONNREFUSED') {
                              log("Port zu");
                          } if (e.code === 'EHOSTUNREACH') {
                              log("Gerät offline 2");
                          } else {
                              log("Anderer Fehler, vermutlich Gerät nicht da?");
                          }
                          connection .destroy(); //wieder zu machen :-)
                      });
                      connection.on('timeout', () => {
                          log("Gerät offline");
                          connection .destroy(); //wieder zu machen :-)
                      });
                      

                      Den "timout" Fall hatte ich bisher nicht. Könnte aber theoretisch auftreten. Ich hatte im Fall, dass es an der IP gar kein Gerät gab den "EHOSTUNREACH" fall. Am besten wäre für den Fall, dass das Gerät gar nicht da ist eine Funktion zu definieren und die aufzurufen (falls der Fall für dich überhaupt relevant ist).

                      //Edit:
                      achja, damit das sinnvoll ist, also ein Status überwacht wird oder so, müsstest du den ganzen "connection" Block noch regelmäßig aufrufen also mit setTimeout oder schedule oder sowas (keine Ahnung, was du genau vorhast.. ggf. kannst du auch aus einem anderen Skript heraus das Skript aktivieren und am Ende des Skripts es sich selber deaktivieren lassen, das mache ich hin und wieder).

                      M Online
                      M Online
                      michihorn
                      schrieb am zuletzt editiert von michihorn
                      #12

                      @garfonso sagte in Ports auf Online Verfügbarkeit prüfen wie ?:

                      @pmunz
                      Ok, nachdem ich den Fehler auch sehen konnte, geht es nun so (mein ursprüngliches Skript war falsch):

                      const net = require('net');
                      
                      const ip = "192.168.0.1";
                      const port = 80;
                      
                      const connection = net.createConnection({host: ip, port: port, timeout: 10000});
                      connection.on('ready', () => {
                          log("Port offen");
                          connection .destroy(); //wieder zu machen :-)
                      });
                      connection.on('error', (e) => {
                          log("Error: " + e.code);
                          if (e.code === 'ECONNREFUSED') {
                              log("Port zu");
                          } if (e.code === 'EHOSTUNREACH') {
                              log("Gerät offline 2");
                          } else {
                              log("Anderer Fehler, vermutlich Gerät nicht da?");
                          }
                          connection .destroy(); //wieder zu machen :-)
                      });
                      connection.on('timeout', () => {
                          log("Gerät offline");
                          connection .destroy(); //wieder zu machen :-)
                      });
                      

                      Den "timout" Fall hatte ich bisher nicht. Könnte aber theoretisch auftreten. Ich hatte im Fall, dass es an der IP gar kein Gerät gab den "EHOSTUNREACH" fall. Am besten wäre für den Fall, dass das Gerät gar nicht da ist eine Funktion zu definieren und die aufzurufen (falls der Fall für dich überhaupt relevant ist).

                      //Edit:
                      achja, damit das sinnvoll ist, also ein Status überwacht wird oder so, müsstest du den ganzen "connection" Block noch regelmäßig aufrufen also mit setTimeout oder schedule oder sowas (keine Ahnung, was du genau vorhast.. ggf. kannst du auch aus einem anderen Skript heraus das Skript aktivieren und am Ende des Skripts es sich selber deaktivieren lassen, das mache ich hin und wieder).

                      Hallo, ich möchte gerne wisssen, wie ich permanent die Port prüfen kann. Das Script oben läuft offenbar nur einmal, oder? Ich habe das mal mit Schedule gemacht.

                      schedule("*/1 * * * *", function () {
                      

                      Gruß Michael

                      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

                      642

                      Online

                      32.6k

                      Benutzer

                      82.3k

                      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