Сделать стартовойДобавить в закладки  
Главная страничка Главная страничка
В номере:

    Выходит с 17 июля 2008 г. цена договорная

    Опрос

    gismeteo.ru
    Погода на Яндексе
    pogoda.ru
    meteonova.ru
    по телевизору
    за окном
    в газете
    а че его смотреть?
    в другом месте
    по счетчику гейгера



    Календарь
    «    Июль 2021    »
    ПнВтСрЧтПтСбВс
     1234
    567891011
    12131415161718
    19202122232425
    262728293031 

    Архив новостей
    Март 2022 (1)
    Декабрь 2021 (1)
    Август 2021 (1)
    Июль 2021 (3)
    Февраль 2021 (3)
    Январь 2021 (1)

    Информация
    Уведомление в Телеграм если какой-то из сенсоров Home Assistant перешел в состояние недоступен
    Умный дом
    автор: dimon, опубликовано: 1 июля 2021

    Что-то изменилось в радиообстановке в моем доме и я заметил, что сенсоры периодически стали отваливаться от НА, уходя в состояние "Недоступен". Для оперативного реагирования, да и просто чтобы понять как часто это происходит, я решил сделать автоматизацию, которая будет присылать мне уведомление в Телеграм если какой-то из сенсоров Home Assistant перешел в состояние недоступен.

    Я заметил, что когда сенсор недоступен то и все его сущности переходят в это же состояние, а так как почти все сенсоры ZigBee у меня на батарейках, то я решил что проще всего отслеживать состояние сущности battery сенсоров.

    Т.к. сенсоров было не очень много, то я в триггере автоматизации просто перечислил все свои сенсоры батареек и успокоился. Больше полугода эта автоматизация у меня работала, исправно присылая уведомление в Telegram, когда какой-нибудь датчик отваливался от сервера умного дома Home Assistant.

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

    В результате уведомление выглядит вот так:

    Уведомление в Телеграм если какой-то из сенсоров Home Assistant перешел в состояние недоступен




    Код доступен на GitHub-е



    Еще во время написания этой автоматизации я думал, что нужно в триггере как-то указать домен устройств, чтобы не перечислять их все ручками, но код работал, а времени ковыряться особо не было.

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

    К тому же оказалось, что некоторые новые датчики Xiaomi (Aqara), которые имеют интерфейс BLE (Bluetooth Low Energy) не отдают значение батарейки, хотя такую сущность в HA заводят, и соответственно каждый раз показываются в списке Недоступных. Да и количество сенсоров постоянно растет, а постоянно отслеживать и каждый раз ручками добавлять в автоматизацию новые датчики становится довольно суетно.

    Поэтому переделаем автоматизацию, изменив триггер со списка сенсоров батареек на домены устройств.

    Перво-наперво заведем Template sensor-ы со счетчиком количества недоступных светильников, свичей, сенсоров и бинарных сенсоров:

    
        sensor:
    
          - platform: template
            sensors:
    
              unavailable_now_light:
                friendly_name: "Всего недоступных светильников - "
                entity_id:
                  - sensor.time
                value_template: "{{states.light | selectattr ('state', 'equalto', 'unavailable') | list | length}}"
                icon_template: mdi:counter        
    
              unavailable_now_switch:
                friendly_name: "Всего недоступных реле - "
                entity_id:
                  - sensor.time
                value_template: "{{states.switch | selectattr ('state', 'equalto', 'unavailable') | list | length}}"
                icon_template: mdi:counter 
                
              unavailable_now_sensor:
                friendly_name: "Всего недоступных сенсоров - "
                entity_id:
                  - sensor.time
                value_template: "{{states.sensor | selectattr ('state', 'equalto', 'unavailable') | list | length}}"
                icon_template: mdi:counter
                
              unavailable_now_binary_sensor:
                friendly_name: "Всего недоступных бинарных сенсоров - "
                entity_id:
                  - sensor.time
                value_template: "{{states.binary_sensor | selectattr ('state', 'equalto', 'unavailable') | list | length}}"
                icon_template: mdi:counter
                


    Далее нам нужно сделать скрипты, которые будут отсылать сообщения (уведомления) в Телеграм:

    
        script:
    
          unavailable_list_var1:    
            alias: Отправка отчета о недоступных сущностях var1
            sequence:
             - service: notify.telegram_admin
               data:
                 message: | 
                     {{"\U0001F6A8"}} Отчет за {{ states('sensor.time_date') }}
                     
                     {{"\U0001F4A1"}} Светильников недоступно - {{ states('sensor.unavailable_now_light') }} 
                     {{"\U0001F50C"}} Свичей недоступно - {{ states('sensor.unavailable_now_switch') }} 
                     {{"\U0001F321"}} Сенсоров недоступно - {{ states('sensor.unavailable_now_sensor') }} 
                     {{"\U0001F51F"}} Бинарных сенсоров недоступно - {{ states('sensor.unavailable_now_binary_sensor') }}             
                     
                     Список недоступных сущностей:
                     {{ states | selectattr('state', 'eq', 'unavailable') | map(attribute="name") | join ("
                     ") }}
    
          unavailable_list_var2:    
            alias: Отправка отчета о недоступных сущностях var1
            sequence:
             - service: notify.telegram_admin
               data:
                 message: | 
                     {{"\U0001F6A8"}} Отчет за {{ states('sensor.time_date') }}
                     
                     {% if (states('sensor.unavailable_now_light') | int > 0) -%}
                       -  
                     {{"\U0001F4A1"}} Светильников недоступно - {{ states('sensor.unavailable_now_light') }}:
                     {{ states.light | selectattr('state', 'eq', 'unavailable') | map(attribute="name") | join ("
                     ") }}
                     {%- endif %}
                     {% if (states('sensor.unavailable_now_switch') | int > 0) -%}
                       -  
                     {{"\U0001F50C"}} Свичей недоступно - {{ states('sensor.unavailable_now_switch') }}:
                     {{ states.switch | selectattr('state', 'eq', 'unavailable') | map(attribute="name") | join ("
                     ") }}
                     {%- endif %}
                     {% if (states('sensor.unavailable_now_sensor') | int > 0) -%}
                       -  
                     {{"\U0001F321"}} Сенсоров недоступно - {{ states('sensor.unavailable_now_sensor') }}:
                     {{ states.sensor | selectattr('state', 'eq', 'unavailable') | map(attribute="name") | join ("
                     ") }}
                     {%- endif %}
                     {% if (states('sensor.unavailable_now_binary_sensor') | int > 0) -%}
                       -  
                     {{"\U0001F51F"}} Бинарных сенсоров недоступно - {{ states('sensor.unavailable_now_binary_sensor') }}:
                     {{ states.binary_sensor | selectattr('state', 'eq', 'unavailable') | map(attribute="name") | join ("
                     ") }}
                     {%- endif %}
    


    Ну и напоследок - автоматизацию, которая при изменении значения этих сенсоров будет запускать эти скрипты:

    
        automation:   
    
            - id: Уведомление о недоступных сущностях
              alias: send_unavailable_entity_list
              trigger:
              - platform: state
                entity_id:
                 - sensor.unavailable_now_light
                 - sensor.unavailable_now_switch
                 - sensor.unavailable_now_sensor
                 - sensor.unavailable_now_binary_sensor
                for: '00:01:00'
              condition: []
              action:
              - service: script.turn_on
                entity_id: script.unavailable_list_var1
              - service: script.turn_on
                entity_id: script.unavailable_list_var2
    	


    Уведомление var1 выглядит вот так:

    Уведомление в Телеграм если какой-то из сенсоров Home Assistant перешел в состояние недоступен


    Уведомление var2 выглядит вот так:

    Уведомление в Телеграм если какой-то из сенсоров Home Assistant перешел в состояние недоступен


    Код доступен на GitHub-е

     
    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Чтобы Вам были доступны все функции Вам необходимо либо зарегистрироваться, либо зайти на сайт под своим именем.

    Другие новости по теме:

  • Управялем яркостью диммера Noolite из Home Assistant
  • Сенсоры NAS NetGear ReadyNAS Pro2 в Home Assistant с помощью SNMP
  • Ночник с выбором времени горения в карточке Lovelace в Home Assistant
  • Автоматизация "Все ушли из дома" в Home Assistant
  • Domoticz. Уведомление о низком уровне батарее датчиков


  • Комментарии:

    Оставить комментарий



     
    Информация
     
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


    Поиск по сайту:


    Облако тегов
    Arduino, backup, CentOS, cmd, div, DLE, DLE хаки, domoticz, dzvents, event, Home Assistant, Linux, log, LUA, Monster, ogf3, RDP, Template, VBS, w2k8, windows, WSH, бумага, бумажный самолетик, верстка, иструкция, Карты, кино, Навигация, оригами, программа, рецензия, рецепт, скрипт, уведомления, фигуры, шаблон, Яндекс, яндекс-карты

    Показать все теги
    Реклама
    раскрутка сайта бесплатно
    Главная страница | Регистрация | Добавить новость | Новое на сайте | Статистика | Поддержка | Правила ресурса Copyright © 2005-2021 by dimon - all right reserved!
    Тираж:           экземпляров.   Дизайн, верстка by dimon