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

4 нояб. 2018 г.

Предисловие

Про теорию 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 и можем проверить, что реле щелкает при переключении выключателя. Вот в принципе и все!) так же жду ваших вопросов и предложений!


Мы в Telegram - t.me/soprut
  1. (TopGun) 3 месяца назад

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

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

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

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

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

      2000x2000x_image.jpeg?1541458866
  2. (TopGun) 3 месяца назад

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

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

      Смотря что вы хотите сделать.

      • (TopGun) 3 месяца назад

        Хочу чтоб кнопка имитировала датчик движения при ее нажатии, и потом перебросит в homekit. 

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

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

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

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

    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?  Прошу прощения если вопрос глупый но только начал в этом копаться и ничего не ясно пока что)

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

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

15 нояб. 2018 г.
Способы автоматизации механических ворот
15 июн. 2018 г.
Охранная система в гараж на ESP8266 с интеграцией в Apple HomeKit
27 авг. 2018 г.
Интегрируем ХА в HomeKit
24 авг. 2018 г.
Пошаговая установка HomeAssistant
25 нояб. 2018 г.
Умное зеркало добавляем модули Airplay и Google Calendar
1 нояб. 2018 г.
Настройка Deconz USB стика ConBee от Dresden Elektronik в Hass.io и некоторые особенности эксплуатации
3 окт. 2018 г.
Как собрать и настроить Hyperion Ambilight - адаптивную подсветку ТВ.
24 авг. 2018 г.
Краткий экскурс в настройку Home Assistant
20 окт. 2018 г.
Теоретические основы протокола MQTT и описание того, как он работает и для чего используется
14 сент. 2018 г.
Изучаем автоматизации в Home Assistant