Skip to content
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
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.1k

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

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

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

Scheduled Pinned Locked Moved Skripten / Logik
7 Posts 2 Posters 674 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Offline
    D Offline
    daNick
    wrote on last edited by
    #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 Reply Last reply
    0
    • paul53P Offline
      paul53P Offline
      paul53
      wrote on last edited by
      #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 Reply Last reply
      0
      • D Offline
        D Offline
        daNick
        wrote on last edited by
        #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 Reply Last reply
        0
        • paul53P Offline
          paul53P Offline
          paul53
          wrote on last edited by
          #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 Reply Last reply
          0
          • D Offline
            D Offline
            daNick
            wrote on last edited by
            #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 Reply Last reply
            0
            • paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #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 Reply Last reply
              0
              • D Offline
                D Offline
                daNick
                wrote on last edited by
                #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 Reply Last reply
                0
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                Support us

                ioBroker
                Community Adapters
                Donate

                250

                Online

                32.4k

                Users

                81.4k

                Topics

                1.3m

                Posts
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                ioBroker Community 2014-2025
                logo
                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Recent
                • Tags
                • Unread 0
                • Categories
                • Unreplied
                • Popular
                • GitHub
                • Docu
                • Hilfe