Пример скрипта для Мониторинга доступности 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 &
Добавление виджета: