В этом примере мы создадим систему автоматического мониторинга скорости интернет-канала (Download, Upload и Latency) с помощью Speedtest CLI, а затем настроим отправку данных в VizIoT для построения графиков и анализа качества интернет-соединения.
Создайте новое устройство с именем «SPEEDTEST».
Добавьте параметры:
В разделе «Основные настройки» скопируйте Ключ доступа и Пароль доступа — они понадобятся в скрипте.
Подробная документация: https://nodejs.org
# Установка nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# Подключение без перезагрузки оболочки
. "$HOME/.nvm/nvm.sh"
# Установка Node.js
nvm install 24
# Проверка версии
node -v
npm -v
Документация: https://www.speedtest.net/apps/cli
sudo apt-get install curl
curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash
sudo apt-get update
sudo apt-get install speedtest-cli
Проверка работы:
speedtest-cli
Пример вывода:
Hosted by PrJSC VF Ukraine (Kyiv) [442.25 km]: 12.652 ms
Download: 851.78 Mbit/s
Upload: 667.39 Mbit/s
Программа будет запускать Speedtest CLI, получать JSON-результат и отправлять данные на сервер VizIoT через MQTT.
mkdir -p /var/viziot/speedtest
cd /var/viziot/speedtest
npm init -y
npm install viziot-mqtt-client-nodejs
Создаём файл:
nano index.js
index.jsconst viziotMQTT = require('viziot-mqtt-client-nodejs')
const { exec } = require('child_process')
// Ключ и пароль доступа VizIoT
let keyDevice = "__________________";
let passDevice = "______________________";
let viziotMQTTClient = new viziotMQTT(keyDevice, passDevice);
function main() {
viziotMQTTClient.connect(() => {});
let intervalTime = 60 * 60 * 1000; // 1 час
getPacketAndSendToServer();
setInterval(() => {
getPacketAndSendToServer();
}, intervalTime);
}
main();
function getPacketAndSendToServer() {
speedTest("29493").then((result) => {
if (result.success && result.data) {
const packet = {
date: Math.floor(Date.now() / 1000),
latency: result.data.latency,
download: result.data.download,
upload: result.data.upload
};
viziotMQTTClient.sendDataToVizIoT(packet, (err) => {
if (err) console.log("publish error:", err);
});
}
});
}
function speedTest(idServer) {
return new Promise((resolve) => {
let command = 'speedtest-cli --json';
if (idServer && !isNaN(idServer)) {
command += ` --server ${idServer}`;
}
exec(command, (error, stdout, stderr) => {
if (error || stderr) {
console.log("Speedtest error:", error || stderr);
return resolve({ success: false });
}
try {
const json = JSON.parse(stdout);
if (
json.download &&
json.upload &&
json.ping &&
typeof json.download === "number" &&
typeof json.upload === "number" &&
typeof json.ping === "number"
) {
resolve({
success: true,
data: {
latency: json.ping,
download: json.download / 1024 / 1024,
upload: json.upload / 1024 / 1024
}
});
} else {
console.log("Unexpected JSON format:", json);
resolve({ success: false });
}
} catch (err) {
console.log("JSON parse error:", err);
resolve({ success: false });
}
});
});
}
Откройте crontab:
crontab -e
Добавьте строку:
@reboot node /var/viziot/speedtest/index.js > /var/viziot/speedtest/output.txt &
Теперь скрипт будет запускаться при старте системы.
Создайте новую панель «SPEEDTEST».
Добавьте виджет типа «График».
Выберите устройство SPEEDTEST.
Выберите параметры:
latencydownloaduploadПосле этого данные автоматически начнут отображаться на графике.
Теперь ваш сервер автоматически измеряет скорость интернет-канала и отправляет данные на VizIoT.