WBMZ4-BATTERY питать исключительно WirenBoard

Добрый день! Можно ли настроить WBMZ4-BATTERY так, чтобы при переходе на питание от аккумулятора он обеспечивал энергией только контроллер WirenBoard версии 7.3, без подачи питания на выходы Vout и 5Vout? GSM-модуль не используется. У меня подключено много внешних модулей, которые получают питание через шину RS-485 (питается через Vout), поэтому важно избежать их питания от аккумулятора.
Интересует возможность аппаратного или программного отключения этих выходов. Если это возможно, подскажите, как правильно реализовать такую настройку, и как это может повлиять на работу самого контроллера. Заранее спасибо!

Добрый день.
Да, можно, описать отключение V_out и +5V при переходе на питание от АКБ.
Естественно - если нагрузка подключенная к клеммам в пределах нагрузочной способности модуля WBMZ. Если она выше - то использовать эти клеммы нецелесообразно.
Какой расчетный ток потребляется?

Расчетный ток потребителей в разы превышает нагрузочную способность модуля WBMZ. Я понял - rules просто не успеет сработать. Однако стоит и внешний ИБП. У внешнего ИБП с нагрузкой все в порядке, он способен питать всю систему порядка 4 х часов. Но, порой и этого времени недостаточно, так работают у нас эл сети. Вот и хотелось, чтобы когда уже все ляжет - WirenBoard продолжал работать.

Да, может (есть вероятность) и не успеть.
Советую в таком случае питать то, чему не нужно непрерывное питание - прямо от БП.

Может кто помочь, есть у кого отработанный код (рулес)? ИБП 12 Вольт.
Логика примерно такая:
*** >= 21 В: считаем, что питание пришло в норму (24 В) от БП, сбрасываем таймер и включаем выход V_OUT.
*** (12 В … 13 В): работаем от аккумулятора (ИБП), если таймер не запущен — запускаем (3 часа). По истечении этого времени отключаем выход V_OUT.
*** < 11.5 В: немедленно отключаем V_OUT, потому что напряжение критически низкое.
*** нужно учесть повторное включение выключение ИБП

вот тут есть инструмент - сможете сами накидать себе правило
http://yaabutorin.temp.swtest.ru/editor

2 лайка

При выключении (в тч рулисом) Vout - WBIO-DO-SSR-8 будет продолжать работать от контроллера?

Есть какой-нибудь негатив или подводные камни, когда контроллер будет работать, а внешние устройства подключенные через Vout временно будут отключены (пока работает ИБП, нет 220 В в доме)? Ну не сработают реле (норм открытые) на открытие гаражных ворот - так двигатель ворот и так будет обесточен (работают при замкнутом реле) . Не буду знать температуру для работы реле электр теплого пола, так полы и так будут обесточены (норм открытые реле). Чего я могу не учесть?
Контроллер “понимает”, что устройства временно недоступны, чтобы избежать перегрузки сети или ошибок?

GPT предложил (устройства на /dev/ttyRS485-1 и /dev/ttyMOD1 - их мне и нужно временно перестать опрашивать) след код:

// Пороговые значения напряжения
var MIN_VOLTAGE = 12; // Минимальное напряжение (12 В)
var MAX_VOLTAGE = 22; // Максимальное напряжение (22 В)

// Переменная для хранения текущего состояния опроса
var pollingEnabled = true;

// Правило для управления опросом устройств на интерфейсах RS-485 и MOD1
defineRule("control_polling_based_on_vin", {
    when: cron("@every 5s"), // Проверяем напряжение каждые 5 секунд
    then: function () {
        var voltage = parseFloat(dev["power_status/Vin"]); // Читаем напряжение из Vin

        if (voltage < MIN_VOLTAGE && pollingEnabled) { // Если напряжение ниже 12 В и опрос ещё включён
            log("Voltage is below " + MIN_VOLTAGE + "V (" + voltage.toFixed(2) + "V). Disabling polling...");
            
            // Отключаем все устройства на /dev/ttyRS485-1
            runShellCommand("wb-mqtt-confed set -o modbus:ttyRS485-1 enabled false");
            
            // Отключаем все устройства на /dev/ttyMOD1
            runShellCommand("wb-mqtt-confed set -o modbus:ttyMOD1 enabled false");
            
            pollingEnabled = false; // Обновляем состояние
        } else if (voltage > MAX_VOLTAGE && !pollingEnabled) { // Если напряжение выше 22 В и опрос отключён
            log("Voltage is above " + MAX_VOLTAGE + "V (" + voltage.toFixed(2) + "V). Enabling polling...");
            
            // Включаем все устройства на /dev/ttyRS485-1
            runShellCommand("wb-mqtt-confed set -o modbus:ttyRS485-1 enabled true");
            
            // Включаем все устройства на /dev/ttyMOD1
            runShellCommand("wb-mqtt-confed set -o modbus:ttyMOD1 enabled true");
            
            pollingEnabled = true; // Обновляем состояние
        } else {
            log("Voltage is within non-critical range (" + voltage.toFixed(2) + "V). No changes to polling.");
        }
    }
});

насколько помню - “when: cron(”@every 5s"), // Проверяем напряжение каждые 5 секунд" точно не прокатит.

Может кто помочь в написании верного кода?

GPT предложил изменить на:

// Пороговые значения напряжения
var MIN_VOLTAGE = 12; // Минимальное напряжение (12 В)
var MAX_VOLTAGE = 22; // Максимальное напряжение (22 В)

// Переменная для хранения текущего состояния опроса
var pollingEnabled = true;

// Правило для управления опросом устройств на интерфейсах RS-485 и MOD1
defineRule("control_polling_based_on_vin", {
    whenChanged: "power_status/Vin", // Подписка на изменения значения напряжения
    then: function (newValue) {
        var voltage = parseFloat(newValue); // Читаем новое значение напряжения

        if (voltage < MIN_VOLTAGE && pollingEnabled) { // Если напряжение ниже 12 В и опрос ещё включён
            log("Voltage is below " + MIN_VOLTAGE + "V (" + voltage.toFixed(2) + "V). Disabling polling...");
            
            // Отключаем все устройства на /dev/ttyRS485-1
            runShellCommand("wb-mqtt-confed set -o modbus:ttyRS485-1 enabled false");
            
            // Отключаем все устройства на /dev/ttyMOD1
            runShellCommand("wb-mqtt-confed set -o modbus:ttyMOD1 enabled false");
            
            pollingEnabled = false; // Обновляем состояние
        } else if (voltage > MAX_VOLTAGE && !pollingEnabled) { // Если напряжение выше 22 В и опрос отключён
            log("Voltage is above " + MAX_VOLTAGE + "V (" + voltage.toFixed(2) + "V). Enabling polling...");
            
            // Включаем все устройства на /dev/ttyRS485-1
            runShellCommand("wb-mqtt-confed set -o modbus:ttyRS485-1 enabled true");
            
            // Включаем все устройства на /dev/ttyMOD1
            runShellCommand("wb-mqtt-confed set -o modbus:ttyMOD1 enabled true");
            
            pollingEnabled = true; // Обновляем состояние
        } else {
            log("Voltage is within non-critical range (" + voltage.toFixed(2) + "V). No changes to polling.");
        }
    }
});

Может кто за вознаграждение помочь?

Да, будет. Питание на WBIO программно не отключается.

Нет, кроме сообщений в лог о недоступности устройства.

Да, это описано в GitHub - wirenboard/wb-mqtt-serial: Wiren Board MQTT serial protocol driver

1 лайк

Я правильно понял, что в моем случае, в рулисе проще сделать выключение Vout и это будет норм, чем выключать опрос устройств на интерфейсах /dev/ttyRS485-1 и dev/ttyMOD1?

Выключение опроса - никак не повлияет на потребление устройст. Ну, на несколько процентов уменьшит, конечно. Но не выключит.

1 лайк

Не знаю как в Вашем ИБП, но очень нередко они имеют контроль уровня заряда.

При достижении установленного порога, скажем, процентов 10, умеет извещать питаемое устройство о критически низком уровне заряда. И тогда уже питаемое устройство принимает решение - снизить потребление, корректно остановиться или еще что-то (например, запустить генератор).

Не подскажите что-то из бюджетных и надежных, чтобы WB мог читать уровень заряда?

Написал и проверил (работает для моего случая) код:

var TITLE = "Правило выключения выходов V_OUT и 5V_OUT при падении напряжения"
var VIN_ADDR = "power_status/Vin" // Текущее напряжение питания WirenBoard
var V_OUT = "wb-gpio/V_OUT"       // Состояние выхода питания V_OUT - питание устройств по шине RS-485 (модули и реле)
var V5_OUT = "wb-gpio/5V_OUT"      // Состояние выхода питания V_5 - питание устройств по WARE (датчики температуры)


/**
 * Включает или выключает выходы в зависимости от напряжения питания.
 * 
 * - Если напряжение менее или равно 10 В, выходы выключаются.
 * - Если напряжение больше или равно 22 В, выходы включаются.
 * - В промежутке между 10 и 22 В ничего не происходит.
 *
 * vin - Текущее напряжение питания.
 */

defineRule(TITLE, {
  whenChanged: VIN_ADDR,
  then: function(vin) {
    if (vin <= 10) {          // Выключаем выходы при низком напряжении
      dev[V_OUT] = false;
      dev[V5_OUT] = false;
    } else if (vin >= 22) {   // Включаем выходы при напряжении выше 22 Вольт
      dev[V_OUT] = true;
      dev[V5_OUT] = true;
    }
    
  }
});

1 лайк

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

1 лайк

Теперь думаю, стоит ли мне устанавливать WBMZ4-BATTERY (уже куплен)? Устройство автоматически включается при снижении напряжения ниже 11 В. Получается, что оно и ИБП будут работать одновременно при напряжении, начиная с уровня ниже 11 В. Вопрос: даст ли это какое-либо преимущество в моём случае (рулисе)? На каком-то этапе оба устройства будут одновременно обеспечивать питание вплоть до 10 В (как предусмотрено в рулисе), пока рулис не отключит Vout.
Возможно ли настроить автоматику срабатывания WBMZ4-BATTERY так, чтобы она включалась при напряжении ниже 10 В?

P.S. После пропажи основного питания мой ИБП сначала выдаёт 11,2 В (из-за высокой нагрузки), затем быстро просаживается до 10,5 В и продолжает работать несколько часов, постепенно теряя напряжение до 9 В, после чего выключается.

От цели зависит, в общем. У меня, напрмер, WBMZ - это уже последний источник, на котором контроллер работает после источщения основного ИБП.

Нет, этот порог - аппаратный и не настраивается.

1 лайк