Ваш домашний сервер снова оффлайн? IP-камера перестала транслировать видео? Интернет пропал полностью или просто не открывается один сайт? Чтобы получать ответы на эти вопросы мгновенно, можно создать простую, но эффективную систему мониторинга.
В этой статье мы настроим скрипт, который будет регулярно проверять доступность любых интернет-ресурсов (IP-адресов, портов, сайтов) и отправлять время отклика на сервер VizIoT. Если ресурс недоступен, мы сразу это увидим на графике и получим уведомление в Telegram.
Прежде чем мы начнем, давайте посмотрим, что у нас получится.
Вы сможете создать наглядную панель, которая в реальном времени отображает состояние ключевых для вас сервисов.
Что можно отслеживать в такой конфигурации:
Как интерпретировать график:
Такой подход позволяет мгновенно определить источник проблемы: ваша локальная сеть, интернет-провайдер или конкретный удалённый сервис.
Видеть проблему на графике — это хорошо, а получать мгновенное уведомление о ней — еще лучше. VizIoT позволяет настроить оповещения, которые придут вам в Telegram или на E-mail, как только один из ваших ресурсов станет недоступен, а также когда он вернется в онлайн.

Заинтересовались? Давайте настроим такую систему шаг за шагом.
Рекомендуется устанавливать NodeJS через NVM (Node Version Manager).
# Установка 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://nodejs.org
mkdir ./VizIoTPinger
cd ./VizIoTPinger
npm init -y
npm install tcp-ping --save
npm install viziot-mqtt-client-nodejs --save
Создаём файл index.js:
nano ./index.js
Вставьте в файл следующий код. Не забудьте указать ваши ключи доступа и настроить список ресурсов для мониторинга.
'use strict';
// Вставьте сюда ключ и пароль вашего устройства VizIoT
const keyDevice = '__________________';
const passDevice = '______________________';
// Список ресурсов для мониторинга
// key — название параметра, которое будет в VizIoT
// address — домен или IP-адрес
// port — порт (необязательно, по умолчанию 80)
const pingList = [
{
key: "microsoft_ping",
address: 'microsoft.com',
port: 80
},
{
key: "google_ping",
address: 'google.com'
},
{
key: "ipCamera_ping",
address: '192.168.0.158',
port: 554 // Стандартный порт для RTSP-потока
}
];
const tcpp = require('tcp-ping');
const viziotMQTT = require('viziot-mqtt-client-nodejs');
const viziotMQTTClient = new viziotMQTT(keyDevice, passDevice);
// Функция: пинг по IP/порту
function pingIpAndPortAddress(item, callback) {
const pingItem = {
address: item.address,
port: item.port || 80,
attempts: 3,
timeout: 5000
};
tcpp.ping(pingItem, function (err, data) {
if (data.avg >= 0) {
callback(item, +data.avg.toFixed(2));
} else {
callback(item, -500); // Отправляем -500, если ресурс недоступен
}
});
}
// Формирование данных и отправка в VizIoT
function getPacketAndSendToServer() {
let countResults = 0;
const packet = { date: Math.floor(Date.now() / 1000) };
for (let i = 0; i < pingList.length; i++) {
pingIpAndPortAddress(pingList[i], function (item, timeout) {
packet[item.key] = timeout;
console.log(`Pinging ${item.address}:${item.port || 80} -> ${timeout} ms`);
countResults++;
if (countResults === pingList.length) {
viziotMQTTClient.sendDataToVizIoT(packet, function (err) {
if (err) {
console.log("Publish error:", err);
} else {
console.log("Packet sent successfully!");
}
});
}
});
}
}
// Интервал проверки (60 секунд)
const intervalTime = 60000;
// Первичное подключение и запуск
viziotMQTTClient.connect(function () {
console.log("Connected to VizIoT MQTT broker.");
getPacketAndSendToServer(); // Первый запуск сразу после подключения
setInterval(getPacketAndSendToServer, intervalTime);
});
PM2 — это продвинутый менеджер процессов для Node.js, который обеспечит автоматический перезапуск скрипта при сбоях и удобное управление.
npm install pm2 -g
pm2 start index.js --name "VizIoTPinger"
pm2 save
pm2 startup
Эта команда выведет на экран другую команду (обычно с sudo), которую нужно скопировать и выполнить.
pm2 list # Показать список запущенных процессов
pm2 logs VizIoTPinger # Показать логи в реальном времени
pm2 restart VizIoTPinger# Перезапустить процесс
pm2 stop VizIoTPinger # Остановить процесс
Теперь, когда данные поступают, осталось настроить интерфейс.
microsoft_ping, google_ping, ipCamera_pingipCamera_ping).Подробную инструкцию по настройке уведомлений можно найти в этой статье.
Вы создали полноценную систему мониторинга доступности ваших ключевых сервисов с наглядной визуализацией и мгновенными оповещениями.