NEWS
[GELÖST] Javascript - Output von Shell auswerten (auch: Skript für regelmässige Prüfung der Internet-Geschwindigkeit)
-
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
-
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
-
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
-
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. -
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
-
Markiere bitte noch das Thema im Betreff des <u>ersten</u> Beitrags als [gelöst].
-
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 `