Как я могу пробросить устройства на внешний умный дом

Вступление

Что такое внешний умный дом?

Под внешним умным домом понимается, что это может быть какой-то сервер, где крутится умный дом и в нем также стоит MQTT брокер. Для того, чтобы внешний умный дом видел девайсы со шлюза, нужно либо настроить MQTT мост, либо на шлюзе указываем MQTT брокер умного дома.

  • Прямое подключение к MQTT брокеру на шлюзе - на шлюзе стоит локальный MQTT брокер, подключаемся к шлюзу из внешнего сервера или, если на шлюзе стоит платформа умного дома, то подключаемся к локальному MQTT брокеру

  • Прямое подключение к внешнему MQTT брокеру - когда на шлюзе не стоит MQTT брокер и в конфигурационных настройках служб, такие как: zigbee2mqtt, ble2mqtt, lumimqtt указывается IP адрес, порт, логин и пароль от внешнего MQTT брокера

  • MQTT мост - когда на шлюзе стоит MQTT брокер и установленные службы на шлюзе, такие как: zigbee2mqtt, ble2mqtt, lumimqtt, смотрят на локальный MQTT брокер, а сам локальный MQTT брокер подключается к внешнему MQTT брокера


Прямое подключение к MQTT брокеру на шлюзе

Если будем использовать этот вариант, то править конфиги внутренних служб требуется только в том случае, если включили авторизацию на локальном MQTT брокере. По умолчанию доступ к локальному MQTT брокеру для внешних источников закрыт. Чтобы разрешить доступ извне, необходимо добавить строчки

Если доступ без авторизации

listener 1883
allow_anonymous true

Если доступ с авторизацией

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

listener 1883
password_file /etc/mosquitto/passwordfile
  • Если подключаемся к MQTT брокеру с внешнего источника, то указываем IP адрес шлюза, порт и логин\пароль(если включена авторизация)
  • Если подключаемся к MQTT брокеру локально, например на шлюзе стоит Home Assistant и установив клиент MQTT, то указываем localhost и указываем логин\пароль(если включена авторизация)

Прямое подключение к внешнему MQTT брокеру

Для прямого подключения к внешнему MQTT брокеру, необходимо в конфигурации служб, таких, как zigbee2mqtt, lumimqtt, ble2mqtt указать IP и порт от внешнего MQTT брокера, а также, если у вас на внешнем MQTT брокере включена авторизация, то надо указать логин и пароль

Zigbee2mqtt

Для примера рассмотрим настройки в zigbee2mqtt. Настроить можно либо через веб интерфейс, либо в самом configuration.yaml, который находится по пути /etc/zigbee2mqtt/configuration.yaml.

1) Вариант настройки авторизации в веб интерфейсе zigbee2mqtt.

image


2) Вариант настройки в configuration.yaml, который находится по пути /etc/zigbee2mqtt/configuration.yaml.

Для редактирования файла configuration.yaml можете использовать nano в консоли:

nano /etc/zigbee2mqtt/configuration.yaml

Нужно настроить только эти строки, чтобы ваш zigbee2mqtt подключился к внешнему MQTT брокеру. Про настройки и их описание, читаем здесь.

server: mqtt://192.168.1.50:1883
user: укажите логин
password: укажите пароль

Полный конфиг configuration.yaml

homeassistant: true
permit_join: false
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://localhost
  client_id: GateLivinRoom
  keepalive: 60
  reject_unauthorized: false
  version: 4
  user: укажите логин
  password: укажите пароль
serial:
  port: /dev/ttymxc1
  adapter: zigate
advanced:
  baudrate: 115200
  log_level: info
  log_directory: /tmp/log/zigbee2mqtt/%TIMESTAMP%
  log_file: log.txt
  log_rotation: true
  log_output:
    - file
  homeassistant_legacy_entity_attributes: false
  legacy_api: false
  ikea_ota_use_test_url: false
  log_syslog:
    app_name: Zigbee2MQTT
    eol: /n
    host: localhost
    localhost: localhost
    path: /dev/log
    pid: process.pid
    port: 123
    protocol: tcp4
    type: '5424'
  channel: 11
devices: devices.yaml
groups: groups.yaml
frontend:
  port: 8090
experimental:
  new_api: true
device_options:
  legacy: false
availability: true
ota:
  disable_automatic_update_check: true


Lumimqtt

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

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

Стандартная конфигурация lumimqtt

{
    "mqtt_host": "localhost",
    "mqtt_port": 1883,
    "mqtt_user": "",
    "mqtt_password": "",
    "topic_root": "lumi/{device_id}",
    "auto_discovery": true,
    "sensor_retain": false,
    "sensor_threshold": 50,
    "sensor_debounce_period": 60,
    "light_transition_period": 1.0
}

Правим только эти строки. Для редактирования файла lumimqtt.json можете использовать nano в консоли:

nano /etc/lumimqtt.json
    "mqtt_host": "указываем IP адрес внешнего MQTT брокера, например 192.168.1.50",
    "mqtt_port": 1883,
    "mqtt_user": "указываем логин, если включена авторизация",
    "mqtt_password": "указываем пароль, если включена авторизация",

Настройка MQTT моста

Для работы моста необходимо установить пакет mosquitto-nossl. Данный пакет mosquitto-nossl позволяет настроить mqtt мост и авторизацию. У пакета mosquitto-ssl не работает mqtt мост, только авторизация и только как mqtt брокер.

Важно! Если у вас на шлюзе стоят службы zigbee2mqtt, lumimqtt, ble2mqtt и другие, которые работают через MQTT брокер, и вы включили авторизацию, то необходимо в настройках этих службах указать логин и пароль для подключения к локальному MQTT брокеру. По умолчанию у них не указан логин и пароль. Если этого не сделать при включенной авторизации на MQTT брокере, то службы zigbee2mqtt, lumimqtt, ble2mqtt и другие не смогут подключиться к MQTT брокеру и не смогут работать.

Как установить пакет mosquitto-nossl, читаем: Как установить и настроить mosquitto?

Ниже пример рабочего конфига для работы MQTT моста + включена авторизация. Это не эталонная конфигурация и вы можете настроить по своему, ибо в mosquitto.conf есть подробное описание про настройку. Добавлять в mosquitto.conf. Для удобства добавьте в самый вверх. Файлик mosquitto.conf находится по адресу /etc/mosquitto/mosquitto.conf

Важно! Если в конфиге не указать топики, например topic homeassistant/# out, то топиков не будет, кроме служебных топиков $SYS. Поэтому указываете какие топики должны быть добавлены. Сами топики можете посмотреть через MQTT Explorer до того, как включите авторизацию. После включения авторизации впишите эти топики в конфигурационный файлик > mosquitto.conf

Примеры топиков c опцией in/out/both/ . Все опции для одного топика указывать нельзя, что то одно: вход/выход/обе стороны/все топики

topic lumi/# #Все топики
topic lumi/# in #Топики на вход
topic lumi/# out #Топики только на выход
topic lumi/# both #Топики в обе стороны

Важно! Копируйте только строки параметров, комментарии не копируйте. Если вы скопируете все с комментариями, то у вас MQTT брокер не запустится. Также проверяйте, чтобы не было пробелов после конца строк параметра. Ниже. для удобства я выложил конфиг без комментов.

connection Home Assistant                          # Куда подключаемся. Указываем вместо Home Assistant любое имя
address 192.168.1.108:1883                         # Куда подключаемся. Указываем IP и порт своего внешнего сервера
listener 1883                                      # Вкл. просл порта 1883 для шлюза, чтобы мы могли подкл к шлюзу через MQTT Exploer
password_file /etc/mosquitto/passwordfile          # Включаем авторизацию. В файлике passwordfile указываем логин и пароль
allow_anonymous false                              # Запрещаем доступ для анонимного подключения
remote_clientid Gateway                            # Имя подключаемого клиента к MQTT брокеру. В логах MQTT брокеру будет имя подключаемого клиента 
remote_username mqtt                               # Указываем логин от MQTT брокеру к которому мы подключаемся
remote_password mqtt                               # Указываем пароль от MQTT брокеру к которому мы подключаемся
bridge_attempt_unsubscribe true                    # Отказ от подписки после удаления темы
cleansession true                                  # Подписки и сообщения удаляются
start_type automatic                               # MQTT мост запускается автоматически
try_private true                                   # MQTT брокеру будет видеть, что это не просто клиент, а MQTT мост
topic homeassistant/# out                          # Указываем топик homeassistant на выход, чтобы не перегружать шлюз.
topic zigbee2mqtt/# both                           # Указываем топик zigbee2mqtt на обе стороны, тогда HomeAssistant увидит устройства со шлюза
topic lumi/# both                                  # Указываем топик topic lumi на обе стороны, тогда HomeAssistant увидит устройства со шлюза

Для удобства я вывел отдельные строки без комментариев, можете копировать и вставлять сразу в mosquitto.conf находящийся по пути /etc/mosquitto/mosquitto.conf

Вариант 1. Настройка моста с включенной авторизацией для подключения к MQTT на шлюзе

connection Home Assistant
address 192.168.1.108:1883
listener 1883
password_file /etc/mosquitto/passwordfile
allow_anonymous false
remote_clientid Gateway
remote_username mqtt
remote_password mqtt
bridge_attempt_unsubscribe true
cleansession true
start_type automatic
try_private true
topic homeassistant/# out
topic zigbee2mqtt/# both
topic lumi/# both

Вариант 2. Настройка моста с выключенной авторизацией для подключения к MQTT на шлюзе

connection Home Assistant
address 192.168.1.108:1883
listener 1883
allow_anonymous true
remote_clientid Gateway
remote_username mqtt
remote_password mqtt
bridge_attempt_unsubscribe true
cleansession true
start_type automatic
try_private true
topic homeassistant/# out
topic zigbee2mqtt/# both
topic lumi/# both

Как включить авторизацию?

Чтобы включить авторизацию в mosquitto, необходимо добавить следующие строки в конфигурационный файлик mosquitto.conf

Важно! Если у вас, при включенной авторизации и включенным MQTT мостом возникли проблемы при подключении к внешнему MQTT брокеру, например в логах аддона MQTT Home Assistant фиксируются цикличные логи connect и disconnect, то выключите авторизацию и предоставьте доступ для всех allow_anonymous true и закомментируйте #password_file /etc/mosquitto/passwordfile.

Закрываем доступ для всех, доступ только с пароля

allow_anonymous false

Включаем авторизацию. Указываем путь к файлику passwordfile, в котором хранятся логин и пароль

password_file /etc/mosquitto/passwordfile

Создаем файлик passwordfile

touch /etc/mosquitto/passwordfile

В файлик passwordfile добавить логин и пароль в таком виде логин:пароль

mqtt:123456

Команды для управления службой mosquitto

Запустить mosquitto

/etc/init.d/mosquitto start

Остановить mosquitto

/etc/init.d/mosquitto stop

Перезагрузить mosquitto

/etc/init.d/mosquitto restart

Посмотреть статус работы mosquitto

/etc/init.d/mosquitto status

Просмотреть весь список команд mosquitto

/etc/init.d/mosquitto

Источники