Настройка для работы с внешним брокером

Здравствуйте.

У меня настроен mosquito broker на home assistant. Мне необходимо подключить wireboard к этому брокеру. Раньше все настройки делались во вкладке веб интерфейс на контроллере. Сейчас я не вижу поле ввода ip адреса внешнего брокера, есть только логин и пароль. Как мне ввести адрес внешнего брокера.

Добрый день.
Пока я не уверен что понимаю вопрос. Сервисы контроллера всегда работают только с брокером контроллера.
Опишите пожалуйста что хотите настроить.

Здравствуйте.

У меня работает связка wireboard и home assistant. На home assistant установлено дополнение mosquito broker для подключения устройств по mqtt.

На первом своем контроллере wireboard, если я не ошибаюсь, я заходил во вкладку веб интерфейс, там было поле с ip адресом и логин с паролем. Туда я заводил данные своего mosquito broker, ну или быть точнее ip адрес home assistant и логин пароль от mosquito broker. Это было где то летом прошлого года. К контроллеру подключены модули реле. Ну и соответственно после настроек этими реле я могу управлять с home assistant.

Сейчас я приобрёл wireboard, нужна та же связка, что я описал выше. Но во вкладке веб интерфейс нет поля для ввода ip адреса моего home assistant, есть только вкладки логин и пароль.

Каким образом мне сделать, чтоб я управлял модулями реле, подключенных к контроллеру, через home assistant?

Это (был) адрес для подключения веб-интерфейса к брокеру контроллера. Он мог отличаться от того что использовался для веб-игнтерфейса, поскольку использовался другой webсокет.
Никак не мог использоваться для настроек брокера.

У нас поддерживается такой способ.

Понял вас спасибо. Не закрывайте пожалуйста пока запрос. Попробую и напишу.

Здравствуйте. Я не понимаю, где на стороне wireboard прописываются настройки установленного на home assistant mosquito broker

Home assistant установлен на отдельном сервере

Настройте мост на брокере WB к брокеру HA по инструкции, и топики у Вас будут синхронизироваться.

Настройка моста на контроллере
Создайте конфигурацию моста, для этого:

Откройте файл /etc/mosquitto/conf.d/20bridges.conf
nano /etc/mosquitto/conf.d/20bridges.conf
Вставьте в конец файла строки, где 10.0.0.105 — адрес брокера:
connection bridge1
#address of server
address 10.0.0.105
notifications true
notification_topic /clientnotification/bridge1_status
remote_username test
remote_password wbpassword

topic /temp1/# both 0 /devices /controller
Содержимое топика /devices/temp1/# контроллера будет отображаться на брокере в /controller. Вместо /controller можете указать уникальное имя контроллера, например, серийный номер.

Если укажите для синхронизации топиков вот так :

topic +/# both

то все топики на брокерах будут синхронизированы и будут два зеркальных брокера.

Я конечно может ошибаюсь, но на предыдущем контроллере wireboard такой заморочки не было. На стороне HA я установил mosquito broker и прописал свичи, а на стороне контроллера буквально пару настроек сделал. Сейчас предлагается что то посложнее сделать.

Настройка моста на брокере wb делается через консоль?

Если поделитесь методикой - тогда смогу ее оценить. Но за предыдущие лет 6 ничего не менялось.

Да. Тут главное - не сама настройка а точная оценка как будет работать мост в случае если:

  • Брокер-инициатор перезапустится
  • брокер-приемник перезапустится
  • брокер-приемник будет недоступен какое-то время

Ну и мост для интеграции, в общем, не нужен.

Через консоль. Можете скачать файл конфигурации, отредактировать в блокноте и закинуть назад. Можете на брокере HA настроить мост к WB если у Вас стоит полноценный mosquito broker.

Нормально все работает. В HA есть параметр видимости:

availability_topic: "$SYS/broker/connection/raspberrypi.external-bridge/state"
     payload_available: "1"
     payload_not_available: "0"

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

У WB тоже есть статус моста, топик по умолчанию.

/clientnotification/bridge1_status

Чисто для спортивного интереса, поделитесь какие еще есть способы объединить две разные системы каждый со своим брокером MQTT?

Когда-то пробовал.
Но роль “моста”, выполнял python скрипт, который подписывался на оба брокера и перепубликовывал указанные топики.
На практике достаточно моста для “homeassistant/#” и на контроллере сразу публиковать в него autodiscovery.
Вот как

log.info("Light2HA: запуск");

var HA_BASE = "homeassistant";

/**
 * Регистрирует источник света в Home Assistant через MQTT Discovery.
 *
 * Маршруты синхронизации:
 *   HA → Контроллер:
 *     HA публикует "1"/"0" в command_topic (/devices/.../controls/.../on).
 *     WirenBoard обрабатывает это нативно и обновляет состояние устройства.
 *     Правило ha2wb_* перехватывает смену состояния и позволяет добавить логику.
 *
 *   Контроллер → HA:
 *     Правило wb2ha_* следит за топиком WB и публикует состояние в state_topic.
 *     HA читает state_topic и отображает актуальное состояние.
 *
 * @param {string} lightName  - Отображаемое имя в Home Assistant
 * @param {string} wbTopic    - Топик WB в формате "устройство/контрол"
 *                              Например: "wb-gpio/EXT1_R3A"
 * @param {string} uniqueId   - Уникальный ID (только латиница, цифры, _)
 * @param {string} [suggestedArea] - Рекомендуемая зона/помещение в HA (опционально)
 */
function registerLight(lightName, wbTopic, uniqueId, suggestedArea) {
  var parts   = wbTopic.split("/");
  var device  = parts[0];
  var control = parts[1];

  // MQTT-пути WirenBoard
  var wbStatePath   = "/devices/" + device + "/controls/" + control;
  var wbCommandPath = wbStatePath + "/on";
  var wbErrorCell   = wbTopic + "#error";

  // Топики Home Assistant
  var haAvailTopic  = HA_BASE + "/light/" + uniqueId + "/availability";
  var haConfigTopic = HA_BASE + "/light/" + uniqueId + "/config";

  // --- 1. MQTT Discovery ---
  // Используем нативные пути WB: HA читает и пишет напрямую в MQTT-брокер контроллера.
  var config = {
    name:               lightName,
    command_topic:      wbCommandPath,  // HA пишет "1" или "0" сюда
    state_topic:        wbStatePath,    // HA читает актуальное состояние отсюда
    payload_on:         "1",
    payload_off:        "0",
    state_on:           "1",
    state_off:          "0",
    availability_topic: haAvailTopic,
    unique_id:          uniqueId,
    device: {
      identifiers:  [uniqueId],
      name:         lightName,
      manufacturer: "WirenBoard",
      model:        "MQTT Light"
    }
  };

  // suggested_area добавляем только если параметр задан и не пустой
  if (typeof suggestedArea === "string" && suggestedArea.trim() !== "") {
    config.device.suggested_area = suggestedArea.trim();
  }

  // Публикует availability по содержимому meta/error:
  // пусто -> online, непусто -> offline
  function publishAvailability(errorValue) {
    var hasError = (errorValue !== undefined &&
                    errorValue !== null &&
                    String(errorValue).trim() !== "");
    publish(haAvailTopic, hasError ? "offline" : "online", 1, true);
  }

  // retain=true гарантирует, что HA получит конфиг и доступность при переподключении
  publish(haConfigTopic, JSON.stringify(config), 1, true);
  publishAvailability(dev[wbErrorCell]);

  log.info("Light2HA: зарегистрирован [" + lightName + "]" +
           " | WB: " + wbTopic +
           " | HA id: " + uniqueId);

  // --- 2. Контроллер → HA: availability по meta/error ---
  defineRule("wb2ha_avail_" + uniqueId, {
    whenChanged: wbErrorCell,
    then: function (newError) {
      publishAvailability(newError);
      if (newError !== undefined && newError !== null && String(newError).trim() !== "") {
        log.warning("Light2HA: [availability] " + lightName + " -> offline | error: " + newError);
      } else {
        log.info("Light2HA: [availability] " + lightName + " -> online");
      }
    }
  });

  // --- 3. Контроллер → HA: при изменении состояния на WB ---
  // Срабатывает при любом изменении: физический выключатель, автоматизация WB,
  // а также как результат команды от HA (после обработки WB).
  defineRule("wb2ha_light_" + uniqueId, {
    whenChanged: wbTopic,
    then: function (newValue, devName, cellName) {
      var state = newValue ? "1" : "0";
      log.debug("Light2HA [wb→ha] " + lightName + " = " + state);
      // Публикуем явно — на случай, если HA потерял retain-сообщение
      publish(wbStatePath, state, 0, true);
    }
  });

  // --- 4. HA → Контроллер: при получении команды от HA ---
  // HA пишет в wbCommandPath (/on), WB обрабатывает нативно.
  // Правило добавляем для кастомной логики (логирование, сцены и т.п.).
  defineRule("ha2wb_light_" + uniqueId, {
    whenChanged: wbTopic,
    then: function (newValue, devName, cellName) {
      log.debug("Light2HA [ha→wb] " + lightName +
                " | устройство: " + devName +
                " | канал: " + cellName +
                " | значение: " + newValue);
      // Место для дополнительной логики: сцены, уведомления, зависимые устройства
    }
  });

  // Публикуем текущее состояние сразу при запуске скрипта
  publish(wbStatePath, dev[wbTopic] ? "1" : "0", 0, true);
}


// ============================================================
// Регистрация источников света
// Формат: registerLight("Название в HA", "устройство/канал", "уникальный_id", "помещение")
// "устройство/канал" — как в топике /devices/{устройство}/controls/{канал}
// ============================================================

// registerLight("Свет в коридоре", "wb-gpio/EXT1_R3A", "light_corridor");
// registerLight("Свет на кухне",   "wb-gpio/EXT1_R3B", "light_kitchen");
// registerLight("Подсветка",       "wb-gpio/EXT2_R1A", "light_backlight");
registerLight("свет",       "2fl_light_0/K5", "WorkChamber", "Кабинет");
registerLight("свет",       "2fl_light_0/K6", "Bedroom_light", "Спальня");
registerLight("свет",       "2fl_light_0/K6", "Storage_light", "Кладовка");

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

Вопрос был как на физическом уровне объединить два разных брокера? У WB свой брокер, у НA свой брокер, как кроме моста сделать что бы они виделись между собой? Я об этом. У автора темы я так понимаю что именно такая реализация.

Если на HA свой брокер - то “в лоб” мостом,да. Поскольку стандартная MQTT интеграция HA не умеет в два брокера.

Вот об этом и речь. Решение проблемы автора, это настроить мост. Я так понимаю что автор заблуждается, в том что раньше WB можно было настроить на работу с другим брокером через Web ?

Да, верно. Такой настройки не было никогда. Можно было настроить веб-интерфейс на работу с другим (другого контроллера). То есть сам интерфейс грузится с одного (даже не с контроллера, в принципе) но управляет брокером другого контроллера. после того как для работы mqtt канала интерфейса стал использоваться тот же http порт - от этого отказались.

Спасибо за информацию, буду пробовать

Пробуйте, по другому никак не связать. Сложного ничего в этом нет.

Если есть возможность, то в НА установите полноценный брокер и его подключите мостом к WB. Это 100% надежное и рабочее решение. Плюс такого решения в том, что при отключении моста в HA можно все устройства с WB переводить в состояние недоступные просто проверкой соединения моста.