alutov / ESP32-R4sGate-for-Redmond

ESP32 Ready4Sky (R4S) Gateway for Redmond+ devices
MIT License
209 stars 18 forks source link

Поддержка устройства: Xiaomi Mi scale v1 and v2 #105

Closed GigaVik closed 1 year ago

GigaVik commented 2 years ago

Здравствуйте! Прошу рассмотреть возможность добавить поддержку весов от Xiaomi а именно MI Scale и Mi Scale 2. Подробное описание протокола нашлось на GitHub'е проекта openSacle - https://github.com/oliexdev/openScale/wiki/Xiaomi-Bluetooth-Mi-Scale.

alutov commented 2 years ago

Спрашивали за весы, думаю, добавлю. За протокол спасибо, почитаю.

GigaVik commented 2 years ago

Возможно еще рассмотрите добавление датчиков влажности\температуры от тех же xiaomi. Здесь описание данных популярной кастомной прошивки для датчика Xiaomi Thermometer LYWSD03MMC - https://github.com/atc1441/ATC_MiThermometer

alutov commented 2 years ago

Есть уже поддержка этих термометров.

GigaVik commented 2 years ago

Есть уже поддержка этих термометров.

Блин, точно я в истории версий только сейчас увидел Чтобы его добавить нужно выбрать устройство Mi-Unknown?

alutov commented 2 years ago

Все есть в описании. Прочитайте его, пожалуйста.

Psytoshgen commented 2 years ago

можно свои копеек? Yunmai color - аналог Сяомми Протокол вот https://gist.github.com/conoro/f0c1d96c450a8f5cce70e2846c3686c4

alutov commented 2 years ago

Спасибо за линки, буду изучать.

alutov commented 2 years ago

По протоколу вроде бы выходит, что весы mi scale отправляют вес в рекламном сообщении. Вариант предпочтительней постоянной связи. Вопрос такой, мак адрес весов не меняется? И как выглядит рекламное сообщение в мониторе шлюза.

GigaVik commented 2 years ago

Owner Мак адрес статичный. Постоянного подключения нет, весы просыпаются в момент их активации и вещают пока идет взвешивание. IMG_20220909_084402


mac: c8:47:8c:ef:9c:4c |   | -82 dB | 0.2 s | 0.4 s | 02 01 06 03 02 1d 18 09 ff 57 01 c8 47 8c ef 9c 4c 0d 16 1d 18 02 20 44 b2 07 01 01 0d 0f 0e | s
-- | -- | -- | -- | -- | -- | --
  | c8478cef9c4c |   | -82 dB/0
alutov commented 2 years ago

Спасибо, то что нужно!

alutov commented 2 years ago

Не совсем совпадает с протоколом. Но по данным выходит, что время и дата 13:15:14 и 01/01/1970. А вес 87.20 или я ошибаюсь? Дату и время выводить?

GigaVik commented 2 years ago

Не совсем совпадает с протоколом. Но по данным выходит, что время и дата 13:15:14 и 01/01/1970. А вес 87.20 или я ошибаюсь? Дату и время выводить?

без синхронизпции с прилржением там можнт быть любая дата.. а вот вес 87.55 был)

alutov commented 2 years ago

По синхронизации, если приложение установит время и дату, они там сохранятся же, или там батареи нет? Еще вопрос, что делать с данными. К примеру, положили что-то на весы, они включились, передали данные и выключились. В умном доме оставлять последний вес и его дату даже при отключенных весах? Или же чистить данные? У меня пока весов таких нет и заказать в ближайшей перспективе видимо не будет возможности. Так что тяжеловато придумать что-то самому.

GigaVik commented 2 years ago

Скорее всего он уходит в глубокий сон, и ещё он вроде бы хранит всю историю взвешиваний с самого первого. По ссылке вроде бы разбор протокола был и работы весов. В идеале фиксировать последнее значение, Сейчас через бле интеграцию в home assistant данные приходят, но после перезагрузки уходят, я эту проблему решал сперва отправляя вес с весов на мктт брокер с фиксацией сообщения а потом уже в home assistant брал оттуда. Чтобы не обнулялись данные. После этого у меня ещё стоит четыре отдельных сенсора на четыре разных человека, весы измеряют вес - сенсоры определяют в их ли диапазоне этот вес и сенсор каждого человека принимает эту цифру

alutov commented 2 years ago

Есть вот такая ссылочка: https://www.pangodream.es/read-xiaomi-mi-smart-scale-using-an-esp32. Вроде как правильно расписаны данные, приходящие в рекламном пакете. В папку jpg залил версию, можно пробовать.

GigaVik commented 2 years ago

Есть вот такая ссылочка: https://www.pangodream.es/read-xiaomi-mi-smart-scale-using-an-esp32. Вроде как правильно расписаны данные, приходящие в рекламном пакете. В папку jpg залил версию, можно пробовать.

Screenshot_20220910-153640_Chrome Screenshot_20220910-153535_Chrome Screenshot_20220910-153531_Chrome Screenshot_20220910-154130_Chrome

alutov commented 2 years ago

Нет, соединение я не делал, только в ble-мониторе. Это новая версия? И что показывает в мониторе?

GigaVik commented 2 years ago

Нет, соединение я не делал, только в ble-мониторе. Это новая версия? И что показывает в мониторе?

да, новая вот IMG_20220910_160227

alutov commented 2 years ago

Ну вроде внизу появилось Mi Scale. А появились топики веса даты и времени? Для этого нужно тайм-аут поставить не равный 0 и нажать ok.

GigaVik commented 2 years ago

Screenshot_20220910-161258_Chrome показывает правильно, скажи пожалуйста а там в описании протокола не написано весы вещают зафиксированный вес и не зафиксированый разными битами? потому что те данные которые ты вывел ловят все изменения весов))

alutov commented 2 years ago

Так, время без цифр часов. Поправил и залил. Выводятся все данные с ненулевым весом и битом наличия даты - времени. Вот картинка из ссылки: image Бита стабилизации на ней нет. В отличие от всех остальных ссылок, где даже порядок данных иной. Я так понял, везде описывается именно соединение. Но там все можно настроить один раз в родном приложении, и больше соединение не особо и нужно, потому и не заморачивался пока. Но там автор заметил, что стабильные показания идут с правильным годом. Чтобы проверить это, надо смотреть данные в динамике. И еще, это версия vi scale 1 кажется. Во второй версии похоже есть отличия.

GigaVik commented 2 years ago

Поправил и залил

нету в jpg

alutov commented 2 years ago

Да, забыл последнюю кнопку нажать.)

GigaVik commented 2 years ago

Чтобы проверить это, надо смотреть данные в динамике. И еще, это версия vi scale 1 кажется.

Сегодня позже протестирую в динамике. MiScale2 v1 Есть ещё v2 там данных больше, они сами рассчитывают жир и так далее. И внешне другие немного.

GigaVik commented 2 years ago

Screenshot_20220910_214210_io homeassistant companion android

Хорошо работает Показывает реальную дату и время по UTC, но только если весы были подключены к офф приложению после установки батареек. Если вынуть батарейки то соответственно дата 1970 Время и дату показывает при каждом поступившем сообщении, не важно зафиксировано или нет. Но ble интеграция в homeassistant каким то образом видит зафиксированный вес (возможно вес фиксируется по жёстко фиксированной выдержке времени с момента получения измерения и интеграция просто отсчитывает ровно столько же как и весы и происходит фиксация)

alutov commented 2 years ago

Пока оставляем так?

GigaVik commented 2 years ago

Пока оставляем так?

вполне! а можно добавить к весу единицу измерения kg? Просто homeassistant не строит графики без единицы измерения.

alutov commented 2 years ago

Добавил единицу измерения. Обновил релиз.

GigaVik commented 2 years ago

Бита стабилизации на ней нет

я нашел бит стабилизации! это 5й бит 0го байта можно пожалуйста когда будет время сделать 2 датчика веса? 1 как сейчас а второй только стабилизированный? IMG_20220913_181034_649

снизу стабилизированный вес, сверху плавающий.

GigaVik commented 2 years ago

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

GigaVik commented 2 years ago

1 при первом сканировании IMG_20220913_194257_813 2 после добавления интервала IMG_20220913_194300_033 3 это после удаления mqtt топиков -2147483648_-210215

4 после появляется новый сигнал от весов, но уже вне условия добавления (без значения интервала времени) -2147483648_-210217

alutov commented 2 years ago

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

alutov commented 2 years ago

По Yunmai color забыл отписаться. Протокол почитал, но там речь идет о соединении. Сделать можно, но. Шлюз постоянно поддерживает соединение. Удобно по многим причинам, главная - быстрое исполнение команд. В случае весов постоянное соединение не подходит, соединение по требованию - пока нет у меня понимания, как сделать. Для весов отличный вариант - разбор рекламного сообщения. Возможно, там есть все данные, как и в сяоми. Для начала, можно глянуть, что показывают весы в мониторе шлюза.