Товарищи, есть одна маленькая, но очень большая проблема… gsm модуль установлен и настроен, симкарта рабочая, и даже отсылает смс, но не все и не всегда, летят ошибки и отваливается сам модуль, подскажите что делать.
Вот правило отвечающее за отправку СМС
// Имя устройства и канала, которые отслеживают напряжение var voltageDevice = "ST"; var voltageChannels = ["Urms L1", "Urms L2", "Urms L3"];
// Имена виртуальных устройств для настройки границ напряжения
var voltageMaxDevice = “Param”;
var voltageMaxChannel = “VoltageMax”;
var voltageMinDevice = “Param”;
var voltageMinChannel = “VoltageMin”;// Переменные для хранения таймеров
var voltageCheckTimer = null;
var buzzerTimer = null;// Флаг для отслеживания состояния напряжения
var isVoltageOutOfRange = false;// Список e-mail адресов для отправки сообщений
var emailRecipients = [
“123@komus.net”,
“321@komus.net”,
“456@komus.net”,
“654@komus.net”,
“789@komus.net”,
“987@komus.net”,
“7658@tvr.komus.net”,
“567@gmail.com”
];// Список номеров телефонов для отправки SMS сообщений
var smsRecipients = [
“+71234567890”,
“+71234567890”,
“+71234567890”,
“+71234567890”,
“+71234567890”,
“+71234567890”,
“+71234567890”,
“+71234567890”
];// Функция для отправки e-mail сообщения
function sendEmail(subject, message) {
var emailCommand = “echo '” + message + “’ | mail -s '” + subject + "’ ";
emailRecipients.forEach(function(email) {
try {
runShellCommand(emailCommand + email);
} catch (error) {
log("Ошибка при отправке e-mail на " + email + ": " + error);
}
});
log(“E-mail сообщения отправлены”);
}// Функция для отправки SMS сообщения
function sendSMS(message) {
smsRecipients.forEach(function(phone) {
try {
Notify.sendSMS(phone, message);
} catch (error) {
log("Ошибка при отправке SMS на " + phone + ": " + error);
}
});
log(“SMS сообщения отправлены”);
}// Функция для включения зуммера на 10 секунд
function activateBuzzer() {
dev[“buzzer”][“enabled”] = true;
dev[“TH”][“Buzzer”] = true;
dev[“BZ”][“K1”] = true;
buzzerTimer = setTimeout(function() {
dev[“buzzer”][“enabled”] = false;
dev[“TH”][“Buzzer”] = false;
dev[“BZ”][“K1”] = false;
buzzerTimer = null;
// Если напряжение все еще вне допустимых пределов, повторно включаем зуммер
if (isVoltageOutOfRange) {
activateBuzzer();
}
}, 10000);
}// Функция для обработки события выхода напряжения за пределы
function handleVoltageOutOfRange() {
var voltageMax = dev[voltageMaxDevice][voltageMaxChannel];
var voltageMin = dev[voltageMinDevice][voltageMinChannel];
var outOfRange = false;
var currentVoltages = {};voltageChannels.forEach(function(channel) { var currentVoltage = dev[voltageDevice][channel]; currentVoltages[channel] = currentVoltage; if (currentVoltage > voltageMax || currentVoltage < voltageMin) { outOfRange = true; } }); if (outOfRange) { // Если напряжение вышло за пределы, запускаем таймер на 5 секунд if (voltageCheckTimer === null) { voltageCheckTimer = setTimeout(function() { // По истечении 5 секунд проверяем напряжение снова var voltageAfterTimeout = {}; var stillOutOfRange = false; voltageChannels.forEach(function(channel) { var voltage = dev[voltageDevice][channel]; voltageAfterTimeout[channel] = voltage; if (voltage > voltageMax || voltage < voltageMin) { stillOutOfRange = true; } }); if (stillOutOfRange && !isVoltageOutOfRange) { // Если напряжение все еще за пределами и флаг не установлен, отправляем e-mail и SMS сообщения var message = "Напряжение вышло за пределы КЦ Тверь: " + JSON.stringify(voltageAfterTimeout); sendEmail("Проблема с напряжением КЦ Тверь", message); sendSMS(message); isVoltageOutOfRange = true; // Включаем зуммер activateBuzzer(); } // Сбрасываем таймер voltageCheckTimer = null; }, 5000); } } else { // Если напряжение восстановилось и флаг установлен, отправляем сообщения о нормализации if (isVoltageOutOfRange) { var message = "Напряжение вернулось в норму КЦ Тверь: " + JSON.stringify(currentVoltages); sendEmail("Напряжение в норме КЦ Тверь", message); sendSMS(message); isVoltageOutOfRange = false; // Отключаем зуммер, если он включен if (buzzerTimer !== null) { clearTimeout(buzzerTimer); buzzerTimer = null; dev["buzzer"]["enabled"] = false; dev["TH"]["Buzzer"] = false; dev["BZ"]["K1"] = false; } } // Сбрасываем таймер, если он был установлен if (voltageCheckTimer !== null) { clearTimeout(voltageCheckTimer); voltageCheckTimer = null; } }
}
// Подписываемся на изменения значения напряжения для всех фаз
voltageChannels.forEach(function(channel) {
defineRule(“voltageOutOfRangeRule_” + channel, {
whenChanged: voltageDevice + “/” + channel,
then: function(newValue, devName, cellName) {
handleVoltageOutOfRange();
}
});
});