Отправляем данные с MQTT брокера на HomeKit

Отправляем данные с MQTT брокера на HomeKit

Данный пост основан на результатах работы предыдущего поста где мы отправляли данные c BMP085 на MQTT брокер Mosquitto. В этом посте мы используем сервер Homebridge для того чтобы маршрутизировать данные получаемые с датчиков на Apple девайсы. Homebridge имеет множество плагинов, а также предоставляет достаточно подробную документацию о том как написать свой. Однако же для нашей задачи нам не нужно ничего писать. Для маршрутизации данных с брокера в Homebrige нам понадобиться homebridge-mqttthing.

Для начала давайте установим сам Homebrige

sudo npm install -g homebridge

И плагин

sudo npm install -g homebridge-mqttthing

Конфигурация происходит по адресу ~/.homebridge/config.json

{
  "bridge": {
    "name": "Homebridge",
    "username": "username",
    "port": 51826,
    "pin": "pin"
  },

  "description": "This is an example configuration file with one fake accessory and one fake platform. You can use this as a template for creating your own configuration file containing devices you actually own.",
  "ports": {
    "start": 52100,
    "end": 52150,
    "comment": "This section is used to control the range of ports that separate accessory (like camera or television) should be bind to."
  },
  "accessories": [
{
    "accessory": "mqttthing",
    "type": "temperatureSensor",
    "name": "Temperature",
    "logMqtt": "true",
    "topics":
    {
        "getCurrentTemperature": {
            "topic": "temperature/device_id"
        }
    },
    "history": "true"
},
{
    "accessory": "mqttthing",
    "type": "airPressureSensor",
    "name": "Pressure",
    "logMqtt": "true",
    "topics":
    {
        "getAirPressure": {
            "topic": "pressure/device_id"
        }
    },
    "history": "true"
}
  ]
}

После установки у вас уже должен быть этот файл в наличии, не хватает только содержимого массива accessories. В приведенном выше примере уже дописана конфигурация двух показаний которые есть у меня. Подробное описание опций можно найти в репозитории к homebridge-mqttthing: датчик температуры и датчик давления. Топики можно уточнить посмотрев эфир с помощью какого либо клиента MQTT, либо посмотрев в прошивку.

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

После того как конфигурация завершена, пробуем запустить homebrige

homebridge

Данных на выводе будет много и в конце концов мы увидим как начинают приниматься данные с MQTT брокера. Далее в дело вступает телефон, который должен быть в одной локальной сети с запущенным Homebridge. В начале лога вы получите QR код и Pin в рамке. Открываем приложение Home в телефоне и добавляем устройство, наведя камеру на одно из этих изображений. В моем случае добавить через QR код у меня не получилось, но успешно добавлено через Pin. Еще наблюдалась очень длительная пауза между добавлением пина и собственно фактическим добавлением устройства в приложение.

Стоковое приложение iOS не дает нам много информации, только лишь температуру и то округленную до половины градуса. Отображение давления на момент написания поста не поддерживалось, но оно приходит, в чем можно убедиться с помощью сторонних приложений. Лично я удовлетворился использованием Eve.  Девайсы у них неоправданно дорогие, но приложение бесплатно и дает значительно большую информацию нежели приложение Home.

И так, мы наконец можем любоваться результатами работы Homebridge, но сам homebridge запущен вручную, а хотелось бы чтобы запуск приложения происходил автоматически. Для этого необходимо зарегистрировать сервис для запуска сервера. В этом нам снова помогут готовые решения: Systemd Service for homebridge.

Скачиваем файлы homebridge и homebridge.service в систему мы запускаем homebridge, уточняем расположение бинарных файлов сервера

whereis homebridge

Этот адрес необходимо указать в поле ExecStart в файле homebridge.service. Возможно, там уже указан правильный адрес, в этом случае можно ничего не менять.

Инструкция к файлам советует создать пользователя, но возможно это не обязательно, стоит лишь изменить пользователя в поле User. Однако же я все же создал такого пользователя. Файл homebridge нужно поместить по адресу /etc/default/homebridge, homebridge.service в /etc/systemd/system/homebridge.service. Обратите внимание, что в файле  homebridge указывается место, где находятся файлы конфигурации сервера. Так что если у вас есть желание хранить данные сервера в другом месте, то это тот самый файл, где новые данные следует указать.

Теперь настало время поставить homebridge в автозапуск и запустить сервис

systemctl daemon-reload
systemctl enable homebridge
systemctl start homebridge

Логи сервиса можно смотреть командой

journalctl -u homebridge

В результате получаем что то вроде