9 утра дождливого утра вторника — может ли простая модель машинного обучения предсказать, где будет спать моя кошка? Как я использовал Bluetooth-трекер, дюжину микроконтроллеров и немного Python, чтобы предсказать, где кот Снежок будет дремать в течение следующего часа.

Краткое содержание

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

Домашнее отслеживание местоположения и температуры позволило мне создать обширную историю того, какую комнату она использовала для своих любимых мест для сна. У меня была теория с достаточным количеством собранных данных, чтобы я мог обучить модель машинного обучения предсказывать, где кошка может быть.

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

Оборудование для отслеживания кошек на уровне комнаты

Первой задачей было собрать много данных о том, где Сноуи исторически проводила время, а также о таких факторах окружающей среды, как температура и количество осадков. Я поставил произвольную цель собирать ежечасные обновления примерно за три месяца передвижения по дому и вокруг него.

Кошки плохо умеют вводить данные; поэтому мне нужен был автоматизированный способ определения ее местонахождения. Я попросил Сноуи надеть Плитку — небольшой Bluetooth-трекер на батарейках. Это просто передает обычный и уникальный сигнал BLE. Затем я использовал восемь стационарных приемников для прослушивания сигнала BLE Tile. Эти приемные узлы были узлами обнаружения присутствия на основе ESP32, каждый из которых работал с ESPresense. Узлы размещались в именованных комнатах внутри и вокруг дома (6 внутри, 2 снаружи).

Каждый узел постоянно ищет уникальный BLE-сигнал тайла Сноуи и измеряет показатель уровня полученного сигнала (RSSI). Чем сильнее сигнал, тем ближе Сноуи к этому маяку (либо так, либо она возится с батареей). Например, если бы я получил несколько секунд сильного сигнала рядом с датчиком исследования, я мог бы предположить, что Сноуи, вероятно, был очень близко к этой комнате.

Каждый модуль ESP32 питается от источника питания micro-usb и обменивается данными с базовой станцией, присоединяясь к домашней сети Wi-Fi. Сеть важна, поскольку несколько приемников могут одновременно принимать сигнал, и им необходимо определить, какая базовая станция имеет «самый сильный» сигнал.

Аппаратное обеспечение для регистрации информации об окружающей среде

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

Я выбрал датчик температуры и влажности Xiaomi, так как они месяцами работают от батареи и обмениваются данными на больших расстояниях через беспроводную ячеистую сеть Zigbee. Я разместил эти датчики по всему дому и в двух внешних местах, чтобы фиксировать внешние условия.

Интеграция — построение платформы сбора данных

В качестве платформы для сбора данных я использовал Home Assistant, работающий на Raspberry Pi. Home Assistant — это бесплатное программное обеспечение с открытым исходным кодом для домашней автоматизации, предназначенное для центральной системы управления устройствами умный дом. Мне удалось отследить местонахождение Сноуи с помощью конфигурации бинарный датчик. По сути, маяк в комнате, получающий самый сильный сигнал от плитки BLE Сноуи, обновляет тему MQTT с ее текущим местоположением.

Для измерения температуры и влажности я использовал интеграцию Xiaomi, чтобы получать постоянное обновление условий окружающей среды на уровне комнаты. (Достойно другого блога: TL; DR прошить концентратор Xiaomi Zigbee с помощью Tasmota)

Резюме TL; DR — при поддержке замечательного сообщества Home Assistant и Tasmota я смог определить точное местоположение кошки, а также подробные показания температуры и влажности.

Подготовка данных — извлечение данных из Home Assistant

Home Assistant по умолчанию использует базу данных SQLite с 10-дневным сроком хранения. На самом деле я хотел сохранить гораздо больше исторических данных для обучения модели. Изменив интеграцию с регистратором, я переместил все хранилище данных в базу данных Postgres с 6-месячным сроком хранения.

Домашний помощник сохраняет каждое обновление датчика в таблице состояния. Это действительнодетализированная информация: обновления добавляются каждые несколько секунд со всех датчиков (в моем случае около 18 000 обновлений датчиков в день). Моя цель состояла в том, чтобы обобщить данные в виде ежечасных обновлений — по сути, одного (наиболее распространенного) местоположения вместе с показаниями температуры и влажности.

Я извлек первые три месяца (SQL здесь) почасового местоположения и условий окружающей среды для обучения модели.

Что дальше во 2 части

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

Продолжить чтение часть-2

Часть 2 находится здесь.