Пингует хост указанное количество раз с установленным интервалом. В случае отсутствия ответов больше указанного кличества подряд - отключает реле на установленное время.
Вот код:
//05_25_test_03.js
//ChangeME! Определим пингуемый адрес
var addrString = "10.0.0.164"
//Устройство-реле
var devRelay="wb-mr6c_45/K1"
//ChangeME! Время между пингами, мс
var timeBeetveenPing=3000
//ChangeME! Максимальное количество пропущенных пингов
var pingFaultCountMAX = 3
//ChangeME! Время отключенного состояния, мс
var timeForDisable=5000
//Сделаем таймер, который будет работать каждые "timeBeetveenPing"
startTicker("pingTimer", timeBeetveenPing);
var pingFaultCount = 0
defineRule("rule_pingTimer",{
when: function () { return timers.pingTimer.firing; },
then: function () {
//Отправим 1 пинг на адрес. Оценим результат
runShellCommand("/bin/ping -c1 "+addrString,
{
captureOutput: true, //Захватывать stdout
captureErrorOutput: true, //Захватывать stderr (если нужно)
exitCallback: function (exitCode, capturedOutput, capturedErrorOutput) //Функция, в которую попадает вывод
{
//log("exitCode:",exitCode); //Результат выполнения
//log("cmd output: " + capturedOutput); //строка полностью
//log("cmd Erroroutput: " + capturedErrorOutput);
if (exitCode) {pingFaultCount=pingFaultCount+1} //инкрементим счетчик
else {pingFaultCount=0}
if (pingFaultCount >= pingFaultCountMAX) {
log.info("Device", addrString, "not answered for", pingFaultCount, "ping. Power reset ", devRelay," executed");
timers.pingTimer.stop(); //отключисм таймер
dev[devRelay]=false; //вЫключим реле
pingFaultCount=0
setTimeout(function () {
dev[devRelay]=true; //включим реле
startTicker("pingTimer", timeBeetveenPing); //запустим таймер
}, timeForDisable);
}
}
})
}
});
Не стал выкидывать закомментированное и в целом упрощать в ущерб понятности.