Разработчик Дидак Сабатес (Dídac Sabatés) заставил умные весы Withings Body+ передавать данные напрямую в Home Assistant, минуя серверы производителя. Для этого ему потребовалась плата ESP32 и собственный компонент для ESPHome, который он написал с помощью Codex.

У весов Withings уже есть официальная интеграция с Home Assistant, но работает она через облако производителя. Устройство сначала отправляет результаты измерений на серверы Withings, после чего система управления умным домом получает их через API. Компания указывает в документации своего SDK, что синхронизация данных сторонними приложениями не предусмотрена: данные в любом случае должны сначала попасть в облако.
Разработчик решил избавиться от промежуточного звена с помощью платы ESP32. После взвешивания микроконтроллер получает данные от весов по Bluetooth, а затем ESPHome отправляет их по локальной сети в Home Assistant. Основная сложность заключалась в закрытом протоколе обмена данными весов: в официальной документации не было нужной информации для замены проприетарного приложения Withings.
Для реверс‑инжиниринга разработчик использовал OpenCode с Codex. AI‑агент изучал старую версию Android‑приложения для управления умными весами, сопоставлял декомпилированный код с уже известной информацией о протоколе и на его основе писал компонент ESPHome на C++. После каждой версии прошивки Сабатес заново подключал ESP32, переводил весы в режим настройки, проводил измерение и передавал логи Codex.
После подключения система получает не только вес. Для каждого пользователя разработчик вывел в Home Assistant показатели жировой массы, процента жира, мышечной и костной массы, воды и безжировой массы. При этом не пришлось реализовывать собственную функцию распознавания пользователя. Весы используют встроенные функции идентификации и передают ID пользователя вместе с результатом взвешивания.
Для хранения показателей Сабатес настроил шаблонные датчики Home Assistant. Благодаря этому последний вес не исчезает из интерфейса, если отключить ESP32. Микроконтроллер также сохраняет полученные значения и восстанавливает их после перезагрузки.
Автор проекта ещё не открыл код проекта. Он отмечает, что успел протестировать джейлбрейк с конкретной моделью весов. В других случаях проект может работать с ошибками или не работать вовсе.
Источник: habr.com