Home Assistant, статья 8 (MQTT)

04 ноября 2018, 12:47

Предисловие

Про теорию MQTT брокера можно прочитать в отличной статье нашего коллеги тут. Home Assistant (далее HA) имеет встроенный MQTT брокер, но многие жалуются на его нестабильность и обрезанность, поэтому будем ставить и настраивать альтернативный MQTT брокер Mosquitto.

Установка альтернативного брокера

Для начала необходимо обновить состояние системы до актуальной. Подключаемся к малине по ssh и выполняем следующие команды:

sudo apt-get update
sudo apt-get upgrade

Далее ставим брокер:

sudo apt-get install mosquitto mosquitto-clients

После установки брокера, необходимо защитить его от подписки кого бы то ни было при помощи связки логина пароля, для этого воспользуемся следующей командой:

sudo mosquitto_passwd -c /etc/mosquitto/passwd homeassistant

Далее надо будет ввести два раза пароль по запросу. Эта команда создаст связку логина homeassistant и пароля который вы задали в файле /etc/mosquitto/passwd и теперь нам надо натравить брокер на этот файл и запретить анонимные подключения к нему. Сделаем это так, откроем файл конфига брокера:

sudo nano /etc/mosquitto/conf.d/default.conf

И запишем туда следующие строки:

allow_anonymous false
password_file /etc/mosquitto/passwd

сохраняем файл и перезагружаем брокер командой:

sudo systemctl restart mosquitto

Далее можем проверить, что все настроено правильно. Откроем параллельно два окна терминала и подключимся в обоих к нашей малине по ssh. Далее в одном из них напишем: 

mosquitto_sub -h localhost -t test -u "homeassistant" -P "ваш_пароль"

а в другом:

mosquitto_pub -h localhost -t "test" -m "Test message" -u "homeassistant" -P "ваш_пароль"

после этого в первом терминале мы увидим появившееся сообщение Test message. Если все так - вы все настроили верно! Можно приступать к настройке HA

Настройка стороннего брокера в HA

Открываем основной конфигурированиям HA любым удобным способом и дописываем в конец файла:

mqtt:
  broker: 192.168.1.100
  port: 1883
  client_id: home-assistant-1
  keepalive: 60
  username: !secret mqtt_login
  password: !secret mqtt_password
  protocol: 3.1
  birth_message:
    topic: "tele/hass1/LWT"
    payload: "Online"
    qos: 1
    retain: true
  will_message:
    topic: "tele/hass1/LWT"
    payload: "Offline"
    qos: 1
    retain: true

Разберем по порядку:

  • broker ip адрес брокера в вашем случае IP адрес малины
  • client_id уникальное имя подключающегося клиента
  • keepalive промежуток времени, в через которое клиент будет слать брокеру сообщение "я живой"
  • username имя пользователя для подключения, задавали выше
  • password пароль для подключения к брокеру, так же задали выше
  • protocol версия протокола
  • birth_message/will_message сообщения о доступности/недоступности клиента
  • topic топик в котором размещается сообщение
  • payload текст сообщения
  • qos грубо говоря приоритет сообщения
  • retain будет ли сообщение передано другим клиентам 
Все что мы настроили - касается только информации о статусе самого HA в брокере

Добавляем устройство с MQTT

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

при этом имеем такие топики:

  • tele/sonoff/STATE сюда пишется состояние реле
  • tele/sonoff/LWT, а сюда пишется сообщения "Я живой"

Теперь добавим свитч в HA, для этого в конфиг внесем несколько строчек: 

switch:
  - platform: mqtt
    name: "Ariston"
    state_topic: "stat/sonoff/POWER"
    command_topic: "cmnd/sonoff/POWER"
    availability_topic: "tele/sonoff/LWT"
    qos: 1
    payload_on: "ON"
    payload_off: "OFF"
    payload_available: "Online"
    payload_not_available: "Offline"
    state_on: "ON"
    state_off: "OFF"
    retain: true

так же давайте разберем поподробнее что мы там понаписали:

  • platform ну тут понятно указываем что используем MQTT платформу
  • name название свитча, которое будет отображаться в HA, оно же идет в entity
  • state_topic топик откуда читаем состояние
  • command_topic топик в который будем передавать команды
  • availability_topic топик в котором пишется доступность устройства
  • qos рассматривали выше
  • payload_on сообщение о включении 
  • payload_off сообщение о выключение
  • payload_available сообщение о доступности
  • payload_not_available сообщение о недоступности
  • state_on статус который будет считаться включенным
  • state_off статус который будет считаться выключенным
  • retain рассматривали выше
сохраняем конфиг, проверяем, перезагружаем HA и можем проверить, что реле щелкает при переключении выключателя. Вот в принципе и все!) так же жду ваших вопросов и предложений!


Все новости мира умных домов - t.me/SprutAI_News

Остались вопросы? Мы в Telegram - t.me/soprut

Хочешь умный дом но нет времени разбираться?
Посмотри примеры работ и выбери себе интегратора.
  1. Артем Симоненко (TopGun)
    Артем Симоненко (TopGun) 9 месяцев назад

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

    • Александр Жабунин (OXOTH1K)
      Александр Жабунин (OXOTH1K) 9 месяцев назад

      У меня на данный момент нет таких датчиков, вскоре постараюсь по возможности дополнить

    • Артем Симоненко (TopGun)
      Артем Симоненко (TopGun) отредактировано 9 месяцев назад

      сам спросил сам и отвечу. У меня sonoff th10 с датчиком температуры и влажности AM2301 на прошивке tasmota, ниже рабочий конфиг. Соответственно то, что желтым (topic) у вас может отличаться. 

      2000x2000x_image.jpeg?1541458866
  2. Артем Симоненко (TopGun)
    Артем Симоненко (TopGun) 9 месяцев назад

    Как выдать кнопку xiaomi датчиком движения? Вроде как выдал, отображается как датчик движения но не срабатывает на нажатие. Для этого нужна автоматизация?

  3. Сергей Сафронов (deda)
    Сергей Сафронов (deda) 9 месяцев назад

    Ты очень доступно пишешь, хороший слог

  4. (fox)
    (fox) 7 месяцев назад

    Вопрос по во этому месту

    mqtt:
      broker: 192.168.1.100
      port: 1883
      client_id: home-assistant-1
      keepalive: 60
      username: !secret mqtt_login
      password: !secret mqtt_password
      protocol: 3.1
      birth_message:
        topic: "tele/hass1/LWT"
        payload: "Online"
        qos: 1
        retain: true
      will_message:
        topic: "tele/hass1/LWT"
        payload: "Offline"
        qos: 1
        retain: true

    client_id: home-assistant-1  Это кто?  Сам HomeAssistant?  Если так, то как сам  HomeAssistant узнает что он  home-assistant-1?  Прошу прощения если вопрос глупый но только начал в этом копаться и ничего не ясно пока что)

  5. (idobryak)
    (idobryak) 4 месяца назад

    Если хоум ассистант установлен из докер контейнеров, для того чтоб мкутт мог подключитсья к стороннему серверу нужно ставить мкутт клиент?

  6. (Kostosso)
    (Kostosso) 3 месяца назад


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

    Помогите пожалуйста. Я подумываю мигрировать на HA с Majordomo. 

    Я установил на RPi3  Home Assistant 0.93.1.  dev-False; docker-false; hassio-false.

    Я установил MQTT. и далее начались вопросы :)

    1.Могу ли я установит Hassio (в качестве расширения/дополнения... или мне необходимо устанавливать специализированный образ. Я читал, что с установкой Hassio появляется много удобных сервисов в системе. Можно ли до установить в моём случае?  Стоит ли оно переустановки?)

    У меня есть настроенная система. которую я начал пробывать переносить на HA. Я использовал датчики на ESP подключённые через пошивку wifi-iot непосредственно к Majordomo. 

    2.Подскажите, пожалуйста, какой метод мне теперь лучше использовать для подключения?

    Я стал использовать MQTT. Мне не доводилось вплотную сталкиваться с работой с  MQTT. Отчего возникли сложности. Я не могу связать информер с датчиками.


    Есть Mosquitto. Через mqtt-spy наблюдаю приход данных в топик: ESP/ESP0003/json. 

    Данные вида :"{"system":{"hostname":"ESP0003","uptime":161400,"rssi":-76,"freemem":32328},"sensors":{amt:27.4,amh:21.9},"gpio":{"12":1,"14":0}}". 

    В configuration.yaml прописаны следующие секции:

    1000x_image.png?1558545780

    Так выглядит лог MQTT:

    1000x_image.png?1558545894

    Результат в HAS выглядит так. (вероятно где-то можно увидеть более информативное представление. пока не разобрался...)

    1000x_image.png?1558546399

    3. Скажите, пожалуйста, что я делаю неправильно. Я понимаю, что ошибка детская... но всё же...

    Заранее спасибо. 

    (не ругайте сильно, я только учусь ©)

К списку статей

Похожие статьи

15 ноября 2018, 09:42
Способы автоматизации механических ворот
15 июня 2018, 12:13
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
24 августа 2018, 12:18
Пошаговая установка HomeAssistant
27 августа 2018, 10:14
Интегрируем ХА в HomeKit
04 апреля 2019, 17:48
Расскажу о том за ~1 час перевезти УД с 2мя USB стиками с Raspberry PI на Synology NAS.
01 ноября 2018, 09:27
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
25 ноября 2018, 18:23
Умное зеркало добавляем модули Airplay и Google Calendar
20 октября 2018, 22:57
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
03 октября 2018, 22:03
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
24 августа 2018, 10:15
Краткий экскурс в настройку Home Assistant