Импульсное реле

Как при помощи реле WBIO-DO-SSR-8 реализовать аналог импульса, чтобы был эффект такой же как при нажатии обычной кнопки.

Мне нужно реле для управления откатными воротами.
На блоке управления есть 4 группы контактов, которые реагируют на простое замыкание.
Сейчас я к нему подключил простой пульт с импульсными кнопками и всё работает без проблем.
Управление с реле WBIO-DO-SSR-8 получается какое-то странноватое, то сработает, то нет. Я думаю это из-за того, что вместо импульса реле держит замыкание.
Есть у вас импульсное реле или модуль с дискретными выходами для этой цели?
Или может реле подходящее можете посоветовать?
Или как-то программно можно вопрос решить?

Сделайте правило на wb-rules и виртуальное устройство. При нажатии switch в виртуальном устройстве в событии whenChanged добавьте установку нужного вам выхода на SSR и SetTimeout с необходимой длительностью в котором будет отключение нужного вам канала.

UPD:

defineVirtualDevice("device_gates1", {
  title:  "device_gates1",
  cells: {
    open: {
      title: "open",
      type: "switch",
      readonly: false,
      value: false
    },
    close: {
      title: "close",
      type: "switch",
      readonly: false,
      value: false
    }
};

defineRule("rule_gates1_open", {
  whenChanged: "wb-gpio/A1_OUT",
  then: function() {
      dev["wb-gpio/A1_OUT"]=true;
      setTimeout(function (){
        dev["wb-gpio/A1_OUT"]=false;
      }, 1000);
      }
});
defineRule("rule_gates1_close", {
  whenChanged: "wb-gpio/A2_OUT",
  then: function() {
      dev["wb-gpio/A2_OUT"]=true;
      setTimeout(function (){
        dev["wb-gpio/A2_OUT"]=false;
      }, 1000);
      }
});

Соответственно подставьте свои названия топиков и нужную длительность “импульса”.

1 лайк

Не срабатывает.
Нажимаю кнопку включения реле, но в топике через секунду значение не сбрасывается в ноль.
вот видео

В примере я неправильно указан название топика в whenChanged, я предполагал что там будет указан контролл виртуального устройства. В вашем случае событие изменения происходит каждый раз и похоже что правило “зацикливается” т.к. при установке false через 1 сек, опять вызывается правило и значение опять устанавливается в true.

Если вы хотите на данный выход приладить только такой функционал, то пробуйте что-то подобное:

defineRule("rule_gates_open", {
    whenChanged: "wb-mr6cv3_13/K1",
    then: function (newValue, devName, cellName) {
        if (newValue == true) {
          dev["wb-mr6cv3_13/K1"]=true;
          setTimeout(function (){
            dev["wb-mr6cv3_13/K1"]=false;
          }, 50);
        }
    },
});

Ничего не работает.

В home assistant я сделал кнопку

home-assistant\config\entities\switches\MSK\gateOpen.yaml

name: "Открыть ворота"
icon: mdi:boom-gate-arrow-up
state_topic: "/MSK/devices/gate/controls/open"
command_topic: "/MSK/devices/gate/controls/open"
qos: 0
payload_on: 1
payload_off: 0
optimistic: false
retain: true

разместил её на экране ui-lovelace.yaml

          - type: button
            tap_action:
              action: toggle
            entity: switch.otkryt_vorota

\etc\wb-rules\gate.js

var timeout = 1000 
var OpenButtonTopic =  '/MSK/devices/gate/controls/open'
var OpenRelayTopic =   '/MSK/devices/wb-mio-gpio_176:1/controls/K1'



defineVirtualDevice("gate", { //создаём виртуальное устройство
    title: "Gate", //имя вирт устройства
    cells: { 
        open: {
            title: "Открыть", 
            type: "switch",
            readonly: false,
            value: false
        },      
    }
});


defineRule("GateOpen", {
  whenChanged: OpenButtonTopic,
  then: function(newValue, devName, cellName) {
    if (newValue == true){
      dev[OpenRelayTopic] = true;
      setTimeout(function () {
        dev[OpenRelayTopic] = false;
      }, timeout);
    }
  }
});

При нажатии на кнопку в HA реле переключается, но таймаут потом не срабатывает. Реле не отключается через 1 секунду.

Меня смущает имя топика которые вы используете. Я бы для начала попробовал все только на стороне WB. И имена топиков задавал бы “коротким” без “devices” и “controls”. Так “wb-mio-gpio_176:1/K1”.

Разницы никакой - вот видео

Есть 3 момента, которые меня смущают

  1. При нажатии на кнопку в HA вообще никогда не меняется статус топика gate/open. Он всегда равен нулю, хотя при этом видно, что реле включается. Это очень странно.
  2. Если нажать кнопку НА, то она загорается жёлтой, в MQTT explorer видно true в топике и если в этот момент в виджете WB выключить реле К1, то в топике /devices/wb-mio-gpio_176:1/controls/K1 значение остаётся true.
    Оно переходит в false только после ещё одного цикла переключения реле в виджете WB.
  3. Ну и самое главное - timeout не работает.

Боюсь, тут мало специалистов именно по HA.

Пожалуйста опиште более подробно. Что и в какой топик (на контрллере) пишете, какого результата ожидаете. Какой получаете.

Почему считаете что запись не в топик /on (в топик текущего состояния) должна вызывать срабатывание?

Давайте какой-то минимальный скрипт для воспроизведения.

Вы пробовали правило в таком виде?

defineRule("rule_gates_open", {
    whenChanged: "wb-mio-gpio_176:1/K1",
    then: function (newValue, devName, cellName) {
        if (newValue == true) {
          dev["wb-mio-gpio_176:1/K1"]=true;
          setTimeout(function (){
            dev["wb-mio-gpio_176:1/K1"]=false;
          }, 500);
        }
    },
});

В таком виде всё работает и получается, что никакие виртуальные устройства не нужны.

Виртуальное устройство может потребоваться когда вы захотите на одном реле делать импульсы разной длительности.

Здравствуйте.
Остались ли у вас еще вопросы по заявленной теме?

Здравствуйте. Да есть.
Я немного изменил скрипт, чтобы он был компактнее и отправлял уведомления в телеграм.

var timeout = 100
gateTopics = ["wb-mio-gpio_176:1/K1", "wb-mio-gpio_176:1/K2", "wb-mio-gpio_176:1/K3", "wb-mio-gpio_176:1/K4"]
gateNames =  ["открыть ворота",       "закрыть ворота",       "SBS ворота",           "остановить ворота",]

defineRule("GateControl", { 
  whenChanged: gateTopics,
  then: function (newValue, devName, cellName) {
    var index = gateTopics.indexOf(devName + '/' + cellName);
    if (newValue == true) {
      dev[gateTopics[index]]=true;
      setTimeout(function (){
        dev[gateTopics[index]]=false;
      }, timeout);
    }

    SendTelegramMsg('Нажата кнопка ' + gateNames[index]);

  }
});

Кнопка открыть при повторном замыкании останавливает ворота, а следующее замыкание опять запускает открывание и так далее.
Кнопка закрыть работает так же.
Сигналы со стационарного пульта рядом с воротами отрабатывают мгновенно, а вот программные кнопки WB имеют какую-то задержку. При первом нажатии эта задержка особо не чувствуется, а вот при повторных нажатиях она ощущается очень сильно.
При этом я не понимаю логики этой задержки. То есть уведомление в телеграм мне уже пришло, а к воротам сигнал доходит заметно позднее. Можно увеличить скорость реакции?

Представленное выше правило работает следующим образом: при включении реле K1, K2 или K3 оно выключается через время timeout.

Опишите подробнее, что за программные кнопки. Переключатели реле из веб-интерфейса устройства? Т.е. при нажатии переключателя в веб-интерфейсе модуль реле не сразу замыкает контакт?
Уточните, что замыкаете с помощью модуля реле? Характеристики коммутируемой нагрузки.

Сейчас проверил ещё раз - вроде нормально всё работает. Наверное показалось.

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