27. HASS.Agent. Получение данных с компьютера в локальной сети.

    Иногда бывает необходимость либо контролировать сервер умного дома с помощью команд и/или сочетаний горячих клавиш. Либо передавать данные телеметрии об одном или нескольких компьютерах в домашней сети чтобы отслеживать их состояние. Именно для этих целей был создан программный продукт HASS.Agent.
    Для начала, как обычно, немного теории, чтобы понимать с чем имеем дело.

    В статье про Zigbee в Home Assistant уже был упомянут MQTT брокер. Это некий сервер сообщений, к которому могут подключаться как те, кто публикует сообщения с информацией, так и те, кому эта информация нужна. Эдакая большая доска объявлений на районе.
Те, кто публикуют информацию, выкладывают её с определёнными заголовками, или же темами. На языке MQTT их называют топиками (англ. topic).
Те, кто заинтересован в получении информации, подписываются на определённые топики и получают информацию из них для дальнейшей обработки.


В топики как правило пишется информация о смене статуса устройства, или любой из его характеристик (например потребляемая мощность в розетке, или смена температуры на датчике и т.д.).

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

Теперь что касается стандартного домашнего компьютера под управлением операционной системы Windows (актуальные версии на момент написания этой статьи 10 и 11).
Работать будем с помощью одного из основных инструментов операционной системы - WMI. Говоря простым языком, это достаточно большая и сложная платформа внутри операционной системы, позволяющая мониторить и контролировать многими её частями.
Т.е. у нас есть MQTT брокер, есть некий инструментарий на компе с помощью которого можно собрать информацию. Осталось организовать инструментарий для передачи данных от компьютера к брокеру.
Именно этим и занимается HASS.Agent.
Скачать его можно со станицы проекта на гитхабе: https://github.com/LAB02-Research/HASS.Agent
Там же кстати есть вся документация и ссылки на другие проекты разработчика.
По большому счёту, этот продукт позволяет делать 3 вещи:
1. Создавать топики в MQTT брокере, на основе вещей происходящих на компьютере.
2. Получив от самого Home Assistant список всех сущностей, управлять ими с помощью горячих клавиш.
3. Использовать компьютер для воспроизведения голосовых сообщений сервиса TTS.


При использовании этой программы стоит учесть несколько ключевых нюансов.
  • Т.к. может быть ситуация что вход для пользователя на компьютере закрыт паролем, то программа не будет работать и передавать данные на сервер, пока пользователь не войдёт в систему.
  • Локальные сенсоры бывают двух видов: пользовательские и системные. Набор сенсоров в обоих случаях одинаков.
Для решения задачи с учётом условий из этих двух пунктов, в программе есть такая штука как Satellite Service. По сути это системный сервис, продолжающий работать вне зависимости от того вошёл пользователь в систему или нет. Однако набор сенсоров на уровне пользователя и на уровне этого сервиса может быть разным. Поэтому чтобы избежать ситуаций когда данные от компьютера не поступают, хотя он включен, лучше настраивать все сенсоры сразу на уровне сервиса спутника.

Как уже было сказано ранее, в разделе документации программы есть вся подробная информация касательно её настройки и подключения к Home Assistant. https://hassagent.readthedocs.io/en/latest/configuration/

Здесь же перейдём сразу к настройке интересующих параметров. А именно:
  • Температура процессора.
  • Температура видеокарты.
  • Наличие обновлений системы.
  • Наличие обновлений драйверов системы.
  • Когда была последняя загрузка системы.
Определение свободного места на диске не рассматривалось как задача, т.к. в моём личном случае есть ещё пара терабайт, и поэтому данный вопрос не актуален. Но желающие могут сделать необходимые сенсоры самостоятельно.



Вот так выглядят доступные "из коробки" сенсоры, которые можно создать сразу, без посторонних инструментов.


Как видно, данный набор почти полностью удовлетворяет требуемым задачам. Сенсор WindowsUpdates содержит в себе информацию как об ожидаемых обновлениях системы, так и об обновлениях драйверов. И в ХА эта сущность создаст два разных сенсора. 

В итоге только остаётся решить вопрос с температурой процессора. Тут-то нам и пригодится инструментарий WMI. Однако проблема в том, что имея на рынке огромное количество процессоров, достаточно трудно найти общий "язык" их опроса для температуры средствами операционной системы. Хотя конечно странно звучит, т.к. с видеокартами этот вопрос смогли решить. В общем на данный момент оставим эту головную боль разработчикам.

Для получения данных о температуре процессора необходимо установить на компьютер ещё одну мелкую программу - Open Hardware Monitor.
Её особенность в том, что данные об аппаратной части компьютера она публикует в WMI, а уже оттуда, с помощью запроса и фильтра можно вытащить необходимую информацию и опубликовать её в MQTT топик.

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

 Теперь можно создать новый сенсор с запросом к WMI. 


Указываем имя нового сенсора.
Частоту его обновления в секундах.
Сам запрос.
Раздел внутри WMI к которому этот запрос будет обращён.
Для проверки жмём кнопку "Тест". Если в открывшемся окне появилась нужная информация и нет ошибок, то сохраняемся и переходим к ХА. Там этот сенсор уже присутствует и теперь остаётся добавить его в интерфейс.

Примеры запросов к WMI есть в документации к программе по адресу: https://hassagent.readthedocs.io/en/latest/wmi-examples/ 
Опытным путём можно за несколько секунд подобрать правильный запрос к своему процессору.

Комментарии