Пример скрипта для Мониторинга доступности IP адреса, порта или WEB сайта в сети интернет. Скрипт будет проверять доступность нужных нам хостов с интервалом в 15 секунд и передавать на сервер VizIoT значение затраченного времени между отправкой запроса и получением ответа «PING». Если заданный узел будет недоступен, то значением «PING» будет -500.
Что нам потребуется:
Добавление и настройка устройства:
Установка NodeJS:
Смотрите в «документации NodeJS». Для ОС Windows потребуется скачать и установить пакет с Nodejs.org. Для ОС 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
Создание программы на NodeJS в операционной системе Debian:
Создадим директорию:
mkdir /var/viziot/ mkdir /var/viziot/VizIoTPinger
Перейдем в директорию:
cd /var/viziot/VizIoTPinger
Создадим NodeJS проект:
npm init
Установим пакеты для работы:
npm install tcp-ping --save
npm install viziot-mqtt-client-nodejs --save
Создадим файл скрипта:
nano ./index.js
Содержание скрипта:
'use strict';
//#ключ и пароль доступа VizIoT
let keyDevice = '__________________';
let passDevice = '______________________';
//Массив WEB ресурсов, которые будут пинговаться
//Состоят из:
// key - название параметра, который будет передаваться на сервер
// address - адрес WEB ресурса, IP адрес устройства
// port - порт по которому доступно устройство
let 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
}
];
let tcpp = require('tcp-ping');
function pingIpAndPortAddress (item, callback) {
let 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);
}
});
};
function getPacketAndSendToServer() {
let countResults = 0;
let packet = {
'date': parseInt(new Date().getTime()/1000)
};
for (let ii = 0; ii < pingList.length; ii++) {
pingIpAndPortAddress(pingList[ii], function (item, timeout) {
packet[item.key] = timeout;
console.log(item, timeout);
countResults++;
if (countResults == pingList.length) {
viziotMQTTClient.sendDataToVizIoT(packet, function (err) {
if (err) {
console.log("publish", err);
}
});
}
});
}
}
let viziotMQTT = require('viziot-mqtt-client-nodejs');
let viziotMQTTClient = new viziotMQTT(keyDevice, passDevice);
viziotMQTTClient.connect(function () {
getPacketAndSendToServer();
});
let intervalTime = 60000;//интервал проверки доступности WEB сервиса
setInterval(function () {
getPacketAndSendToServer();
}, intervalTime);
Данный скрипт будем запускать при старте системы. Для этого потребуется добавить запись в cron. Запустим редактор cron:
crontab -e
В самый конец добавим строку, которая будет запускать скрипт «/var/viziot/VizIoTPinger/index.js»:
@reboot node /var/viziot/VizIoTPinger/index.js > /var/viziot/VizIoTPinger/output.txt &
Добавление виджета: