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. Skript zur Prüfung der Erreichbarkeit eines Dienst per Telnet (Port 80)

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

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

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
4 Beiträge 3 Kommentatoren 1.0k Aufrufe
  • Ä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.
  • ruhr70R Offline
    ruhr70R Offline
    ruhr70
    schrieb am zuletzt editiert von
    #1

    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:

    Adapter: Fritzbox, Unify Circuit
    Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

    1 Antwort Letzte Antwort
    0
    • eric2905E Offline
      eric2905E Offline
      eric2905
      schrieb am zuletzt editiert von
      #2

      LOL, schöne Idee.

      Roses are red, violets are blue,

      if I listen to metal, my neighbours do too

      1 Antwort Letzte Antwort
      0
      • S Offline
        S Offline
        simpixo
        schrieb am zuletzt editiert von
        #3

        @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 Antwort Letzte Antwort
        0
        • ruhr70R Offline
          ruhr70R Offline
          ruhr70
          schrieb am zuletzt editiert von
          #4

          @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.

          Adapter: Fritzbox, Unify Circuit
          Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

          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

          738

          Online

          32.6k

          Benutzer

          82.2k

          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