Skip to content

MQTT LWT последнее состояние

DivanX10 edited this page Nov 15, 2021 · 9 revisions

Вступление

Last Will and Testament feature of MQTT, что в переводе "Последняя воля и завещание". Для чего это нужно? Данная функция нужна для уведомления других клиентов о том, что клиент отключен. Причина может быть любая: выключен MQTT брокер, девайс отвалился от сети, у шлюза отвалился WiFi. Благодаря такой функции LWT вы можете знать текущее состояние устройства или MQTT брокера.

Общие сведения

Опытным путем выявлено, что MQTT мост может передавать актуальные статусы offline\online (zigbee2mqtt/bridge/state = offline\online) только в том случае, если шлюз включен, а также может передавать актуальные статусы девайсов (zigbee2mqtt/FRIENDLY_NAME/availability = offline\online), когда шлюз работает и MQTT брокер запущен.

Если шлюз будет обесточен, то MQTT мост не сможет передать актуальный статус offline\online (zigbee2mqtt/bridge/state = offline\online), а также не передаст текущий статус девайсов (zigbee2mqtt/FRIENDLY_NAME/availability = offline\online)

В таком случае есть специальная служебная информация (SYS/broker/connection/#), которая следит за состоянием соединения. Если значение равно 1, соединение активно, если 0, то оно неактивно.

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

В моем варианте выступает Home Assistant, где я буду использовать два сенсора: RestFull и mqtt сенсор (SYS/broker/connection/#). Зачем два сенсора? Все дело в том, что если на шлюзе MQTT брокер будет выключен, то статусы MQTT моста offline\online (zigbee2mqtt/bridge/state = offline\online) прилетят на второй MQTT и Home Assistant отобразит, что девайсы не доступны, но если шлюз полностью обесточен, то статусы MQTT моста offline\online (zigbee2mqtt/bridge/state = offline\online) не прилетят на второй MQTT брокер и второй MQTT брокер не будет знать, что первый MQTT брокер (шлюз) выключены, он покажет статус online. Чтобы решить данную проблему, необходимо задействовать RestFull, который будет следить за состоянием любого сенсора и который выберем мы для отслеживания. Если SYS/broker/connection = 0 и RestFull сенсор будет недоступным, то сработает автоматизация, которая пошлет топик zigbee2mqtt/bridge/state = offline, тогда Home Assistant отобразит, что девайсы не доступны

broker connection

Примеры

Сенсоры

Пример сенсора, который следит за MQTT Broker и за Home Assistant. Это нужно для автоматизации. Если шлюз будет обесточен и оба сенсора будут иметь значение off, то будет статус "Выключен". В таком случае сработает триггер и отправится топик, который выставит статус MQTT брокера в offline и тогда Home Assistant отобразит, что девайсы не доступны. Как настроить работу RESTFull сенсора и как работает автоматизация, читаем здесь

binary_sensor:
  - platform: mqtt
    name: "MQTT Broker connection GateLivingRoom"
    state_topic: "$SYS/broker/connection/GateLivingRoom/state"
    payload_on: 1
    payload_off: 0


  - platform: rest
    resource: http://192.168.1.20:8123/api/states/binary_sensor.ping_gatelivingroom
    name: "rest ping GateLivingRoom"
    force_update: true
    headers:
      authorization: !secret token_rest_ping_gatelivingroom
      content-type: 'application/json'
    value_template: "{{ value_json.state }}"
    device_class: connectivity


sensor:
  - platform: template
    sensors:
      gatelivingroom_status:
        friendly_name: "Статус шлюза в Гостиной"
        value_template: >
           {% set ping = states('binary_sensor.rest_ping_gatelivingroom') %}
           {% set mqtt_broker = states('binary_sensor.mqtt_broker_connection_gatelivingroom') %}
           {% if ping == 'on' and mqtt_broker == 'on' %} В сети
           {% elif ping == 'on' and mqtt_broker == 'off' %} Home Assistant
           {% elif ping in ('unknown', 'unavailable') and mqtt_broker == 'on' %} MQTT
           {% elif ping in ('unknown', 'unavailable') and mqtt_broker == 'off' %} Выключен
           {% endif %}
        icon_template: >
           {% set ping = states('binary_sensor.rest_ping_gatelivingroom') %}
           {% set mqtt_broker = states('binary_sensor.mqtt_broker_connection_gatelivingroom') %}
           {% if ping in ('unknown', 'unavailable') and mqtt_broker == 'off' %} mdi:server-network-off
           {% else %} mdi:server-network
           {% endif %}
        attribute_templates:
          MQTT Broker: "{{ states('binary_sensor.mqtt_broker_connection_gatelivingroom') }}"
          Ping: "{{ states('binary_sensor.rest_ping_gatelivingroom') }}"

Автоматизация

alias: 'Шлюз в гостиной: Шлюз обесточен. Статус MQTT брокера OFFLINE'
description: ''
trigger:
  - platform: state
    entity_id: sensor.gatelivingroom_status
    to: Выключен
condition: []
action:
  - service: mqtt.publish
    data:
      topic: zigbee2mqtt_gatelivingroom/bridge/state
      payload: offline
  - service: notify.notify
    data:
      title: '*Шлюз в гостиной*'
      message: Шлюз вероятно завис или обесточен. Требуется проверка
mode: single

Литература

FAQ Обновление\даунгрейд OpenWRT
FAQ Общее
  1. Как установить OpenWRT на шлюз?
  2. В чем разница между Aqara ZHWG11LM и Xiaomi DGNWG05LM?
  3. Какой шлюз я могу взять, чтобы залить OpenWRT?
  4. Как сделать сброс шлюза до заводского состояния?
  5. Если сбросил шлюз к заводским настройкам, нужно ли делать Erase PDM?
  6. При установке базовых пакетов возникают ошибки
  7. У меня не ставятся пакеты или установились не все пакеты
  8. Как настроить Music Player Daemon?
  9. Как настроить lumimqtt?
  10. Как обновить версию OpenWRT с 21.02 до .... ?
  11. Подключаем Яндекс диск (Webdav)
  12. Как обновить шлюз прошивкой squashfs sysupgrade.bin?
  13. Делаем резервное копирование на NAS Synology
  14. Подключаем USB накопитель для расширения памяти
  15. При загрузке, светодиод шлюза горит белым цветом
  16. Подключаемся к шлюзу через Total Commander
FAQ MQTT
  1. Как я могу пробросить устройства на внешний умный дом?
  2. Как установить и настроить mosquitto? Зачем это нужно?
  3. Установил mosquitto, а подключиться через MQTT Explorer к mqtt не могу
  4. Как настроить mqtt мост?
  5. MQTT LWT последнее состояние
FAQ Zigbee
  1. Какие устройства zigbee я могу добавить в шлюз?
  2. Где взять прошивки для модуля Zigbee?
  3. ZHA. Какую прошивку ставить?
  4. Установил zigbee2mqtt. Не работает веб страница zigbee2mqtt
  5. Ведение журнала отладки Zigbee herdsman. Как получить лог Zigbee herdsman?
  6. Как шлюз перевести в режим роутера или в режим координатора?
  7. Устройства Zigbee часто отваливаются
  8. Чем отличается Erase PDM от Soft reset?
  9. Как перепрошить чип ZigBee?
  10. Делаем бэкап zigbee2mqtt
  11. Обновляем zigbee2mqtt
FAQ LuCI
  1. Как вывести терминал в веб интерфейс LuCI
FAQ Bluetooth для Xiaomi DGNWG05LM
  1. Подключаем к шлюзу телефон через bluetooth
FAQ HomeAssistant
  1. Cкрипты для установки и удаления Home Assistant, а также создания бэкапа находятся здесь
  2. Как установить недостающий компонент для интеграции Home Assistant?
  3. Как установить интеграцию Passive BLE Monitor?
  4. Как установить интеграцию HASS Configurator?
  5. Как добавить интеграцию TTS Яндекс
  6. Альтернатива HACS. Загружаем или обновляем интеграции автоматически
  7. Мониторинг папок для бэкапа и не только
  8. System Monitor - мониторим шлюз
  9. Как подключиться к внешней базе MariaDB?
  10. Home Assistant на шлюзе не запускается
Сборки
  1. Сборки в виде бэкапов
  2. Компиляция пакетов для OpenWRT
  3. Собираем свой бэкап
Ссылки на различные проекты для OpenWRT
FAQ Perenio
Видео инструкции
Контакты
Clone this wiki locally