Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. 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

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

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

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

      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 Reply Quote 0
      • paul53
        paul53 last edited by

        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
        
        
        1 Reply Last reply Reply Quote 0
        • D
          daNick last edited by

          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 Reply Quote 0
          • paul53
            paul53 last edited by

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

            1 Reply Last reply Reply Quote 0
            • D
              daNick last edited by

              @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 Reply Quote 0
              • paul53
                paul53 last edited by

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

                1 Reply Last reply Reply Quote 0
                • D
                  daNick last edited by

                  @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 Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  794
                  Online

                  31.7k
                  Users

                  79.9k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  629
                  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