Отправляем данные с 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
В результате получаем что то вроде