Блог

Следим за батарейками датчиков в Hass.io на Node-RED

Фирма Xiaomi сделала устройства умного дома доступными широким массам пользователей. Большой выбор различных датчиков, гуманные цены, стабильная работа, приятный дизайн и простота настройки позволяют закупать их датчики десятками. Конечно в этих условиях появляется логичное желание не пропустить момент, когда будет пора менять батарейки.

Кто-то выстраивает длинные портянки со списком устройств и уровнем их заряда в интерфейсе Home Assistant.

Кто-то тратит вечера, чтоб разобраться как настроить различные готовые решения.

Кто-то придумывает автоматизации на YAML.

Я с недавних пор пишу все свои автоматизации на Node-RED. И предлагаю угадать эту мелодию с четырёх нод (с).

Получаем все устройства из Home Assistant, у которых есть атрибут battery_level и его значение меньше 15.

Именно так хранится уровень заряда устройств Xioami, добавленых через компонент Xiaomi Gateway.

Значение заряда подбирайте как вам удобнее.

'Садится батарея: ' & $join(payload.attributes.friendly_name, ', ')

Датчики с несколькими показаниями (например температура и влажность) попадут в итоговое сообщение несколько раз, потому что Home Assistant считает их разными устройствами.

Последняя версия языка JSONata поддерживает функцию $distinct, которая отлично бы справилась с этой проблемой. Но мой Node-RED эту функцию не знает.

И теперь отправляем полученное сообщение в Telegram.

Название сервиса у вас может отличаться в засимости от ваших настроек компонента.


очень полезные статьи в связке ХА с НР. спасибо за труды 👍👍👍 хотелось бы продолжения именно в этой связке, а то по нодреду в основном с деконзом примеры. а теперь вопрос: при срабатывании этой автоматизации, то есть пришло сообщение в телеграм что батарея разрядилась, как понять какой именно девайс послал это сообщение? 

Так в телеграм прийдёт сообщение: "Садится батарея: Балкон, Балкон, Машина, Машина"

Если имена у датчиков проставлены нормально. Их можно заполнить нажав на датчик, а затем на шестерёнку в интерфейсе HA.

все датчики в ХА прописаны. сообщение приходит без названия датчика. что я делаю не так? 

Точно включен режим шаблона JSONata, где задаётся текст "садится батарея..."?

Добавьте перед этой нодой - debug, посмотреть что ХА в атрибутах возвращает.  

ага. точно. не был включен

JSONata. поправил. всё получилось. спасибо огромное 👍👍👍 

а куда необходимо вставить $distinct, чтоб не дублировались?

А ваш Node-RED эту функцию поддерживает? Сюда, если поддерживает:

'Садится батарея: ' & $join($distinct(payload.attributes.friendly_name), ', ')

Хочу сделать сообщение в телеграмм о утечке воды. Сообщение с датчиков "binary_sensor.water_leak_sensor_*" у меня получаются ("on"), а вот как послать свое сообщение, где будет friendly_name конкретного датчика, не понимаю. Может есть пример, как это сделать?

Идея отличная, но у меня эти датчики работают через Zigbee2MQTT (координатор), и соответственно battery это отдельный датчик, а не атрибут. Интересно, возможно ли такое же лаконичное решение в 

Node-RED?


Вернуться назад
Вернуться назад