NEWS
Internet-Speedtest als Adapterersatz via NodeRed
-
Da ich keinen vernünftigen Adapter im stable gefunden habe und ich ja auch bereits in einem eigenen Thread gezeigt habe, wie einfach es mit NodeRed in der jetzigen Version ist, externe NodeJS Module zu nutzen, habe ich einen super simplen Flow erstellt, der einen Speedtest durchführt und alles in Datenpunkte schreibt. (Also als Adapterersatz quasi quick & dirty)
Da die Node in NodeRed auch schon in die Jahre gekommen ist, habe ich es über die automatische Installation einfach gehabt.
Ich habe aber bewußt nichts konfiguriert, man muss also mit dem Ergebnis so leben, wie es ist. Das Tool bzw. die Bibliothek mit der der Speedtest arbeitet ist diese: https://github.com/ddsol/speedtest.net#readme
Hier mal das Ergebnis - etwaige Umrechnungen müsst ihr selbst vornehmen:
Der Flow ist super simple und nutzt natürlich meinen Subflow zur automatischen Erstellung von Datenpunkten aus komplexen Datenstrukturen:
Wenn ihr den Flow importiert müsst ihr ein paar Minuten warten, bis NodeRed im Hintergrund die Bibliothek installiert hat.
Wer ungeduldig ist bekommt den Fehler: Node ist nicht vorhanden. Also so ca. 5 Minuten warten bevor ihr den Flow triggert.
Und natürlich wieder die Erstellung von Fremdobjekten im NodeRed Adapter zulassen:
Achso und wer den ganzen Datenschutzeinstellungen nicht zustimmt, der muss bitte in der Funktion Node die Parameter auf false setzen (Zeile 5):
{acceptLicense: true, acceptGdpr: true}
Fehler - also bei nicht akzeptieren Datenschutz oder Lizenzbestimmungen werden dann über die Catch Node abgefangen und ausgegeben. Wer quasi aber schon mal zugestimmt hat, dann wird das anscheinend gecacht.
Achso für alle die nicht so bewandert mit den Möglichkeiten sind:
- In der Inject Node kann man ein Wiederholungsintervall definieren, um den Speedtest zyklisch auszuführen.
oder man
- erstellt einen weiteren Datenpunkt und hängt vorne noch eine iobrokerIN Node dran. Dann kann man über seine VIS oder was auch immer für eine Visualisierung den Speedtest bei Bedarf trigggern.
Viel Spaß damit.
- In der Inject Node kann man ein Wiederholungsintervall definieren, um den Speedtest zyklisch auszuführen.
-
So nachdem mir die Werte der Bandbreite etwas suspekt waren, habe ich festgestellt, dass die in BPS (also Bytes pro Sekunde) ausgewiesen sind und nicht in Mbit/s - deshalb habe ich es mit diesen beiden Nodes hier noch korrigiert und auf 2 Nachkommastellen gerundet, wer das einfügen will:
Die Change Node rechnet die BPS nicht nur in MBit/s um, sondern setzt dann auch die Unit im Datenpunkt des iobrokers.
Da das aber nur einmal gemacht wird, muss man ggf. den Datenpunkt nochmal löschen, da er sonst nicht neu definiert wird.
-
@mickym Hi, nach dem umsteig von Node.js 14 auf Version 16.16.0 und NPM 8.11.0 bekomme ich jetzt Fehlermeldungen. Ich war vorher von Buster auf Bullseye umgestiegen, da lief es aber noch.
node-red.0 2022-07-13 17:26:39.959 error 13 Jul 17:26:39 - [error] [function:Speedtest] Function node failed to load external modules node-red.0 2022-07-13 17:26:39.937 error 13 Jul 17:26:39 - [error] [function:Speedtest] Failed to load module : Error: Cannot find module '/opt/iobroker/iobroker-data/node-red/node_modules/lzma-native/binding-v4.0.6-node-v93-linux-arm/lzma_native.node'Require stack:- /opt/iobroker/iobroker-data/node-red/node_modules/lzma-native/index.js- /opt/iobroker/iobroker-data/node-red/node_modules/decompress-tarxz/index.js- /opt/iobroker/iobroker-data/node-red/node_modules/speedtest-net/index.js
-
@frankyboy73 Ja ich weiss. Ich habe das Modul nochmal gelöscht und dann in der neuen nodejs Umgebung nochmals neu installieren lassen und dann war alles wieder gut.
Also in das Verzeichnis: /opt/iobroker/iobroker-data/node-red wechseln und
dann mit
cd /opt/iobroker/iobroker-data/node-red npm remove speedtest-net
entfernen.
Anschließend den NodeRed Adapter neu starten, dann sollte sich das Modul in der neuen NodeJS Umgebung neu installieren und funktioniert wieder. Ca. 5 Minuten Zeit geben, bis der Adapter das Modul wieder neu installiert hat - so wie halt auch bei der Erstinstallation.
-
@mickym Supi, Danke, funktioniert wieder.
-
Moin @mickym, habe deinen Flow erfolgreich umgesetzt. Intervall auf 30 Minuten sollte reichen. Läuft super, dafür ein herzliches Danke!
Frage: Hast du eine Idee, wie man einen Ping Test realisiert. Mir fehlen dazu leider die NodeRed Kenntnisse.
Gruß Kalle -
@kalle-blomquist dafür gibts eine eigene Node
node-red-node-ping - also einfach im Palettenmanager installieren - die funktioniert besser als der iob Adapter - der hatte bei mir immer Namensauflösungsprobleme.
https://flows.nodered.org/node/node-red-node-ping
Die Ping Node kann man sowohl triggern, um bevor man ein Kommando absetzt sieht ob die Adresse erreichbar ist oder halt zeitgesteuert laufen lassen.
-
@mickym Danke, das war einfach.
Habe mich bei der Bewertung verklickt - hoffe das ist kein Problem, Sorry -
@mickym sorry für wohl blöde Frage. Aber muss ich in deiner Erweiterung "bandwidth BPS in Mbit/s" noch Regeln oder sonstwas eingeben. Habe bisher nichts mit NodeRed gemacht.
Gruß BA2000Hat sich erledigt. Habe jetzt verstanden, dass ich den Code im Spoiler in NodeRed importieren muss. Danke.
Danke, jetzt klappt es. Werde jetzt gleich mal meine Vis entsprechend umbauen.
-
@mickym Vielen Dank, genau das was ich gesucht habe!!
LG
Martin