Контроль работы контактора

Добрый день.
Возможно вопрос простой, но я как начинающий пришел в затруднение и тема полезна будет не только мне.
Ситуация следующая. Имеется релейный выход WBIO-DO-R10A-8 и модуль наличия напряжения WBIO-DI-HVD-8.

На вход модуля WBIO-DI-HVD-8 “wb-gpio/EXT1_IN1” подается напряжение наличие на вводе в щит. На вход “wb-gpio/EXT1_IN2” подается фаза после контактора, от которого запитывается обогреватель (конвектор).

//Обогреватель авария
defineRule("Heater_alarm",  {                
  whenChanged: ["Heating_Kitchen/Heater_1_Auto", "wb-gpio/EXT1_IN1", "wb-gpio/EXT1_IN2"],
  then: function (newValue, devName, cellName) {
    if((dev["Heating_Kitchen/Heater_1_Auto"] && dev["wb-gpio/EXT1_IN1"] == true) && (dev["wb-gpio/EXT1_IN2"] == false)) {
	SendTelegramMsg('Alarm!!!'); // Call global function
	log ("Message Alarm!!! sent");                    // Write to debug console log message
    };
  }
});

Вот кусочек кода, который присылает “Alarm!!!”. Насколько я смог разобраться и логика следующая.

При наличие напряжения на вводе и отсутствие напряжения после контактора должно означать аварию. И при нажатии виртуального переключателя “Heating_Kitchen/Heater_1_Auto” контактор включается, идет обратная связь о включении контактора с блока WBIO-DI-HVD-8. Но Telegram присылает “Alarm!!!”. Предполагаю, что пока идет обратная связь правило уже выполнено и не видит на входе “wb-gpio/EXT1_IN2” “фазу” и присылает “Alarm!!!”. Когда в работе отключаешь автомат и происходит потеря фазы на “wb-gpio/EXT1_IN2”, все правильно, присылает “Alarm!!!”. Прошу совет как правильно настроить момент включения опроса, может нужна некая задержка опроса? Через секунду например? Так же “Alarm!!!” присылается когда отключается напряжение вводе, что тоже не должно быть. Тут наверное тоже некая задержка нужна. Так как при отсутствии напряжения на вводе и после контактора не должно сигнализировать об аварии, на это уже настроено уведомление “Power OFF” ориентирующееся просто на состояние входа “wb-gpio/EXT1_IN1”.

Еще планируется присылать сообщение каждые 2 секунды “Alarm!!!” до тех пор пока виртуальный переключатель “Авария” не будет отключен. Тут по идее должно быть просто использован setinterval. Если не прав, прошу поправить.

Добрый день.
Да, тут как раз мы сталкиваемся с реальным миром.
Предпочтительная логика такая: Если в разумное время (секунда, например) после изменения состояния контактора напряжение не появится (пропадет) - тогда тревога.
Реализовать поможет “отложенная” проверка, например так: Debounce (антидребезг) - #2 от пользователя BrainRoot

1 лайк

Спасибо большое за подсказку, очень помогло, нет ложных аварийных сообщений.

Для полного счастья хочу получать сообщения об отключении и включении напряжения на вводе.
И получил следующую ситуацию.
Если батарея внутри WB не успела разрядиться сообщения о вкл. и откл. питании на вводе успешно приходят. Если отключить WB так, что батарея разрядится, то пока WB грузится правило не срабатывает, так как вход “wb-gpio/EXT1_IN1” = true уже и не изменяется.
Пытаюсь сделать ориентир на проценты заряда или напряжение батареи, но сообщения “Power ON” не приходят. Получилось получить сообщение “Power ON” после того как батарея зарядилась и “battery/Charging” == false и “wb-gpio/EXT1_IN1” = true.

var Battery_OK = 4

// Rule to define press button and call function to send message
defineRule(“Power_OFF”, {
whenChanged: [“wb-gpio/EXT1_IN1”],
then: function (newValue, devName, cellName) {
if (dev[“wb-gpio/EXT1_IN1”] == false) {
SendTelegramMsg(‘Power OFF’);// Call global function
log (“Message Power_OFF sent”); // Write to debug console log message
};
}
});

// Rule to define press button and call function to send message
defineRule(“Power_ON”, {
whenChanged: [“battery/Voltage”, “wb-gpio/EXT1_IN1”],
then: function (newValue, devName, cellName) {
if ((dev[battery/Voltage] > dev[Battery_OK]) && (dev[“wb-gpio/EXT1_IN1”] == true)) {
SendTelegramMsg(‘Power ON’); // Call global function
log (“Message Power_ON sent”); // Write to debug console log message
};
}
});

log(“added in Power_On.js”);

Вот правило, сначала подумал, что что-то не правильно со “строками” (брать или не брать значение в ковычки) Покрутил и так и сяк, что-то не выходит.
Не посоветуете в чем беда? Или нельзя на данные батареи ориентироваться?

Такого объекта не существует, д.б. просто:

if ((dev["battery/Voltage"] > Battery_OK) && (dev["wb-gpio/EXT1_IN1"] == true)) {
1 лайк

var Battery_OK = 4

Это не дает программе представления?

С помощью dev[] получаем/устанавливаем значения топиков, это метод работы с MQTT, а объявлено var Battery_OK = 4
Вот если, например, объявить переменную со строкой, тогда:

var Battery_OK = 4;
var Battery_dev = "battery/Voltage";

if ((dev[Battery_dev] > Battery_OK) && (dev["wb-gpio/EXT1_IN1"] == true)) {

Хм. Работает, только пока батарея не разредилась менее 4 вольт.
Если разрядить батарею до значения менее 4 вольта, то после включения напряжения переходит порог в 4 вольта и сообщение Power ON в Telegram не приходит.

А желаемая-то логика какя? Алгоритм можено реализовать какой угодно…

Для полного счастья хочу получать сообщения об отключении и включении напряжения на вводе.
И получил следующую ситуацию.
Если батарея внутри WB не успела разрядиться сообщения о вкл. и откл. питании на вводе успешно приходят. Если отключить WB так, что батарея разрядится, то пока WB грузится правило не срабатывает, так как вход “wb-gpio/EXT1_IN1” = true уже и не изменяется.
Пытаюсь сделать ориентир на проценты заряда или напряжение батареи, но сообщения “Power ON” не приходят. Получилось получить сообщение “Power ON” после того как батарея зарядилась и “battery/Charging” == false и “wb-gpio/EXT1_IN1” = true.

Вот было ранее описано.
Почему я смотрю скажем на батарею. Пока WB грузится, батарея после полной разрядки начинает заряжается и при достижении ближе к максимуму WB уже загрузился и может отправлять информацию, что напряжение на вводе есть, все нормально.

И опять же я не понимаю.
Состояние “грузится” - это те самые секунд 40-60 с момента включения?

Да, время загрузки контроллера.

Ну и опять не понимаю, что мешает обработать загрузку самого контроллера?

А теперь я не очень понял, что имеется в виду)

Выполнить правило при загрузке. При начале работы.

Эта тема была автоматически закрыта через 7 дней после последнего ответа. В ней больше нельзя отвечать.