Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Skript zur Prüfung der Erreichbarkeit eines Dienst per Telnet (Port 80)

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Skript zur Prüfung der Erreichbarkeit eines Dienst per Telnet (Port 80)

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

      Beispiel:

      Ist der Webserver von forum.iobroker.net erreichbar? 😉

      ! ````
      // Überwacht eine Adresse (FQDN oder IP) auf Erreichbarkeit eines Ports
      // z.B. Port 80 für einen Webserver
      ! var pfad = "Service.www.ioBroker_Forum" + ".";
      var cronStr = "*/10 * * * *";
      var webserver = "forum.iobroker.net";
      var port = "80";
      ! var logging = false;
      ! var abfrage = "telnet "+ webserver + " " + port;
      var forceCreation = false;
      ! var datenpunkte = {
      'status': {
      "init":false,
      "common": {
      name: 'status ' + webserver,
      desc: 'status ' + webserver + '. Port ' + port + ' erreichbar?',
      type: 'boolean',
      unit: '',
      role: 'value'
      }
      }
      };
      ! function createDp() {
      var name;
      var init;
      var common;
      for (var dp in datenpunkte) {
      name = pfad + dp;
      init = datenpunkte[dp].init;
      common = datenpunkte[dp].common;
      createState(name, init , forceCreation, common);
      }
      }
      ! function fehler() {
      if (logging)log(webserver + ": Webseite nicht erreichbar","warn");
      setState(pfad + "status",false);
      }
      ! function keinFehler() {
      if (logging)log(webserver + ": Webserver auf Port 80 erreichbar","info");
      setState(pfad + "status",true);
      }
      ! function getStatusPort() {
      exec(abfrage, function(err, stdout, stderr) {
      if (err) {
      if (logging) log("err: " + err);
      if (logging) log("stderr: " + stderr);
      if (stderr.indexOf("Connection closed by foreign host").toString() != -1) {
      keinFehler();
      return;
      }
      fehler();
      return;
      }
      ! if (logging) log("stdout:" + stdout);
      keinFehler();
      });
      }
      ! //
      on({id:"javascript."+instance+"."+pfad+"status",change:'ne'}, function (obj) {

      if(obj.state.val) {
          //sayit("Webseite iobroker Forum ist erreichbar");
          //event("Webseite iobroker Forum ist erreichbar");
      } else {
          //sayit("Webseite iobroker Forum ist nicht erreichbar");
          //event("Webseite iobroker Forum ist **nicht** erreichbar");
      }
      

      });

      ! // regelmässige Wiederholungen
      // -----------------------------------------------------------------------------
      schedule(cronStr, getStatusPort);
      ! // main
      // -----------------------------------------------------------------------------
      function main() {
      getStatusPort();
      }
      ! // Start Skript:
      // -----------------------------------------------------------------------------
      ! createDp();
      setTimeout(main, 500);
      ! ````

      Das Skript kontrolliert, ob ein Server auf Port 80 antwortet.

      Die auskommentierten Funktionen sankt() und event() sind globale Funktionen, die ich für Ansagen und das Speichern von Ereignissen in eine Ereignisliste verwende.

      Gestern beim Ausfall vom Forum war der Server per Ping erreichbar, per Port 80 aber nicht.

      In den späteren Abendstunden war dann Port 80 verfügbar, allerdings nicht das Forum, sondern nur die Willkommensseite des Webservers. Diesen Unterschied überwacht das Skript nicht.

      327_dienst_forum_port_80.jpg

      Um Mitternacht wurde am Webserver gearbeitet und seit Mitternacht ist das Forum wieder erreichbar:

      327_forum_eventlist.jpg

      … kleiner Spaß zum verspäteten Start des Forums ins Wochenende... :lol:

      1 Reply Last reply Reply Quote 0
      • eric2905
        eric2905 last edited by

        LOL, schöne Idee.

        1 Reply Last reply Reply Quote 0
        • S
          simpixo last edited by

          @ruhr70:

          Beispiel:

          Ist der Webserver von forum.iobroker.net erreichbar? 😉

          ! ````
          // Überwacht eine Adresse (FQDN oder IP) auf Erreichbarkeit eines Ports
          // z.B. Port 80 für einen Webserver
          ! var pfad = "Service.www.ioBroker_Forum" + ".";
          var cronStr = "*/10 * * * *";
          var webserver = "forum.iobroker.net";
          var port = "80";
          ! var logging = false;
          ! var abfrage = "telnet "+ webserver + " " + port;
          var forceCreation = false;
          ! var datenpunkte = {
          'status': {
          "init":false,
          "common": {
          name: 'status ' + webserver,
          desc: 'status ' + webserver + '. Port ' + port + ' erreichbar?',
          type: 'boolean',
          unit: '',
          role: 'value'
          }
          }
          };
          ! function createDp() {
          var name;
          var init;
          var common;
          for (var dp in datenpunkte) {
          name = pfad + dp;
          init = datenpunkte[dp].init;
          common = datenpunkte[dp].common;
          createState(name, init , forceCreation, common);
          }
          }
          ! function fehler() {
          if (logging)log(webserver + ": Webseite nicht erreichbar","warn");
          setState(pfad + "status",false);
          }
          ! function keinFehler() {
          if (logging)log(webserver + ": Webserver auf Port 80 erreichbar","info");
          setState(pfad + "status",true);
          }
          ! function getStatusPort() {
          exec(abfrage, function(err, stdout, stderr) {
          if (err) {
          if (logging) log("err: " + err);
          if (logging) log("stderr: " + stderr);
          if (stderr.indexOf("Connection closed by foreign host").toString() != -1) {
          keinFehler();
          return;
          }
          fehler();
          return;
          }
          ! if (logging) log("stdout:" + stdout);
          keinFehler();
          });
          }
          ! //
          on({id:"javascript."+instance+"."+pfad+"status",change:'ne'}, function (obj) {

          if(obj.state.val) {
              //sayit("Webseite iobroker Forum ist erreichbar");
              //event("Webseite iobroker Forum ist erreichbar");
          } else {
              //sayit("Webseite iobroker Forum ist nicht erreichbar");
              //event("Webseite iobroker Forum ist **nicht** erreichbar");
          }
          

          });

          ! // regelmässige Wiederholungen
          // -----------------------------------------------------------------------------
          schedule(cronStr, getStatusPort);
          ! // main
          // -----------------------------------------------------------------------------
          function main() {
          getStatusPort();
          }
          ! // Start Skript:
          // -----------------------------------------------------------------------------
          ! createDp();
          setTimeout(main, 500);
          ! ````

          Das Skript kontrolliert, ob ein Server auf Port 80 antwortet.

          Die auskommentierten Funktionen sankt() und event() sind globale Funktionen, die ich für Ansagen und das Speichern von Ereignissen in eine Ereignisliste verwende.

          Gestern beim Ausfall vom Forum war der Server per Ping erreichbar, per Port 80 aber nicht.

          In den späteren Abendstunden war dann Port 80 verfügbar, allerdings nicht das Forum, sondern nur die Willkommensseite des Webservers. Diesen Unterschied überwacht das Skript nicht.

          Dienst Forum Port 80.jpg

          Um Mitternacht wurde am Webserver gearbeitet und seit Mitternacht ist das Forum wieder erreichbar:

          Forum Eventlist.jpg

          … kleiner Spaß zum verspäteten Start des Forums ins Wochenende... :lol: `

          Hallo ruhr70

          Wie erstellst du eigentlich diese Eventliste? Sowas hätte ich auch gern…

          Danke und Gruß

          Adrian

          1 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            @simpixo:

            Hallo ruhr70

            Wie erstellst du eigentlich diese Eventliste? Sowas hätte ich auch gern…

            Danke und Gruß

            Adrian `

            Ich habe Skript laufen, welches einen Datenpunkt überwacht. Wenn sich bei dem Datenpunkt etwas ändert, wird die Eventliste den Inhalt des Datenpunks um einen Eintrag erweitert.

            Skript und Beschreibung, siehe:

            http://forum.iobroker.net/viewtopic.php … ent#p39480

            Dazu gibt es dann ein globales "Skript" event(), damit aus jedem beliebigen Skript ein Ereignis erzeugt werden kann.

            Das globale "Skript":

            function event(text) {
                log("Event: " + text);
                setState("javascript.0.Ereignisliste.event",text);
            }
            
            

            Wenn man nun in einem Skript

            event("ein **neuer** Tag beginnt");
            

            schreibt, wird die Ereignisliste um den Eintrag

            05.12. 17:42 ein neuer Tag beginnt

            erweitert.

            Man könnte auch mehrere Listen beschreiben. Dann brächte man für jede Liste ein Event-Skript und die globale event() Funktion müsste so erweitert werden, dass man auswählen kann, welche Liste gemeint ist, z.B.:

            event("Eintrag in die Hauptliste (Default");
            event("Eintrag in Liste 1",1);
            event("Eintrag in Liste Systemereignisse","Systemevents");
            

            Das muss dann halt angepasst werden.

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

            Support us

            ioBroker
            Community Adapters
            Donate

            1.0k
            Online

            31.7k
            Users

            79.7k
            Topics

            1.3m
            Posts

            3
            4
            941
            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