Пример мониторинга скорости интернет канала при помощи ресурса speedtest.net и ПК с операционной системой Linux.
Что нам потребуется:
Добавление и настройка устройства:
Установка NodeJS:
Смотрите в «документацию NodeJS». Стандартная установка для Ubuntu или Debian:
# Using Ubuntu curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt-get install -y nodejs # Using Debian, as root curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - apt-get install -y nodejs
Установка SPEEDTEST:
Смотрите в «документацию SPEEDTEST». Стандартная установка для Ubuntu или Debian:
sudo apt-get install gnupg1 apt-transport-https dirmngr export INSTALL_KEY=379CE192D401AB61 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys $INSTALL_KEY echo "deb https://ookla.bintray.com/debian generic main" | sudo tee /etc/apt/sources.list.d/speedtest.list sudo apt-get update # Other non-official binaries will conflict with Speedtest CLI # Example how to remove using apt-get # sudo apt-get remove speedtest-cli sudo apt-get install speedtest
Утилита SPEEDTEST выполняет измерение параметров вашего интернет канала и выводит в консоль скорость загрузки, скорость отдачи и время задержки. Протестируем SPEEDTEST в консоли. Для этого наберите в командной строке:
speedtest
В ответ получите примерно такой текст:
Speedtest by Ookla Server: Kyivstar - Kiev (id = 23493) ISP: Private Joint-stock Company farlep-invest Latency: 22.72 ms (0.11 ms jitter) Download: 89.86 Mbps (data used: 63.2 MB) Upload: 93.63 Mbps (data used: 101.5 MB) Packet Loss: Not available. Result URL: https://www.speedtest.net/result/c/cc8fd3b0-9087-4961-aa78-1a3e91f24465
Создание программы на NodeJS. Программа будет выполнять команду Speedtest, получать текстовый результат выполнения команды и доставать из него нужные нам данные: скорость загрузки (Download), скорость отдачи (Upload), время задержки (Latency).
Создадим директорию:
mkdir /var/viziot/ mkdir /var/viziot/speedtest
Перейдем в директорию:
cd /var/viziot/speedtest
Создадим NodeJS проект:
npm init
Установим вспомогательный модуль viziot-mqtt-client-nodejs - обеспечивает отправку данных на сервер VizIoT по протоколу MQTT:
npm install viziot-mqtt-client-nodejs –s
Создадим файл скрипта:
nano ./index.js
Содержание скрипта:
'use strict';
//#ключ и пароль доступа VizIoT
let keyDevice = ___________________;
let passDevice = ____________________________;
let viziotMQTT = require('viziot-mqtt-client-nodejs');
let viziotMQTTClient = new viziotMQTT(keyDevice, passDevice);
viziotMQTTClient.connect(function () {});
function getPacketAndSendToServer() {
speedTest("*", function (result) {
console.log(result);
if(result.type == "ok"){
let packet = {
'date': parseInt(new Date().getTime()/1000),
"latency":result.latency,
"download":result.download,
"upload":result.upload
};
viziotMQTTClient.sendDataToVizIoT(packet, function (err) {
if (err) {
console.log("publish", err);
}
});
}
});
}
function speedTest(idServer, callBack){
const { exec } = require("child_process");
var command = "speedtest";
if(idServer != undefined && idServer != "*" && !isNaN(idServer) && idServer > 0){
command = "speedtest -s " + idServer;
}
console.log("Выполнение команды", command);
exec(command, (error, stdout, stderr) => {
if (error) {
console.log(`error: ${error.message}`);
callBack({type: "error message"});
return;
}
if (stderr) {
console.log(`stderr: ${stderr}`);
callBack({type: "error stderr"});
return;
}
console.log(`stdout: ${stdout}`);
var arrayString = stdout.replace(new RegExp("\r",'g'), "").split("\n");
var latency = getValue(arrayString, "Latency", "ms");
var download = getValue(arrayString, "Download", "Mbps");
var upload = getValue(arrayString, "Upload", "Mbps");
if(!isNaN(latency) && !isNaN(download) && !isNaN(upload)){
callBack({
"type": "ok",
"latency":latency,
"download":download,
"upload":upload
});
return;
}else{
callBack({"type": "error parse","latency":latency,
"download":download,
"upload":upload });
return;
}
});
}
function getValue(arrayString, nameParametr, typeMeasure) {
for (var ii = 0; ii < arrayString.length; ii++) {
if(arrayString[ii].indexOf(nameParametr + ":") !== -1) {
return parseFloat(arrayString[ii].replace(new RegExp("^.*" + nameParametr + ": *"), "").replace(new RegExp(" "+ typeMeasure + ".*$"), ""));
}
}
return NaN;
}
getPacketAndSendToServer();
let intervalTime = 1000 * 60 * 5;
setInterval(function () {
getPacketAndSendToServer();
}, intervalTime);
Данный скрипт будем запускать при старте системы. Для этого добавим запись в cron. Запустим редактор cron:
> crontab -e
И в самый конец добавим строку, которая будет запускать скрипт «/var/viziot/speedtest/index.js»:
@reboot node /var/viziot/speedtest/index.js > /var/viziot/speedtest/output.txt &
Добавления виджета: