Skip to content
  • 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
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [GELÖST] Javascript - Output von Shell auswerten (auch: Skript für regelmässige Prüfung der Internet-Geschwindigkeit)

NEWS

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.2k

[GELÖST] Javascript - Output von Shell auswerten (auch: Skript für regelmässige Prüfung der Internet-Geschwindigkeit)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
7 Beiträge 2 Kommentatoren 674 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.
  • D Offline
    D Offline
    daNick
    schrieb am zuletzt editiert von
    #1

    Hallo!

    Ich hoffe, ich habe nichts überlesen, aber ich finde hierfür keine Lösung:

    Aufgabenstellung: Output von Shell-Befehl auswerten und als Datenpunkte speichern.

    Ich nutze https://github.com/sivel/speedtest-cli um meine Internetverbindung zu überwachen.

    Der Output sieht etwa so aus

    __pi@ioBroker-Pi:~ $ speedtest-cli –simple

    Ping: 15.735 ms

    Download: 84.57 Mbit/s

    Upload: 7.83 Mbit/s__

    Ich "brauche" nun ein Script, das:

    1. "(PFAD/)speedtest-cli – simple" auf der Shell ausführt

    2. Aus dem Output die Zahlen (gem Beispiel) 15.735, 84.57 und 7.83 in Variablen extrahiert.

    3. Damit ich diese Variable dann in Objekte speichern kann.

    4. Die dann mit HISTORY geloggt werden.

    Der Punkt, zu dem ich Hilfe bräuchte wäre 2. (der uU mit 1. zusammenhängt).

    Danke!

    Nico

    1 Antwort Letzte Antwort
    0
    • paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von
      #2

      Die Reihenfolge ist immer gleich ? Dann vielleicht so ?

      const cmd = 'speedtest-cli --simple';
      const idPing = 'Speedtest.Ping';
      const idDown = 'Speedtest.Download';
      const idUp   = 'Speedtest.Upload';
      
      createState(idPing, 0, {type: 'number', unit: 'ms'});
      createState(idDown, 0, {type: 'number', unit: 'MBit/s'});
      createState(idUp, 0, {type: 'number', unit: 'MBit/s'}); 
      
      function speed() {
         exec(cmd, function (error, stdout, stderr) {
            if(error) log(stderr, 'error');
            else {
               var lines = stdout.split('\n');
               setState(idPing, parseFloat(lines[0].split(' ')[1]), true);
               setState(idDown, parseFloat(lines[1].split(' ')[1]), true);
               setState(idUp,   parseFloat(lines[2].split(' ')[1]), true);
            }
         });
      }
      
      setTimeout(speed, 500); // Scriptstart
      
      schedule('*/10 * * * *', speed); // alle 10 Minuten
      
      

      Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
      Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

      1 Antwort Letzte Antwort
      0
      • D Offline
        D Offline
        daNick
        schrieb am zuletzt editiert von
        #3

        Vielen Dank, funktioniert super!

        Es fehlten ein paar schließende Klammern, aber das habe ich noch hinbekommen 🙂

        Ich habe auch hinzugefügt, dass die Zeit der Messung mit abgelegt wird, damit man schnell sehen kann, wie aktuell das ist.

        Falls es jemanden interessiert, unten mein Code, ich habe ein paar kurze Kommentare eingefügt, damit andere meine Fehler vermeiden 8-)

        Achtung: Das Script läuft bei mir auf einem Raspberry Pi 3, bei dem die Ethernet-Schnittstelle LANGSAMER ist, als der Internetanschluss. Es kommen daher maximal rd 88 MBit/s raus, obwohl der 200 MBit/s - Anschluss oft mehr hergibt. Mir reicht aber diese Ungenauigkeit, ich will schauen, ob es massive Einbrüche gibt 🙂

        Nochmals DANKE!

        Nico

        const cmd = '/usr/local/bin/speedtest-cli --simple';
        
        //Hinweis: speedtest-cli gibt es unter https://github.com/sivel/speedtest-cli
        
        const idPing = 'Speedtest.Ping';
        const idDown = 'Speedtest.Download';
        const idUp   = 'Speedtest.Upload';
        
        const idTime = 'Speedtest.LastMeasure';
        
        createState(idPing, 0, {type: 'number', unit: 'ms'});
        createState(idDown, 0, {type: 'number', unit: 'MBit/s'});
        createState(idUp, 0, {type: 'number', unit: 'MBit/s'}); 
        
        createState(idTime, 0, {type: 'string'}); 
        
        function speed() {
        
           //Hinweis: In den Einstellungen der Instanz von Javascript muss " Erlaube das Kommando "exec" " aktiviert sein.
        
           exec(cmd, function (error, stdout, stderr) {
              if(error) log(stderr, 'error');
              else {
                 var lines = stdout.split('\n');
                 var measuretime = formatDate(new Date(), "JJJJ.MM.TT SS:mm:ss");
        
                 setState(idPing, parseFloat(lines[0].split(' ')[1]), true);
                 setState(idDown, parseFloat(lines[1].split(' ')[1]), true);
                 setState(idUp,   parseFloat(lines[2].split(' ')[1]), true);
        
                setState(idTime, measuretime);
        
              }
           });
        }
        
        setTimeout(speed, 500); // Scriptstart
        
        schedule('/10 * * * *', speed); // alle 10 Minuten 
        
        1 Antwort Letzte Antwort
        0
        • paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

          @daNick:

          4. Die dann mit HISTORY geloggt werden. `
          Dort wird der Zeitpunkt mit erfasst, einen zusätzlichen Datenpunkt für die Zeit braucht es also nicht.

          Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
          Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

          1 Antwort Letzte Antwort
          0
          • D Offline
            D Offline
            daNick
            schrieb am zuletzt editiert von
            #5

            @paul53:

            @daNick:

            4. Die dann mit HISTORY geloggt werden. Dort wird der Zeitpunkt mit erfasst, einen zusätzlichen Datenpunkt für die Zeit braucht es also nicht.

            Für das Logging brauche nicht, aber wenn ich schnell reinschaue, kann ich sehen, wie alt der Wert ist (Ich logge nicht alle 10 Minuten).

            Aber völlig richtig, für die Grafik braucht man es nicht, ich logge diesen Wert auch nicht mit History.

            Danke für die Ergänzung!

            Gruß Nico

            1 Antwort Letzte Antwort
            0
            • paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              Markiere bitte noch das Thema im Betreff des <u>ersten</u> Beitrags als [gelöst].

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              1 Antwort Letzte Antwort
              0
              • D Offline
                D Offline
                daNick
                schrieb am zuletzt editiert von
                #7

                @daNick:

                Hallo!

                Ich hoffe, ich habe nichts überlesen, aber ich finde hierfür keine Lösung:

                Aufgabenstellung: Output von Shell-Befehl auswerten und als Datenpunkte speichern.

                Ich nutze https://github.com/sivel/speedtest-cli um meine Internetverbindung zu überwachen.

                Der Output sieht etwa so aus

                __pi@ioBroker-Pi:~ $ speedtest-cli –simple

                Ping: 15.735 ms

                Download: 84.57 Mbit/s

                Upload: 7.83 Mbit/s__

                Ich "brauche" nun ein Script, das:

                1. "(PFAD/)speedtest-cli – simple" auf der Shell ausführt

                2. Aus dem Output die Zahlen (gem Beispiel) 15.735, 84.57 und 7.83 in Variablen extrahiert.

                3. Damit ich diese Variable dann in Objekte speichern kann.

                4. Die dann mit HISTORY geloggt werden.

                Der Punkt, zu dem ich Hilfe bräuchte wäre 2. (der uU mit 1. zusammenhängt).

                Danke!

                Nico `

                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

                721

                Online

                32.4k

                Benutzer

                81.4k

                Themen

                1.3m

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

                • Du hast noch kein Konto? Registrieren

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